poly-weaver 0.4.2 → 0.4.4
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/providers/base-completion.d.ts +9 -0
- package/dist/providers/base-completion.d.ts.map +1 -1
- package/dist/providers/base-completion.js +10 -0
- package/dist/providers/base-completion.js.map +1 -1
- package/dist/providers/claude/completion.d.ts +29 -0
- package/dist/providers/claude/completion.d.ts.map +1 -1
- package/dist/providers/claude/completion.js +111 -6
- package/dist/providers/claude/completion.js.map +1 -1
- package/dist/providers/claude/strategy.d.ts.map +1 -1
- package/dist/providers/claude/strategy.js +6 -3
- package/dist/providers/claude/strategy.js.map +1 -1
- package/package.json +1 -1
|
@@ -34,6 +34,15 @@ export declare abstract class AbstractCompletionDetector implements CompletionDe
|
|
|
34
34
|
/** Tracks the last time the session file grew (independent of PTY data). */
|
|
35
35
|
protected lastFileGrowthTime: number;
|
|
36
36
|
protected lastParsedLines: SessionLine[];
|
|
37
|
+
/**
|
|
38
|
+
* Lines that lived in the session file *before* `lineOffset` — i.e. content
|
|
39
|
+
* from prior turns of a resumed session. Empty for fresh sessions
|
|
40
|
+
* (`lineOffset === 0`). Refreshed each poll from the same `readSessionFile`
|
|
41
|
+
* call that produces `lastParsedLines`, so subclasses can read it without
|
|
42
|
+
* extra IO. Subclasses should treat this as session-scoped context and
|
|
43
|
+
* keep turn-scoped state derived from `lastParsedLines`.
|
|
44
|
+
*/
|
|
45
|
+
protected priorLines: SessionLine[];
|
|
37
46
|
constructor(pollMs?: number, quietMs?: number, staleFallbackMs?: number);
|
|
38
47
|
start(sessionFile: string, lineOffset?: number): Promise<string>;
|
|
39
48
|
onPtyData(_data: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-completion.d.ts","sourceRoot":"","sources":["../../src/providers/base-completion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,0BAA2B,YAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"base-completion.d.ts","sourceRoot":"","sources":["../../src/providers/base-completion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,0BAA2B,YAAW,kBAAkB;IAwB1E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAzBlC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAK;IAEvB,SAAS,CAAC,YAAY,SAAK;IAC3B,4EAA4E;IAC5E,SAAS,CAAC,kBAAkB,SAAK;IACjC,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,CAAM;IAC9C;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,CAAM;gBAGtB,MAAM,SAAM,EACZ,OAAO,SAAM,EACb,eAAe,SAAW;IAG7C,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB3D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,OAAO,IAAI,IAAI;IAUf,qEAAqE;IACrE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAE3D,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,OAAO;IAElD,iEAAiE;IACjE,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;IAEhE;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;IAI5D;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,OAAO;IAIhD;;;;;;;;OAQG;IACH,SAAS,CAAC,oBAAoB,IAAI,OAAO;YAM3B,IAAI;CAmDnB"}
|
|
@@ -34,6 +34,15 @@ export class AbstractCompletionDetector {
|
|
|
34
34
|
/** Tracks the last time the session file grew (independent of PTY data). */
|
|
35
35
|
lastFileGrowthTime = 0;
|
|
36
36
|
lastParsedLines = [];
|
|
37
|
+
/**
|
|
38
|
+
* Lines that lived in the session file *before* `lineOffset` — i.e. content
|
|
39
|
+
* from prior turns of a resumed session. Empty for fresh sessions
|
|
40
|
+
* (`lineOffset === 0`). Refreshed each poll from the same `readSessionFile`
|
|
41
|
+
* call that produces `lastParsedLines`, so subclasses can read it without
|
|
42
|
+
* extra IO. Subclasses should treat this as session-scoped context and
|
|
43
|
+
* keep turn-scoped state derived from `lastParsedLines`.
|
|
44
|
+
*/
|
|
45
|
+
priorLines = [];
|
|
37
46
|
constructor(pollMs = 500, quietMs = 500, staleFallbackMs = Infinity) {
|
|
38
47
|
this.pollMs = pollMs;
|
|
39
48
|
this.quietMs = quietMs;
|
|
@@ -124,6 +133,7 @@ export class AbstractCompletionDetector {
|
|
|
124
133
|
this.lastFileSize = s.size;
|
|
125
134
|
this.lastDataTime = Date.now();
|
|
126
135
|
this.lastFileGrowthTime = Date.now();
|
|
136
|
+
this.priorLines = this.lineOffset > 0 ? lines.slice(0, this.lineOffset) : [];
|
|
127
137
|
this.lastParsedLines = lines.slice(this.lineOffset);
|
|
128
138
|
this.analyzeLines(this.lastParsedLines);
|
|
129
139
|
// Allow providers to short-circuit (e.g. Codex on task_complete)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-completion.js","sourceRoot":"","sources":["../../src/providers/base-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAgB,0BAA0B;
|
|
1
|
+
{"version":3,"file":"base-completion.js","sourceRoot":"","sources":["../../src/providers/base-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAgB,0BAA0B;IAwB3B;IACA;IACA;IAzBX,QAAQ,GAAG,KAAK,CAAC;IACjB,SAAS,GAA0C,IAAI,CAAC;IACxD,OAAO,GAAoC,IAAI,CAAC;IAChD,MAAM,GAAkC,IAAI,CAAC;IAC7C,YAAY,GAAG,CAAC,CAAC;IACjB,WAAW,GAAG,EAAE,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IAEb,YAAY,GAAG,CAAC,CAAC;IAC3B,4EAA4E;IAClE,kBAAkB,GAAG,CAAC,CAAC;IACvB,eAAe,GAAkB,EAAE,CAAC;IAC9C;;;;;;;OAOG;IACO,UAAU,GAAkB,EAAE,CAAC;IAEzC,YACmB,SAAS,GAAG,EACZ,UAAU,GAAG,EACb,kBAAkB,QAAQ;QAF1B,WAAM,GAAN,MAAM,CAAM;QACZ,YAAO,GAAP,OAAO,CAAM;QACb,oBAAe,GAAf,eAAe,CAAW;IAC1C,CAAC;IAEJ,KAAK,CAAC,WAAmB,EAAE,UAAU,GAAG,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAErC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAaD;;;;OAIG;IACO,kBAAkB,CAAC,MAAqB;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACO,2BAA2B;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACO,oBAAoB;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uEAAuE;IAE/D,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,+EAA+E;gBAC/E,IACE,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAC9C,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACxD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,wEAAwE;gBACxE,uEAAuE;gBACvE,mDAAmD;qBAC9C,IACH,IAAI,CAAC,eAAe,GAAG,QAAQ;oBAC/B,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAC5D,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACxD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEtD,yEAAyE;YACzE,2EAA2E;YAC3E,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAExC,iEAAiE;YACjE,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -35,6 +35,35 @@ import { AbstractCompletionDetector } from "../base-completion.js";
|
|
|
35
35
|
* off it is safe. The arm is deliberately narrow to avoid the
|
|
36
36
|
* extended-thinking false-positives that forced removal of the broad
|
|
37
37
|
* staleness fallback (commit `9ccbd83`).
|
|
38
|
+
*
|
|
39
|
+
* The ToolSearch prefetch is a **session-scoped** fact: once Claude has
|
|
40
|
+
* resolved `ToolSearch(select:ExitPlanMode)` anywhere in the session, the
|
|
41
|
+
* schema stays loaded for every subsequent turn. So the prefetch check
|
|
42
|
+
* inspects both the current turn (`currentLines`) and the pre-resume
|
|
43
|
+
* prefix (`priorLines`). The plan-file Write/Edit half remains
|
|
44
|
+
* **turn-scoped** — iteration N must do its own edit before the fallback
|
|
45
|
+
* arms, so a stale plan from iteration 1 cannot resolve iteration 2
|
|
46
|
+
* before any work happens.
|
|
47
|
+
*
|
|
48
|
+
* **AskUserQuestion suppressor (session-wide)**: `AskUserQuestion` is
|
|
49
|
+
* also a deferred tool, and Claude often pre-loads it alongside
|
|
50
|
+
* `ExitPlanMode` in a single bundled query (e.g.
|
|
51
|
+
* `select:ExitPlanMode,AskUserQuestion`). When a question end-state is
|
|
52
|
+
* loaded, the fallback's premise — "the only valid next call after a plan
|
|
53
|
+
* Write is `ExitPlanMode`, so 15 s of silence must be the PTY bug" —
|
|
54
|
+
* stops holding: Claude can legitimately spend >15 s thinking before
|
|
55
|
+
* emitting `AskUserQuestion`. So we track resolved
|
|
56
|
+
* `ToolSearch(query.includes("AskUserQuestion"))` invocations the same
|
|
57
|
+
* session-scoped way and refuse to arm the fallback when one has been
|
|
58
|
+
* seen. The schema, once loaded, persists for the rest of the session, so
|
|
59
|
+
* this suppressor is **session-wide**: any resolved AskUserQuestion
|
|
60
|
+
* prefetch (current turn or any prior turn) disables the fallback for
|
|
61
|
+
* every subsequent turn of that Claude session, including resumed
|
|
62
|
+
* planner iterations. That is an accepted trade — see dump
|
|
63
|
+
* `2026-05-02T17-53-03-277Z` for the bug this fixes, and KNOWN-ISSUES.md
|
|
64
|
+
* §"Deferred ExitPlanMode Stall" for the regression on dump
|
|
65
|
+
* `2026-05-01T16-10-11-526Z` we explicitly accept (recoverable Ctrl+C
|
|
66
|
+
* hang vs. silently dropped clarification round).
|
|
38
67
|
*/
|
|
39
68
|
export declare class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
40
69
|
private readonly exitToolName?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAcnE
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAcnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,qBAAa,wBAAyB,SAAQ,0BAA0B;IAWpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAThC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,MAAM,SAAM,EACZ,OAAO,SAAM,EACI,YAAY,CAAC,EAAE,MAAM,YAAA,EACtC,eAAe,SAAW;IAK5B,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI;IA0OzD,SAAS,CAAC,oBAAoB,IAAI,OAAO;cAItB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;cAIlD,oBAAoB,IAAI,OAAO;cAI/B,2BAA2B,IAAI,OAAO;IAQzD,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;CAGxD"}
|
|
@@ -45,6 +45,35 @@ const TASK_NOTIFICATION_REGEX = /^<task-notification>[\s\S]*?<tool-use-id>([^<]+
|
|
|
45
45
|
* off it is safe. The arm is deliberately narrow to avoid the
|
|
46
46
|
* extended-thinking false-positives that forced removal of the broad
|
|
47
47
|
* staleness fallback (commit `9ccbd83`).
|
|
48
|
+
*
|
|
49
|
+
* The ToolSearch prefetch is a **session-scoped** fact: once Claude has
|
|
50
|
+
* resolved `ToolSearch(select:ExitPlanMode)` anywhere in the session, the
|
|
51
|
+
* schema stays loaded for every subsequent turn. So the prefetch check
|
|
52
|
+
* inspects both the current turn (`currentLines`) and the pre-resume
|
|
53
|
+
* prefix (`priorLines`). The plan-file Write/Edit half remains
|
|
54
|
+
* **turn-scoped** — iteration N must do its own edit before the fallback
|
|
55
|
+
* arms, so a stale plan from iteration 1 cannot resolve iteration 2
|
|
56
|
+
* before any work happens.
|
|
57
|
+
*
|
|
58
|
+
* **AskUserQuestion suppressor (session-wide)**: `AskUserQuestion` is
|
|
59
|
+
* also a deferred tool, and Claude often pre-loads it alongside
|
|
60
|
+
* `ExitPlanMode` in a single bundled query (e.g.
|
|
61
|
+
* `select:ExitPlanMode,AskUserQuestion`). When a question end-state is
|
|
62
|
+
* loaded, the fallback's premise — "the only valid next call after a plan
|
|
63
|
+
* Write is `ExitPlanMode`, so 15 s of silence must be the PTY bug" —
|
|
64
|
+
* stops holding: Claude can legitimately spend >15 s thinking before
|
|
65
|
+
* emitting `AskUserQuestion`. So we track resolved
|
|
66
|
+
* `ToolSearch(query.includes("AskUserQuestion"))` invocations the same
|
|
67
|
+
* session-scoped way and refuse to arm the fallback when one has been
|
|
68
|
+
* seen. The schema, once loaded, persists for the rest of the session, so
|
|
69
|
+
* this suppressor is **session-wide**: any resolved AskUserQuestion
|
|
70
|
+
* prefetch (current turn or any prior turn) disables the fallback for
|
|
71
|
+
* every subsequent turn of that Claude session, including resumed
|
|
72
|
+
* planner iterations. That is an accepted trade — see dump
|
|
73
|
+
* `2026-05-02T17-53-03-277Z` for the bug this fixes, and KNOWN-ISSUES.md
|
|
74
|
+
* §"Deferred ExitPlanMode Stall" for the regression on dump
|
|
75
|
+
* `2026-05-01T16-10-11-526Z` we explicitly accept (recoverable Ctrl+C
|
|
76
|
+
* hang vs. silently dropped clarification round).
|
|
48
77
|
*/
|
|
49
78
|
export class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
50
79
|
exitToolName;
|
|
@@ -81,9 +110,11 @@ export class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
|
81
110
|
const messagesWithToolUseBlock = new Set();
|
|
82
111
|
// Track the tool_use IDs that participate in the deferred-ExitPlanMode
|
|
83
112
|
// dance, so we can flip `planExitPrefetchComplete` once both have their
|
|
84
|
-
// matching tool_result.
|
|
113
|
+
// matching tool_result. AskUserQuestion prefetches are tracked
|
|
114
|
+
// separately as a session-wide suppressor.
|
|
85
115
|
const planFileWriteIds = new Set();
|
|
86
116
|
const exitPlanModePrefetchIds = new Set();
|
|
117
|
+
const askUserQuestionPrefetchIds = new Set();
|
|
87
118
|
for (let idx = 0; idx < currentLines.length; idx++) {
|
|
88
119
|
const line = currentLines[idx];
|
|
89
120
|
if (line.type === "assistant") {
|
|
@@ -113,11 +144,19 @@ export class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
|
113
144
|
CLAUDE_PLAN_FILE_PATH_REGEX.test(block.input.file_path)) {
|
|
114
145
|
planFileWriteIds.add(block.id);
|
|
115
146
|
}
|
|
116
|
-
// ToolSearch pre-loading the ExitPlanMode schema — the other
|
|
147
|
+
// ToolSearch pre-loading the ExitPlanMode schema — the other
|
|
148
|
+
// half. A bundled query like `select:ExitPlanMode,AskUserQuestion`
|
|
149
|
+
// hits both branches: it both arms the ExitPlanMode half and
|
|
150
|
+
// disqualifies the fallback below via the AskUserQuestion
|
|
151
|
+
// suppressor.
|
|
117
152
|
if (block.name === "ToolSearch" &&
|
|
118
|
-
typeof block.input?.query === "string"
|
|
119
|
-
block.input.query.includes("ExitPlanMode")) {
|
|
120
|
-
|
|
153
|
+
typeof block.input?.query === "string") {
|
|
154
|
+
if (block.input.query.includes("ExitPlanMode")) {
|
|
155
|
+
exitPlanModePrefetchIds.add(block.id);
|
|
156
|
+
}
|
|
157
|
+
if (block.input.query.includes("AskUserQuestion")) {
|
|
158
|
+
askUserQuestionPrefetchIds.add(block.id);
|
|
159
|
+
}
|
|
121
160
|
}
|
|
122
161
|
}
|
|
123
162
|
if (block.type === "text" && block.text) {
|
|
@@ -182,8 +221,32 @@ export class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
|
182
221
|
break;
|
|
183
222
|
}
|
|
184
223
|
}
|
|
224
|
+
let sawResolvedAskUserQuestionPrefetch = false;
|
|
225
|
+
for (const id of askUserQuestionPrefetchIds) {
|
|
226
|
+
if (resolvedIds.has(id)) {
|
|
227
|
+
sawResolvedAskUserQuestionPrefetch = true;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Prefetch is session-scoped: a resolved ToolSearch(ExitPlanMode) in any
|
|
232
|
+
// prior turn keeps the schema loaded for the current turn too. Only
|
|
233
|
+
// scan `priorLines` if the current slice did not already observe one,
|
|
234
|
+
// since the in-slice scan is strictly more authoritative (same data).
|
|
235
|
+
// The same session-scoped reasoning applies to the AskUserQuestion
|
|
236
|
+
// suppressor: a resolved AskUserQuestion prefetch from any prior turn
|
|
237
|
+
// disables the fallback for every later turn of the session.
|
|
238
|
+
if (this.priorLines.length > 0) {
|
|
239
|
+
if (!sawResolvedExitPlanModePrefetch) {
|
|
240
|
+
sawResolvedExitPlanModePrefetch = didResolvePrefetchFor(this.priorLines, "ExitPlanMode");
|
|
241
|
+
}
|
|
242
|
+
if (!sawResolvedAskUserQuestionPrefetch) {
|
|
243
|
+
sawResolvedAskUserQuestionPrefetch = didResolvePrefetchFor(this.priorLines, "AskUserQuestion");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
185
246
|
this.planExitPrefetchComplete =
|
|
186
|
-
sawResolvedPlanFileWrite &&
|
|
247
|
+
sawResolvedPlanFileWrite &&
|
|
248
|
+
sawResolvedExitPlanModePrefetch &&
|
|
249
|
+
!sawResolvedAskUserQuestionPrefetch;
|
|
187
250
|
// A message whose stop_reason is "tool_use" is guaranteed to contain at
|
|
188
251
|
// least one tool_use block. If we have not yet observed any tool_use
|
|
189
252
|
// block from such a message, the message is still being written to
|
|
@@ -239,4 +302,46 @@ export class ClaudeCompletionStrategy extends AbstractCompletionDetector {
|
|
|
239
302
|
return extractClaudeResponse(lines);
|
|
240
303
|
}
|
|
241
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* Scan a slice of session lines for a resolved
|
|
307
|
+
* `ToolSearch({query: includes(needle)})` invocation. Used to detect whether
|
|
308
|
+
* a deferred-tool schema was loaded in any prior turn of a resumed Claude
|
|
309
|
+
* session — both for the `ExitPlanMode` arming half of the prefetch fallback
|
|
310
|
+
* and for the `AskUserQuestion` session-wide suppressor.
|
|
311
|
+
*/
|
|
312
|
+
function didResolvePrefetchFor(lines, needle) {
|
|
313
|
+
const prefetchIds = new Set();
|
|
314
|
+
const resolvedIds = new Set();
|
|
315
|
+
for (const line of lines) {
|
|
316
|
+
if (line.type === "assistant") {
|
|
317
|
+
const message = line.message;
|
|
318
|
+
if (!message?.content)
|
|
319
|
+
continue;
|
|
320
|
+
for (const block of message.content) {
|
|
321
|
+
if (block.type === "tool_use" &&
|
|
322
|
+
block.id &&
|
|
323
|
+
block.name === "ToolSearch" &&
|
|
324
|
+
typeof block.input?.query === "string" &&
|
|
325
|
+
block.input.query.includes(needle)) {
|
|
326
|
+
prefetchIds.add(block.id);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else if (line.type === "user") {
|
|
331
|
+
const message = line.message;
|
|
332
|
+
if (!message?.content || typeof message.content === "string")
|
|
333
|
+
continue;
|
|
334
|
+
for (const block of message.content) {
|
|
335
|
+
if (block.type === "tool_result" && block.tool_use_id) {
|
|
336
|
+
resolvedIds.add(block.tool_use_id);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
for (const id of prefetchIds) {
|
|
342
|
+
if (resolvedIds.has(id))
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
242
347
|
//# sourceMappingURL=completion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/providers/claude/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,uBAAuB,GAC3B,iEAAiE,CAAC;AAEpE
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/providers/claude/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,qBAAa,cAAe,YAAW,gBAAgB;IACrD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,OAAO,YAAY;IAC5B,QAAQ,CAAC,UAAU,aAAa;IAChC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA8B;IAC9D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IAExC,IAAI,QAAQ,IAAI,cAAc,CAO7B;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcvE,cAAc,IAAI,wBAAwB;
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,qBAAa,cAAe,YAAW,gBAAgB;IACrD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,OAAO,YAAY;IAC5B,QAAQ,CAAC,UAAU,aAAa;IAChC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA8B;IAC9D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IAExC,IAAI,QAAQ,IAAI,cAAc,CAO7B;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcvE,cAAc,IAAI,wBAAwB;CAU3C"}
|
|
@@ -33,9 +33,12 @@ export class ClaudeStrategy {
|
|
|
33
33
|
}
|
|
34
34
|
createDetector() {
|
|
35
35
|
// staleFallbackMs = 15s: only armed once the narrow prefetch pattern
|
|
36
|
-
// (plan-file Write + ToolSearch(select:ExitPlanMode)) has been observed
|
|
37
|
-
//
|
|
38
|
-
//
|
|
36
|
+
// (plan-file Write + ToolSearch(select:ExitPlanMode)) has been observed
|
|
37
|
+
// AND no AskUserQuestion prefetch has resolved anywhere in the session.
|
|
38
|
+
// The AskUserQuestion suppressor exists because a question end-state
|
|
39
|
+
// legitimately needs >15 s of "thinking" silence — see
|
|
40
|
+
// ClaudeCompletionStrategy.isStaleFallbackReady and the doc comment on
|
|
41
|
+
// the strategy class for the full reasoning.
|
|
39
42
|
return new ClaudeCompletionStrategy(200, 500, this.planMode.exitToolName, 15_000);
|
|
40
43
|
}
|
|
41
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,aAAa,CAAC;IAC5B,OAAO,GAAG,QAAQ,CAAC;IACnB,UAAU,GAAG,SAAS,CAAC;IACvB,OAAO,GAAmB,IAAI,oBAAoB,EAAE,CAAC;IAC9D,OAAO,GAAuB,SAAS,CAAC;IAExC,IAAI,QAAQ;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB;YAC3D,YAAY,EAAE,cAAc;YAC5B,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,MAAM,IAAI,GAAa;YACrB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAgC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,qEAAqE;QACrE,
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/claude/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,aAAa,CAAC;IAC5B,OAAO,GAAG,QAAQ,CAAC;IACnB,UAAU,GAAG,SAAS,CAAC;IACvB,OAAO,GAAmB,IAAI,oBAAoB,EAAE,CAAC;IAC9D,OAAO,GAAuB,SAAS,CAAC;IAExC,IAAI,QAAQ;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB;YAC3D,YAAY,EAAE,cAAc;YAC5B,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,MAAM,IAAI,GAAa;YACrB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAgC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,qEAAqE;QACrE,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,uDAAuD;QACvD,uEAAuE;QACvE,6CAA6C;QAC7C,OAAO,IAAI,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;CACF"}
|