@keyou007/agent-bot 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +8 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE +675 -0
- package/README.md +187 -0
- package/README.zh.md +187 -0
- package/SECURITY.md +13 -0
- package/config.example.yaml +56 -0
- package/dist/acp/AcpJsonRpcConnection.js +155 -0
- package/dist/acp/AcpJsonRpcConnection.js.map +1 -0
- package/dist/acp/AcpProcessManager.js +65 -0
- package/dist/acp/AcpProcessManager.js.map +1 -0
- package/dist/acp/AcpSessionManager.js +164 -0
- package/dist/acp/AcpSessionManager.js.map +1 -0
- package/dist/acp/acpTypes.js +10 -0
- package/dist/acp/acpTypes.js.map +1 -0
- package/dist/cli/FeishuAppConfiguration.js +349 -0
- package/dist/cli/FeishuAppConfiguration.js.map +1 -0
- package/dist/cli/FeishuAppRegistration.js +160 -0
- package/dist/cli/FeishuAppRegistration.js.map +1 -0
- package/dist/cli/Initializer.js +112 -0
- package/dist/cli/Initializer.js.map +1 -0
- package/dist/cli/LocalControlClient.js +47 -0
- package/dist/cli/LocalControlClient.js.map +1 -0
- package/dist/cli/LocalControlServer.js +66 -0
- package/dist/cli/LocalControlServer.js.map +1 -0
- package/dist/cli/SkillRegistry.js +126 -0
- package/dist/cli/SkillRegistry.js.map +1 -0
- package/dist/cli/controlProtocol.js +10 -0
- package/dist/cli/controlProtocol.js.map +1 -0
- package/dist/cli/taskChatRoute.js +23 -0
- package/dist/cli/taskChatRoute.js.map +1 -0
- package/dist/cli.js +616 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex/AppServerConnection.js +131 -0
- package/dist/codex/AppServerConnection.js.map +1 -0
- package/dist/codex/CodexEventMapper.js +296 -0
- package/dist/codex/CodexEventMapper.js.map +1 -0
- package/dist/codex/CodexLocalActivityDetector.js +124 -0
- package/dist/codex/CodexLocalActivityDetector.js.map +1 -0
- package/dist/codex/CodexProcessManager.js +64 -0
- package/dist/codex/CodexProcessManager.js.map +1 -0
- package/dist/codex/CodexRuntime.js +825 -0
- package/dist/codex/CodexRuntime.js.map +1 -0
- package/dist/codex/ProjectlessWorkspace.js +74 -0
- package/dist/codex/ProjectlessWorkspace.js.map +1 -0
- package/dist/codex/protocol.js +10 -0
- package/dist/codex/protocol.js.map +1 -0
- package/dist/commands/CommandRouter.js +176 -0
- package/dist/commands/CommandRouter.js.map +1 -0
- package/dist/commands/commandTypes.js +2 -0
- package/dist/commands/commandTypes.js.map +1 -0
- package/dist/config/loadConfig.js +107 -0
- package/dist/config/loadConfig.js.map +1 -0
- package/dist/config/paths.js +32 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.js +38 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/console/ConsoleConnector.js +39 -0
- package/dist/console/ConsoleConnector.js.map +1 -0
- package/dist/console/ConsoleTurnPresenter.js +60 -0
- package/dist/console/ConsoleTurnPresenter.js.map +1 -0
- package/dist/feishu/CardRenderer.js +972 -0
- package/dist/feishu/CardRenderer.js.map +1 -0
- package/dist/feishu/CardUpdateScheduler.js +148 -0
- package/dist/feishu/CardUpdateScheduler.js.map +1 -0
- package/dist/feishu/ConsoleFeishuClient.js +18 -0
- package/dist/feishu/ConsoleFeishuClient.js.map +1 -0
- package/dist/feishu/FeishuConnector.js +257 -0
- package/dist/feishu/FeishuConnector.js.map +1 -0
- package/dist/feishu/FeishuMarkdown.js +37 -0
- package/dist/feishu/FeishuMarkdown.js.map +1 -0
- package/dist/feishu/FeishuMessageClient.js +459 -0
- package/dist/feishu/FeishuMessageClient.js.map +1 -0
- package/dist/feishu/FeishuTurnPresenter.js +425 -0
- package/dist/feishu/FeishuTurnPresenter.js.map +1 -0
- package/dist/feishu/GroupAvatarGenerator.js +86 -0
- package/dist/feishu/GroupAvatarGenerator.js.map +1 -0
- package/dist/feishu/LocalCardImage.js +13 -0
- package/dist/feishu/LocalCardImage.js.map +1 -0
- package/dist/feishu/LocalImageMarkdown.js +89 -0
- package/dist/feishu/LocalImageMarkdown.js.map +1 -0
- package/dist/feishu/contextKey.js +12 -0
- package/dist/feishu/contextKey.js.map +1 -0
- package/dist/feishu/transport.js +14 -0
- package/dist/feishu/transport.js.map +1 -0
- package/dist/feishu/types.js +2 -0
- package/dist/feishu/types.js.map +1 -0
- package/dist/index.js +213 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/logger.js +22 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/presentation/OutboundRouter.js +127 -0
- package/dist/presentation/OutboundRouter.js.map +1 -0
- package/dist/presentation/TurnStateReducer.js +307 -0
- package/dist/presentation/TurnStateReducer.js.map +1 -0
- package/dist/presentation/splitMarkdown.js +341 -0
- package/dist/presentation/splitMarkdown.js.map +1 -0
- package/dist/presentation/turnViewTypes.js +2 -0
- package/dist/presentation/turnViewTypes.js.map +1 -0
- package/dist/proxy/ProxySessionController.js +2819 -0
- package/dist/proxy/ProxySessionController.js.map +1 -0
- package/dist/runtime/AcpRuntimeAdapter.js +271 -0
- package/dist/runtime/AcpRuntimeAdapter.js.map +1 -0
- package/dist/runtime/AgentRuntimeRegistry.js +18 -0
- package/dist/runtime/AgentRuntimeRegistry.js.map +1 -0
- package/dist/runtime/agentEnvironment.js +11 -0
- package/dist/runtime/agentEnvironment.js.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/startup/SessionMetadataHydrator.js +46 -0
- package/dist/startup/SessionMetadataHydrator.js.map +1 -0
- package/dist/startup/StartupNotifier.js +78 -0
- package/dist/startup/StartupNotifier.js.map +1 -0
- package/dist/startup/startFeishu.js +6 -0
- package/dist/startup/startFeishu.js.map +1 -0
- package/dist/state/StateStore.js +893 -0
- package/dist/state/StateStore.js.map +1 -0
- package/dist/state/migrations.js +129 -0
- package/dist/state/migrations.js.map +1 -0
- package/dist/supervision/SafeRestartNotifier.js +116 -0
- package/dist/supervision/SafeRestartNotifier.js.map +1 -0
- package/dist/supervision/SafeRestartScheduler.js +123 -0
- package/dist/supervision/SafeRestartScheduler.js.map +1 -0
- package/dist/supervision/replacementSupervisor.js +8 -0
- package/dist/supervision/replacementSupervisor.js.map +1 -0
- package/dist/supervision/restartPolicy.js +16 -0
- package/dist/supervision/restartPolicy.js.map +1 -0
- package/dist/supervisor.js +94 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/utils/executeShellCommand.js +76 -0
- package/dist/utils/executeShellCommand.js.map +1 -0
- package/dist/utils/id.js +5 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/markdown.js +29 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/spawnCommand.js +21 -0
- package/dist/utils/spawnCommand.js.map +1 -0
- package/dist/utils/taskTitle.js +10 -0
- package/dist/utils/taskTitle.js.map +1 -0
- package/docs/technical-reference.md +294 -0
- package/docs/technical-reference.zh.md +294 -0
- package/npm-shrinkwrap.json +4525 -0
- package/package.json +87 -0
- package/skills/agent-bot/SKILL.md +141 -0
- package/skills/agent-bot/agents/openai.yaml +4 -0
- package/src/acp/AcpJsonRpcConnection.ts +212 -0
- package/src/acp/AcpProcessManager.ts +87 -0
- package/src/acp/AcpSessionManager.ts +227 -0
- package/src/acp/acpTypes.ts +99 -0
- package/src/cli/FeishuAppConfiguration.ts +473 -0
- package/src/cli/FeishuAppRegistration.ts +207 -0
- package/src/cli/Initializer.ts +159 -0
- package/src/cli/LocalControlClient.ts +48 -0
- package/src/cli/LocalControlServer.ts +67 -0
- package/src/cli/SkillRegistry.ts +151 -0
- package/src/cli/controlProtocol.ts +34 -0
- package/src/cli/taskChatRoute.ts +31 -0
- package/src/cli.ts +630 -0
- package/src/codex/AppServerConnection.ts +159 -0
- package/src/codex/CodexEventMapper.ts +351 -0
- package/src/codex/CodexLocalActivityDetector.ts +148 -0
- package/src/codex/CodexProcessManager.ts +63 -0
- package/src/codex/CodexRuntime.ts +1025 -0
- package/src/codex/ProjectlessWorkspace.ts +90 -0
- package/src/codex/protocol.ts +37 -0
- package/src/commands/CommandRouter.ts +179 -0
- package/src/commands/commandTypes.ts +28 -0
- package/src/config/loadConfig.ts +115 -0
- package/src/config/paths.ts +37 -0
- package/src/config/schema.ts +46 -0
- package/src/console/ConsoleConnector.ts +40 -0
- package/src/console/ConsoleTurnPresenter.ts +64 -0
- package/src/feishu/CardRenderer.ts +1157 -0
- package/src/feishu/CardUpdateScheduler.ts +165 -0
- package/src/feishu/ConsoleFeishuClient.ts +22 -0
- package/src/feishu/FeishuConnector.ts +277 -0
- package/src/feishu/FeishuMarkdown.ts +47 -0
- package/src/feishu/FeishuMessageClient.ts +649 -0
- package/src/feishu/FeishuTurnPresenter.ts +539 -0
- package/src/feishu/GroupAvatarGenerator.ts +102 -0
- package/src/feishu/LocalCardImage.ts +13 -0
- package/src/feishu/LocalImageMarkdown.ts +92 -0
- package/src/feishu/contextKey.ts +14 -0
- package/src/feishu/transport.ts +24 -0
- package/src/feishu/types.ts +83 -0
- package/src/index.ts +228 -0
- package/src/logging/logger.ts +28 -0
- package/src/presentation/OutboundRouter.ts +205 -0
- package/src/presentation/TurnStateReducer.ts +341 -0
- package/src/presentation/splitMarkdown.ts +358 -0
- package/src/presentation/turnViewTypes.ts +54 -0
- package/src/proxy/ProxySessionController.ts +3311 -0
- package/src/runtime/AcpRuntimeAdapter.ts +324 -0
- package/src/runtime/AgentRuntimeRegistry.ts +20 -0
- package/src/runtime/agentEnvironment.ts +14 -0
- package/src/runtime/types.ts +215 -0
- package/src/startup/SessionMetadataHydrator.ts +46 -0
- package/src/startup/StartupNotifier.ts +92 -0
- package/src/startup/startFeishu.ts +19 -0
- package/src/state/StateStore.ts +1249 -0
- package/src/state/migrations.ts +128 -0
- package/src/supervision/SafeRestartNotifier.ts +122 -0
- package/src/supervision/SafeRestartScheduler.ts +149 -0
- package/src/supervision/replacementSupervisor.ts +10 -0
- package/src/supervision/restartPolicy.ts +19 -0
- package/src/supervisor.ts +106 -0
- package/src/utils/executeShellCommand.ts +97 -0
- package/src/utils/id.ts +5 -0
- package/src/utils/markdown.ts +25 -0
- package/src/utils/spawnCommand.ts +35 -0
- package/src/utils/taskTitle.ts +9 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import type { Logger } from "pino";
|
|
3
|
+
import type { AppConfig } from "../config/schema.js";
|
|
4
|
+
import type {
|
|
5
|
+
AcpInitializeResult,
|
|
6
|
+
AcpPermissionRequestParams,
|
|
7
|
+
AcpPromptResult,
|
|
8
|
+
AcpSessionNewResult,
|
|
9
|
+
AcpSessionUpdateParams,
|
|
10
|
+
JsonValue,
|
|
11
|
+
} from "./acpTypes.js";
|
|
12
|
+
import { AcpProcessManager, type ManagedAcpProcess } from "./AcpProcessManager.js";
|
|
13
|
+
|
|
14
|
+
export interface RuntimeSession {
|
|
15
|
+
localSessionId: string;
|
|
16
|
+
processKey: string;
|
|
17
|
+
agentName: string;
|
|
18
|
+
cwd: string;
|
|
19
|
+
acpSessionId: string;
|
|
20
|
+
managed: ManagedAcpProcess;
|
|
21
|
+
running: boolean;
|
|
22
|
+
modes?: JsonValue;
|
|
23
|
+
configOptions?: JsonValue;
|
|
24
|
+
availableCommands?: JsonValue;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface CreateRuntimeSessionInput {
|
|
28
|
+
localSessionId: string;
|
|
29
|
+
agentName: string;
|
|
30
|
+
cwd: string;
|
|
31
|
+
onUpdate: (session: RuntimeSession, update: Record<string, JsonValue>) => void;
|
|
32
|
+
onPermissionRequest: (
|
|
33
|
+
session: RuntimeSession,
|
|
34
|
+
params: AcpPermissionRequestParams,
|
|
35
|
+
) => Promise<JsonValue>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class AcpSessionManager {
|
|
39
|
+
private readonly sessions = new Map<string, RuntimeSession>();
|
|
40
|
+
private readonly sessionsByAcpId = new Map<string, RuntimeSession>();
|
|
41
|
+
|
|
42
|
+
constructor(
|
|
43
|
+
private readonly config: AppConfig,
|
|
44
|
+
private readonly processManager: AcpProcessManager,
|
|
45
|
+
private readonly logger: Logger,
|
|
46
|
+
) {}
|
|
47
|
+
|
|
48
|
+
get(localSessionId: string): RuntimeSession | undefined {
|
|
49
|
+
return this.sessions.get(localSessionId);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async create(input: CreateRuntimeSessionInput): Promise<RuntimeSession> {
|
|
53
|
+
const agent = this.config.agents[input.agentName];
|
|
54
|
+
if (!agent) {
|
|
55
|
+
throw new Error(`Unknown agent: ${input.agentName}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const cwd = path.resolve(input.cwd);
|
|
59
|
+
const processKey = input.localSessionId;
|
|
60
|
+
const managed = this.processManager.start(processKey, input.agentName, agent);
|
|
61
|
+
const connection = managed.connection;
|
|
62
|
+
|
|
63
|
+
let runtime: RuntimeSession | undefined;
|
|
64
|
+
|
|
65
|
+
connection.registerHandler("session/request_permission", async (params) => {
|
|
66
|
+
if (!runtime) {
|
|
67
|
+
throw new Error("Received permission request before session was ready.");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return input.onPermissionRequest(runtime, params as unknown as AcpPermissionRequestParams);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
connection.on("notification", (_method, params) => {
|
|
74
|
+
if (_method !== "session/update") {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const updateParams = params as unknown as AcpSessionUpdateParams;
|
|
79
|
+
const target = this.sessionsByAcpId.get(updateParams.sessionId);
|
|
80
|
+
if (!target) {
|
|
81
|
+
this.logger.debug({ updateParams }, "Ignoring update for unknown ACP session.");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
this.applySessionUpdate(target, updateParams.update);
|
|
86
|
+
input.onUpdate(target, updateParams.update);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const initializeResult = await connection.request<AcpInitializeResult>("initialize", {
|
|
90
|
+
protocolVersion: 1,
|
|
91
|
+
clientCapabilities: {},
|
|
92
|
+
clientInfo: {
|
|
93
|
+
name: "agent-bot",
|
|
94
|
+
title: "Agent Bot",
|
|
95
|
+
version: "0.1.0",
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (initializeResult.authMethods?.length) {
|
|
100
|
+
const method = initializeResult.authMethods[0];
|
|
101
|
+
this.logger.info({ methodId: method.id }, "Authenticating ACP agent with first advertised method.");
|
|
102
|
+
await connection.request("authenticate", { methodId: method.id });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const newSessionResult = await connection.request<AcpSessionNewResult>("session/new", {
|
|
106
|
+
cwd,
|
|
107
|
+
mcpServers: [],
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
runtime = {
|
|
111
|
+
localSessionId: input.localSessionId,
|
|
112
|
+
processKey,
|
|
113
|
+
agentName: input.agentName,
|
|
114
|
+
cwd,
|
|
115
|
+
acpSessionId: newSessionResult.sessionId,
|
|
116
|
+
managed,
|
|
117
|
+
running: false,
|
|
118
|
+
modes: newSessionResult.modes,
|
|
119
|
+
configOptions: newSessionResult.configOptions,
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
this.sessions.set(input.localSessionId, runtime);
|
|
123
|
+
this.sessionsByAcpId.set(runtime.acpSessionId, runtime);
|
|
124
|
+
return runtime;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async prompt(localSessionId: string, text: string): Promise<AcpPromptResult> {
|
|
128
|
+
const session = this.requireSession(localSessionId);
|
|
129
|
+
if (session.running) {
|
|
130
|
+
throw new Error(`Session is already running: ${localSessionId}`);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
session.running = true;
|
|
134
|
+
try {
|
|
135
|
+
return await session.managed.connection.request<AcpPromptResult>("session/prompt", {
|
|
136
|
+
sessionId: session.acpSessionId,
|
|
137
|
+
prompt: [
|
|
138
|
+
{
|
|
139
|
+
type: "text",
|
|
140
|
+
text,
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
} finally {
|
|
145
|
+
session.running = false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
cancel(localSessionId: string): void {
|
|
150
|
+
const session = this.requireSession(localSessionId);
|
|
151
|
+
session.managed.connection.notify("session/cancel", {
|
|
152
|
+
sessionId: session.acpSessionId,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async close(localSessionId: string): Promise<void> {
|
|
157
|
+
const session = this.requireSession(localSessionId);
|
|
158
|
+
try {
|
|
159
|
+
await session.managed.connection.request(
|
|
160
|
+
"session/close",
|
|
161
|
+
{
|
|
162
|
+
sessionId: session.acpSessionId,
|
|
163
|
+
},
|
|
164
|
+
1500,
|
|
165
|
+
);
|
|
166
|
+
} catch (error) {
|
|
167
|
+
this.logger.debug({ error, localSessionId }, "Ignoring session/close failure.");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
this.sessions.delete(localSessionId);
|
|
171
|
+
this.sessionsByAcpId.delete(session.acpSessionId);
|
|
172
|
+
this.processManager.stop(session.processKey);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async setMode(localSessionId: string, modeId: string): Promise<void> {
|
|
176
|
+
const session = this.requireSession(localSessionId);
|
|
177
|
+
await session.managed.connection.request("session/set_mode", {
|
|
178
|
+
sessionId: session.acpSessionId,
|
|
179
|
+
modeId,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async setConfigOption(localSessionId: string, configId: string, value: string): Promise<JsonValue> {
|
|
184
|
+
const session = this.requireSession(localSessionId);
|
|
185
|
+
const result = await session.managed.connection.request<JsonValue>("session/set_config_option", {
|
|
186
|
+
sessionId: session.acpSessionId,
|
|
187
|
+
configId,
|
|
188
|
+
value,
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
if (isObject(result) && "configOptions" in result) {
|
|
192
|
+
session.configOptions = result.configOptions;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private requireSession(localSessionId: string): RuntimeSession {
|
|
199
|
+
const session = this.sessions.get(localSessionId);
|
|
200
|
+
if (!session) {
|
|
201
|
+
throw new Error(`Unknown runtime session: ${localSessionId}`);
|
|
202
|
+
}
|
|
203
|
+
return session;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private applySessionUpdate(session: RuntimeSession, update: Record<string, JsonValue>): void {
|
|
207
|
+
const updateType = update.sessionUpdate;
|
|
208
|
+
if (updateType === "config_option_update" && "configOptions" in update) {
|
|
209
|
+
session.configOptions = update.configOptions;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (updateType === "current_mode_update" && session.modes && isObject(session.modes)) {
|
|
213
|
+
session.modes = {
|
|
214
|
+
...session.modes,
|
|
215
|
+
currentModeId: update.modeId,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (updateType === "available_commands_update" && "availableCommands" in update) {
|
|
220
|
+
session.availableCommands = update.availableCommands;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function isObject(value: JsonValue): value is Record<string, JsonValue> {
|
|
226
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
227
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export type JsonValue =
|
|
2
|
+
| string
|
|
3
|
+
| number
|
|
4
|
+
| boolean
|
|
5
|
+
| null
|
|
6
|
+
| JsonValue[]
|
|
7
|
+
| { [key: string]: JsonValue };
|
|
8
|
+
|
|
9
|
+
export interface JsonRpcRequest {
|
|
10
|
+
jsonrpc: "2.0";
|
|
11
|
+
id: string | number;
|
|
12
|
+
method: string;
|
|
13
|
+
params?: JsonValue;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface JsonRpcNotification {
|
|
17
|
+
jsonrpc: "2.0";
|
|
18
|
+
method: string;
|
|
19
|
+
params?: JsonValue;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface JsonRpcSuccess {
|
|
23
|
+
jsonrpc: "2.0";
|
|
24
|
+
id: string | number;
|
|
25
|
+
result: JsonValue;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface JsonRpcFailure {
|
|
29
|
+
jsonrpc: "2.0";
|
|
30
|
+
id: string | number;
|
|
31
|
+
error: {
|
|
32
|
+
code: number;
|
|
33
|
+
message: string;
|
|
34
|
+
data?: JsonValue;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure;
|
|
39
|
+
export type JsonRpcMessage = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse;
|
|
40
|
+
|
|
41
|
+
export interface ContentBlockText {
|
|
42
|
+
type: "text";
|
|
43
|
+
text: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type ContentBlock = ContentBlockText | Record<string, JsonValue>;
|
|
47
|
+
|
|
48
|
+
export interface AcpInitializeResult {
|
|
49
|
+
protocolVersion: number;
|
|
50
|
+
agentCapabilities?: Record<string, JsonValue>;
|
|
51
|
+
agentInfo?: {
|
|
52
|
+
name?: string;
|
|
53
|
+
title?: string;
|
|
54
|
+
version?: string;
|
|
55
|
+
};
|
|
56
|
+
authMethods?: Array<{
|
|
57
|
+
id: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
description?: string;
|
|
60
|
+
type?: string;
|
|
61
|
+
}>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface AcpSessionNewResult {
|
|
65
|
+
sessionId: string;
|
|
66
|
+
modes?: JsonValue;
|
|
67
|
+
configOptions?: JsonValue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AcpPromptResult {
|
|
71
|
+
stopReason: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface AcpSessionUpdateParams {
|
|
75
|
+
sessionId: string;
|
|
76
|
+
update: Record<string, JsonValue>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface AcpPermissionRequestParams {
|
|
80
|
+
sessionId: string;
|
|
81
|
+
toolCall: Record<string, JsonValue>;
|
|
82
|
+
options: Array<{
|
|
83
|
+
optionId: string;
|
|
84
|
+
name: string;
|
|
85
|
+
kind: string;
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function isJsonRpcRequest(message: JsonRpcMessage): message is JsonRpcRequest {
|
|
90
|
+
return "method" in message && "id" in message;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function isJsonRpcNotification(message: JsonRpcMessage): message is JsonRpcNotification {
|
|
94
|
+
return "method" in message && !("id" in message);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function isJsonRpcResponse(message: JsonRpcMessage): message is JsonRpcResponse {
|
|
98
|
+
return "id" in message && ("result" in message || "error" in message) && !("method" in message);
|
|
99
|
+
}
|