Official

chat

Built-in chat UI (JavaScript UI plugin).

The app opens the listing; nothing installs until an agent in your Plugins workspace has read the files and you enable the plugin. In a terminal: cvg install convergence/chat@0.2.0

Permissions in 0.2.0

  • Control chats chats.controlHighCreates chats, sends prompts and cancels runs.Send prompts, answer agent questions, and create, change, fork, revert, stop and group chats
  • Run other plugins' commands commands.runHighRuns commands of other plugins.Run the sidebar's New chat command from the title bar
  • Read chats chats.readMediumReads your transcripts and chat lists.Show workspaces, tasks, chats and transcripts, and follow them as agents work
  • Read files fs.readMediumReads files in the listed places.Suggest workspace files for @ mentionsPlaces: the open workspace
  • Show panels ui.slotsLowShows views in the listed parts of the window.Draw the chat grid and the title barSlots: centertitle

Files

commands.ts1.6 KB
// Commands retain their manifest ids and clear's same-agent, same-workspace behavior.
import * as Effect from "effect/Effect";
import { Commands, Slash } from "convergence/effect";
import type { Controller } from "./controller.ts";
export const registerEarlyCommands = Effect.fn("Chat.registerCommands")(function* (c: Controller) {
  const commands = yield* Commands;
  yield* commands.register(
    "chat.switchNext",
    Effect.sync(() => c.switchBy(1)),
    { title: "Switch to the previous chat", keybinding: "ctrl-tab" },
  );
  yield* commands.register(
    "chat.switchPrevious",
    Effect.sync(() => c.switchBy(-1)),
    { title: "Switch back through recent chats", keybinding: "ctrl-shift-tab" },
  );
  yield* commands.register(
    "chat.cancel",
    Effect.gen(function* () {
      const chatId = c.api.app.state().chatId;
      if (chatId) yield* c.scheduler.stop(chatId);
    }),
    { title: "Stop the current run", keybinding: "cmd-shift-c" },
  );
  const slash = yield* Slash;
  yield* slash.register({
    name: "clear",
    description: "Start a new chat with the same agent and workspace",
    run: Effect.fn("Chat.clear")(function* (_input, context) {
      const chat = context.chatId ? c.state.chats[context.chatId] : null;
      if (chat) {
        const inUse = [...Object.keys(c.state.draftTitles), ...c.state.chatQueue.map((queued) => queued.chatId)];
        const next = yield* c.host.call("host/chats.create", { workspaceId: chat.workspaceId, agentId: chat.agentId, inUse });
        yield* c.app.select(next.id, chat.workspaceId);
      }
      return { action: "none" };
    }),
  });
});

Versions

VersionPublishedPlugin APISizePermissionsStatus
0.2.0latestOct 5, 2026>=2 <3105.1 KB5 permissionsListed

Reviews and comments

0 threads · 0 reviews

No comments yet.