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.
Files changed (98) hide show
  1. package/README.md +127 -0
  2. package/dist/adapter-support.d.ts +26 -0
  3. package/dist/adapter-support.d.ts.map +1 -0
  4. package/dist/adapter-support.js +79 -0
  5. package/dist/adapter-support.js.map +1 -0
  6. package/dist/approvals.d.ts +39 -0
  7. package/dist/approvals.d.ts.map +1 -0
  8. package/dist/approvals.js +69 -0
  9. package/dist/approvals.js.map +1 -0
  10. package/dist/config-option-wiring.d.ts +71 -0
  11. package/dist/config-option-wiring.d.ts.map +1 -0
  12. package/dist/config-option-wiring.js +71 -0
  13. package/dist/config-option-wiring.js.map +1 -0
  14. package/dist/config-options.d.ts +75 -0
  15. package/dist/config-options.d.ts.map +1 -0
  16. package/dist/config-options.js +171 -0
  17. package/dist/config-options.js.map +1 -0
  18. package/dist/connection.d.ts +34 -0
  19. package/dist/connection.d.ts.map +1 -0
  20. package/dist/connection.js +374 -0
  21. package/dist/connection.js.map +1 -0
  22. package/dist/errors.d.ts +21 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +41 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/event-stream.d.ts +15 -0
  27. package/dist/event-stream.d.ts.map +1 -0
  28. package/dist/event-stream.js +81 -0
  29. package/dist/event-stream.js.map +1 -0
  30. package/dist/events.d.ts +69 -0
  31. package/dist/events.d.ts.map +1 -0
  32. package/dist/events.js +205 -0
  33. package/dist/events.js.map +1 -0
  34. package/dist/executor.d.ts +84 -0
  35. package/dist/executor.d.ts.map +1 -0
  36. package/dist/executor.js +1179 -0
  37. package/dist/executor.js.map +1 -0
  38. package/dist/handshake.d.ts +24 -0
  39. package/dist/handshake.d.ts.map +1 -0
  40. package/dist/handshake.js +26 -0
  41. package/dist/handshake.js.map +1 -0
  42. package/dist/index.d.ts +23 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +15 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/jsonrpc.d.ts +12 -0
  47. package/dist/jsonrpc.d.ts.map +1 -0
  48. package/dist/jsonrpc.js +42 -0
  49. package/dist/jsonrpc.js.map +1 -0
  50. package/dist/line-buffer.d.ts +14 -0
  51. package/dist/line-buffer.d.ts.map +1 -0
  52. package/dist/line-buffer.js +51 -0
  53. package/dist/line-buffer.js.map +1 -0
  54. package/dist/mutex.d.ts +13 -0
  55. package/dist/mutex.d.ts.map +1 -0
  56. package/dist/mutex.js +44 -0
  57. package/dist/mutex.js.map +1 -0
  58. package/dist/probe.d.ts +74 -0
  59. package/dist/probe.d.ts.map +1 -0
  60. package/dist/probe.js +121 -0
  61. package/dist/probe.js.map +1 -0
  62. package/dist/protocol.d.ts +8 -0
  63. package/dist/protocol.d.ts.map +1 -0
  64. package/dist/protocol.js +6 -0
  65. package/dist/protocol.js.map +1 -0
  66. package/dist/runtime-mode.d.ts +49 -0
  67. package/dist/runtime-mode.d.ts.map +1 -0
  68. package/dist/runtime-mode.js +123 -0
  69. package/dist/runtime-mode.js.map +1 -0
  70. package/dist/runtime-model.d.ts +157 -0
  71. package/dist/runtime-model.d.ts.map +1 -0
  72. package/dist/runtime-model.js +601 -0
  73. package/dist/runtime-model.js.map +1 -0
  74. package/dist/session-update.d.ts +42 -0
  75. package/dist/session-update.d.ts.map +1 -0
  76. package/dist/session-update.js +63 -0
  77. package/dist/session-update.js.map +1 -0
  78. package/dist/tool-presentation.d.ts +17 -0
  79. package/dist/tool-presentation.d.ts.map +1 -0
  80. package/dist/tool-presentation.js +209 -0
  81. package/dist/tool-presentation.js.map +1 -0
  82. package/dist/turn-usage.d.ts +18 -0
  83. package/dist/turn-usage.d.ts.map +1 -0
  84. package/dist/turn-usage.js +59 -0
  85. package/dist/turn-usage.js.map +1 -0
  86. package/dist/types.d.ts +116 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +6 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/util.d.ts +3 -0
  91. package/dist/util.d.ts.map +1 -0
  92. package/dist/util.js +11 -0
  93. package/dist/util.js.map +1 -0
  94. package/dist/vendor-hooks.d.ts +112 -0
  95. package/dist/vendor-hooks.d.ts.map +1 -0
  96. package/dist/vendor-hooks.js +4 -0
  97. package/dist/vendor-hooks.js.map +1 -0
  98. package/package.json +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-update.d.ts","sourceRoot":"","sources":["../src/session-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpE;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC;IACF,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnC;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,aAgBhC,CAAC;AAEH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,qBAAqB,CAM1F;AAiBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAQzE"}
@@ -0,0 +1,63 @@
1
+ import { isRecord } from "./jsonrpc.js";
2
+ /**
3
+ * 已知的 `session/update` 变体名。
4
+ *
5
+ * **这是一份手抄名单,SDK 没有把它导出成运行时值**(`zSessionUpdate` 不在包的公开
6
+ * 导出里,`types.gen.d.ts` 只有类型)。抄一份就有分叉风险:SDK 升级新增变体时这里
7
+ * 不更新,那个变体会走 `raw` 而不是 `decoded`——不丢消息,但少一层形状校验。
8
+ *
9
+ * `session-update.test.ts` 有一条对拍:数量与 SDK 类型文件里的 `sessionUpdate: "…"`
10
+ * 字面量个数必须相等,升级后对不上就红。
11
+ */
12
+ export const KNOWN_SESSION_UPDATES = new Set([
13
+ "user_message_chunk",
14
+ "agent_message_chunk",
15
+ "agent_thought_chunk",
16
+ "tool_call",
17
+ "tool_call_update",
18
+ "plan",
19
+ "plan_update",
20
+ "plan_removed",
21
+ "available_commands_update",
22
+ "current_mode_update",
23
+ "config_option_update",
24
+ "session_info_update",
25
+ "usage_update",
26
+ "compaction_update",
27
+ "compaction_summary_chunk",
28
+ ]);
29
+ export function isSessionUpdateEnvelope(payload) {
30
+ if (!isRecord(payload) || typeof payload["sessionId"] !== "string") {
31
+ return false;
32
+ }
33
+ const update = payload["update"];
34
+ return isRecord(update) && typeof update["sessionUpdate"] === "string";
35
+ }
36
+ function hasKnownVariantShape(update) {
37
+ const kind = update["sessionUpdate"];
38
+ if (typeof kind !== "string" || !KNOWN_SESSION_UPDATES.has(kind)) {
39
+ return false;
40
+ }
41
+ if (kind === "user_message_chunk" ||
42
+ kind === "agent_message_chunk" ||
43
+ kind === "agent_thought_chunk") {
44
+ return isRecord(update["content"]);
45
+ }
46
+ return true;
47
+ }
48
+ /**
49
+ * 先按已知变体形状解码;失败时信封对得上就原样投递,信封不对才丢。
50
+ *
51
+ * SDK 高层 `onNotification("session/update")` 会 `.parse()` 丢掉未知变体和残缺
52
+ * 已知变体,所以这一步必须在 JSON-RPC 路由层自己做。
53
+ */
54
+ export function decodeSessionUpdate(payload) {
55
+ if (!isSessionUpdateEnvelope(payload)) {
56
+ return { status: "dropped" };
57
+ }
58
+ if (hasKnownVariantShape(payload.update)) {
59
+ return { status: "decoded", params: payload };
60
+ }
61
+ return { status: "raw", params: payload };
62
+ }
63
+ //# sourceMappingURL=session-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-update.js","sourceRoot":"","sources":["../src/session-update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAoBxC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS;IACnD,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,WAAW;IACX,kBAAkB;IAClB,MAAM;IACN,aAAa;IACb,cAAc;IACd,2BAA2B;IAC3B,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;IACrB,cAAc;IACd,mBAAmB;IACnB,0BAA0B;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC;AACzE,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA+B;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,IAAI,KAAK,oBAAoB;QAC7B,IAAI,KAAK,qBAAqB;QAC9B,IAAI,KAAK,qBAAqB,EAC9B,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAA8B,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAA8B,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 从 `@ycodium/shared/toolActivity` 的 `deriveToolActivityPresentation` 搬来的 ACP 用到的那一段。
3
+ * 本包不能 import `@ycodium/shared`,业务规则本身没改。
4
+ */
5
+ import type { AcpToolLifecycleItemType } from "./types.ts";
6
+ export type ToolActivityPresentation = {
7
+ readonly summary: string;
8
+ readonly detail?: string;
9
+ };
10
+ export declare function deriveToolActivityPresentation(input: {
11
+ readonly itemType?: AcpToolLifecycleItemType | null | undefined;
12
+ readonly title?: string | null | undefined;
13
+ readonly detail?: string | null | undefined;
14
+ readonly data?: unknown;
15
+ readonly fallbackSummary?: string | null | undefined;
16
+ }): ToolActivityPresentation;
17
+ //# sourceMappingURL=tool-presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-presentation.d.ts","sourceRoot":"","sources":["../src/tool-presentation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AA6K3D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtD,GAAG,wBAAwB,CA6D3B"}
@@ -0,0 +1,209 @@
1
+ import { asTrimmedString, isRecord } from "./util.js";
2
+ function normalizeCommandValue(value) {
3
+ const direct = asTrimmedString(value);
4
+ if (direct) {
5
+ return direct;
6
+ }
7
+ if (!Array.isArray(value)) {
8
+ return undefined;
9
+ }
10
+ const parts = [];
11
+ for (const entry of value) {
12
+ const part = asTrimmedString(entry);
13
+ if (part !== undefined) {
14
+ parts.push(part);
15
+ }
16
+ }
17
+ return parts.length > 0 ? parts.join(" ") : undefined;
18
+ }
19
+ function stripTrailingExitCode(value) {
20
+ const trimmed = value?.trim();
21
+ if (!trimmed) {
22
+ return undefined;
23
+ }
24
+ const match = /^(?<output>[\s\S]*?)(?:\s*<exited with exit code \d+>)\s*$/iu.exec(trimmed);
25
+ const output = match?.groups?.output?.trim() ?? trimmed;
26
+ return output.length > 0 ? output : undefined;
27
+ }
28
+ function extractCommandFromTitle(title) {
29
+ if (!title) {
30
+ return undefined;
31
+ }
32
+ const backtickMatch = /`([^`]+)`/u.exec(title);
33
+ return backtickMatch?.[1]?.trim() || undefined;
34
+ }
35
+ function extractToolCommand(data, title) {
36
+ const item = isRecord(data?.["item"]) ? data["item"] : undefined;
37
+ const itemInput = item && isRecord(item["input"]) ? item["input"] : undefined;
38
+ const itemResult = item && isRecord(item["result"]) ? item["result"] : undefined;
39
+ const rawInput = isRecord(data?.["rawInput"]) ? data["rawInput"] : undefined;
40
+ const dataInput = isRecord(data?.["input"]) ? data["input"] : undefined;
41
+ const candidates = [
42
+ normalizeCommandValue(item?.["command"]),
43
+ normalizeCommandValue(itemInput?.["command"]),
44
+ normalizeCommandValue(itemResult?.["command"]),
45
+ normalizeCommandValue(data?.["command"]),
46
+ normalizeCommandValue(dataInput?.["command"]),
47
+ normalizeCommandValue(rawInput?.["command"]),
48
+ ];
49
+ const direct = candidates.find((candidate) => candidate !== undefined);
50
+ if (direct) {
51
+ return direct;
52
+ }
53
+ const executable = asTrimmedString(rawInput?.["executable"]);
54
+ const args = normalizeCommandValue(rawInput?.["args"]);
55
+ if (executable && args) {
56
+ return `${executable} ${args}`;
57
+ }
58
+ if (executable) {
59
+ return executable;
60
+ }
61
+ return extractCommandFromTitle(title);
62
+ }
63
+ function maybePathLike(value) {
64
+ if (!value) {
65
+ return undefined;
66
+ }
67
+ if (value.includes("/") ||
68
+ value.includes("\\") ||
69
+ value.startsWith(".") ||
70
+ /\.(?:[a-z0-9]{1,12})$/iu.test(value)) {
71
+ return value;
72
+ }
73
+ return undefined;
74
+ }
75
+ function collectPaths(value, paths, seen, depth) {
76
+ if (depth > 4 || paths.length >= 8) {
77
+ return;
78
+ }
79
+ if (Array.isArray(value)) {
80
+ for (const entry of value) {
81
+ collectPaths(entry, paths, seen, depth + 1);
82
+ if (paths.length >= 8) {
83
+ return;
84
+ }
85
+ }
86
+ return;
87
+ }
88
+ if (!isRecord(value)) {
89
+ return;
90
+ }
91
+ for (const key of ["path", "filePath", "relativePath", "filename", "newPath", "oldPath"]) {
92
+ const candidate = maybePathLike(asTrimmedString(value[key]));
93
+ if (!candidate || seen.has(candidate)) {
94
+ continue;
95
+ }
96
+ seen.add(candidate);
97
+ paths.push(candidate);
98
+ if (paths.length >= 8) {
99
+ return;
100
+ }
101
+ }
102
+ for (const nestedKey of ["locations", "item", "input", "result", "rawInput", "data", "changes"]) {
103
+ if (!(nestedKey in value)) {
104
+ continue;
105
+ }
106
+ collectPaths(value[nestedKey], paths, seen, depth + 1);
107
+ if (paths.length >= 8) {
108
+ return;
109
+ }
110
+ }
111
+ }
112
+ function extractPrimaryPath(data) {
113
+ const paths = [];
114
+ collectPaths(data, paths, new Set(), 0);
115
+ return paths[0];
116
+ }
117
+ function normalizeEquivalentValue(value) {
118
+ const trimmed = asTrimmedString(value);
119
+ if (!trimmed) {
120
+ return undefined;
121
+ }
122
+ return trimmed
123
+ .replace(/\s+/gu, " ")
124
+ .replace(/\s+(?:complete|completed|started)\s*$/iu, "")
125
+ .trim();
126
+ }
127
+ function isEquivalent(left, right) {
128
+ const normalizedLeft = normalizeEquivalentValue(left)?.toLowerCase();
129
+ const normalizedRight = normalizeEquivalentValue(right)?.toLowerCase();
130
+ return normalizedLeft !== undefined && normalizedLeft === normalizedRight;
131
+ }
132
+ function classifyToolAction(input) {
133
+ const itemType = input.itemType ?? undefined;
134
+ const kind = asTrimmedString(input.data?.["kind"])?.toLowerCase();
135
+ const title = asTrimmedString(input.title)?.toLowerCase();
136
+ if (itemType === "command_execution" || kind === "execute" || title === "terminal") {
137
+ return "command";
138
+ }
139
+ if (kind === "read" || title === "read file") {
140
+ return "read";
141
+ }
142
+ if (itemType === "file_change" ||
143
+ kind === "edit" ||
144
+ kind === "move" ||
145
+ kind === "delete" ||
146
+ kind === "write") {
147
+ return "file_change";
148
+ }
149
+ if (itemType === "web_search" || kind === "search" || title === "find" || title === "grep") {
150
+ return "search";
151
+ }
152
+ return "other";
153
+ }
154
+ export function deriveToolActivityPresentation(input) {
155
+ const title = asTrimmedString(input.title);
156
+ const detail = stripTrailingExitCode(asTrimmedString(input.detail));
157
+ const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? "Tool";
158
+ const data = isRecord(input.data) ? input.data : undefined;
159
+ const command = extractToolCommand(data, title);
160
+ const primaryPath = extractPrimaryPath(data);
161
+ const action = classifyToolAction({
162
+ itemType: input.itemType,
163
+ title,
164
+ data,
165
+ });
166
+ if (action === "command") {
167
+ return {
168
+ summary: "Ran command",
169
+ ...(command ? { detail: command } : {}),
170
+ };
171
+ }
172
+ if (action === "read") {
173
+ if (primaryPath) {
174
+ return {
175
+ summary: "Read file",
176
+ detail: primaryPath,
177
+ };
178
+ }
179
+ return {
180
+ summary: "Read file",
181
+ };
182
+ }
183
+ if (action === "file_change") {
184
+ return {
185
+ summary: "Changed files",
186
+ ...(primaryPath ? { detail: primaryPath } : {}),
187
+ };
188
+ }
189
+ if (action === "search") {
190
+ const rawInput = isRecord(data?.["rawInput"]) ? data["rawInput"] : undefined;
191
+ const query = asTrimmedString(rawInput?.["query"]) ??
192
+ asTrimmedString(rawInput?.["pattern"]) ??
193
+ asTrimmedString(rawInput?.["searchTerm"]);
194
+ return {
195
+ summary: "Searched files",
196
+ ...(query ? { detail: query } : {}),
197
+ };
198
+ }
199
+ if (detail && !isEquivalent(detail, title) && !isEquivalent(detail, fallbackSummary)) {
200
+ return {
201
+ summary: title ?? fallbackSummary,
202
+ detail,
203
+ };
204
+ }
205
+ return {
206
+ summary: title ?? fallbackSummary,
207
+ };
208
+ }
209
+ //# sourceMappingURL=tool-presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-presentation.js","sourceRoot":"","sources":["../src/tool-presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 从 `AcpTurnUsage.ts` 搬来。ACP 的计数是整个会话的累计值,记账要的是每个 turn 的增量。
3
+ */
4
+ import type { AcpUsageDelta, AcpUsageSnapshot, AcpUsageTokenTotals } from "./types.ts";
5
+ export declare function acpUsageProviderKind(driver: string): string;
6
+ export declare const ACP_USAGE_BASELINE_NEW_SESSION: AcpUsageSnapshot;
7
+ export type AcpUsageReport = {
8
+ readonly inputTokens?: number | null;
9
+ readonly outputTokens?: number | null;
10
+ readonly thoughtTokens?: number | null;
11
+ readonly cachedReadTokens?: number | null;
12
+ readonly cachedWriteTokens?: number | null;
13
+ readonly totalTokens?: number | null;
14
+ };
15
+ export declare function readAcpUsageSnapshot(usage: AcpUsageReport | null | undefined): AcpUsageSnapshot | undefined;
16
+ export declare function advanceAcpUsage(previous: AcpUsageSnapshot | undefined, usage: AcpUsageReport | null | undefined): AcpUsageDelta | undefined;
17
+ export declare function hasAnyTokens(totals: AcpUsageTokenTotals): boolean;
18
+ //# sourceMappingURL=turn-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-usage.d.ts","sourceRoot":"","sources":["../src/turn-usage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAYvF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,eAAO,MAAM,8BAA8B,EAAE,gBAM5C,CAAC;AAMF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,gBAAgB,GAAG,SAAS,CAW9B;AAYD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,aAAa,GAAG,SAAS,CAQ3B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAOjE"}
@@ -0,0 +1,59 @@
1
+ const KNOWN_USAGE_PROVIDERS = new Set([
2
+ "claude",
3
+ "codex",
4
+ "cursor",
5
+ "grok",
6
+ "opencode",
7
+ "dsh",
8
+ "acp",
9
+ ]);
10
+ export function acpUsageProviderKind(driver) {
11
+ return KNOWN_USAGE_PROVIDERS.has(driver) ? driver : "acp";
12
+ }
13
+ export const ACP_USAGE_BASELINE_NEW_SESSION = {
14
+ uncachedInputTokens: 0,
15
+ cachedInputTokens: 0,
16
+ cacheCreationTokens: 0,
17
+ outputTokens: 0,
18
+ reasoningTokens: 0,
19
+ };
20
+ function toCount(value) {
21
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.trunc(value) : 0;
22
+ }
23
+ export function readAcpUsageSnapshot(usage) {
24
+ if (!usage) {
25
+ return undefined;
26
+ }
27
+ return {
28
+ uncachedInputTokens: toCount(usage.inputTokens),
29
+ cachedInputTokens: toCount(usage.cachedReadTokens),
30
+ cacheCreationTokens: toCount(usage.cachedWriteTokens),
31
+ outputTokens: toCount(usage.outputTokens),
32
+ reasoningTokens: toCount(usage.thoughtTokens),
33
+ };
34
+ }
35
+ function diffSnapshots(previous, current) {
36
+ return {
37
+ uncachedInputTokens: Math.max(0, current.uncachedInputTokens - previous.uncachedInputTokens),
38
+ cachedInputTokens: Math.max(0, current.cachedInputTokens - previous.cachedInputTokens),
39
+ cacheCreationTokens: Math.max(0, current.cacheCreationTokens - previous.cacheCreationTokens),
40
+ outputTokens: Math.max(0, current.outputTokens - previous.outputTokens),
41
+ reasoningTokens: Math.max(0, current.reasoningTokens - previous.reasoningTokens),
42
+ };
43
+ }
44
+ export function advanceAcpUsage(previous, usage) {
45
+ const snapshot = readAcpUsageSnapshot(usage);
46
+ if (!snapshot) {
47
+ return undefined;
48
+ }
49
+ return previous === undefined
50
+ ? { snapshot, totals: undefined }
51
+ : { snapshot, totals: diffSnapshots(previous, snapshot) };
52
+ }
53
+ export function hasAnyTokens(totals) {
54
+ return (totals.uncachedInputTokens > 0 ||
55
+ totals.cachedInputTokens > 0 ||
56
+ totals.cacheCreationTokens > 0 ||
57
+ totals.outputTokens > 0);
58
+ }
59
+ //# sourceMappingURL=turn-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-usage.js","sourceRoot":"","sources":["../src/turn-usage.ts"],"names":[],"mappings":"AAKA,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,UAAU;IACV,KAAK;IACL,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAqB;IAC9D,mBAAmB,EAAE,CAAC;IACtB,iBAAiB,EAAE,CAAC;IACpB,mBAAmB,EAAE,CAAC;IACtB,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,CAAC;CACnB,CAAC;AAEF,SAAS,OAAO,CAAC,KAAgC;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAWD,MAAM,UAAU,oBAAoB,CAClC,KAAwC;IAExC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,mBAAmB,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;QAC/C,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAClD,mBAAmB,EAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACrD,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAA0B,EAAE,OAAyB;IAC1E,OAAO;QACL,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAC5F,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACtF,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAC5F,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACvE,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAsC,EACtC,KAAwC;IAExC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,KAAK,SAAS;QAC3B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;QACjC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,OAAO,CACL,MAAM,CAAC,mBAAmB,GAAG,CAAC;QAC9B,MAAM,CAAC,iBAAiB,GAAG,CAAC;QAC5B,MAAM,CAAC,mBAAmB,GAAG,CAAC;QAC9B,MAAM,CAAC,YAAY,GAAG,CAAC,CACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * 执行器事件的 JSON 形状与 `@ycodium-ai/plugin-api/executor` 的 `ExecutorEvent`
3
+ * 一致。本包不得 import `@ycodium/*`,所以在这里自述结构,不手抄一份分叉的 type 闭集之外的字段。
4
+ */
5
+ export type ExecutorEventType = "session.started" | "session.configured" | "session.state.changed" | "session.exited" | "thread.started" | "thread.state.changed" | "thread.metadata.updated" | "thread.token-usage.updated" | "thread.realtime.started" | "thread.realtime.item-added" | "thread.realtime.audio.delta" | "thread.realtime.error" | "thread.realtime.closed" | "turn.started" | "turn.completed" | "turn.aborted" | "turn.plan.updated" | "turn.proposed.delta" | "turn.proposed.completed" | "turn.diff.updated" | "item.started" | "item.updated" | "item.completed" | "content.delta" | "request.opened" | "request.resolved" | "user-input.requested" | "user-input.resolved" | "task.started" | "task.progress" | "task.updated" | "task.completed" | "hook.started" | "hook.progress" | "hook.completed" | "tool.progress" | "tool.summary" | "tool.denied" | "auth.status" | "account.updated" | "account.rate-limits.updated" | "mcp.status.updated" | "mcp.oauth.completed" | "model.rerouted" | "config.warning" | "deprecation.notice" | "files.persisted" | "assistant.attachment.produced" | "runtime.warning" | "runtime.error";
6
+ export type ExecutorEventProviderRefs = {
7
+ readonly providerTurnId?: string;
8
+ readonly providerItemId?: string;
9
+ readonly providerRequestId?: string;
10
+ };
11
+ export type ExecutorEventRaw = {
12
+ readonly source: string;
13
+ readonly method?: string;
14
+ readonly messageType?: string;
15
+ readonly payload: unknown;
16
+ };
17
+ export type ExecutorEventBase = {
18
+ readonly eventId: string;
19
+ readonly provider: string;
20
+ readonly providerInstanceId?: string;
21
+ readonly threadId: string;
22
+ readonly createdAt: string;
23
+ readonly turnId?: string;
24
+ readonly itemId?: string;
25
+ readonly requestId?: string;
26
+ readonly providerRefs?: ExecutorEventProviderRefs;
27
+ readonly raw?: ExecutorEventRaw;
28
+ readonly originBindingGeneration?: number;
29
+ readonly originResumeCursor?: unknown;
30
+ };
31
+ export type ExecutorEvent = ExecutorEventBase & {
32
+ readonly type: ExecutorEventType;
33
+ readonly payload: unknown;
34
+ };
35
+ export type AcpApprovalDecision = "accept" | "acceptForSession" | "acceptAlways" | "decline" | "cancel";
36
+ export type AcpApprovalOption = {
37
+ readonly decision: AcpApprovalDecision;
38
+ readonly label: string;
39
+ };
40
+ export type AcpCanonicalRequestType = "exec_command_approval" | "file_read_approval" | "file_change_approval" | "web_fetch_approval" | "web_search_approval" | "dynamic_tool_call";
41
+ export type AcpToolLifecycleItemType = "command_execution" | "file_change" | "web_search" | "dynamic_tool_call";
42
+ export type AcpFileChange = {
43
+ readonly path: string;
44
+ readonly changeKind: "add" | "modify";
45
+ readonly content: {
46
+ readonly kind: "replace";
47
+ readonly oldText?: string;
48
+ readonly newText: string;
49
+ };
50
+ } | {
51
+ readonly path: string;
52
+ readonly omitted: "unavailable";
53
+ };
54
+ export type AcpUsageSnapshot = {
55
+ readonly uncachedInputTokens: number;
56
+ readonly cachedInputTokens: number;
57
+ readonly cacheCreationTokens: number;
58
+ readonly outputTokens: number;
59
+ readonly reasoningTokens: number;
60
+ };
61
+ export type AcpUsageTokenTotals = AcpUsageSnapshot;
62
+ export type AcpUsageDelta = {
63
+ readonly snapshot: AcpUsageSnapshot;
64
+ readonly totals: AcpUsageTokenTotals | undefined;
65
+ };
66
+ export type AcpSessionStatus = "idle" | "starting" | "ready" | "running" | "stopping" | "disposed";
67
+ export type AcpContentBlock = {
68
+ readonly type: string;
69
+ readonly text?: string;
70
+ readonly [key: string]: unknown;
71
+ };
72
+ export type AcpPromptInput = {
73
+ readonly text?: string;
74
+ readonly prompt?: ReadonlyArray<AcpContentBlock>;
75
+ readonly turnId?: string;
76
+ readonly requestedModelId?: string;
77
+ };
78
+ export type AcpTurnResult = {
79
+ readonly threadId: string;
80
+ readonly turnId: string;
81
+ readonly stopReason: string;
82
+ readonly usage?: unknown;
83
+ };
84
+ export type AcpSessionStartResult = {
85
+ readonly sessionId: string;
86
+ readonly generation: number;
87
+ readonly initializeResult: unknown;
88
+ readonly sessionSetupResult: unknown;
89
+ readonly modelConfigId: string | undefined;
90
+ readonly modelId: string | undefined;
91
+ };
92
+ export type AcpPermissionOptionKind = "allow_once" | "allow_always" | "reject_once" | "reject_always";
93
+ export type AcpPermissionOption = {
94
+ readonly optionId: string;
95
+ readonly name: string;
96
+ readonly kind: AcpPermissionOptionKind;
97
+ };
98
+ export type AcpRequestPermissionParams = {
99
+ readonly sessionId: string;
100
+ readonly toolCall: {
101
+ readonly toolCallId: string;
102
+ readonly title?: string | null;
103
+ readonly kind?: string | null;
104
+ readonly status?: string | null;
105
+ readonly rawInput?: unknown;
106
+ readonly rawOutput?: unknown;
107
+ readonly content?: unknown;
108
+ readonly locations?: unknown;
109
+ };
110
+ readonly options: ReadonlyArray<AcpPermissionOption>;
111
+ };
112
+ export type AcpEventStamp = {
113
+ readonly eventId: string;
114
+ readonly createdAt: string;
115
+ };
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 执行器事件的 JSON 形状与 `@ycodium-ai/plugin-api/executor` 的 `ExecutorEvent`
3
+ * 一致。本包不得 import `@ycodium/*`,所以在这里自述结构,不手抄一份分叉的 type 闭集之外的字段。
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
+ export declare function asTrimmedString(value: unknown): string | undefined;
3
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMlE"}
package/dist/util.js ADDED
@@ -0,0 +1,11 @@
1
+ export function isRecord(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ export function asTrimmedString(value) {
5
+ if (typeof value !== "string") {
6
+ return undefined;
7
+ }
8
+ const trimmed = value.trim();
9
+ return trimmed.length > 0 ? trimmed : undefined;
10
+ }
11
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC"}