ycodium-acp-executor 0.2.2488
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/README.md +127 -0
- package/dist/adapter-support.d.ts +26 -0
- package/dist/adapter-support.d.ts.map +1 -0
- package/dist/adapter-support.js +79 -0
- package/dist/adapter-support.js.map +1 -0
- package/dist/approvals.d.ts +39 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +69 -0
- package/dist/approvals.js.map +1 -0
- package/dist/config-option-wiring.d.ts +71 -0
- package/dist/config-option-wiring.d.ts.map +1 -0
- package/dist/config-option-wiring.js +71 -0
- package/dist/config-option-wiring.js.map +1 -0
- package/dist/config-options.d.ts +75 -0
- package/dist/config-options.d.ts.map +1 -0
- package/dist/config-options.js +171 -0
- package/dist/config-options.js.map +1 -0
- package/dist/connection.d.ts +34 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +374 -0
- package/dist/connection.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-stream.d.ts +15 -0
- package/dist/event-stream.d.ts.map +1 -0
- package/dist/event-stream.js +81 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/events.d.ts +69 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +205 -0
- package/dist/events.js.map +1 -0
- package/dist/executor.d.ts +84 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +1179 -0
- package/dist/executor.js.map +1 -0
- package/dist/handshake.d.ts +24 -0
- package/dist/handshake.d.ts.map +1 -0
- package/dist/handshake.js +26 -0
- package/dist/handshake.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonrpc.d.ts +12 -0
- package/dist/jsonrpc.d.ts.map +1 -0
- package/dist/jsonrpc.js +42 -0
- package/dist/jsonrpc.js.map +1 -0
- package/dist/line-buffer.d.ts +14 -0
- package/dist/line-buffer.d.ts.map +1 -0
- package/dist/line-buffer.js +51 -0
- package/dist/line-buffer.js.map +1 -0
- package/dist/mutex.d.ts +13 -0
- package/dist/mutex.d.ts.map +1 -0
- package/dist/mutex.js +44 -0
- package/dist/mutex.js.map +1 -0
- package/dist/probe.d.ts +74 -0
- package/dist/probe.d.ts.map +1 -0
- package/dist/probe.js +121 -0
- package/dist/probe.js.map +1 -0
- package/dist/protocol.d.ts +8 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +6 -0
- package/dist/protocol.js.map +1 -0
- package/dist/runtime-mode.d.ts +49 -0
- package/dist/runtime-mode.d.ts.map +1 -0
- package/dist/runtime-mode.js +123 -0
- package/dist/runtime-mode.js.map +1 -0
- package/dist/runtime-model.d.ts +157 -0
- package/dist/runtime-model.d.ts.map +1 -0
- package/dist/runtime-model.js +601 -0
- package/dist/runtime-model.js.map +1 -0
- package/dist/session-update.d.ts +42 -0
- package/dist/session-update.d.ts.map +1 -0
- package/dist/session-update.js +63 -0
- package/dist/session-update.js.map +1 -0
- package/dist/tool-presentation.d.ts +17 -0
- package/dist/tool-presentation.d.ts.map +1 -0
- package/dist/tool-presentation.js +209 -0
- package/dist/tool-presentation.js.map +1 -0
- package/dist/turn-usage.d.ts +18 -0
- package/dist/turn-usage.d.ts.map +1 -0
- package/dist/turn-usage.js +59 -0
- package/dist/turn-usage.js.map +1 -0
- package/dist/types.d.ts +116 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +3 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +11 -0
- package/dist/util.js.map +1 -0
- package/dist/vendor-hooks.d.ts +112 -0
- package/dist/vendor-hooks.d.ts.map +1 -0
- package/dist/vendor-hooks.js +4 -0
- package/dist/vendor-hooks.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { createAcpConnection } from "./connection.ts";
|
|
2
|
+
export type { AcpConnection, AcpConnectionOptions, AcpIncomingNotification, AcpProtocolLogEvent, } from "./connection.ts";
|
|
3
|
+
export { AcpConnectionClosedError } from "./errors.ts";
|
|
4
|
+
export { decodeSessionUpdate, isSessionUpdateEnvelope } from "./session-update.ts";
|
|
5
|
+
export type { SessionUpdateDecode, SessionUpdateEnvelope } from "./session-update.ts";
|
|
6
|
+
export { AGENT_METHODS, CLIENT_METHODS, PROTOCOL_VERSION, RequestError, methods, ndJsonStream, } from "@agentclientprotocol/sdk";
|
|
7
|
+
export type { AgentRequestMethod, AgentRequestParamsByMethod, AgentRequestResponsesByMethod, CancelNotification, InitializeRequest, InitializeResponse, LoadSessionRequest, LoadSessionResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, SessionNotification, SessionUpdate, } from "@agentclientprotocol/sdk";
|
|
8
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,GACd,MAAM,0BAA0B,CAAC"}
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// 内部出口:线上分帧与 SDK 再导出。只从 SDK 根入口取,不许深引 SDK 私有模块。
|
|
2
|
+
export { createAcpConnection } from "./connection.js";
|
|
3
|
+
export { AcpConnectionClosedError } from "./errors.js";
|
|
4
|
+
export { decodeSessionUpdate, isSessionUpdateEnvelope } from "./session-update.js";
|
|
5
|
+
export { AGENT_METHODS, CLIENT_METHODS, PROTOCOL_VERSION, RequestError, methods, ndJsonStream, } from "@agentclientprotocol/sdk";
|
|
6
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGnF,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,YAAY,GACb,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 读出这只手自报的审批档,原样交给界面。
|
|
3
|
+
*
|
|
4
|
+
* **不翻译成宿主的四档。** 契约里 `ServerProvider.nativeModes` 就是为这件事留的位置
|
|
5
|
+
* (注释:「缺席 = 该 provider 不报原生模式,界面沿用四档 RuntimeMode 开关」),
|
|
6
|
+
* `composerNativeMode.ts` 早就会画它——只是服务端从来没人往里填,所以 composer 一直
|
|
7
|
+
* 退回那四档。把 agent 自己报的原样送上去,用户看到的就是这只手真有的那几档。
|
|
8
|
+
*
|
|
9
|
+
* 曾经想过写一张「`default`→逐条确认、`yolo`→全放开」的别名表:那是硬编码,且各家档位
|
|
10
|
+
* 的语义本来就对不齐(grok 的 `acceptEdits` 实测等同 `default`,照样问)。翻译一次就
|
|
11
|
+
* 多一处会漂的事实,不如不翻。
|
|
12
|
+
*
|
|
13
|
+
* 档位 id 原样发回去,所以也不存在「发了个它没报过的 id 被拒」(kimi 实测 `-32602`)。
|
|
14
|
+
*
|
|
15
|
+
* @module runtime-mode
|
|
16
|
+
*/
|
|
17
|
+
/** 宿主的四档。与 `@ycodium-ai/plugin-api` 的 `ExecutorRuntimeMode` 同形,这个包不依赖它。 */
|
|
18
|
+
export type AcpRuntimeMode = "approval-required" | "auto-accept-edits" | "auto" | "full-access";
|
|
19
|
+
/** agent 自报的一档。字段与宿主 `ServerProviderNativeMode` 同形,界面原样画。 */
|
|
20
|
+
export type AcpAvailableMode = {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** 给人看的名字。agent 没给就退回 id——界面上空着一行比显示 id 更糟。 */
|
|
23
|
+
readonly name: string;
|
|
24
|
+
/** agent 给这一档写的说明(claude-agent-acp 每档都有,如「Always ask before making changes」)。 */
|
|
25
|
+
readonly description?: string;
|
|
26
|
+
/** `_meta.kind`(`standard` / `plan` / `auto_review` / `full_access`)。原样带上,不据此翻译。 */
|
|
27
|
+
readonly kind?: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 从 `session/new` 回包里把 agent 自报的档位清单读出来。
|
|
31
|
+
*
|
|
32
|
+
* 两处都认:`modes.availableModes`(ACP 的会话模式那一位)与 `configOptions` 里
|
|
33
|
+
* `category: "mode"` 的那一项——`claude-agent-acp` 两处都报,kimi 报前者。
|
|
34
|
+
*/
|
|
35
|
+
export declare function acpAvailableModes(setup: unknown): readonly AcpAvailableMode[];
|
|
36
|
+
/** `configOptions` 里那一项的 id;走 `session/set_config_option` 时要用它。缺席就该走 `session/set_mode`。 */
|
|
37
|
+
export declare function acpModeConfigId(setup: unknown): string | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* agent 报的「当前在哪一档」。
|
|
40
|
+
*
|
|
41
|
+
* **必须跟档位清单一起报**:座位那段(契约的 `resolveProviderNativeMode`)
|
|
42
|
+
* 在清单里找不到当前档时**整个返回 null**——只报清单不报当前档,新会话上那一格一个字
|
|
43
|
+
* 都画不出来,看着跟「这只手没有档位」一模一样。
|
|
44
|
+
*
|
|
45
|
+
* 两处都认,与 {@link acpAvailableModes} 同一口径:`modes.currentModeId` 与
|
|
46
|
+
* `configOptions` 里 `category: "mode"` 那一项的 `currentValue`。
|
|
47
|
+
*/
|
|
48
|
+
export declare function acpCurrentModeId(setup: unknown): string | undefined;
|
|
49
|
+
//# sourceMappingURL=runtime-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-mode.d.ts","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,MAAM,GAAG,aAAa,CAAC;AAEhG,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,gBAAgB,EAAE,CAoC7E;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBnE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 读出这只手自报的审批档,原样交给界面。
|
|
3
|
+
*
|
|
4
|
+
* **不翻译成宿主的四档。** 契约里 `ServerProvider.nativeModes` 就是为这件事留的位置
|
|
5
|
+
* (注释:「缺席 = 该 provider 不报原生模式,界面沿用四档 RuntimeMode 开关」),
|
|
6
|
+
* `composerNativeMode.ts` 早就会画它——只是服务端从来没人往里填,所以 composer 一直
|
|
7
|
+
* 退回那四档。把 agent 自己报的原样送上去,用户看到的就是这只手真有的那几档。
|
|
8
|
+
*
|
|
9
|
+
* 曾经想过写一张「`default`→逐条确认、`yolo`→全放开」的别名表:那是硬编码,且各家档位
|
|
10
|
+
* 的语义本来就对不齐(grok 的 `acceptEdits` 实测等同 `default`,照样问)。翻译一次就
|
|
11
|
+
* 多一处会漂的事实,不如不翻。
|
|
12
|
+
*
|
|
13
|
+
* 档位 id 原样发回去,所以也不存在「发了个它没报过的 id 被拒」(kimi 实测 `-32602`)。
|
|
14
|
+
*
|
|
15
|
+
* @module runtime-mode
|
|
16
|
+
*/
|
|
17
|
+
function isRecord(value) {
|
|
18
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
function asString(value) {
|
|
21
|
+
return typeof value === "string" ? value : undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 从 `session/new` 回包里把 agent 自报的档位清单读出来。
|
|
25
|
+
*
|
|
26
|
+
* 两处都认:`modes.availableModes`(ACP 的会话模式那一位)与 `configOptions` 里
|
|
27
|
+
* `category: "mode"` 的那一项——`claude-agent-acp` 两处都报,kimi 报前者。
|
|
28
|
+
*/
|
|
29
|
+
export function acpAvailableModes(setup) {
|
|
30
|
+
if (!isRecord(setup))
|
|
31
|
+
return [];
|
|
32
|
+
const out = [];
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
const push = (entry) => {
|
|
35
|
+
if (!isRecord(entry))
|
|
36
|
+
return;
|
|
37
|
+
const id = (asString(entry["id"]) ?? asString(entry["value"]))?.trim();
|
|
38
|
+
if (!id || seen.has(id))
|
|
39
|
+
return;
|
|
40
|
+
seen.add(id);
|
|
41
|
+
const meta = entry["_meta"];
|
|
42
|
+
const kind = isRecord(meta) ? asString(meta["kind"])?.trim().toLowerCase() : undefined;
|
|
43
|
+
const name = asString(entry["name"])?.trim();
|
|
44
|
+
const description = asString(entry["description"])?.trim();
|
|
45
|
+
out.push({
|
|
46
|
+
id,
|
|
47
|
+
name: name || id,
|
|
48
|
+
...(description ? { description } : {}),
|
|
49
|
+
...(kind ? { kind } : {}),
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const modes = setup["modes"];
|
|
53
|
+
if (isRecord(modes) && Array.isArray(modes["availableModes"])) {
|
|
54
|
+
for (const entry of modes["availableModes"])
|
|
55
|
+
push(entry);
|
|
56
|
+
}
|
|
57
|
+
const configOptions = setup["configOptions"];
|
|
58
|
+
if (Array.isArray(configOptions)) {
|
|
59
|
+
for (const option of configOptions) {
|
|
60
|
+
if (!isRecord(option))
|
|
61
|
+
continue;
|
|
62
|
+
if (asString(option["category"])?.trim().toLowerCase() !== "mode")
|
|
63
|
+
continue;
|
|
64
|
+
if (!Array.isArray(option["options"]))
|
|
65
|
+
continue;
|
|
66
|
+
for (const entry of option["options"])
|
|
67
|
+
push(entry);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
/** `configOptions` 里那一项的 id;走 `session/set_config_option` 时要用它。缺席就该走 `session/set_mode`。 */
|
|
73
|
+
export function acpModeConfigId(setup) {
|
|
74
|
+
if (!isRecord(setup))
|
|
75
|
+
return undefined;
|
|
76
|
+
const configOptions = setup["configOptions"];
|
|
77
|
+
if (!Array.isArray(configOptions))
|
|
78
|
+
return undefined;
|
|
79
|
+
for (const option of configOptions) {
|
|
80
|
+
if (!isRecord(option))
|
|
81
|
+
continue;
|
|
82
|
+
if (asString(option["category"])?.trim().toLowerCase() !== "mode")
|
|
83
|
+
continue;
|
|
84
|
+
const id = asString(option["id"])?.trim();
|
|
85
|
+
if (id)
|
|
86
|
+
return id;
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* agent 报的「当前在哪一档」。
|
|
92
|
+
*
|
|
93
|
+
* **必须跟档位清单一起报**:座位那段(契约的 `resolveProviderNativeMode`)
|
|
94
|
+
* 在清单里找不到当前档时**整个返回 null**——只报清单不报当前档,新会话上那一格一个字
|
|
95
|
+
* 都画不出来,看着跟「这只手没有档位」一模一样。
|
|
96
|
+
*
|
|
97
|
+
* 两处都认,与 {@link acpAvailableModes} 同一口径:`modes.currentModeId` 与
|
|
98
|
+
* `configOptions` 里 `category: "mode"` 那一项的 `currentValue`。
|
|
99
|
+
*/
|
|
100
|
+
export function acpCurrentModeId(setup) {
|
|
101
|
+
if (!isRecord(setup))
|
|
102
|
+
return undefined;
|
|
103
|
+
const modes = setup["modes"];
|
|
104
|
+
if (isRecord(modes)) {
|
|
105
|
+
const current = asString(modes["currentModeId"])?.trim();
|
|
106
|
+
if (current)
|
|
107
|
+
return current;
|
|
108
|
+
}
|
|
109
|
+
const configOptions = setup["configOptions"];
|
|
110
|
+
if (Array.isArray(configOptions)) {
|
|
111
|
+
for (const option of configOptions) {
|
|
112
|
+
if (!isRecord(option))
|
|
113
|
+
continue;
|
|
114
|
+
if (asString(option["category"])?.trim().toLowerCase() !== "mode")
|
|
115
|
+
continue;
|
|
116
|
+
const current = asString(option["currentValue"])?.trim();
|
|
117
|
+
if (current)
|
|
118
|
+
return current;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=runtime-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-mode.js","sourceRoot":"","sources":["../src/runtime-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 从 `AcpRuntimeModel.ts` 搬来的解析函数。`waitForSessionLoadReplayIdle` 绑 Effect,这一刀不搬。
|
|
3
|
+
*/
|
|
4
|
+
import type { SessionNotification } from "./protocol.ts";
|
|
5
|
+
export interface AcpSessionMode {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly description?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AcpSessionModeState {
|
|
11
|
+
readonly currentModeId: string;
|
|
12
|
+
readonly availableModes: ReadonlyArray<AcpSessionMode>;
|
|
13
|
+
}
|
|
14
|
+
export interface AcpAvailableCommand {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly description?: string;
|
|
17
|
+
readonly inputHint?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AcpToolCallState {
|
|
20
|
+
readonly toolCallId: string;
|
|
21
|
+
readonly kind?: string;
|
|
22
|
+
readonly title?: string;
|
|
23
|
+
readonly status?: "pending" | "inProgress" | "completed" | "failed";
|
|
24
|
+
readonly command?: string;
|
|
25
|
+
readonly detail?: string;
|
|
26
|
+
readonly data: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface AcpPlanUpdate {
|
|
29
|
+
readonly explanation?: string | null;
|
|
30
|
+
readonly plan: ReadonlyArray<{
|
|
31
|
+
readonly step: string;
|
|
32
|
+
readonly status: "pending" | "inProgress" | "completed";
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export interface AcpPermissionRequest {
|
|
36
|
+
readonly kind: string | "unknown";
|
|
37
|
+
readonly detail?: string;
|
|
38
|
+
readonly toolCall?: AcpToolCallState;
|
|
39
|
+
}
|
|
40
|
+
export type AcpParsedSessionEvent = {
|
|
41
|
+
readonly _tag: "ModeChanged";
|
|
42
|
+
readonly modeId: string;
|
|
43
|
+
} | {
|
|
44
|
+
readonly _tag: "AssistantItemStarted";
|
|
45
|
+
readonly itemId: string;
|
|
46
|
+
} | {
|
|
47
|
+
readonly _tag: "AssistantItemCompleted";
|
|
48
|
+
readonly itemId: string;
|
|
49
|
+
} | {
|
|
50
|
+
readonly _tag: "PlanUpdated";
|
|
51
|
+
readonly payload: AcpPlanUpdate;
|
|
52
|
+
readonly rawPayload: unknown;
|
|
53
|
+
} | {
|
|
54
|
+
readonly _tag: "ToolCallUpdated";
|
|
55
|
+
readonly toolCall: AcpToolCallState;
|
|
56
|
+
readonly rawPayload: unknown;
|
|
57
|
+
} | {
|
|
58
|
+
readonly _tag: "ContentDelta";
|
|
59
|
+
readonly itemId?: string;
|
|
60
|
+
readonly text: string;
|
|
61
|
+
/** 缺省当正式回答。思考块必须标 `reasoning_text`,否则会混进 assistant 段。 */
|
|
62
|
+
readonly streamKind: "assistant_text" | "reasoning_text";
|
|
63
|
+
readonly rawPayload: unknown;
|
|
64
|
+
} | {
|
|
65
|
+
readonly _tag: "AssistantContentBlock";
|
|
66
|
+
readonly content: Record<string, unknown>;
|
|
67
|
+
readonly rawPayload: unknown;
|
|
68
|
+
};
|
|
69
|
+
export type AcpSessionSetupResponse = {
|
|
70
|
+
readonly sessionId?: string;
|
|
71
|
+
readonly modes?: {
|
|
72
|
+
readonly currentModeId: string;
|
|
73
|
+
readonly availableModes: ReadonlyArray<{
|
|
74
|
+
readonly id: string;
|
|
75
|
+
readonly name: string;
|
|
76
|
+
readonly description?: string | null;
|
|
77
|
+
}>;
|
|
78
|
+
} | null;
|
|
79
|
+
readonly configOptions?: ReadonlyArray<AcpSessionConfigOption> | null;
|
|
80
|
+
readonly models?: unknown;
|
|
81
|
+
};
|
|
82
|
+
export type AcpSessionConfigOption = {
|
|
83
|
+
readonly id: string;
|
|
84
|
+
readonly category?: string | null;
|
|
85
|
+
readonly type?: string;
|
|
86
|
+
readonly currentValue?: unknown;
|
|
87
|
+
readonly options?: ReadonlyArray<{
|
|
88
|
+
readonly value: string;
|
|
89
|
+
} | {
|
|
90
|
+
readonly options: ReadonlyArray<{
|
|
91
|
+
readonly value: string;
|
|
92
|
+
}>;
|
|
93
|
+
}>;
|
|
94
|
+
};
|
|
95
|
+
export declare function extractModelConfigId(sessionResponse: AcpSessionSetupResponse): string | undefined;
|
|
96
|
+
export declare function findSessionConfigOption(configOptions: ReadonlyArray<AcpSessionConfigOption> | null | undefined, configId: string): AcpSessionConfigOption | undefined;
|
|
97
|
+
export declare function collectSessionConfigOptionValues(configOption: AcpSessionConfigOption): ReadonlyArray<string>;
|
|
98
|
+
/** `models`(UNSTABLE)里报的型号 id,即 `session/set_model` 肯收的那些值。 */
|
|
99
|
+
export declare function collectSessionModelIds(models: unknown): ReadonlyArray<string>;
|
|
100
|
+
/**
|
|
101
|
+
* 请求的型号在手报的目录里对应哪一个取值;对不上返回 undefined,调用方据此不设型号。
|
|
102
|
+
*
|
|
103
|
+
* 规则的正本是 `@ycodium-ai/plugin-api/executor` 的 `matchCatalogModel`,理由写在那里:
|
|
104
|
+
* 先精确匹配,再按最后一段唯一匹配,两个取值最后一段相同就不猜。纯库不许依赖宿主包
|
|
105
|
+
* (ADR-0030 §3.2,`index.test.ts` 钉着),所以 ACP 这边带一份;两份在
|
|
106
|
+
* `plugins/agent-acp/src/catalogModelParity.test.ts` 按同一张表对拍,只改一边会红。
|
|
107
|
+
*/
|
|
108
|
+
export declare function matchAdvertisedModelValue(requestedModelId: string, advertisedValues: ReadonlyArray<string>): string | undefined;
|
|
109
|
+
export declare function parseSessionModeState(sessionResponse: AcpSessionSetupResponse): AcpSessionModeState | undefined;
|
|
110
|
+
export declare function parseAvailableCommandsUpdate(params: SessionNotification | {
|
|
111
|
+
readonly update: Record<string, unknown>;
|
|
112
|
+
}): ReadonlyArray<AcpAvailableCommand> | undefined;
|
|
113
|
+
export declare function mergeToolCallState(previous: AcpToolCallState | undefined, next: AcpToolCallState): AcpToolCallState;
|
|
114
|
+
export interface AcpToolCallEmitDecisionInput {
|
|
115
|
+
readonly previous: AcpToolCallState | undefined;
|
|
116
|
+
readonly next: AcpToolCallState;
|
|
117
|
+
readonly lastEmittedDetailLength: number | undefined;
|
|
118
|
+
readonly skippedSinceEmit: number;
|
|
119
|
+
}
|
|
120
|
+
export interface AcpToolCallEmitDecision {
|
|
121
|
+
readonly emit: boolean;
|
|
122
|
+
readonly skippedSinceEmit: number;
|
|
123
|
+
}
|
|
124
|
+
export declare function decideToolCallUpdateEmission(input: AcpToolCallEmitDecisionInput): AcpToolCallEmitDecision;
|
|
125
|
+
export declare function parsePermissionRequest(params: {
|
|
126
|
+
readonly sessionId?: string;
|
|
127
|
+
readonly toolCall: {
|
|
128
|
+
readonly toolCallId: string;
|
|
129
|
+
readonly title?: string | null;
|
|
130
|
+
readonly kind?: string | null;
|
|
131
|
+
readonly status?: string | null;
|
|
132
|
+
readonly rawInput?: unknown;
|
|
133
|
+
readonly rawOutput?: unknown;
|
|
134
|
+
readonly content?: unknown;
|
|
135
|
+
readonly locations?: unknown;
|
|
136
|
+
};
|
|
137
|
+
}): AcpPermissionRequest;
|
|
138
|
+
export declare function sessionUpdateIsReplay(params: {
|
|
139
|
+
readonly _meta?: unknown;
|
|
140
|
+
}): boolean;
|
|
141
|
+
export declare function syntheticLoadSessionResponseFromInitialize(initializeResult: {
|
|
142
|
+
readonly _meta?: unknown;
|
|
143
|
+
}): AcpSessionSetupResponse;
|
|
144
|
+
export declare function parseSessionUpdateEvent(params: SessionNotification): {
|
|
145
|
+
readonly modeId?: string;
|
|
146
|
+
readonly events: ReadonlyArray<AcpParsedSessionEvent>;
|
|
147
|
+
};
|
|
148
|
+
export declare function updateModeState(modeState: AcpSessionModeState, nextModeId: string): AcpSessionModeState;
|
|
149
|
+
export declare function filterMcpServersByAgentCapabilities<T extends {
|
|
150
|
+
readonly type?: string;
|
|
151
|
+
}>(mcpServers: ReadonlyArray<T>, agentCapabilities: {
|
|
152
|
+
readonly mcpCapabilities?: {
|
|
153
|
+
readonly http?: boolean;
|
|
154
|
+
readonly sse?: boolean;
|
|
155
|
+
};
|
|
156
|
+
} | null | undefined): ReadonlyArray<T>;
|
|
157
|
+
//# sourceMappingURL=runtime-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-model.d.ts","sourceRoot":"","sources":["../src/runtime-model.ts"],"names":[],"mappings":"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"}
|