Official
tabs
The tabbed detail pane beside the chat: opened files and diffs (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/tabs@0.2.0
Permissions in 0.2.0
Files
contract.ts1.2 KB
// The convergence/tabs service: other plugins open and close tabs in the
// detail pane and follow which tab is visible. Zod is the contract; the host
// derives JSON Schema from it and checks every call, result and event.
import * as z from "zod";
import { defineService } from "convergence/services";
export const TabKind = z.enum(["file", "diff", "terminal", "view"]);
// Which tab: tabs are known by kind and path (a terminal's path is its id).
export const TabRef = z.object({ kind: TabKind, path: z.string() });
export const OpenTab = z.object({
kind: TabKind,
workspaceId: z.string(),
path: z.string(),
// A diff tab shows this unified diff; a view tab draws this view id.
diff: z.string().optional(),
view: z.number().optional(),
title: z.string().optional(),
icon: z.string().optional(),
});
export const Tabs = defineService("convergence/tabs", "1.0.0", {
methods: {
open: { params: OpenTab, result: z.object({ id: z.string() }) },
close: { params: TabRef, result: z.null() },
active: { params: z.object({}), result: TabRef.nullable() },
},
events: {
activeChanged: TabRef.nullable(),
},
});
export type Tabs = typeof Tabs;Versions
| Version | Published | Plugin API | Size | Permissions | Status |
|---|---|---|---|---|---|
| 0.2.0latest | Oct 5, 2026 | >=2 <3 | 18.8 KB | 3 permissions | Listed |
No comments yet.