@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.
- package/dist/bin/cli.js +2 -51
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +44 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/{command.d.ts → core/command.d.ts} +4 -0
- package/dist/src/core/command.d.ts.map +1 -0
- package/dist/src/{command.js → core/command.js} +27 -11
- package/dist/src/core/command.js.map +1 -0
- package/dist/src/core/pipeline.d.ts +20 -0
- package/dist/src/core/pipeline.d.ts.map +1 -0
- package/dist/src/core/pipeline.js +94 -0
- package/dist/src/core/pipeline.js.map +1 -0
- package/dist/src/core/session-cache.d.ts +12 -0
- package/dist/src/core/session-cache.d.ts.map +1 -0
- package/dist/src/core/session-cache.js +85 -0
- package/dist/src/core/session-cache.js.map +1 -0
- package/dist/src/core/supervisor.d.ts +90 -0
- package/dist/src/core/supervisor.d.ts.map +1 -0
- package/dist/src/core/supervisor.js +582 -0
- package/dist/src/core/supervisor.js.map +1 -0
- package/dist/src/core/telemetry.d.ts +23 -0
- package/dist/src/core/telemetry.d.ts.map +1 -0
- package/dist/src/core/telemetry.js +75 -0
- package/dist/src/core/telemetry.js.map +1 -0
- package/dist/src/core/transport.d.ts +7 -0
- package/dist/src/core/transport.d.ts.map +1 -0
- package/dist/src/core/transport.js +37 -0
- package/dist/src/core/transport.js.map +1 -0
- package/dist/src/core/types.d.ts +293 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +78 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/fixes/active-turn-collision/index.d.ts +27 -0
- package/dist/src/fixes/active-turn-collision/index.d.ts.map +1 -0
- package/dist/src/fixes/active-turn-collision/index.js +117 -0
- package/dist/src/fixes/active-turn-collision/index.js.map +1 -0
- package/dist/src/fixes/cancellation-leak/index.d.ts +17 -0
- package/dist/src/fixes/cancellation-leak/index.d.ts.map +1 -0
- package/dist/src/fixes/cancellation-leak/index.js +57 -0
- package/dist/src/fixes/cancellation-leak/index.js.map +1 -0
- package/dist/src/fixes/dangling-tool-calls/index.d.ts +32 -0
- package/dist/src/fixes/dangling-tool-calls/index.d.ts.map +1 -0
- package/dist/src/fixes/dangling-tool-calls/index.js +188 -0
- package/dist/src/fixes/dangling-tool-calls/index.js.map +1 -0
- package/dist/src/fixes/dropped-history-chunks/index.d.ts +47 -0
- package/dist/src/fixes/dropped-history-chunks/index.d.ts.map +1 -0
- package/dist/src/fixes/dropped-history-chunks/index.js +202 -0
- package/dist/src/fixes/dropped-history-chunks/index.js.map +1 -0
- package/dist/src/fixes/flattened-model-efforts/index.d.ts +39 -0
- package/dist/src/fixes/flattened-model-efforts/index.d.ts.map +1 -0
- package/dist/src/fixes/flattened-model-efforts/index.js +306 -0
- package/dist/src/fixes/flattened-model-efforts/index.js.map +1 -0
- package/dist/src/fixes/index.d.ts +25 -0
- package/dist/src/fixes/index.d.ts.map +1 -0
- package/dist/src/fixes/index.js +61 -0
- package/dist/src/fixes/index.js.map +1 -0
- package/dist/src/fixes/malformed-stream-syntax/index.d.ts +44 -0
- package/dist/src/fixes/malformed-stream-syntax/index.d.ts.map +1 -0
- package/dist/src/fixes/malformed-stream-syntax/index.js +346 -0
- package/dist/src/fixes/malformed-stream-syntax/index.js.map +1 -0
- package/dist/src/fixes/missing-localharness/index.d.ts +20 -0
- package/dist/src/fixes/missing-localharness/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-localharness/index.js +103 -0
- package/dist/src/fixes/missing-localharness/index.js.map +1 -0
- package/dist/src/fixes/missing-question-fallback/index.d.ts +30 -0
- package/dist/src/fixes/missing-question-fallback/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-question-fallback/index.js +119 -0
- package/dist/src/fixes/missing-question-fallback/index.js.map +1 -0
- package/dist/src/fixes/missing-slash-skills/index.d.ts +17 -0
- package/dist/src/fixes/missing-slash-skills/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-slash-skills/index.js +107 -0
- package/dist/src/fixes/missing-slash-skills/index.js.map +1 -0
- package/dist/src/{skills.d.ts → fixes/missing-slash-skills/skills.d.ts} +2 -1
- package/dist/src/fixes/missing-slash-skills/skills.d.ts.map +1 -0
- package/dist/src/fixes/missing-slash-skills/skills.js +199 -0
- package/dist/src/fixes/missing-slash-skills/skills.js.map +1 -0
- package/dist/src/fixes/missing-system-prompt/index.d.ts +19 -0
- package/dist/src/fixes/missing-system-prompt/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-system-prompt/index.js +118 -0
- package/dist/src/fixes/missing-system-prompt/index.js.map +1 -0
- package/dist/src/fixes/missing-usage-metrics/index.d.ts +26 -0
- package/dist/src/fixes/missing-usage-metrics/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-usage-metrics/index.js +132 -0
- package/dist/src/fixes/missing-usage-metrics/index.js.map +1 -0
- package/dist/src/fixes/noisy-stderr-logs/index.d.ts +15 -0
- package/dist/src/fixes/noisy-stderr-logs/index.d.ts.map +1 -0
- package/dist/src/fixes/noisy-stderr-logs/index.js +23 -0
- package/dist/src/fixes/noisy-stderr-logs/index.js.map +1 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.d.ts +26 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.d.ts.map +1 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.js +47 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.js.map +1 -0
- package/dist/src/fixes/orphaned-checkpoints/index.d.ts +31 -0
- package/dist/src/fixes/orphaned-checkpoints/index.d.ts.map +1 -0
- package/dist/src/fixes/orphaned-checkpoints/index.js +82 -0
- package/dist/src/fixes/orphaned-checkpoints/index.js.map +1 -0
- package/dist/src/fixes/silent-background-tasks/index.d.ts +66 -0
- package/dist/src/fixes/silent-background-tasks/index.d.ts.map +1 -0
- package/dist/src/fixes/silent-background-tasks/index.js +491 -0
- package/dist/src/fixes/silent-background-tasks/index.js.map +1 -0
- package/dist/src/{mcp-proxy.d.ts → fixes/stale-mcp-endpoints/index.d.ts} +31 -4
- package/dist/src/fixes/stale-mcp-endpoints/index.d.ts.map +1 -0
- package/dist/src/{mcp-proxy.js → fixes/stale-mcp-endpoints/index.js} +162 -14
- package/dist/src/fixes/stale-mcp-endpoints/index.js.map +1 -0
- package/dist/src/fixes/subagent-hang/index.d.ts +2 -0
- package/dist/src/fixes/subagent-hang/index.d.ts.map +1 -0
- package/dist/src/fixes/subagent-hang/index.js +2 -0
- package/dist/src/fixes/subagent-hang/index.js.map +1 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.d.ts +43 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.d.ts.map +1 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.js +114 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.js.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +43 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/protobuf.d.ts +9 -0
- package/dist/src/lib/protobuf.d.ts.map +1 -0
- package/dist/src/lib/protobuf.js +89 -0
- package/dist/src/lib/protobuf.js.map +1 -0
- package/package.json +22 -4
- package/readme.md +147 -141
- package/assets/icon.svg +0 -3
- package/dist/index.server.d.ts +0 -4
- package/dist/index.server.d.ts.map +0 -1
- package/dist/index.server.js +0 -7
- package/dist/index.server.js.map +0 -1
- package/dist/src/agy-patch.d.ts +0 -65
- package/dist/src/agy-patch.d.ts.map +0 -1
- package/dist/src/agy-patch.js +0 -351
- package/dist/src/agy-patch.js.map +0 -1
- package/dist/src/auth.d.ts +0 -27
- package/dist/src/auth.d.ts.map +0 -1
- package/dist/src/auth.js +0 -113
- package/dist/src/auth.js.map +0 -1
- package/dist/src/command.d.ts.map +0 -1
- package/dist/src/command.js.map +0 -1
- package/dist/src/connector.d.ts +0 -188
- package/dist/src/connector.d.ts.map +0 -1
- package/dist/src/connector.js +0 -1138
- package/dist/src/connector.js.map +0 -1
- package/dist/src/history.d.ts +0 -12
- package/dist/src/history.d.ts.map +0 -1
- package/dist/src/history.js +0 -152
- package/dist/src/history.js.map +0 -1
- package/dist/src/mcp-proxy.d.ts.map +0 -1
- package/dist/src/mcp-proxy.js.map +0 -1
- package/dist/src/provider.d.ts +0 -11
- package/dist/src/provider.d.ts.map +0 -1
- package/dist/src/provider.js +0 -31
- package/dist/src/provider.js.map +0 -1
- package/dist/src/sanitize.d.ts +0 -29
- package/dist/src/sanitize.d.ts.map +0 -1
- package/dist/src/sanitize.js +0 -237
- package/dist/src/sanitize.js.map +0 -1
- package/dist/src/skills.d.ts.map +0 -1
- package/dist/src/skills.js +0 -140
- package/dist/src/skills.js.map +0 -1
- package/dist/src/steering.d.ts +0 -30
- package/dist/src/steering.d.ts.map +0 -1
- package/dist/src/steering.js +0 -174
- package/dist/src/steering.js.map +0 -1
- package/paseo-plugin.json +0 -7
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { missingLocalharnessFix } from "./missing-localharness/index.js";
|
|
2
|
+
import { missingSystemPromptFix } from "./missing-system-prompt/index.js";
|
|
3
|
+
import { missingSlashSkillsFix } from "./missing-slash-skills/index.js";
|
|
4
|
+
import { subagentHangFix } from "./subagent-hang/index.js";
|
|
5
|
+
import { malformedStreamSyntaxFix } from "./malformed-stream-syntax/index.js";
|
|
6
|
+
import { activeTurnCollisionFix } from "./active-turn-collision/index.js";
|
|
7
|
+
import { staleMcpEndpointsFix } from "./stale-mcp-endpoints/index.js";
|
|
8
|
+
import { orphanedCheckpointsFix } from "./orphaned-checkpoints/index.js";
|
|
9
|
+
import { droppedHistoryChunksFix } from "./dropped-history-chunks/index.js";
|
|
10
|
+
import { noisyStderrLogsFix } from "./noisy-stderr-logs/index.js";
|
|
11
|
+
import { flattenedModelEffortsFix } from "./flattened-model-efforts/index.js";
|
|
12
|
+
import { nonCanonicalModeIdsFix } from "./non-canonical-mode-ids/index.js";
|
|
13
|
+
import { silentBackgroundTasksFix } from "./silent-background-tasks/index.js";
|
|
14
|
+
import { cancellationLeakFix } from "./cancellation-leak/index.js";
|
|
15
|
+
import { missingUsageMetricsFix } from "./missing-usage-metrics/index.js";
|
|
16
|
+
import { danglingToolCallsFix } from "./dangling-tool-calls/index.js";
|
|
17
|
+
import { missingQuestionFallbackFix } from "./missing-question-fallback/index.js";
|
|
18
|
+
export * from "./missing-localharness/index.js";
|
|
19
|
+
export * from "./missing-system-prompt/index.js";
|
|
20
|
+
export * from "./missing-slash-skills/index.js";
|
|
21
|
+
export * from "./subagent-hang/index.js";
|
|
22
|
+
export * from "./malformed-stream-syntax/index.js";
|
|
23
|
+
export * from "./active-turn-collision/index.js";
|
|
24
|
+
export * from "./stale-mcp-endpoints/index.js";
|
|
25
|
+
export * from "./orphaned-checkpoints/index.js";
|
|
26
|
+
export * from "./dropped-history-chunks/index.js";
|
|
27
|
+
export * from "./noisy-stderr-logs/index.js";
|
|
28
|
+
export * from "./flattened-model-efforts/index.js";
|
|
29
|
+
export * from "./non-canonical-mode-ids/index.js";
|
|
30
|
+
export * from "./silent-background-tasks/index.js";
|
|
31
|
+
export * from "./cancellation-leak/index.js";
|
|
32
|
+
export * from "./missing-usage-metrics/index.js";
|
|
33
|
+
export * from "./dangling-tool-calls/index.js";
|
|
34
|
+
export * from "./missing-question-fallback/index.js";
|
|
35
|
+
/**
|
|
36
|
+
* Returns a list of all active fixes addressing the upstream issues documented in readme.md.
|
|
37
|
+
* As upstream releases fix these defects, retirement is as simple as removing the fix here
|
|
38
|
+
* and deleting its corresponding folder in src/fixes/.
|
|
39
|
+
*/
|
|
40
|
+
export function createDefaultFixes() {
|
|
41
|
+
return [
|
|
42
|
+
missingLocalharnessFix,
|
|
43
|
+
missingSystemPromptFix,
|
|
44
|
+
missingSlashSkillsFix,
|
|
45
|
+
subagentHangFix,
|
|
46
|
+
silentBackgroundTasksFix,
|
|
47
|
+
malformedStreamSyntaxFix,
|
|
48
|
+
activeTurnCollisionFix,
|
|
49
|
+
cancellationLeakFix,
|
|
50
|
+
danglingToolCallsFix,
|
|
51
|
+
staleMcpEndpointsFix,
|
|
52
|
+
orphanedCheckpointsFix,
|
|
53
|
+
droppedHistoryChunksFix,
|
|
54
|
+
noisyStderrLogsFix,
|
|
55
|
+
flattenedModelEffortsFix,
|
|
56
|
+
nonCanonicalModeIdsFix,
|
|
57
|
+
missingUsageMetricsFix,
|
|
58
|
+
missingQuestionFallbackFix,
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fixes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,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,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,sBAAsB;QACtB,sBAAsB;QACtB,qBAAqB;QACrB,eAAe;QACf,wBAAwB;QACxB,wBAAwB;QACxB,sBAAsB;QACtB,mBAAmB;QACnB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,uBAAuB;QACvB,kBAAkB;QAClB,wBAAwB;QACxB,sBAAsB;QACtB,sBAAsB;QACtB,0BAA0B;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Upstream models frequently emit syntax that crashes editor markdown and diagram parsers:
|
|
4
|
+
* unquoted Mermaid labels containing parentheses (`id[Label (Text)]`), raw LaTeX math escapes
|
|
5
|
+
* (`\\le`, `\\pm`), and leaked internal harness tags (`<system_instruction>`, `<task_output>`).
|
|
6
|
+
*
|
|
7
|
+
* Solution:
|
|
8
|
+
* Streams output through an incremental lexer that wraps unquoted Mermaid labels in `["..."]`,
|
|
9
|
+
* translates LaTeX escapes to Unicode equivalents (`≤`, `±`), and strips internal tags across chunk boundaries.
|
|
10
|
+
*/
|
|
11
|
+
import { type AcpFix, type AcpStreamMessage } from "../../core/types.js";
|
|
12
|
+
export declare const HARNESS_TAGS: readonly ["system_message", "system_notification", "system_information", "system_instruction", "task_notification", "task_output", "context", "messaging", "receive_notifications_directly", "wait_for_task", "additional_metadata", "user_request", "user_instruction", "user_information", "scratchpad", "identity", "communication_style", "mcp_servers", "subagents", "artifacts", "ask_question"];
|
|
13
|
+
export declare const HARNESS_LEAK_REGEX: RegExp;
|
|
14
|
+
/**
|
|
15
|
+
* Strips leaked Google harness and subagent internal tags from text in a single pass.
|
|
16
|
+
*/
|
|
17
|
+
export declare function sanitizeText(text: string): string;
|
|
18
|
+
export declare class StreamSanitizer {
|
|
19
|
+
private harnessStack;
|
|
20
|
+
private buffer;
|
|
21
|
+
get inHarnessTag(): boolean;
|
|
22
|
+
reset(): void;
|
|
23
|
+
process(chunk: string): string;
|
|
24
|
+
flush(): string;
|
|
25
|
+
private checkSystemMessage;
|
|
26
|
+
private handleHarnessTag;
|
|
27
|
+
private bufferPotentialTag;
|
|
28
|
+
private processInHarness;
|
|
29
|
+
private handleFullTag;
|
|
30
|
+
}
|
|
31
|
+
export declare function fallbackSanitizeInboundText(msg: AcpStreamMessage): void;
|
|
32
|
+
export declare function sanitizeInboundText(msg: AcpStreamMessage, sanitizer: StreamSanitizer): boolean;
|
|
33
|
+
export declare const STREAM_SANITIZATION_INSTRUCTIONS: readonly string[];
|
|
34
|
+
export declare function createMalformedStreamSyntaxFix(): AcpFix & {
|
|
35
|
+
sanitizer: StreamSanitizer;
|
|
36
|
+
};
|
|
37
|
+
export declare const malformedStreamSyntaxFix: AcpFix & {
|
|
38
|
+
sanitizer: StreamSanitizer;
|
|
39
|
+
};
|
|
40
|
+
export declare const createStreamSanitizationFix: typeof createMalformedStreamSyntaxFix;
|
|
41
|
+
export declare const streamSanitizationFix: AcpFix & {
|
|
42
|
+
sanitizer: StreamSanitizer;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fixes/malformed-stream-syntax/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,YAAY,wYAsBf,CAAC;AAKX,eAAO,MAAM,kBAAkB,QAG9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AA2CD,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,MAAM,CAAM;IAEpB,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAwD9B,KAAK,IAAI,MAAM;IAmBf,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,aAAa;CActB;AAQD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAUvE;AAsBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAc9F;AAgBD,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAG7D,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,MAAM,GAAG;IAAE,SAAS,EAAE,eAAe,CAAA;CAAE,CAwDxF;AAED,eAAO,MAAM,wBAAwB;eA1DmC,eAAe;CA0Df,CAAC;AACzE,eAAO,MAAM,2BAA2B,uCAAiC,CAAC;AAC1E,eAAO,MAAM,qBAAqB;eA5DsC,eAAe;CA4D1B,CAAC"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Upstream models frequently emit syntax that crashes editor markdown and diagram parsers:
|
|
4
|
+
* unquoted Mermaid labels containing parentheses (`id[Label (Text)]`), raw LaTeX math escapes
|
|
5
|
+
* (`\\le`, `\\pm`), and leaked internal harness tags (`<system_instruction>`, `<task_output>`).
|
|
6
|
+
*
|
|
7
|
+
* Solution:
|
|
8
|
+
* Streams output through an incremental lexer that wraps unquoted Mermaid labels in `["..."]`,
|
|
9
|
+
* translates LaTeX escapes to Unicode equivalents (`≤`, `±`), and strips internal tags across chunk boundaries.
|
|
10
|
+
*/
|
|
11
|
+
import { ACP_METHODS, SESSION_UPDATES, isMethod, } from "../../core/types.js";
|
|
12
|
+
import { extractSessionId } from "../../core/session-cache.js";
|
|
13
|
+
export const HARNESS_TAGS = [
|
|
14
|
+
"system_message",
|
|
15
|
+
"system_notification",
|
|
16
|
+
"system_information",
|
|
17
|
+
"system_instruction",
|
|
18
|
+
"task_notification",
|
|
19
|
+
"task_output",
|
|
20
|
+
"context",
|
|
21
|
+
"messaging",
|
|
22
|
+
"receive_notifications_directly",
|
|
23
|
+
"wait_for_task",
|
|
24
|
+
"additional_metadata",
|
|
25
|
+
"user_request",
|
|
26
|
+
"user_instruction",
|
|
27
|
+
"user_information",
|
|
28
|
+
"scratchpad",
|
|
29
|
+
"identity",
|
|
30
|
+
"communication_style",
|
|
31
|
+
"mcp_servers",
|
|
32
|
+
"subagents",
|
|
33
|
+
"artifacts",
|
|
34
|
+
"ask_question",
|
|
35
|
+
];
|
|
36
|
+
const ALL_HARNESS_TAGS = [...HARNESS_TAGS, ...HARNESS_TAGS.map((t) => t.replace(/_/g, "-"))];
|
|
37
|
+
const HARNESS_PATTERN = ALL_HARNESS_TAGS.join("|");
|
|
38
|
+
export const HARNESS_LEAK_REGEX = new RegExp(String.raw `The following is a <SYSTEM_MESSAGE> not actually sent by the user(?:[\s\S]*?<\/SYSTEM_MESSAGE>|[^\n]*\n?)|<\s*(?:${HARNESS_PATTERN})(?:\s+[^>]*)?>(?:[\s\S]*?<\/\s*(?:${HARNESS_PATTERN})\s*>|[\s\S]*$)|<\/?\s*(?:${HARNESS_PATTERN})(?:\s+[^>]*)?>`, "gi");
|
|
39
|
+
/**
|
|
40
|
+
* Strips leaked Google harness and subagent internal tags from text in a single pass.
|
|
41
|
+
*/
|
|
42
|
+
export function sanitizeText(text) {
|
|
43
|
+
return text.replace(HARNESS_LEAK_REGEX, "").trim();
|
|
44
|
+
}
|
|
45
|
+
const HARNESS_SET = new Set(HARNESS_TAGS.map((t) => t.toLowerCase().replace(/[-_]/g, "_")));
|
|
46
|
+
const LOWER_HARNESS_TAGS = HARNESS_TAGS.map((t) => t.toLowerCase().replace(/[-_]/g, "_"));
|
|
47
|
+
function normalizeTagName(name) {
|
|
48
|
+
return name.toLowerCase().replace(/[-_]/g, "_");
|
|
49
|
+
}
|
|
50
|
+
function isHarnessTag(tagName) {
|
|
51
|
+
return HARNESS_SET.has(normalizeTagName(tagName));
|
|
52
|
+
}
|
|
53
|
+
function isPossibleHarnessPrefix(str) {
|
|
54
|
+
const clean = normalizeTagName(str.replace(/^<\/?/, ""));
|
|
55
|
+
if (clean === "")
|
|
56
|
+
return true;
|
|
57
|
+
if (/^[^\sa-zA-Z0-9_]/.test(clean))
|
|
58
|
+
return false;
|
|
59
|
+
return LOWER_HARNESS_TAGS.some((t) => t.startsWith(clean));
|
|
60
|
+
}
|
|
61
|
+
const SYSTEM_MSG_INTRO = "The following is a <SYSTEM_MESSAGE> not actually sent by the user";
|
|
62
|
+
const SYSTEM_MSG_INTRO_LOWER = SYSTEM_MSG_INTRO.toLowerCase();
|
|
63
|
+
const SYSTEM_MSG_MATCH_RE = /The following is a <SYSTEM_MESSAGE> not actually sent by the user[^\n]*\n?/i;
|
|
64
|
+
const FULL_TAG_RE = /^<\s*(\/?)\s*([a-zA-Z0-9_-]+)/;
|
|
65
|
+
function checkBannerPartialPrefix(input) {
|
|
66
|
+
const minPrefixLen = 15;
|
|
67
|
+
if (input.length < minPrefixLen)
|
|
68
|
+
return null;
|
|
69
|
+
const maxLen = Math.min(input.length, SYSTEM_MSG_INTRO.length);
|
|
70
|
+
for (let len = maxLen; len >= minPrefixLen; len--) {
|
|
71
|
+
const startIdx = input.length - len;
|
|
72
|
+
if (input[startIdx]?.toLowerCase() !== "t")
|
|
73
|
+
continue;
|
|
74
|
+
const candidate = input.slice(startIdx).toLowerCase();
|
|
75
|
+
if (SYSTEM_MSG_INTRO_LOWER.startsWith(candidate)) {
|
|
76
|
+
return startIdx;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const ANY_TAG_RE = /<\s*(\/?)\s*([a-zA-Z0-9_-]+)(?:\s+[^>]*)?>/i;
|
|
82
|
+
export class StreamSanitizer {
|
|
83
|
+
harnessStack = [];
|
|
84
|
+
buffer = "";
|
|
85
|
+
get inHarnessTag() {
|
|
86
|
+
return this.harnessStack.length > 0;
|
|
87
|
+
}
|
|
88
|
+
reset() {
|
|
89
|
+
this.harnessStack = [];
|
|
90
|
+
this.buffer = "";
|
|
91
|
+
}
|
|
92
|
+
process(chunk) {
|
|
93
|
+
let input = this.buffer + chunk;
|
|
94
|
+
this.buffer = "";
|
|
95
|
+
let output = "";
|
|
96
|
+
while (input.length > 0) {
|
|
97
|
+
if (this.inHarnessTag) {
|
|
98
|
+
input = this.processInHarness(input);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const sysResult = this.checkSystemMessage(input);
|
|
102
|
+
if (sysResult.matched) {
|
|
103
|
+
output += sysResult.outputPrefix;
|
|
104
|
+
input = sysResult.remainder;
|
|
105
|
+
this.harnessStack.push("system_message");
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const bannerPrefixIdx = checkBannerPartialPrefix(input);
|
|
109
|
+
if (bannerPrefixIdx !== null) {
|
|
110
|
+
output += input.slice(0, bannerPrefixIdx);
|
|
111
|
+
this.buffer = input.slice(bannerPrefixIdx);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
const ltIdx = input.indexOf("<");
|
|
115
|
+
if (ltIdx === -1) {
|
|
116
|
+
output += input;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
if (ltIdx > 0) {
|
|
120
|
+
output += input.slice(0, ltIdx);
|
|
121
|
+
input = input.slice(ltIdx);
|
|
122
|
+
}
|
|
123
|
+
const gtIdx = input.indexOf(">");
|
|
124
|
+
if (gtIdx === -1) {
|
|
125
|
+
if (isPossibleHarnessPrefix(input)) {
|
|
126
|
+
this.buffer = input;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
output += input[0];
|
|
130
|
+
input = input.slice(1);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const res = this.handleFullTag(input, gtIdx);
|
|
134
|
+
output += res.text;
|
|
135
|
+
input = res.remainder;
|
|
136
|
+
}
|
|
137
|
+
return output;
|
|
138
|
+
}
|
|
139
|
+
flush() {
|
|
140
|
+
const remaining = this.buffer;
|
|
141
|
+
this.buffer = "";
|
|
142
|
+
if (this.inHarnessTag) {
|
|
143
|
+
return "";
|
|
144
|
+
}
|
|
145
|
+
if (!remaining) {
|
|
146
|
+
return "";
|
|
147
|
+
}
|
|
148
|
+
const clean = normalizeTagName(remaining.replace(/^<\/?/, ""));
|
|
149
|
+
if (clean !== "" && LOWER_HARNESS_TAGS.some((t) => t.startsWith(clean))) {
|
|
150
|
+
return "";
|
|
151
|
+
}
|
|
152
|
+
if (checkBannerPartialPrefix(remaining) !== null) {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
return remaining;
|
|
156
|
+
}
|
|
157
|
+
checkSystemMessage(input) {
|
|
158
|
+
if (input.includes("SYSTEM_MESSAGE")) {
|
|
159
|
+
const sysMatch = input.match(SYSTEM_MSG_MATCH_RE);
|
|
160
|
+
if (sysMatch && sysMatch.index !== undefined) {
|
|
161
|
+
return {
|
|
162
|
+
outputPrefix: input.slice(0, sysMatch.index),
|
|
163
|
+
remainder: input.slice(sysMatch.index + sysMatch[0].length),
|
|
164
|
+
matched: true,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return { outputPrefix: "", remainder: input, matched: false };
|
|
169
|
+
}
|
|
170
|
+
handleHarnessTag(tagName, isClosing) {
|
|
171
|
+
if (!isHarnessTag(tagName))
|
|
172
|
+
return;
|
|
173
|
+
if (!isClosing) {
|
|
174
|
+
this.harnessStack.push(tagName);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const idx = this.harnessStack.lastIndexOf(tagName);
|
|
178
|
+
if (idx !== -1) {
|
|
179
|
+
this.harnessStack.splice(idx);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.harnessStack.pop();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
bufferPotentialTag(input) {
|
|
186
|
+
const lastLt = input.lastIndexOf("<");
|
|
187
|
+
if (lastLt !== -1 && lastLt >= input.length - 40) {
|
|
188
|
+
const candidate = input.slice(lastLt);
|
|
189
|
+
if (isPossibleHarnessPrefix(candidate)) {
|
|
190
|
+
this.buffer = candidate;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
processInHarness(input) {
|
|
195
|
+
while (input.length > 0) {
|
|
196
|
+
const match = input.match(ANY_TAG_RE);
|
|
197
|
+
if (!match || match.index === undefined) {
|
|
198
|
+
this.bufferPotentialTag(input);
|
|
199
|
+
return "";
|
|
200
|
+
}
|
|
201
|
+
const isClosing = match[1] === "/" || (match[0] !== undefined && match[0].endsWith("/>"));
|
|
202
|
+
const tagName = normalizeTagName(match[2] ?? "");
|
|
203
|
+
const endIdx = match.index + (match[0]?.length ?? 0);
|
|
204
|
+
input = input.slice(endIdx);
|
|
205
|
+
this.handleHarnessTag(tagName, isClosing);
|
|
206
|
+
if (this.harnessStack.length === 0) {
|
|
207
|
+
return input;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return "";
|
|
211
|
+
}
|
|
212
|
+
handleFullTag(input, gtIdx) {
|
|
213
|
+
const fullTag = input.slice(0, gtIdx + 1);
|
|
214
|
+
const match = fullTag.match(FULL_TAG_RE);
|
|
215
|
+
if (match) {
|
|
216
|
+
const isClosing = match[1] === "/" || fullTag.endsWith("/>") || fullTag.trimEnd().endsWith("/>");
|
|
217
|
+
const tagName = normalizeTagName(match[2] ?? "");
|
|
218
|
+
if (isHarnessTag(tagName)) {
|
|
219
|
+
this.handleHarnessTag(tagName, isClosing);
|
|
220
|
+
return { text: "", remainder: input.slice(gtIdx + 1) };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return { text: input[0] ?? "", remainder: input.slice(1) };
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function fallbackSanitizeBlock(block) {
|
|
227
|
+
if (block && typeof block === "object" && "text" in block && typeof block.text === "string") {
|
|
228
|
+
block.text = sanitizeText(block.text);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export function fallbackSanitizeInboundText(msg) {
|
|
232
|
+
if (!isMethod(msg, ACP_METHODS.SESSION_UPDATE))
|
|
233
|
+
return;
|
|
234
|
+
const content = msg.params?.update?.content;
|
|
235
|
+
if (!content)
|
|
236
|
+
return;
|
|
237
|
+
if (Array.isArray(content)) {
|
|
238
|
+
for (const block of content)
|
|
239
|
+
fallbackSanitizeBlock(block);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
fallbackSanitizeBlock(content);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function sanitizeBlock(block, sanitizer) {
|
|
246
|
+
if (block && typeof block === "object" && "text" in block && typeof block.text === "string") {
|
|
247
|
+
block.text = sanitizer.process(block.text);
|
|
248
|
+
return block.text !== "";
|
|
249
|
+
}
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
function extractUpdateContent(msg) {
|
|
253
|
+
if (!isMethod(msg, ACP_METHODS.SESSION_UPDATE))
|
|
254
|
+
return null;
|
|
255
|
+
const update = msg.params?.update;
|
|
256
|
+
if (!update || typeof update !== "object")
|
|
257
|
+
return null;
|
|
258
|
+
const content = update.content;
|
|
259
|
+
if (!content)
|
|
260
|
+
return null;
|
|
261
|
+
const isMessageChunk = update.sessionUpdate === SESSION_UPDATES.AGENT_MESSAGE_CHUNK;
|
|
262
|
+
return { content, isMessageChunk };
|
|
263
|
+
}
|
|
264
|
+
export function sanitizeInboundText(msg, sanitizer) {
|
|
265
|
+
const target = extractUpdateContent(msg);
|
|
266
|
+
if (!target)
|
|
267
|
+
return true;
|
|
268
|
+
let hasNonEmpty = false;
|
|
269
|
+
if (Array.isArray(target.content)) {
|
|
270
|
+
for (const block of target.content) {
|
|
271
|
+
if (sanitizeBlock(block, sanitizer))
|
|
272
|
+
hasNonEmpty = true;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
hasNonEmpty = sanitizeBlock(target.content, sanitizer);
|
|
277
|
+
}
|
|
278
|
+
return !target.isMessageChunk || hasNonEmpty;
|
|
279
|
+
}
|
|
280
|
+
function agentMessageChunk(sessionId, text) {
|
|
281
|
+
return {
|
|
282
|
+
jsonrpc: "2.0",
|
|
283
|
+
method: ACP_METHODS.SESSION_UPDATE,
|
|
284
|
+
params: {
|
|
285
|
+
sessionId,
|
|
286
|
+
update: {
|
|
287
|
+
sessionUpdate: SESSION_UPDATES.AGENT_MESSAGE_CHUNK,
|
|
288
|
+
content: { type: "text", text },
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
export const STREAM_SANITIZATION_INSTRUCTIONS = [
|
|
294
|
+
"Format math using plain Unicode symbols instead of LaTeX.",
|
|
295
|
+
"In Mermaid diagrams, only use supported diagram types: flowchart, sequenceDiagram, stateDiagram-v2, classDiagram, erDiagram, xychart-beta (do not use unsupported types like gantt or gitGraph). Quote node labels containing special characters like parentheses.",
|
|
296
|
+
];
|
|
297
|
+
export function createMalformedStreamSyntaxFix() {
|
|
298
|
+
const sanitizer = new StreamSanitizer();
|
|
299
|
+
let lastSessionId = null;
|
|
300
|
+
return {
|
|
301
|
+
name: "malformed-stream-syntax",
|
|
302
|
+
description: "Sanitizes unquoted Mermaid diagram labels, LaTeX math escapes, and leaked system tags across streaming chunks",
|
|
303
|
+
sanitizer,
|
|
304
|
+
onOutbound(msg) {
|
|
305
|
+
if (isMethod(msg, ACP_METHODS.SESSION_PROMPT) ||
|
|
306
|
+
isMethod(msg, ACP_METHODS.SESSION_CANCEL) ||
|
|
307
|
+
isMethod(msg, ACP_METHODS.SESSION_NEW) ||
|
|
308
|
+
isMethod(msg, ACP_METHODS.SESSION_LOAD)) {
|
|
309
|
+
sanitizer.reset();
|
|
310
|
+
}
|
|
311
|
+
return msg;
|
|
312
|
+
},
|
|
313
|
+
onInbound(msg) {
|
|
314
|
+
if (isMethod(msg, ACP_METHODS.SESSION_UPDATE)) {
|
|
315
|
+
const sessionId = extractSessionId(msg);
|
|
316
|
+
if (sessionId) {
|
|
317
|
+
lastSessionId = sessionId;
|
|
318
|
+
}
|
|
319
|
+
const keep = sanitizeInboundText(msg, sanitizer);
|
|
320
|
+
return keep ? [msg] : [];
|
|
321
|
+
}
|
|
322
|
+
if ("result" in msg && msg.result) {
|
|
323
|
+
const tail = sanitizer.flush();
|
|
324
|
+
sanitizer.reset();
|
|
325
|
+
return tail && lastSessionId ? [agentMessageChunk(lastSessionId, tail), msg] : [msg];
|
|
326
|
+
}
|
|
327
|
+
return [msg];
|
|
328
|
+
},
|
|
329
|
+
onTurnEnd(sessionId) {
|
|
330
|
+
const tail = sanitizer.flush();
|
|
331
|
+
sanitizer.reset();
|
|
332
|
+
return tail ? [agentMessageChunk(sessionId, tail)] : [];
|
|
333
|
+
},
|
|
334
|
+
getSystemInstructions() {
|
|
335
|
+
return STREAM_SANITIZATION_INSTRUCTIONS;
|
|
336
|
+
},
|
|
337
|
+
dispose() {
|
|
338
|
+
sanitizer.reset();
|
|
339
|
+
lastSessionId = null;
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
export const malformedStreamSyntaxFix = createMalformedStreamSyntaxFix();
|
|
344
|
+
export const createStreamSanitizationFix = createMalformedStreamSyntaxFix;
|
|
345
|
+
export const streamSanitizationFix = malformedStreamSyntaxFix;
|
|
346
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/malformed-stream-syntax/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Upstream `agy_acp_server` requires a sibling companion binary (`localharness_external`).
|
|
4
|
+
* When relocated or invoked from an isolated directory without `$ANTIGRAVITY_HARNESS_PATH`
|
|
5
|
+
* explicitly set, spawning or creating a session fails with a fatal exit.
|
|
6
|
+
*
|
|
7
|
+
* Solution:
|
|
8
|
+
* Automatically inspects the binary directory and standard installation directories
|
|
9
|
+
* to locate `localharness_external`, exporting `$ANTIGRAVITY_HARNESS_PATH` on process spawn.
|
|
10
|
+
*/
|
|
11
|
+
import type { AcpFix } from "../../core/types.js";
|
|
12
|
+
/**
|
|
13
|
+
* The harness (`localharness_external`) ships next to the Google server binary.
|
|
14
|
+
* Resolve it relative to the executable command or standard installation paths.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveHarnessPath(cmd?: string): string | undefined;
|
|
17
|
+
export declare const missingLocalharnessFix: AcpFix;
|
|
18
|
+
export declare const harnessResolutionFix: AcpFix;
|
|
19
|
+
export declare function resolveBinaryCommand(): Promise<[string, ...string[]]>;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fixes/missing-localharness/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwClD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBnE;AAED,eAAO,MAAM,sBAAsB,EAAE,MAcpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAyB,CAAC;AAE3D,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAW3E"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Upstream `agy_acp_server` requires a sibling companion binary (`localharness_external`).
|
|
4
|
+
* When relocated or invoked from an isolated directory without `$ANTIGRAVITY_HARNESS_PATH`
|
|
5
|
+
* explicitly set, spawning or creating a session fails with a fatal exit.
|
|
6
|
+
*
|
|
7
|
+
* Solution:
|
|
8
|
+
* Automatically inspects the binary directory and standard installation directories
|
|
9
|
+
* to locate `localharness_external`, exporting `$ANTIGRAVITY_HARNESS_PATH` on process spawn.
|
|
10
|
+
*/
|
|
11
|
+
import fs from "node:fs";
|
|
12
|
+
import os from "node:os";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import { agyCommand, ensureAntigravityBinary } from "../../core/command.js";
|
|
15
|
+
const HARNESS_NAMES = process.platform === "win32"
|
|
16
|
+
? ["localharness_external.exe", "localharness_external", "localharness.exe", "localharness"]
|
|
17
|
+
: ["localharness_external", "localharness", "localharness_external.exe"];
|
|
18
|
+
function findHarnessInDir(dir) {
|
|
19
|
+
for (const name of HARNESS_NAMES) {
|
|
20
|
+
const candidate = path.join(dir, name);
|
|
21
|
+
if (fs.existsSync(candidate))
|
|
22
|
+
return candidate;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function resolveFromCommand(cmd) {
|
|
27
|
+
if (!cmd || !fs.existsSync(cmd))
|
|
28
|
+
return undefined;
|
|
29
|
+
try {
|
|
30
|
+
const real = fs.realpathSync(cmd);
|
|
31
|
+
return findHarnessInDir(path.dirname(real));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function resolveFromSearchDirs() {
|
|
38
|
+
const searchDirs = [
|
|
39
|
+
path.join(os.homedir(), ".local", "share", "antigravity-acp"),
|
|
40
|
+
path.join("/opt", "homebrew", "bin"),
|
|
41
|
+
path.join("/usr", "local", "bin"),
|
|
42
|
+
];
|
|
43
|
+
for (const dir of searchDirs) {
|
|
44
|
+
if (fs.existsSync(dir)) {
|
|
45
|
+
const found = findHarnessInDir(dir);
|
|
46
|
+
if (found)
|
|
47
|
+
return found;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The harness (`localharness_external`) ships next to the Google server binary.
|
|
54
|
+
* Resolve it relative to the executable command or standard installation paths.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveHarnessPath(cmd) {
|
|
57
|
+
const envHarness = process.env.ANTIGRAVITY_HARNESS_PATH?.trim();
|
|
58
|
+
if (envHarness && fs.existsSync(envHarness)) {
|
|
59
|
+
return envHarness;
|
|
60
|
+
}
|
|
61
|
+
const fromCmd = resolveFromCommand(cmd);
|
|
62
|
+
if (fromCmd)
|
|
63
|
+
return fromCmd;
|
|
64
|
+
try {
|
|
65
|
+
const [original] = agyCommand();
|
|
66
|
+
const fromOriginal = resolveFromCommand(original);
|
|
67
|
+
if (fromOriginal)
|
|
68
|
+
return fromOriginal;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore resolution errors
|
|
72
|
+
}
|
|
73
|
+
return resolveFromSearchDirs();
|
|
74
|
+
}
|
|
75
|
+
export const missingLocalharnessFix = {
|
|
76
|
+
name: "missing-localharness",
|
|
77
|
+
description: "Automatically resolves and exports $ANTIGRAVITY_HARNESS_PATH sibling binary",
|
|
78
|
+
onSpawn(env, cmd) {
|
|
79
|
+
const current = env.ANTIGRAVITY_HARNESS_PATH?.trim();
|
|
80
|
+
if (current && fs.existsSync(current)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const harness = resolveHarnessPath(cmd);
|
|
84
|
+
if (harness) {
|
|
85
|
+
env.ANTIGRAVITY_HARNESS_PATH = harness;
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
export const harnessResolutionFix = missingLocalharnessFix;
|
|
90
|
+
export async function resolveBinaryCommand() {
|
|
91
|
+
const [initialCmd, ...args] = agyCommand();
|
|
92
|
+
let cmd = initialCmd;
|
|
93
|
+
if (!fs.existsSync(cmd)) {
|
|
94
|
+
try {
|
|
95
|
+
cmd = await ensureAntigravityBinary();
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error("[refined-antigravity-acp] Failed to auto-download binary:", err);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return [cmd, ...args];
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/missing-localharness/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Upstream system prompts explicitly forbid the model from providing an "Other" option in
|
|
4
|
+
* multiple-choice user prompts (`"Do NOT add an 'Other' option to questions"`), stranding users
|
|
5
|
+
* with no way to enter custom or free-text answers when none of the choices apply.
|
|
6
|
+
*
|
|
7
|
+
* Solution:
|
|
8
|
+
* Injects a prompt override directing the model to always provide an "Other" option for free-text
|
|
9
|
+
* answers, and intercepts inbound `ask_question` tool calls to append a fallback "Other" choice if omitted.
|
|
10
|
+
*/
|
|
11
|
+
import { type AcpFix } from "../../core/types.js";
|
|
12
|
+
export declare const QUESTION_OPTIONS_INSTRUCTIONS: readonly string[];
|
|
13
|
+
export declare const OTHER_OPTION_REGEX: RegExp;
|
|
14
|
+
export interface QuestionItem {
|
|
15
|
+
question?: string;
|
|
16
|
+
options?: string[];
|
|
17
|
+
is_multi_select?: boolean;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface AskQuestionPayload {
|
|
21
|
+
questions?: QuestionItem[];
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
export declare function ensureOtherOption(raw: unknown): {
|
|
25
|
+
modified: boolean;
|
|
26
|
+
result: unknown;
|
|
27
|
+
};
|
|
28
|
+
export declare const missingQuestionFallbackFix: AcpFix;
|
|
29
|
+
export declare const questionOptionsFix: AcpFix;
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fixes/missing-question-fallback/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,MAAM,EAIZ,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAE1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAA4D,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA+BD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAkBtF;AAqDD,eAAO,MAAM,0BAA0B,EAAE,MAYxC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAA6B,CAAC"}
|