@simonepri/refined-antigravity-acp 0.1.2 → 1.0.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.
Files changed (165) hide show
  1. package/dist/bin/cli.js +2 -51
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/src/cli.d.ts +2 -0
  4. package/dist/src/cli.d.ts.map +1 -0
  5. package/dist/src/cli.js +44 -0
  6. package/dist/src/cli.js.map +1 -0
  7. package/dist/src/{command.d.ts → core/command.d.ts} +4 -0
  8. package/dist/src/core/command.d.ts.map +1 -0
  9. package/dist/src/{command.js → core/command.js} +27 -11
  10. package/dist/src/core/command.js.map +1 -0
  11. package/dist/src/core/pipeline.d.ts +20 -0
  12. package/dist/src/core/pipeline.d.ts.map +1 -0
  13. package/dist/src/core/pipeline.js +94 -0
  14. package/dist/src/core/pipeline.js.map +1 -0
  15. package/dist/src/core/session-cache.d.ts +12 -0
  16. package/dist/src/core/session-cache.d.ts.map +1 -0
  17. package/dist/src/core/session-cache.js +85 -0
  18. package/dist/src/core/session-cache.js.map +1 -0
  19. package/dist/src/core/supervisor.d.ts +90 -0
  20. package/dist/src/core/supervisor.d.ts.map +1 -0
  21. package/dist/src/core/supervisor.js +582 -0
  22. package/dist/src/core/supervisor.js.map +1 -0
  23. package/dist/src/core/telemetry.d.ts +23 -0
  24. package/dist/src/core/telemetry.d.ts.map +1 -0
  25. package/dist/src/core/telemetry.js +75 -0
  26. package/dist/src/core/telemetry.js.map +1 -0
  27. package/dist/src/core/transport.d.ts +7 -0
  28. package/dist/src/core/transport.d.ts.map +1 -0
  29. package/dist/src/core/transport.js +37 -0
  30. package/dist/src/core/transport.js.map +1 -0
  31. package/dist/src/core/types.d.ts +293 -0
  32. package/dist/src/core/types.d.ts.map +1 -0
  33. package/dist/src/core/types.js +78 -0
  34. package/dist/src/core/types.js.map +1 -0
  35. package/dist/src/fixes/active-turn-collision/index.d.ts +27 -0
  36. package/dist/src/fixes/active-turn-collision/index.d.ts.map +1 -0
  37. package/dist/src/fixes/active-turn-collision/index.js +117 -0
  38. package/dist/src/fixes/active-turn-collision/index.js.map +1 -0
  39. package/dist/src/fixes/cancellation-leak/index.d.ts +17 -0
  40. package/dist/src/fixes/cancellation-leak/index.d.ts.map +1 -0
  41. package/dist/src/fixes/cancellation-leak/index.js +57 -0
  42. package/dist/src/fixes/cancellation-leak/index.js.map +1 -0
  43. package/dist/src/fixes/dangling-tool-calls/index.d.ts +32 -0
  44. package/dist/src/fixes/dangling-tool-calls/index.d.ts.map +1 -0
  45. package/dist/src/fixes/dangling-tool-calls/index.js +188 -0
  46. package/dist/src/fixes/dangling-tool-calls/index.js.map +1 -0
  47. package/dist/src/fixes/dropped-history-chunks/index.d.ts +47 -0
  48. package/dist/src/fixes/dropped-history-chunks/index.d.ts.map +1 -0
  49. package/dist/src/fixes/dropped-history-chunks/index.js +202 -0
  50. package/dist/src/fixes/dropped-history-chunks/index.js.map +1 -0
  51. package/dist/src/fixes/flattened-model-efforts/index.d.ts +39 -0
  52. package/dist/src/fixes/flattened-model-efforts/index.d.ts.map +1 -0
  53. package/dist/src/fixes/flattened-model-efforts/index.js +306 -0
  54. package/dist/src/fixes/flattened-model-efforts/index.js.map +1 -0
  55. package/dist/src/fixes/index.d.ts +25 -0
  56. package/dist/src/fixes/index.d.ts.map +1 -0
  57. package/dist/src/fixes/index.js +61 -0
  58. package/dist/src/fixes/index.js.map +1 -0
  59. package/dist/src/fixes/malformed-stream-syntax/index.d.ts +44 -0
  60. package/dist/src/fixes/malformed-stream-syntax/index.d.ts.map +1 -0
  61. package/dist/src/fixes/malformed-stream-syntax/index.js +346 -0
  62. package/dist/src/fixes/malformed-stream-syntax/index.js.map +1 -0
  63. package/dist/src/fixes/missing-localharness/index.d.ts +20 -0
  64. package/dist/src/fixes/missing-localharness/index.d.ts.map +1 -0
  65. package/dist/src/fixes/missing-localharness/index.js +103 -0
  66. package/dist/src/fixes/missing-localharness/index.js.map +1 -0
  67. package/dist/src/fixes/missing-question-fallback/index.d.ts +30 -0
  68. package/dist/src/fixes/missing-question-fallback/index.d.ts.map +1 -0
  69. package/dist/src/fixes/missing-question-fallback/index.js +119 -0
  70. package/dist/src/fixes/missing-question-fallback/index.js.map +1 -0
  71. package/dist/src/fixes/missing-slash-skills/index.d.ts +17 -0
  72. package/dist/src/fixes/missing-slash-skills/index.d.ts.map +1 -0
  73. package/dist/src/fixes/missing-slash-skills/index.js +107 -0
  74. package/dist/src/fixes/missing-slash-skills/index.js.map +1 -0
  75. package/dist/src/{skills.d.ts → fixes/missing-slash-skills/skills.d.ts} +2 -1
  76. package/dist/src/fixes/missing-slash-skills/skills.d.ts.map +1 -0
  77. package/dist/src/fixes/missing-slash-skills/skills.js +199 -0
  78. package/dist/src/fixes/missing-slash-skills/skills.js.map +1 -0
  79. package/dist/src/fixes/missing-system-prompt/index.d.ts +19 -0
  80. package/dist/src/fixes/missing-system-prompt/index.d.ts.map +1 -0
  81. package/dist/src/fixes/missing-system-prompt/index.js +118 -0
  82. package/dist/src/fixes/missing-system-prompt/index.js.map +1 -0
  83. package/dist/src/fixes/missing-usage-metrics/index.d.ts +26 -0
  84. package/dist/src/fixes/missing-usage-metrics/index.d.ts.map +1 -0
  85. package/dist/src/fixes/missing-usage-metrics/index.js +132 -0
  86. package/dist/src/fixes/missing-usage-metrics/index.js.map +1 -0
  87. package/dist/src/fixes/noisy-stderr-logs/index.d.ts +15 -0
  88. package/dist/src/fixes/noisy-stderr-logs/index.d.ts.map +1 -0
  89. package/dist/src/fixes/noisy-stderr-logs/index.js +23 -0
  90. package/dist/src/fixes/noisy-stderr-logs/index.js.map +1 -0
  91. package/dist/src/fixes/non-canonical-mode-ids/index.d.ts +26 -0
  92. package/dist/src/fixes/non-canonical-mode-ids/index.d.ts.map +1 -0
  93. package/dist/src/fixes/non-canonical-mode-ids/index.js +47 -0
  94. package/dist/src/fixes/non-canonical-mode-ids/index.js.map +1 -0
  95. package/dist/src/fixes/orphaned-checkpoints/index.d.ts +31 -0
  96. package/dist/src/fixes/orphaned-checkpoints/index.d.ts.map +1 -0
  97. package/dist/src/fixes/orphaned-checkpoints/index.js +82 -0
  98. package/dist/src/fixes/orphaned-checkpoints/index.js.map +1 -0
  99. package/dist/src/fixes/silent-background-tasks/index.d.ts +66 -0
  100. package/dist/src/fixes/silent-background-tasks/index.d.ts.map +1 -0
  101. package/dist/src/fixes/silent-background-tasks/index.js +491 -0
  102. package/dist/src/fixes/silent-background-tasks/index.js.map +1 -0
  103. package/dist/src/{mcp-proxy.d.ts → fixes/stale-mcp-endpoints/index.d.ts} +31 -4
  104. package/dist/src/fixes/stale-mcp-endpoints/index.d.ts.map +1 -0
  105. package/dist/src/{mcp-proxy.js → fixes/stale-mcp-endpoints/index.js} +162 -14
  106. package/dist/src/fixes/stale-mcp-endpoints/index.js.map +1 -0
  107. package/dist/src/fixes/subagent-hang/index.d.ts +2 -0
  108. package/dist/src/fixes/subagent-hang/index.d.ts.map +1 -0
  109. package/dist/src/fixes/subagent-hang/index.js +2 -0
  110. package/dist/src/fixes/subagent-hang/index.js.map +1 -0
  111. package/dist/src/fixes/subagent-hang/subagent-hang.d.ts +43 -0
  112. package/dist/src/fixes/subagent-hang/subagent-hang.d.ts.map +1 -0
  113. package/dist/src/fixes/subagent-hang/subagent-hang.js +114 -0
  114. package/dist/src/fixes/subagent-hang/subagent-hang.js.map +1 -0
  115. package/dist/src/index.d.ts +27 -0
  116. package/dist/src/index.d.ts.map +1 -0
  117. package/dist/src/index.js +43 -0
  118. package/dist/src/index.js.map +1 -0
  119. package/dist/src/lib/protobuf.d.ts +9 -0
  120. package/dist/src/lib/protobuf.d.ts.map +1 -0
  121. package/dist/src/lib/protobuf.js +89 -0
  122. package/dist/src/lib/protobuf.js.map +1 -0
  123. package/package.json +22 -4
  124. package/readme.md +147 -141
  125. package/assets/icon.svg +0 -3
  126. package/dist/index.server.d.ts +0 -4
  127. package/dist/index.server.d.ts.map +0 -1
  128. package/dist/index.server.js +0 -7
  129. package/dist/index.server.js.map +0 -1
  130. package/dist/src/agy-patch.d.ts +0 -65
  131. package/dist/src/agy-patch.d.ts.map +0 -1
  132. package/dist/src/agy-patch.js +0 -351
  133. package/dist/src/agy-patch.js.map +0 -1
  134. package/dist/src/auth.d.ts +0 -27
  135. package/dist/src/auth.d.ts.map +0 -1
  136. package/dist/src/auth.js +0 -113
  137. package/dist/src/auth.js.map +0 -1
  138. package/dist/src/command.d.ts.map +0 -1
  139. package/dist/src/command.js.map +0 -1
  140. package/dist/src/connector.d.ts +0 -188
  141. package/dist/src/connector.d.ts.map +0 -1
  142. package/dist/src/connector.js +0 -1138
  143. package/dist/src/connector.js.map +0 -1
  144. package/dist/src/history.d.ts +0 -12
  145. package/dist/src/history.d.ts.map +0 -1
  146. package/dist/src/history.js +0 -152
  147. package/dist/src/history.js.map +0 -1
  148. package/dist/src/mcp-proxy.d.ts.map +0 -1
  149. package/dist/src/mcp-proxy.js.map +0 -1
  150. package/dist/src/provider.d.ts +0 -11
  151. package/dist/src/provider.d.ts.map +0 -1
  152. package/dist/src/provider.js +0 -31
  153. package/dist/src/provider.js.map +0 -1
  154. package/dist/src/sanitize.d.ts +0 -29
  155. package/dist/src/sanitize.d.ts.map +0 -1
  156. package/dist/src/sanitize.js +0 -237
  157. package/dist/src/sanitize.js.map +0 -1
  158. package/dist/src/skills.d.ts.map +0 -1
  159. package/dist/src/skills.js +0 -140
  160. package/dist/src/skills.js.map +0 -1
  161. package/dist/src/steering.d.ts +0 -30
  162. package/dist/src/steering.d.ts.map +0 -1
  163. package/dist/src/steering.js +0 -174
  164. package/dist/src/steering.js.map +0 -1
  165. package/paseo-plugin.json +0 -7
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Problem:
3
+ * When reconnecting or reloading a session via `session/load`, upstream `agy_acp_server`
4
+ * drops thought chains, intermediate reasoning steps, and agent message chunks, loading an incomplete history.
5
+ *
6
+ * Solution:
7
+ * Reads raw protobuf-encoded conversation steps directly from the session's SQLite database,
8
+ * reconstructing thought and message update events for session replay.
9
+ */
10
+ import { existsSync } from "node:fs";
11
+ import { DatabaseSync } from "node:sqlite";
12
+ import { ACP_METHODS, SESSION_UPDATES, isJsonRpcRequest, isMethod, } from "../../core/types.js";
13
+ import { extractSessionId } from "../../core/session-cache.js";
14
+ import { getConversationDbPath, STEP_TYPE_USER, STEP_TYPE_AGENT, } from "../orphaned-checkpoints/index.js";
15
+ import { stripSteeringPrefix } from "../active-turn-collision/index.js";
16
+ import { stripSystemContext } from "../missing-system-prompt/index.js";
17
+ import { sanitizeText } from "../malformed-stream-syntax/index.js";
18
+ import { decodeVarint, getField } from "../../lib/protobuf.js";
19
+ export { decodeVarint, getField };
20
+ export function extractTimestamp(payload) {
21
+ const f1 = getField(getField(payload, 5) ?? new Uint8Array(), 1);
22
+ if (!f1)
23
+ return undefined;
24
+ let offset = 0;
25
+ let seconds = 0;
26
+ let nanos = 0;
27
+ while (offset < f1.length) {
28
+ const [tag, nextOffset] = decodeVarint(f1, offset);
29
+ const [val, afterVal] = decodeVarint(f1, nextOffset);
30
+ offset = afterVal;
31
+ if (tag >> 3 === 1)
32
+ seconds = val;
33
+ else if (tag >> 3 === 2)
34
+ nanos = val;
35
+ }
36
+ return seconds
37
+ ? new Date(seconds * 1000 + Math.floor(nanos / 1_000_000)).toISOString()
38
+ : undefined;
39
+ }
40
+ export { STEP_TYPE_USER, STEP_TYPE_AGENT };
41
+ export function utf8(bytes) {
42
+ return bytes && bytes.length > 0 ? Buffer.from(bytes).toString("utf-8") : "";
43
+ }
44
+ export function decodeStep(stepType, payload, idx, timestamp) {
45
+ if (stepType === STEP_TYPE_USER) {
46
+ const f19 = getField(payload, 19);
47
+ if (!f19)
48
+ return [];
49
+ const text = stripSystemContext(stripSteeringPrefix(utf8(getField(f19, 2)))).trim();
50
+ return text ? [{ kind: "user", idx, text, timestamp }] : [];
51
+ }
52
+ if (stepType === STEP_TYPE_AGENT) {
53
+ const f20 = getField(payload, 20);
54
+ if (!f20)
55
+ return [];
56
+ const steps = [];
57
+ const thought = utf8(getField(f20, 3)).trim();
58
+ if (thought)
59
+ steps.push({ kind: "thought", idx, text: thought, timestamp });
60
+ const text = sanitizeText(utf8(getField(f20, 1)));
61
+ if (text)
62
+ steps.push({ kind: "assistant", idx, text, timestamp });
63
+ const call = getField(f20, 7);
64
+ const callId = call ? utf8(getField(call, 1)) : "";
65
+ if (callId) {
66
+ steps.push({
67
+ kind: "tool_call",
68
+ idx,
69
+ callId,
70
+ name: utf8(getField(call, 2)),
71
+ rawInputJson: utf8(getField(call, 3)),
72
+ timestamp,
73
+ });
74
+ }
75
+ return steps;
76
+ }
77
+ return [];
78
+ }
79
+ export function conversationDbPath(sessionId, customDbPath) {
80
+ return customDbPath ?? getConversationDbPath(sessionId);
81
+ }
82
+ export function readConversationSteps(sessionId, customDbPath) {
83
+ const dbPath = conversationDbPath(sessionId, customDbPath);
84
+ if (!existsSync(dbPath))
85
+ return [];
86
+ let db = null;
87
+ try {
88
+ db = new DatabaseSync(dbPath, { readOnly: true, timeout: 2000 });
89
+ const rows = db
90
+ .prepare("SELECT idx, step_type, step_payload FROM steps WHERE step_type IN (14, 15) ORDER BY idx ASC;")
91
+ .all();
92
+ return rows.flatMap((row) => row.step_payload
93
+ ? decodeStep(row.step_type, new Uint8Array(row.step_payload), row.idx, extractTimestamp(new Uint8Array(row.step_payload)))
94
+ : []);
95
+ }
96
+ catch (err) {
97
+ console.error(`[refined-antigravity-acp] Failed to read conversation steps for ${sessionId}:`, err);
98
+ return [];
99
+ }
100
+ finally {
101
+ db?.close();
102
+ }
103
+ }
104
+ export function deriveToolTitle(name, rawInputJson) {
105
+ try {
106
+ const parsed = JSON.parse(rawInputJson);
107
+ if (parsed &&
108
+ typeof parsed === "object" &&
109
+ typeof parsed.CommandLine === "string") {
110
+ return parsed.CommandLine;
111
+ }
112
+ }
113
+ catch {
114
+ // ignore
115
+ }
116
+ return name || "tool call";
117
+ }
118
+ export function sessionUpdateMessage(sessionId, update) {
119
+ return {
120
+ jsonrpc: "2.0",
121
+ method: ACP_METHODS.SESSION_UPDATE,
122
+ params: { sessionId, update },
123
+ };
124
+ }
125
+ export function textChunkUpdate(sessionId, sessionUpdate, text) {
126
+ return sessionUpdateMessage(sessionId, { sessionUpdate, content: { type: "text", text } });
127
+ }
128
+ export function toolCallUpdates(sessionId, step) {
129
+ return [
130
+ sessionUpdateMessage(sessionId, {
131
+ sessionUpdate: SESSION_UPDATES.TOOL_CALL,
132
+ toolCallId: step.callId,
133
+ title: deriveToolTitle(step.name, step.rawInputJson),
134
+ kind: "execute",
135
+ status: "completed",
136
+ rawInput: step.rawInputJson,
137
+ }),
138
+ sessionUpdateMessage(sessionId, {
139
+ sessionUpdate: SESSION_UPDATES.TOOL_CALL_UPDATE,
140
+ toolCallId: step.callId,
141
+ status: "completed",
142
+ }),
143
+ ];
144
+ }
145
+ export function synthesizeStepUpdates(sessionId, step) {
146
+ if (step.kind === "user")
147
+ return [textChunkUpdate(sessionId, SESSION_UPDATES.USER_MESSAGE_CHUNK, step.text)];
148
+ if (step.kind === "assistant")
149
+ return [textChunkUpdate(sessionId, SESSION_UPDATES.AGENT_MESSAGE_CHUNK, step.text)];
150
+ if (step.kind === "thought")
151
+ return [textChunkUpdate(sessionId, SESSION_UPDATES.AGENT_THOUGHT_CHUNK, step.text)];
152
+ if (step.kind === "tool_call")
153
+ return toolCallUpdates(sessionId, step);
154
+ return [];
155
+ }
156
+ export function synthesizeReplayUpdates(sessionId, steps) {
157
+ return steps.flatMap((s) => synthesizeStepUpdates(sessionId, s));
158
+ }
159
+ const pendingReplayLoads = new Map();
160
+ function consumePendingLoadSession(msg) {
161
+ if (!("id" in msg) || msg.id === null || msg.id === undefined)
162
+ return undefined;
163
+ const sessionId = pendingReplayLoads.get(msg.id);
164
+ if (sessionId !== undefined) {
165
+ pendingReplayLoads.delete(msg.id);
166
+ }
167
+ return sessionId;
168
+ }
169
+ export const droppedHistoryChunksFix = {
170
+ name: "dropped-history-chunks",
171
+ description: "Reconstructs complete conversation history including thought chains from SQLite steps on session/load",
172
+ readConversationSteps,
173
+ onOutbound(msg, _context) {
174
+ if (isJsonRpcRequest(msg) && msg.method === ACP_METHODS.SESSION_LOAD) {
175
+ const sessionId = extractSessionId(msg);
176
+ if (sessionId) {
177
+ pendingReplayLoads.set(msg.id, sessionId);
178
+ }
179
+ }
180
+ return msg;
181
+ },
182
+ onInbound(msg, _context) {
183
+ if (pendingReplayLoads.size === 0)
184
+ return [msg];
185
+ if (isMethod(msg, ACP_METHODS.SESSION_UPDATE))
186
+ return [];
187
+ const sessionId = consumePendingLoadSession(msg);
188
+ if (sessionId && "result" in msg) {
189
+ const fn = this?.readConversationSteps ??
190
+ droppedHistoryChunksFix.readConversationSteps ??
191
+ readConversationSteps;
192
+ const steps = fn(sessionId);
193
+ return [...synthesizeReplayUpdates(sessionId, steps), msg];
194
+ }
195
+ return [msg];
196
+ },
197
+ dispose() {
198
+ pendingReplayLoads.clear();
199
+ },
200
+ };
201
+ export const historyReconstructionFix = droppedHistoryChunksFix;
202
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/dropped-history-chunks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Problem:
3
+ * Upstream `agy_acp_server` encodes reasoning effort directly into model identifiers
4
+ * (e.g. `gemini-3.8-flash-high`, `gemini-3.8-flash-low`), presenting a confusing flat list
5
+ * of model variants and providing no dedicated reasoning effort control.
6
+ *
7
+ * Solution:
8
+ * Collapses duplicate model entries into clean base models, injects a dedicated
9
+ * `thought_level` option (`high`, `medium`, `low`), and dynamically reconstructs the upstream
10
+ * composite model identifier on selection.
11
+ */
12
+ import { type AcpFix, type CachedSessionMetadata, type SessionCache } from "../../core/types.js";
13
+ export type ReasoningEffortLevel = "high" | "medium" | "low";
14
+ export declare const EFFORT_OPTION_ID = "thought_level";
15
+ export interface ParsedModelEffort {
16
+ baseModelId: string;
17
+ baseModelName: string;
18
+ effort: ReasoningEffortLevel;
19
+ rawId: string;
20
+ }
21
+ export declare function normalizeEffort(effort?: string): ReasoningEffortLevel;
22
+ export declare function cleanEffortFromName(name?: string): string | undefined;
23
+ export declare function formatModelIdToName(baseId: string): string;
24
+ export declare function parseModelAndEffort(rawId: unknown, rawName?: unknown): ParsedModelEffort;
25
+ export declare const SELECTED_BASE_MODEL_KEY = "selectedBaseModel";
26
+ export declare const SELECTED_EFFORT_KEY = "selectedEffort";
27
+ export declare const MODEL_VARIANTS_KEY = "modelVariants";
28
+ export declare const KNOWN_THINKING_MODELS_KEY = "knownThinkingModels";
29
+ export declare function getSelectedBaseModel(session: CachedSessionMetadata): string | undefined;
30
+ export declare function setSelectedBaseModel(session: CachedSessionMetadata, model: string): void;
31
+ export declare function getSelectedEffort(session: CachedSessionMetadata): string | undefined;
32
+ export declare function setSelectedEffort(session: CachedSessionMetadata, effort: string): void;
33
+ export declare function getModelVariants(session?: CachedSessionMetadata): Map<string, string> | undefined;
34
+ export declare function getKnownThinkingModels(session?: CachedSessionMetadata): Set<string> | undefined;
35
+ export declare function composeModelId(baseModelId: string, effort?: string, session?: CachedSessionMetadata): string;
36
+ export declare function filterConfigOptions(payload: unknown, cache?: SessionCache, fallbackSessionId?: string): void;
37
+ export declare const flattenedModelEffortsFix: AcpFix;
38
+ export declare const modelEffortFix: AcpFix;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fixes/flattened-model-efforts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAEL,KAAK,MAAM,EAEX,KAAK,qBAAqB,EAG1B,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAS7B,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC7D,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAYhD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAGrE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1D;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAoBxF;AASD,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAC3D,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,yBAAyB,wBAAwB,CAAC;AAE/D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAEvF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAEpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEjG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAE/F;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,MAAM,CAgBR;AAoID,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,YAAY,EACpB,iBAAiB,CAAC,EAAE,MAAM,GACzB,IAAI,CAyBN;AAiED,eAAO,MAAM,wBAAwB,EAAE,MAgCtC,CAAC;AAEF,eAAO,MAAM,cAAc,QAA2B,CAAC"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Problem:
3
+ * Upstream `agy_acp_server` encodes reasoning effort directly into model identifiers
4
+ * (e.g. `gemini-3.8-flash-high`, `gemini-3.8-flash-low`), presenting a confusing flat list
5
+ * of model variants and providing no dedicated reasoning effort control.
6
+ *
7
+ * Solution:
8
+ * Collapses duplicate model entries into clean base models, injects a dedicated
9
+ * `thought_level` option (`high`, `medium`, `low`), and dynamically reconstructs the upstream
10
+ * composite model identifier on selection.
11
+ */
12
+ import { ACP_METHODS, } from "../../core/types.js";
13
+ import { extractSessionId, getFixData, getOrCreateFixData, getOrCreateSession, setFixData, } from "../../core/session-cache.js";
14
+ export const EFFORT_OPTION_ID = "thought_level";
15
+ const EFFORT_SUFFIX_RE = /-(high|medium|low)$/i;
16
+ const EFFORT_NAME_RE = /\s*(?:\((high|medium|low)\)|\[(high|medium|low)\]|-\s*(high|medium|low))\s*$/i;
17
+ const EFFORT_CONFIG_IDS = new Set([
18
+ EFFORT_OPTION_ID,
19
+ "effort",
20
+ "reasoning_effort",
21
+ "thinking_effort",
22
+ ]);
23
+ export function normalizeEffort(effort) {
24
+ const lower = effort?.toLowerCase();
25
+ return lower === "low" || lower === "medium" ? lower : "high";
26
+ }
27
+ export function cleanEffortFromName(name) {
28
+ if (!name)
29
+ return undefined;
30
+ const cleaned = name.replace(EFFORT_NAME_RE, "").trim();
31
+ return cleaned.length > 0 ? cleaned : undefined;
32
+ }
33
+ export function formatModelIdToName(baseId) {
34
+ if (!baseId)
35
+ return "";
36
+ return baseId
37
+ .split(/[-_]/)
38
+ .filter(Boolean)
39
+ .map((w) => (/^\d+(\.\d+)*$/.test(w) ? w : w.charAt(0).toUpperCase() + w.slice(1)))
40
+ .join(" ");
41
+ }
42
+ function parseEffort(idMatch, nameMatch) {
43
+ return normalizeEffort(idMatch?.[1] || nameMatch?.[1] || nameMatch?.[2] || nameMatch?.[3] || "high");
44
+ }
45
+ export function parseModelAndEffort(rawId, rawName) {
46
+ const id = typeof rawId === "string" ? rawId.trim() : "";
47
+ const name = typeof rawName === "string" ? rawName.trim() : undefined;
48
+ if (id === "gemini-pro-agent") {
49
+ return {
50
+ baseModelId: "gemini-3.1-pro",
51
+ baseModelName: "Gemini 3.1 Pro",
52
+ effort: "high",
53
+ rawId: id,
54
+ };
55
+ }
56
+ const idMatch = id.match(EFFORT_SUFFIX_RE);
57
+ const nameMatch = name?.match(EFFORT_NAME_RE);
58
+ const effort = parseEffort(idMatch, nameMatch);
59
+ const baseId = idMatch ? id.slice(0, -idMatch[0].length) : id;
60
+ const baseModelName = cleanEffortFromName(name) || formatModelIdToName(baseId) || baseId;
61
+ return { baseModelId: baseId, baseModelName, effort, rawId: id };
62
+ }
63
+ function resolveKnownModel(base, effort) {
64
+ if (base === "gemini-3.1-pro" || base === "gemini-pro-agent") {
65
+ return effort === "low" ? "gemini-3.1-pro-low" : "gemini-pro-agent";
66
+ }
67
+ return undefined;
68
+ }
69
+ export const SELECTED_BASE_MODEL_KEY = "selectedBaseModel";
70
+ export const SELECTED_EFFORT_KEY = "selectedEffort";
71
+ export const MODEL_VARIANTS_KEY = "modelVariants";
72
+ export const KNOWN_THINKING_MODELS_KEY = "knownThinkingModels";
73
+ export function getSelectedBaseModel(session) {
74
+ return getFixData(session, SELECTED_BASE_MODEL_KEY);
75
+ }
76
+ export function setSelectedBaseModel(session, model) {
77
+ setFixData(session, SELECTED_BASE_MODEL_KEY, model);
78
+ }
79
+ export function getSelectedEffort(session) {
80
+ return getFixData(session, SELECTED_EFFORT_KEY);
81
+ }
82
+ export function setSelectedEffort(session, effort) {
83
+ setFixData(session, SELECTED_EFFORT_KEY, effort);
84
+ }
85
+ export function getModelVariants(session) {
86
+ return getFixData(session, MODEL_VARIANTS_KEY);
87
+ }
88
+ export function getKnownThinkingModels(session) {
89
+ return getFixData(session, KNOWN_THINKING_MODELS_KEY);
90
+ }
91
+ export function composeModelId(baseModelId, effort, session) {
92
+ if (!effort)
93
+ return baseModelId;
94
+ const e = normalizeEffort(effort);
95
+ const cleanBase = baseModelId
96
+ .replace(/^gemini-3\.1-pro-low$/, "gemini-3.1-pro")
97
+ .replace(EFFORT_SUFFIX_RE, "");
98
+ const variant = getModelVariants(session)?.get(`${cleanBase}:${e}`);
99
+ if (variant)
100
+ return variant;
101
+ const known = resolveKnownModel(cleanBase, e);
102
+ if (known)
103
+ return known;
104
+ const isThinking = cleanBase.startsWith("gemini-") || Boolean(getKnownThinkingModels(session)?.has(cleanBase));
105
+ return isThinking ? `${cleanBase}-${e}` : baseModelId;
106
+ }
107
+ function recordSessionVariant(session, parsed, rawId) {
108
+ if (!session)
109
+ return;
110
+ const variants = getOrCreateFixData(session, MODEL_VARIANTS_KEY, () => new Map());
111
+ const knownThinking = getOrCreateFixData(session, KNOWN_THINKING_MODELS_KEY, () => new Set());
112
+ variants.set(`${parsed.baseModelId}:${parsed.effort}`, rawId);
113
+ if (parsed.baseModelId !== rawId) {
114
+ knownThinking.add(parsed.baseModelId);
115
+ }
116
+ }
117
+ function collapseList(items, idKey, session) {
118
+ const seen = new Set();
119
+ const collapsed = [];
120
+ for (const item of items) {
121
+ if (!item || typeof item !== "object")
122
+ continue;
123
+ const raw = item;
124
+ const rawId = typeof raw[idKey] === "string" ? raw[idKey] : "";
125
+ if (!rawId)
126
+ continue;
127
+ const parsed = parseModelAndEffort(rawId, raw.name);
128
+ if (!parsed.baseModelId)
129
+ continue;
130
+ recordSessionVariant(session, parsed, rawId);
131
+ if (!seen.has(parsed.baseModelId)) {
132
+ seen.add(parsed.baseModelId);
133
+ collapsed.push({ [idKey]: parsed.baseModelId, name: parsed.baseModelName });
134
+ }
135
+ }
136
+ return collapsed;
137
+ }
138
+ function setSessionModel(session, base, effort) {
139
+ if (!session)
140
+ return;
141
+ setSelectedBaseModel(session, base);
142
+ setSelectedEffort(session, effort);
143
+ }
144
+ function collapseModels(models, session) {
145
+ let hasBase = false;
146
+ let effort;
147
+ if (Array.isArray(models?.availableModels) && models.availableModels.length > 0) {
148
+ const collapsed = collapseList(models.availableModels, "modelId", session);
149
+ if (collapsed.length > 0) {
150
+ models.availableModels = collapsed;
151
+ hasBase = true;
152
+ }
153
+ }
154
+ if (typeof models?.currentModelId === "string") {
155
+ const p = parseModelAndEffort(models.currentModelId);
156
+ models.currentModelId = p.baseModelId;
157
+ effort = p.effort;
158
+ setSessionModel(session, p.baseModelId, p.effort);
159
+ }
160
+ return { hasBase, effort };
161
+ }
162
+ function collapseModelOption(opt, session) {
163
+ let hasBase = false;
164
+ let effort;
165
+ if (Array.isArray(opt.options) && opt.options.length > 0) {
166
+ const collapsed = collapseList(opt.options, "value", session);
167
+ if (collapsed.length > 0) {
168
+ opt.options = collapsed;
169
+ hasBase = true;
170
+ }
171
+ }
172
+ if (typeof opt.currentValue === "string") {
173
+ const p = parseModelAndEffort(opt.currentValue);
174
+ opt.currentValue = p.baseModelId;
175
+ effort = p.effort;
176
+ setSessionModel(session, p.baseModelId, p.effort);
177
+ }
178
+ return { hasBase, effort };
179
+ }
180
+ function injectEffort(options, index, effort) {
181
+ const exists = options.some((o) => o?.id === EFFORT_OPTION_ID || o?.category === EFFORT_OPTION_ID);
182
+ if (exists)
183
+ return;
184
+ options.splice(index + 1, 0, {
185
+ id: EFFORT_OPTION_ID,
186
+ name: "Reasoning Effort",
187
+ category: EFFORT_OPTION_ID,
188
+ type: "select",
189
+ currentValue: effort,
190
+ options: [
191
+ { value: "high", name: "High" },
192
+ { value: "medium", name: "Medium" },
193
+ { value: "low", name: "Low" },
194
+ ],
195
+ });
196
+ }
197
+ function resolveTargetSession(sId, fallbackId, cache) {
198
+ const id = typeof sId === "string" ? sId : fallbackId;
199
+ return id && cache ? getOrCreateSession(cache, id) : undefined;
200
+ }
201
+ export function filterConfigOptions(payload, cache, fallbackSessionId) {
202
+ if (!payload || typeof payload !== "object")
203
+ return;
204
+ const obj = payload;
205
+ const session = resolveTargetSession(obj.sessionId, fallbackSessionId, cache);
206
+ const modelsResult = collapseModels(obj.models, session);
207
+ if (!Array.isArray(obj.configOptions))
208
+ return;
209
+ obj.configOptions = obj.configOptions.filter((opt) => opt?.id !== "mode" && opt?.category !== "mode");
210
+ const modelIdx = obj.configOptions.findIndex((opt) => opt?.id === "model" && opt?.category === "model");
211
+ const targetOpt = obj.configOptions[modelIdx];
212
+ if (!targetOpt)
213
+ return;
214
+ const optResult = collapseModelOption(targetOpt, session);
215
+ if (modelsResult.hasBase || optResult.hasBase) {
216
+ const effort = optResult.effort ?? modelsResult.effort ?? "high";
217
+ injectEffort(obj.configOptions, modelIdx, effort);
218
+ }
219
+ }
220
+ function handleSetModel(params, session) {
221
+ if (typeof params.modelId !== "string")
222
+ return;
223
+ const p = parseModelAndEffort(params.modelId);
224
+ setSelectedBaseModel(session, p.baseModelId);
225
+ if (p.baseModelId !== params.modelId)
226
+ setSelectedEffort(session, p.effort);
227
+ const effort = getSelectedEffort(session) ?? "high";
228
+ const composite = composeModelId(p.baseModelId, effort, session);
229
+ params.modelId = composite;
230
+ session.lastConfigOptions.set("model", { value: composite, type: "select" });
231
+ }
232
+ function handleModelConfig(params, session, val) {
233
+ const p = parseModelAndEffort(val);
234
+ const knownThinking = getKnownThinkingModels(session);
235
+ const isDecomposable = p.baseModelId !== val ||
236
+ Boolean(knownThinking?.has(p.baseModelId)) ||
237
+ val.startsWith("gemini-");
238
+ if (!isDecomposable) {
239
+ setSelectedBaseModel(session, val);
240
+ session.lastConfigOptions.set("model", {
241
+ value: val,
242
+ type: typeof params.type === "string" ? params.type : undefined,
243
+ });
244
+ return;
245
+ }
246
+ setSelectedBaseModel(session, p.baseModelId);
247
+ if (p.baseModelId !== val)
248
+ setSelectedEffort(session, p.effort);
249
+ const effort = getSelectedEffort(session) ?? "high";
250
+ const composite = composeModelId(p.baseModelId, effort, session);
251
+ params.value = composite;
252
+ session.lastConfigOptions.set("model", {
253
+ value: composite,
254
+ type: typeof params.type === "string" ? params.type : "select",
255
+ });
256
+ }
257
+ function handleSetConfig(params, session) {
258
+ if (typeof params.configId !== "string")
259
+ return;
260
+ const val = String(params.value ?? "");
261
+ const selectedBaseModel = getSelectedBaseModel(session);
262
+ if (params.configId === "model") {
263
+ handleModelConfig(params, session, val);
264
+ }
265
+ else if (EFFORT_CONFIG_IDS.has(params.configId) && selectedBaseModel) {
266
+ const effort = normalizeEffort(val);
267
+ setSelectedEffort(session, effort);
268
+ const composite = composeModelId(selectedBaseModel, effort, session);
269
+ params.configId = "model";
270
+ params.value = composite;
271
+ session.lastConfigOptions.set("model", { value: composite, type: "select" });
272
+ }
273
+ }
274
+ export const flattenedModelEffortsFix = {
275
+ name: "flattened-model-efforts",
276
+ description: "Decomposes flattened model variants and injects orthogonal reasoning effort controls",
277
+ onInbound(msg, context) {
278
+ if ("result" in msg && msg.result && typeof msg.result === "object") {
279
+ const res = msg.result;
280
+ if (res.models || res.configOptions) {
281
+ filterConfigOptions(msg.result, context.sessionCache, context.session?.sessionId);
282
+ }
283
+ }
284
+ return [msg];
285
+ },
286
+ onOutbound(msg, context) {
287
+ if (!("method" in msg))
288
+ return msg;
289
+ const sessionId = extractSessionId(msg);
290
+ if (!sessionId)
291
+ return msg;
292
+ const session = getOrCreateSession(context.sessionCache, sessionId);
293
+ const params = msg.params;
294
+ if (!params)
295
+ return msg;
296
+ if (msg.method === ACP_METHODS.SESSION_SET_MODEL) {
297
+ handleSetModel(params, session);
298
+ }
299
+ else if (msg.method === ACP_METHODS.SESSION_SET_CONFIG_OPTION) {
300
+ handleSetConfig(params, session);
301
+ }
302
+ return msg;
303
+ },
304
+ };
305
+ export const modelEffortFix = flattenedModelEffortsFix;
306
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/flattened-model-efforts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { AcpFix } from "../core/types.js";
2
+ export * from "./missing-localharness/index.js";
3
+ export * from "./missing-system-prompt/index.js";
4
+ export * from "./missing-slash-skills/index.js";
5
+ export * from "./subagent-hang/index.js";
6
+ export * from "./malformed-stream-syntax/index.js";
7
+ export * from "./active-turn-collision/index.js";
8
+ export * from "./stale-mcp-endpoints/index.js";
9
+ export * from "./orphaned-checkpoints/index.js";
10
+ export * from "./dropped-history-chunks/index.js";
11
+ export * from "./noisy-stderr-logs/index.js";
12
+ export * from "./flattened-model-efforts/index.js";
13
+ export * from "./non-canonical-mode-ids/index.js";
14
+ export * from "./silent-background-tasks/index.js";
15
+ export * from "./cancellation-leak/index.js";
16
+ export * from "./missing-usage-metrics/index.js";
17
+ export * from "./dangling-tool-calls/index.js";
18
+ export * from "./missing-question-fallback/index.js";
19
+ /**
20
+ * Returns a list of all active fixes addressing the upstream issues documented in readme.md.
21
+ * As upstream releases fix these defects, retirement is as simple as removing the fix here
22
+ * and deleting its corresponding folder in src/fixes/.
23
+ */
24
+ export declare function createDefaultFixes(): AcpFix[];
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fixes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmB/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAoB7C"}