Official
acp
ACP agents from the ACP registry (Gemini, Cursor, Droid, Kilo, pi, ...), Oh My Pi, and your own entries (custom.json in the plugin's data folder). Agents are discovered at runtime.
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/acp@0.2.0
Permissions in 0.2.0
Take care. This plugin asks for permissions that can do anything your account can. The app asks you to hold Enable for two seconds or to type the plugin's name before it turns on.
Files
types.ts2.9 KB
// ACP provider state shared by the agent and plugin wiring. Wire payloads
// are decoded in wire.ts; these types describe state owned by Convergence.
import type * as Effect from "effect/Effect";
import type * as Fiber from "effect/Fiber";
import type * as Queue from "effect/Queue";
import type { PluginServices } from "convergence/effect";
import type { AgentEvent, SlashCommand, ToolSpec, TranscriptItem } from "convergence/protocol";
import type { Icons } from "./registry.ts";
export type { Entry, Launch } from "./registry.ts";
export interface Capabilities {
loadSession?: boolean;
promptCapabilities?: { image?: boolean; audio?: boolean; embeddedContext?: boolean };
mcpCapabilities?: { http?: boolean };
sessionCapabilities?: {
list?: unknown;
fork?: unknown;
resume?: unknown;
close?: unknown;
additionalDirectories?: unknown;
};
}
export interface AcpAuthMethod {
id: string;
name?: string | null;
description?: string | null;
type?: string | null;
args?: unknown[] | null;
}
export interface AcpAgentInfo {
name?: string | null;
title?: string | null;
version?: string | null;
}
export interface ModeState extends Record<string, unknown> {
currentModeId?: string | null;
availableModes?: Record<string, unknown>[] | null;
}
export interface ModelState extends Record<string, unknown> {
currentModelId?: string | null;
availableModels?: Array<
Record<string, unknown> & { modelId?: string | null; _meta?: Record<string, unknown> | null }
> | null;
}
export interface AcpContext {
which(program: string): Effect.Effect<string | null, unknown, PluginServices>;
platform(): Effect.Effect<string, unknown, PluginServices>;
loginEnv(): Effect.Effect<Record<string, string>, never, PluginServices>;
icons: Icons;
}
export interface SessionState {
live: string;
workspace: string;
run: string | null;
promptId: string | null;
delivery?: import("convergence/protocol").PromptDelivery;
modes: ModeState | null;
models: ModelState | null;
config: Record<string, unknown>[];
commands: SlashCommand[];
messageItem: string | null;
thoughtItem: string | null;
context: Record<string, unknown> | null;
generation: number;
prompting: Fiber.Fiber<void, never> | null;
cancelling: boolean;
tools: ToolSpec[];
instructions: string | null;
instructionsSent: boolean;
mcpUrl: string | null;
}
export interface Pending<A> {
session: string | null;
resolve(value: A): void;
}
export interface QuestionAnswer {
values?: Record<string, unknown>;
cancelled?: boolean;
}
export interface SessionHolder {
tools?: SessionState["tools"];
instructions?: string | null;
mcpUrl: string | null;
}
export interface AcpDefaults {
modes: ModeState | null;
models: ModelState | null;
configOptions: null;
}
export type Jobs = Queue.Queue<Effect.Effect<unknown, unknown, PluginServices>>;
export type Event = AgentEvent;
export type History = TranscriptItem[];Versions
| Version | Published | Plugin API | Size | Permissions | Status |
|---|---|---|---|---|---|
| 0.2.0latest | Oct 5, 2026 | >=2 <3 | 94.9 KB | 6 permissions | Listed |
No comments yet.