poly-weaver 0.4.4 → 0.5.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 (125) hide show
  1. package/dist/agents/implementors/handler.d.ts.map +1 -1
  2. package/dist/agents/implementors/handler.js +7 -2
  3. package/dist/agents/implementors/handler.js.map +1 -1
  4. package/dist/agents/planners/adapter.d.ts.map +1 -1
  5. package/dist/agents/planners/adapter.js +1 -0
  6. package/dist/agents/planners/adapter.js.map +1 -1
  7. package/dist/agents/planners/handler.d.ts.map +1 -1
  8. package/dist/agents/planners/handler.js +7 -2
  9. package/dist/agents/planners/handler.js.map +1 -1
  10. package/dist/agents/planners/types.d.ts +1 -0
  11. package/dist/agents/planners/types.d.ts.map +1 -1
  12. package/dist/agents/reviewers/adapter.d.ts +3 -2
  13. package/dist/agents/reviewers/adapter.d.ts.map +1 -1
  14. package/dist/agents/reviewers/adapter.js +14 -2
  15. package/dist/agents/reviewers/adapter.js.map +1 -1
  16. package/dist/agents/reviewers/dsl.d.ts +11 -1
  17. package/dist/agents/reviewers/dsl.d.ts.map +1 -1
  18. package/dist/agents/reviewers/dsl.js.map +1 -1
  19. package/dist/agents/reviewers/handler.d.ts.map +1 -1
  20. package/dist/agents/reviewers/handler.js +51 -2
  21. package/dist/agents/reviewers/handler.js.map +1 -1
  22. package/dist/agents/reviewers/index.d.ts +3 -3
  23. package/dist/agents/reviewers/index.d.ts.map +1 -1
  24. package/dist/agents/reviewers/index.js +9 -5
  25. package/dist/agents/reviewers/index.js.map +1 -1
  26. package/dist/agents/reviewers/prompts.d.ts +14 -2
  27. package/dist/agents/reviewers/prompts.d.ts.map +1 -1
  28. package/dist/agents/reviewers/prompts.js +106 -2
  29. package/dist/agents/reviewers/prompts.js.map +1 -1
  30. package/dist/agents/reviewers/types.d.ts +19 -1
  31. package/dist/agents/reviewers/types.d.ts.map +1 -1
  32. package/dist/agents/reviewers/types.js.map +1 -1
  33. package/dist/agents/runner.d.ts +9 -0
  34. package/dist/agents/runner.d.ts.map +1 -1
  35. package/dist/agents/runner.js +2 -1
  36. package/dist/agents/runner.js.map +1 -1
  37. package/dist/agents/simplifiers/adapter.d.ts.map +1 -1
  38. package/dist/agents/simplifiers/adapter.js +1 -0
  39. package/dist/agents/simplifiers/adapter.js.map +1 -1
  40. package/dist/agents/simplifiers/handler.d.ts.map +1 -1
  41. package/dist/agents/simplifiers/handler.js +7 -2
  42. package/dist/agents/simplifiers/handler.js.map +1 -1
  43. package/dist/cli.js +9 -1
  44. package/dist/cli.js.map +1 -1
  45. package/dist/flow/built-in/default.d.ts +1 -0
  46. package/dist/flow/built-in/default.d.ts.map +1 -1
  47. package/dist/flow/built-in/default.js +37 -0
  48. package/dist/flow/built-in/default.js.map +1 -1
  49. package/dist/flow/built-in/default.ts +43 -0
  50. package/dist/flow/built-in/why-so-serious.d.ts +1 -0
  51. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -1
  52. package/dist/flow/built-in/why-so-serious.js +37 -0
  53. package/dist/flow/built-in/why-so-serious.js.map +1 -1
  54. package/dist/flow/diagram.d.ts.map +1 -1
  55. package/dist/flow/diagram.js +26 -11
  56. package/dist/flow/diagram.js.map +1 -1
  57. package/dist/flow/dsl.d.ts +7 -0
  58. package/dist/flow/dsl.d.ts.map +1 -1
  59. package/dist/flow/dsl.js +35 -0
  60. package/dist/flow/dsl.js.map +1 -1
  61. package/dist/flow/executor.d.ts.map +1 -1
  62. package/dist/flow/executor.js +17 -0
  63. package/dist/flow/executor.js.map +1 -1
  64. package/dist/flow/types.d.ts +17 -0
  65. package/dist/flow/types.d.ts.map +1 -1
  66. package/dist/flow/types.js.map +1 -1
  67. package/dist/orchestrator.d.ts.map +1 -1
  68. package/dist/orchestrator.js +14 -0
  69. package/dist/orchestrator.js.map +1 -1
  70. package/dist/prompts.d.ts.map +1 -1
  71. package/dist/prompts.js +8 -1
  72. package/dist/prompts.js.map +1 -1
  73. package/dist/providers/claude/completion-plan-mode.d.ts +30 -0
  74. package/dist/providers/claude/completion-plan-mode.d.ts.map +1 -0
  75. package/dist/providers/claude/completion-plan-mode.js +151 -0
  76. package/dist/providers/claude/completion-plan-mode.js.map +1 -0
  77. package/dist/providers/claude/completion.d.ts +9 -68
  78. package/dist/providers/claude/completion.d.ts.map +1 -1
  79. package/dist/providers/claude/completion.js +21 -322
  80. package/dist/providers/claude/completion.js.map +1 -1
  81. package/dist/providers/claude/session.d.ts +24 -4
  82. package/dist/providers/claude/session.d.ts.map +1 -1
  83. package/dist/providers/claude/session.js +90 -15
  84. package/dist/providers/claude/session.js.map +1 -1
  85. package/dist/providers/claude/strategy.d.ts +4 -3
  86. package/dist/providers/claude/strategy.d.ts.map +1 -1
  87. package/dist/providers/claude/strategy.js +8 -10
  88. package/dist/providers/claude/strategy.js.map +1 -1
  89. package/dist/providers/claude/tool-tracking.d.ts +28 -0
  90. package/dist/providers/claude/tool-tracking.d.ts.map +1 -0
  91. package/dist/providers/claude/tool-tracking.js +149 -0
  92. package/dist/providers/claude/tool-tracking.js.map +1 -0
  93. package/dist/providers/codex/strategy.d.ts +3 -1
  94. package/dist/providers/codex/strategy.d.ts.map +1 -1
  95. package/dist/providers/codex/strategy.js +1 -1
  96. package/dist/providers/codex/strategy.js.map +1 -1
  97. package/dist/providers/copilot/strategy.d.ts +3 -1
  98. package/dist/providers/copilot/strategy.d.ts.map +1 -1
  99. package/dist/providers/copilot/strategy.js +1 -1
  100. package/dist/providers/copilot/strategy.js.map +1 -1
  101. package/dist/providers/invoke.js +1 -1
  102. package/dist/providers/invoke.js.map +1 -1
  103. package/dist/providers/types.d.ts +3 -1
  104. package/dist/providers/types.d.ts.map +1 -1
  105. package/dist/user/curate-handler.d.ts +32 -0
  106. package/dist/user/curate-handler.d.ts.map +1 -0
  107. package/dist/user/curate-handler.js +156 -0
  108. package/dist/user/curate-handler.js.map +1 -0
  109. package/dist/user/curate-prompt.d.ts +41 -0
  110. package/dist/user/curate-prompt.d.ts.map +1 -0
  111. package/dist/user/curate-prompt.js +473 -0
  112. package/dist/user/curate-prompt.js.map +1 -0
  113. package/dist/user/dsl.d.ts +1 -0
  114. package/dist/user/dsl.d.ts.map +1 -1
  115. package/dist/user/dsl.js +1 -0
  116. package/dist/user/dsl.js.map +1 -1
  117. package/dist/user/index.d.ts +3 -0
  118. package/dist/user/index.d.ts.map +1 -1
  119. package/dist/user/index.js +2 -0
  120. package/dist/user/index.js.map +1 -1
  121. package/dist/user/prompt.d.ts +11 -0
  122. package/dist/user/prompt.d.ts.map +1 -1
  123. package/dist/user/prompt.js +40 -7
  124. package/dist/user/prompt.js.map +1 -1
  125. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  import { flagIf } from "../types.js";
2
2
  import { versionGte } from "../version.js";
3
- import { ClaudeCompletionStrategy } from "./completion.js";
3
+ import { ClaudePrimaryDetector } from "./completion.js";
4
+ import { ClaudePlanModeDetector } from "./completion-plan-mode.js";
4
5
  import { ClaudeSessionHandler } from "./session.js";
5
6
  export class ClaudeStrategy {
6
7
  name = "claude";
@@ -31,15 +32,12 @@ export class ClaudeStrategy {
31
32
  args.push(prompt);
32
33
  return args;
33
34
  }
34
- createDetector() {
35
- // staleFallbackMs = 15s: only armed once the narrow prefetch pattern
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.
42
- return new ClaudeCompletionStrategy(200, 500, this.planMode.exitToolName, 15_000);
35
+ createDetector(opts) {
36
+ const useNativePlanMode = opts?.planMode === true && this.planMode.nativePlanFile === true;
37
+ if (useNativePlanMode) {
38
+ return new ClaudePlanModeDetector(200, 500, this.planMode.exitToolName, 30_000);
39
+ }
40
+ return new ClaudePrimaryDetector(200, 500);
43
41
  }
44
42
  }
45
43
  //# sourceMappingURL=strategy.js.map
@@ -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,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"}
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,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,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,CAAC,IAA6B;QAC1C,MAAM,iBAAiB,GACrB,IAAI,EAAE,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC;QACnE,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,IAAI,sBAAsB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,MAAM,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { SessionLine } from "../../session/reader.js";
2
+ export interface ToolUseInfo {
3
+ name: string | undefined;
4
+ filePath: string | undefined;
5
+ query: string | undefined;
6
+ useIdx: number;
7
+ resolvedResultIdx: number;
8
+ }
9
+ export interface TrackingResult {
10
+ pendingToolUses: Set<string>;
11
+ pendingAsyncToolUses: Set<string>;
12
+ pendingNonAsyncToolUses: Set<string>;
13
+ resolvedIds: Set<string>;
14
+ perToolUseInfo: Map<string, ToolUseInfo>;
15
+ lastToolActivityIdx: number;
16
+ lastToolResultIdx: number;
17
+ lastAssistantLineIdx: number;
18
+ lastAssistantTextIdx: number;
19
+ lastAssistantStopReason: string | null | undefined;
20
+ awaitingPromisedToolUse: boolean;
21
+ hasTextOutput: boolean;
22
+ sawResolvedToolSearchExitPlanModePrefetch: boolean;
23
+ sawResolvedToolSearchAskUserQuestionPrefetch: boolean;
24
+ }
25
+ export declare function trackPendingToolUses(currentLines: SessionLine[], opts?: {
26
+ ignoredToolNames?: ReadonlySet<string>;
27
+ }): TrackingResult;
28
+ //# sourceMappingURL=tool-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-tracking.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/tool-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAY3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,uBAAuB,EAAE,OAAO,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC,EAAE,OAAO,CAAC;IACnD,4CAA4C,EAAE,OAAO,CAAC;CACvD;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,WAAW,EAAE,EAC3B,IAAI,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAChD,cAAc,CAmKhB"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Resolution signal for any Claude Code tool launched asynchronously
3
+ * (Agent fork/subagent, Bash with run_in_background, Monitor, etc.).
4
+ * The launch-ack `tool_result` for these arrives with
5
+ * `toolUseResult.isAsync === true`; the actual completion lands later as a
6
+ * string user message containing the original `tool_use_id`.
7
+ */
8
+ const TASK_NOTIFICATION_REGEX = /^<task-notification>[\s\S]*?<tool-use-id>([^<]+)<\/tool-use-id>/;
9
+ export function trackPendingToolUses(currentLines, opts) {
10
+ const pendingToolUses = new Set();
11
+ const asyncAcknowledgedIds = new Set();
12
+ const resolvedIds = new Set();
13
+ const resolvedResultIdxByToolUseId = new Map();
14
+ const perToolUseInfo = new Map();
15
+ const ignoredToolNames = opts?.ignoredToolNames;
16
+ let lastToolActivityIdx = -1;
17
+ let lastToolResultIdx = -1;
18
+ let lastAssistantLineIdx = -1;
19
+ let lastAssistantTextIdx = -1;
20
+ let lastAssistantStopReason;
21
+ let hasTextOutput = false;
22
+ const stopReasonToolUseMessages = new Set();
23
+ const messagesWithToolUseBlock = new Set();
24
+ for (let idx = 0; idx < currentLines.length; idx++) {
25
+ const line = currentLines[idx];
26
+ if (line.type === "assistant") {
27
+ const message = line.message;
28
+ if (!message?.content)
29
+ continue;
30
+ lastAssistantLineIdx = idx;
31
+ lastAssistantStopReason = message.stop_reason;
32
+ const messageId = message.id;
33
+ if (messageId && message.stop_reason === "tool_use") {
34
+ stopReasonToolUseMessages.add(messageId);
35
+ }
36
+ for (const block of message.content) {
37
+ if (block.type === "tool_use" && block.id) {
38
+ if (messageId)
39
+ messagesWithToolUseBlock.add(messageId);
40
+ if (ignoredToolNames?.has(block.name ?? "")) {
41
+ continue;
42
+ }
43
+ pendingToolUses.add(block.id);
44
+ lastToolActivityIdx = idx;
45
+ perToolUseInfo.set(block.id, {
46
+ name: block.name,
47
+ filePath: typeof block.input?.file_path === "string"
48
+ ? block.input.file_path
49
+ : undefined,
50
+ query: typeof block.input?.query === "string"
51
+ ? block.input.query
52
+ : undefined,
53
+ useIdx: idx,
54
+ resolvedResultIdx: -1,
55
+ });
56
+ }
57
+ if (block.type === "text" && block.text) {
58
+ hasTextOutput = true;
59
+ lastAssistantTextIdx = idx;
60
+ }
61
+ }
62
+ }
63
+ else if (line.type === "user") {
64
+ const message = line.message;
65
+ if (!message?.content)
66
+ continue;
67
+ if (typeof message.content === "string") {
68
+ const m = TASK_NOTIFICATION_REGEX.exec(message.content);
69
+ if (m) {
70
+ const id = m[1];
71
+ pendingToolUses.delete(id);
72
+ resolvedIds.add(id);
73
+ resolvedResultIdxByToolUseId.set(id, idx);
74
+ lastToolActivityIdx = idx;
75
+ lastToolResultIdx = idx;
76
+ }
77
+ continue;
78
+ }
79
+ const tur = line
80
+ .toolUseResult;
81
+ const isAsyncLaunch = !!tur && tur.isAsync === true;
82
+ for (const block of message.content) {
83
+ if (block.type === "tool_result" && block.tool_use_id) {
84
+ lastToolResultIdx = idx;
85
+ if (isAsyncLaunch) {
86
+ asyncAcknowledgedIds.add(block.tool_use_id);
87
+ lastToolActivityIdx = idx;
88
+ continue;
89
+ }
90
+ pendingToolUses.delete(block.tool_use_id);
91
+ resolvedIds.add(block.tool_use_id);
92
+ resolvedResultIdxByToolUseId.set(block.tool_use_id, idx);
93
+ lastToolActivityIdx = idx;
94
+ }
95
+ }
96
+ }
97
+ }
98
+ for (const [id, info] of perToolUseInfo) {
99
+ if (resolvedIds.has(id))
100
+ pendingToolUses.delete(id);
101
+ info.resolvedResultIdx = resolvedResultIdxByToolUseId.get(id) ?? -1;
102
+ }
103
+ const pendingAsyncToolUses = new Set();
104
+ const pendingNonAsyncToolUses = new Set();
105
+ for (const id of pendingToolUses) {
106
+ if (asyncAcknowledgedIds.has(id)) {
107
+ pendingAsyncToolUses.add(id);
108
+ }
109
+ else {
110
+ pendingNonAsyncToolUses.add(id);
111
+ }
112
+ }
113
+ let awaitingPromisedToolUse = false;
114
+ for (const id of stopReasonToolUseMessages) {
115
+ if (!messagesWithToolUseBlock.has(id)) {
116
+ awaitingPromisedToolUse = true;
117
+ break;
118
+ }
119
+ }
120
+ let sawResolvedToolSearchExitPlanModePrefetch = false;
121
+ let sawResolvedToolSearchAskUserQuestionPrefetch = false;
122
+ for (const info of perToolUseInfo.values()) {
123
+ if (info.name !== "ToolSearch" || info.resolvedResultIdx < 0)
124
+ continue;
125
+ if (info.query?.includes("ExitPlanMode")) {
126
+ sawResolvedToolSearchExitPlanModePrefetch = true;
127
+ }
128
+ if (info.query?.includes("AskUserQuestion")) {
129
+ sawResolvedToolSearchAskUserQuestionPrefetch = true;
130
+ }
131
+ }
132
+ return {
133
+ pendingToolUses,
134
+ pendingAsyncToolUses,
135
+ pendingNonAsyncToolUses,
136
+ resolvedIds,
137
+ perToolUseInfo,
138
+ lastToolActivityIdx,
139
+ lastToolResultIdx,
140
+ lastAssistantLineIdx,
141
+ lastAssistantTextIdx,
142
+ lastAssistantStopReason,
143
+ awaitingPromisedToolUse,
144
+ hasTextOutput,
145
+ sawResolvedToolSearchExitPlanModePrefetch,
146
+ sawResolvedToolSearchAskUserQuestionPrefetch,
147
+ };
148
+ }
149
+ //# sourceMappingURL=tool-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-tracking.js","sourceRoot":"","sources":["../../../src/providers/claude/tool-tracking.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export declare class CodexStrategy implements ProviderStrategy {
9
9
  version: string | undefined;
10
10
  readonly planMode: PlanModeConfig;
11
11
  buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
12
- createDetector(): CodexCompletionStrategy;
12
+ createDetector(_opts?: {
13
+ planMode?: boolean;
14
+ }): CodexCompletionStrategy;
13
15
  }
14
16
  //# sourceMappingURL=strategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA6B;IAC7D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAG/B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBvE,cAAc,IAAI,uBAAuB;CAG1C"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA6B;IAC7D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAG/B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBvE,cAAc,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,uBAAuB;CAGxE"}
@@ -34,7 +34,7 @@ export class CodexStrategy {
34
34
  `${prefix}${promptRef}`,
35
35
  ];
36
36
  }
37
- createDetector() {
37
+ createDetector(_opts) {
38
38
  return new CodexCompletionStrategy(100, 200, this.planMode.exitToolName);
39
39
  }
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,WAAW,CAAC;IAC1B,OAAO,GAAG,OAAO,CAAC;IAClB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,mBAAmB,EAAE,CAAC;IAC7D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,cAAc;KAC7B,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,kEAAkE;QAClE,uEAAuE;QACvE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,+DAA+D;YAC/D,OAAO;gBACL,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,4CAA4C,CAAC;gBAClE,QAAQ;gBACR,IAAI,CAAC,eAAe;gBACpB,SAAS;aACV,CAAC;QACJ,CAAC;QAED,qEAAqE;QACrE,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,4CAA4C,CAAC;YAClE,GAAG,MAAM,GAAG,SAAS,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/codex/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,WAAW,CAAC;IAC1B,OAAO,GAAG,OAAO,CAAC;IAClB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,mBAAmB,EAAE,CAAC;IAC7D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,cAAc;KAC7B,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,kEAAkE;QAClE,uEAAuE;QACvE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,+DAA+D;YAC/D,OAAO;gBACL,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,4CAA4C,CAAC;gBAClE,QAAQ;gBACR,IAAI,CAAC,eAAe;gBACpB,SAAS;aACV,CAAC;QACJ,CAAC;QAED,qEAAqE;QACrE,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,4CAA4C,CAAC;YAClE,GAAG,MAAM,GAAG,SAAS,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAA8B;QAC3C,OAAO,IAAI,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -9,6 +9,8 @@ export declare class CopilotStrategy implements ProviderStrategy {
9
9
  version: string | undefined;
10
10
  readonly planMode: PlanModeConfig;
11
11
  buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
12
- createDetector(): CopilotCompletionDetector;
12
+ createDetector(_opts?: {
13
+ planMode?: boolean;
14
+ }): CopilotCompletionDetector;
13
15
  }
14
16
  //# sourceMappingURL=strategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,OAAO,aAAa;IAC7B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA+B;IAC/D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAI/B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BvE,cAAc,IAAI,yBAAyB;CAG5C"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,OAAO,aAAa;IAC7B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA+B;IAC/D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAI/B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BvE,cAAc,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,yBAAyB;CAG1E"}
@@ -41,7 +41,7 @@ export class CopilotStrategy {
41
41
  const prefix = opts.promptPrefix ?? "";
42
42
  return ["-i", `${prefix}${promptRef}`, ...flagIf(opts.yolo, "--allow-all")];
43
43
  }
44
- createDetector() {
44
+ createDetector(_opts) {
45
45
  return new CopilotCompletionDetector(100, 200, this.planMode.exitToolName);
46
46
  }
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,oBAAoB,CAAC;IACnC,OAAO,GAAG,SAAS,CAAC;IACpB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,qBAAqB,EAAE,CAAC;IAC/D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,wEAAwE;QACxE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO;gBACL,UAAU;gBACV,IAAI,CAAC,eAAe;gBACpB,IAAI;gBACJ,SAAS;gBACT,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;YACvC,OAAO;gBACL,YAAY,IAAI,CAAC,SAAS,EAAE;gBAC5B,IAAI;gBACJ,GAAG,MAAM,GAAG,SAAS,EAAE;gBACvB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;CACF"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,oBAAoB,CAAC;IACnC,OAAO,GAAG,SAAS,CAAC;IACpB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,qBAAqB,EAAE,CAAC;IAC/D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,wEAAwE;QACxE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO;gBACL,UAAU;gBACV,IAAI,CAAC,eAAe;gBACpB,IAAI;gBACJ,SAAS;gBACT,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;YACvC,OAAO;gBACL,YAAY,IAAI,CAAC,SAAS,EAAE;gBAC5B,IAAI;gBACJ,GAAG,MAAM,GAAG,SAAS,EAAE;gBACvB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,cAAc,CAAC,KAA8B;QAC3C,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;CACF"}
@@ -35,7 +35,7 @@ export async function invoke(provider, prompt, workdir) {
35
35
  cwd: workdir,
36
36
  interactive: false,
37
37
  });
38
- const detector = strategy.createDetector();
38
+ const detector = strategy.createDetector({ planMode: false });
39
39
  handle.onData((data) => detector.onPtyData(data));
40
40
  try {
41
41
  const sessionFile = predictedFile
@@ -1 +1 @@
1
- {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/providers/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAmC,EACnC,MAAc,EACd,OAAe;IAEf,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEtE,uCAAuC;IACvC,IAAI,oBAAwC,CAAC;IAC7C,IAAI,aAAiC,CAAC;IACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACxC,oBAAoB,GAAG,UAAU,EAAE,CAAC;QACpC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;QAC/D,aAAa;YACX,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI;QACJ,GAAG,EAAE,OAAO;QACZ,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa;YAC/B,CAAC,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnB,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/providers/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAmC,EACnC,MAAc,EACd,OAAe;IAEf,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEtE,uCAAuC;IACvC,IAAI,oBAAwC,CAAC;IAC7C,IAAI,aAAiC,CAAC;IACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACxC,oBAAoB,GAAG,UAAU,EAAE,CAAC;QACpC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;QAC/D,aAAa;YACX,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI;QACJ,GAAG,EAAE,OAAO;QACZ,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa;YAC/B,CAAC,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnB,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -118,7 +118,9 @@ export interface ProviderStrategy {
118
118
  */
119
119
  buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
120
120
  /** Create a new CompletionDetector for this provider. */
121
- createDetector(): CompletionDetector;
121
+ createDetector(opts?: {
122
+ planMode?: boolean;
123
+ }): CompletionDetector;
122
124
  }
123
125
  /**
124
126
  * Watches a session file and PTY output to detect when an agent turn is complete.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { BaseStep, StepContext, StepSignal, RetryFn, RoleHandler } from "../flow/types.js";
2
+ import type { ReviewVerdict } from "../agents/reviewers/types.js";
3
+ import type { CuratePromptHandler, CurateDecisionRecord } from "./curate-prompt.js";
4
+ export interface UserDecisionsSidecar {
5
+ decisions: Array<{
6
+ index: number;
7
+ decision: "keep" | "drop" | "revise";
8
+ comment?: string;
9
+ issue: {
10
+ description: string;
11
+ category?: string;
12
+ severity?: string;
13
+ };
14
+ }>;
15
+ }
16
+ /**
17
+ * RoleHandler for the `user:curate-verdict` step.
18
+ *
19
+ * Reads the current verdict, presents it to the user as a checklist, and
20
+ * produces:
21
+ * - an *overwritten* verdict artifact with curated issues, and
22
+ * - a `userDecisions` sidecar artifact embedding the per-issue decisions
23
+ * (with full issue snapshots so downstream reviewers can match by content
24
+ * when array indices have drifted across cycles).
25
+ */
26
+ export declare class CurateVerdictRoleHandler implements RoleHandler {
27
+ private prompt;
28
+ constructor(prompt: CuratePromptHandler);
29
+ execute(step: BaseStep, ctx: StepContext, _retry: RetryFn): Promise<StepSignal>;
30
+ }
31
+ export declare function buildCuratedVerdict(verdict: ReviewVerdict, decisions: CurateDecisionRecord[]): ReviewVerdict;
32
+ //# sourceMappingURL=curate-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curate-handler.d.ts","sourceRoot":"","sources":["../../src/user/curate-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,OAAO,EACP,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;QACrC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACtE,CAAC,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,qBAAa,wBAAyB,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAEzC,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,UAAU,CAAC;CAkHvB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,oBAAoB,EAAE,GAChC,aAAa,CAyBf"}
@@ -0,0 +1,156 @@
1
+ import { writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { appendClarifications } from "../prompts.js";
4
+ import { TASK } from "../flow/types.js";
5
+ /**
6
+ * RoleHandler for the `user:curate-verdict` step.
7
+ *
8
+ * Reads the current verdict, presents it to the user as a checklist, and
9
+ * produces:
10
+ * - an *overwritten* verdict artifact with curated issues, and
11
+ * - a `userDecisions` sidecar artifact embedding the per-issue decisions
12
+ * (with full issue snapshots so downstream reviewers can match by content
13
+ * when array indices have drifted across cycles).
14
+ */
15
+ export class CurateVerdictRoleHandler {
16
+ prompt;
17
+ constructor(prompt) {
18
+ this.prompt = prompt;
19
+ }
20
+ async execute(step, ctx, _retry) {
21
+ const verdictKey = step.reads.verdict;
22
+ if (!verdictKey)
23
+ throw new Error("CurateVerdictRoleHandler: verdict read missing");
24
+ const verdict = ctx.artifacts.getData(verdictKey);
25
+ if (!verdict || (verdict.issues?.length ?? 0) === 0) {
26
+ return { kind: "continue" };
27
+ }
28
+ // Non-TTY guard: treat every issue as keep, write sidecar, leave verdict unchanged.
29
+ let result;
30
+ if (!process.stdin.isTTY) {
31
+ result = {
32
+ decisions: verdict.issues.map((_, index) => ({ index, decision: "keep" })),
33
+ };
34
+ }
35
+ else {
36
+ result = await this.prompt.prompt(verdict);
37
+ }
38
+ // Defensive: a `revise` without a non-empty comment cannot drive the
39
+ // sub-loop forward (the sub-loop's `until` predicate gates exit on the
40
+ // presence of revise comments). Downgrade any such record to "keep" so
41
+ // the sidecar never contains an actionless revise.
42
+ result = {
43
+ decisions: result.decisions.map((d) => {
44
+ if (d.decision === "revise" && !d.comment?.trim()) {
45
+ return { index: d.index, decision: "keep" };
46
+ }
47
+ return d;
48
+ }),
49
+ };
50
+ const taskClarifications = result.decisions.flatMap((d) => {
51
+ if (d.decision === "keep")
52
+ return [];
53
+ const issue = verdict.issues[d.index];
54
+ if (!issue)
55
+ return [];
56
+ if (d.decision === "revise") {
57
+ return [{
58
+ type: "comment",
59
+ text: `Regarding the reviewer concern "${issue.description}": ${d.comment?.trim()}.`,
60
+ }];
61
+ }
62
+ return [{
63
+ type: "comment",
64
+ text: `The reviewer concern "${issue.description}" has been waived; do not raise it again in any form.`,
65
+ }];
66
+ });
67
+ if (taskClarifications.length > 0) {
68
+ const taskArtifact = ctx.artifacts.get(TASK);
69
+ const taskContent = taskArtifact?.text ?? "";
70
+ const appended = appendClarifications(taskContent, taskClarifications, ctx.nextClarificationNumber);
71
+ ctx.nextClarificationNumber = appended.nextNumber;
72
+ ctx.artifacts.set(TASK, {
73
+ ...(taskArtifact ?? {}),
74
+ text: appended.content,
75
+ file: taskArtifact?.file,
76
+ });
77
+ if (taskArtifact?.file) {
78
+ await writeFile(taskArtifact.file, appended.content, "utf-8");
79
+ }
80
+ }
81
+ const curated = buildCuratedVerdict(verdict, result.decisions);
82
+ const verdictWriteKey = step.writes.verdict ?? verdictKey;
83
+ const verdictFile = join(ctx.sessionDir, "verdict.json");
84
+ const curatedJson = JSON.stringify(curated, null, 2);
85
+ await writeFile(verdictFile, curatedJson, "utf-8");
86
+ ctx.artifacts.set(verdictWriteKey, {
87
+ file: verdictFile,
88
+ data: curated,
89
+ text: curatedJson,
90
+ meta: { source: "reviewer" },
91
+ });
92
+ const decisionsKey = step.writes.userDecisions;
93
+ if (decisionsKey) {
94
+ const sidecar = {
95
+ decisions: result.decisions.map((d) => {
96
+ const issue = verdict.issues[d.index];
97
+ const issueSnapshot = {
98
+ description: issue.description,
99
+ };
100
+ if (issue.category != null)
101
+ issueSnapshot.category = issue.category;
102
+ if (issue.severity != null)
103
+ issueSnapshot.severity = issue.severity;
104
+ const rec = {
105
+ index: d.index,
106
+ decision: d.decision,
107
+ issue: issueSnapshot,
108
+ };
109
+ if (d.decision === "revise" && d.comment) {
110
+ rec.comment = d.comment;
111
+ }
112
+ return rec;
113
+ }),
114
+ };
115
+ const decisionsFile = join(ctx.sessionDir, "user-decisions.json");
116
+ const decisionsJson = JSON.stringify(sidecar, null, 2);
117
+ await writeFile(decisionsFile, decisionsJson, "utf-8");
118
+ ctx.artifacts.set(decisionsKey, {
119
+ file: decisionsFile,
120
+ data: sidecar,
121
+ text: decisionsJson,
122
+ });
123
+ }
124
+ return { kind: "continue" };
125
+ }
126
+ }
127
+ export function buildCuratedVerdict(verdict, decisions) {
128
+ const curatedIssues = [];
129
+ for (const d of decisions) {
130
+ const original = verdict.issues[d.index];
131
+ if (!original)
132
+ continue;
133
+ if (d.decision === "drop")
134
+ continue;
135
+ if (d.decision === "keep") {
136
+ if (d.comment) {
137
+ curatedIssues.push({
138
+ ...original,
139
+ description: `${original.description}\n\n[user comment] ${d.comment}`,
140
+ });
141
+ }
142
+ else {
143
+ curatedIssues.push({ ...original });
144
+ }
145
+ continue;
146
+ }
147
+ // revise: keep as-is in the curated verdict (the comment goes through the sidecar)
148
+ curatedIssues.push({ ...original });
149
+ }
150
+ return {
151
+ approved: curatedIssues.length === 0,
152
+ issues: curatedIssues,
153
+ summary: verdict.summary,
154
+ };
155
+ }
156
+ //# sourceMappingURL=curate-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curate-handler.js","sourceRoot":"","sources":["../../src/user/curate-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { ReviewVerdict } from "../agents/reviewers/types.js";
2
+ export type CurateDecision = "keep" | "drop" | "revise";
3
+ export interface CurateDecisionRecord {
4
+ index: number;
5
+ decision: CurateDecision;
6
+ comment?: string;
7
+ }
8
+ export interface CurateResult {
9
+ /** One record per input issue, same length, same order. */
10
+ decisions: CurateDecisionRecord[];
11
+ }
12
+ export interface CuratePromptHandler {
13
+ prompt(verdict: ReviewVerdict): Promise<CurateResult>;
14
+ }
15
+ /**
16
+ * Wrap `text` to fit within `width` visible columns per output line.
17
+ *
18
+ * Splits on `\n` first (paragraph breaks), then word-wraps each paragraph,
19
+ * then hard-breaks any single token that exceeds `width`. Empty input
20
+ * returns `[""]` so callers always emit at least one row. Width measurement
21
+ * uses `visibleLength` so wide emoji and ANSI styling are accounted for.
22
+ *
23
+ * Contract: every returned string satisfies `visibleLength(line) <= width`.
24
+ */
25
+ export declare function wrapToWidth(text: string, width: number): string[];
26
+ /**
27
+ * Clip a single (possibly ANSI-styled) line so its visible width does not
28
+ * exceed `width`. ANSI escape sequences pass through with zero width. If the
29
+ * input contained any ANSI styling and we had to truncate, append `reset`
30
+ * so styling does not bleed past the clipped boundary.
31
+ *
32
+ * Contract: returned string satisfies `visibleLength(line) <= width`.
33
+ */
34
+ export declare function clipToWidth(line: string, width: number): string;
35
+ export declare class CurateVerdictPrompt implements CuratePromptHandler {
36
+ readonly onDumpRequested?: (() => void) | undefined;
37
+ constructor(onDumpRequested?: (() => void) | undefined);
38
+ prompt(verdict: ReviewVerdict): Promise<CurateResult>;
39
+ private runChecklist;
40
+ }
41
+ //# sourceMappingURL=curate-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curate-prompt.d.ts","sourceRoot":"","sources":["../../src/user/curate-prompt.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwDjE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B/D;AAED,qBAAa,mBAAoB,YAAW,mBAAmB;IACjD,QAAQ,CAAC,eAAe,CAAC,GAAE,MAAM,IAAI;gBAA5B,eAAe,CAAC,GAAE,MAAM,IAAI,aAAA;IAE3C,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAS3D,OAAO,CAAC,YAAY;CA2VrB"}