poly-weaver 0.7.1 → 0.8.1

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 (232) hide show
  1. package/dist/agents/implementors/handler.d.ts.map +1 -1
  2. package/dist/agents/implementors/handler.js +2 -1
  3. package/dist/agents/implementors/handler.js.map +1 -1
  4. package/dist/agents/planners/handler.d.ts.map +1 -1
  5. package/dist/agents/planners/handler.js +2 -1
  6. package/dist/agents/planners/handler.js.map +1 -1
  7. package/dist/agents/reviewers/handler.d.ts.map +1 -1
  8. package/dist/agents/reviewers/handler.js +2 -1
  9. package/dist/agents/reviewers/handler.js.map +1 -1
  10. package/dist/agents/runner.d.ts +25 -0
  11. package/dist/agents/runner.d.ts.map +1 -1
  12. package/dist/agents/runner.js +63 -1
  13. package/dist/agents/runner.js.map +1 -1
  14. package/dist/agents/simplifiers/handler.d.ts.map +1 -1
  15. package/dist/agents/simplifiers/handler.js +2 -1
  16. package/dist/agents/simplifiers/handler.js.map +1 -1
  17. package/dist/ansi.d.ts +21 -0
  18. package/dist/ansi.d.ts.map +1 -1
  19. package/dist/ansi.js +45 -0
  20. package/dist/ansi.js.map +1 -1
  21. package/dist/app-header.d.ts +16 -0
  22. package/dist/app-header.d.ts.map +1 -0
  23. package/dist/app-header.js +74 -0
  24. package/dist/app-header.js.map +1 -0
  25. package/dist/cli.js +81 -59
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config.d.ts +1 -0
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +6 -0
  30. package/dist/config.js.map +1 -1
  31. package/dist/dump/collector.d.ts +2 -1
  32. package/dist/dump/collector.d.ts.map +1 -1
  33. package/dist/dump/collector.js +12 -0
  34. package/dist/dump/collector.js.map +1 -1
  35. package/dist/dump/hotkey.d.ts +9 -30
  36. package/dist/dump/hotkey.d.ts.map +1 -1
  37. package/dist/dump/hotkey.js +15 -158
  38. package/dist/dump/hotkey.js.map +1 -1
  39. package/dist/dump/pty-tail-buffer.d.ts +25 -0
  40. package/dist/dump/pty-tail-buffer.d.ts.map +1 -0
  41. package/dist/dump/pty-tail-buffer.js +48 -0
  42. package/dist/dump/pty-tail-buffer.js.map +1 -0
  43. package/dist/dump/service.d.ts +3 -2
  44. package/dist/dump/service.d.ts.map +1 -1
  45. package/dist/dump/service.js +6 -1
  46. package/dist/dump/service.js.map +1 -1
  47. package/dist/dump/types.d.ts +13 -0
  48. package/dist/dump/types.d.ts.map +1 -1
  49. package/dist/dump/types.js.map +1 -1
  50. package/dist/flow/built-in/default-factory.d.ts +21 -0
  51. package/dist/flow/built-in/default-factory.d.ts.map +1 -0
  52. package/dist/flow/built-in/default-factory.js +155 -0
  53. package/dist/flow/built-in/default-factory.js.map +1 -0
  54. package/dist/flow/built-in/default.d.ts +4 -4
  55. package/dist/flow/built-in/default.d.ts.map +1 -1
  56. package/dist/flow/built-in/default.js +3 -141
  57. package/dist/flow/built-in/default.js.map +1 -1
  58. package/dist/flow/built-in/default.ts +5 -169
  59. package/dist/flow/built-in/why-so-serious-factory.d.ts +16 -0
  60. package/dist/flow/built-in/why-so-serious-factory.d.ts.map +1 -0
  61. package/dist/flow/built-in/why-so-serious-factory.js +187 -0
  62. package/dist/flow/built-in/why-so-serious-factory.js.map +1 -0
  63. package/dist/flow/built-in/why-so-serious.d.ts +3 -2
  64. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -1
  65. package/dist/flow/built-in/why-so-serious.js +3 -164
  66. package/dist/flow/built-in/why-so-serious.js.map +1 -1
  67. package/dist/flow/custom/AUTHORING.md +13 -0
  68. package/dist/flow/custom/load.d.ts +16 -1
  69. package/dist/flow/custom/load.d.ts.map +1 -1
  70. package/dist/flow/custom/load.js +69 -18
  71. package/dist/flow/custom/load.js.map +1 -1
  72. package/dist/flow/dsl.js +1 -1
  73. package/dist/flow/dsl.js.map +1 -1
  74. package/dist/flow/executor.d.ts.map +1 -1
  75. package/dist/flow/executor.js +52 -9
  76. package/dist/flow/executor.js.map +1 -1
  77. package/dist/flow/types.d.ts +24 -2
  78. package/dist/flow/types.d.ts.map +1 -1
  79. package/dist/flow/types.js.map +1 -1
  80. package/dist/flow-editor/tui.d.ts.map +1 -1
  81. package/dist/flow-editor/tui.js +9 -18
  82. package/dist/flow-editor/tui.js.map +1 -1
  83. package/dist/orchestrator.d.ts +43 -0
  84. package/dist/orchestrator.d.ts.map +1 -1
  85. package/dist/orchestrator.js +230 -92
  86. package/dist/orchestrator.js.map +1 -1
  87. package/dist/providers/base-completion.d.ts +18 -0
  88. package/dist/providers/base-completion.d.ts.map +1 -1
  89. package/dist/providers/base-completion.js +29 -0
  90. package/dist/providers/base-completion.js.map +1 -1
  91. package/dist/providers/claude/completion-plan-mode.d.ts +9 -1
  92. package/dist/providers/claude/completion-plan-mode.d.ts.map +1 -1
  93. package/dist/providers/claude/completion-plan-mode.js +58 -4
  94. package/dist/providers/claude/completion-plan-mode.js.map +1 -1
  95. package/dist/providers/claude/plan-mode-pty-monitor.d.ts +51 -0
  96. package/dist/providers/claude/plan-mode-pty-monitor.d.ts.map +1 -0
  97. package/dist/providers/claude/plan-mode-pty-monitor.js +97 -0
  98. package/dist/providers/claude/plan-mode-pty-monitor.js.map +1 -0
  99. package/dist/providers/claude/strategy.d.ts.map +1 -1
  100. package/dist/providers/claude/strategy.js +6 -1
  101. package/dist/providers/claude/strategy.js.map +1 -1
  102. package/dist/providers/claude/tool-tracking.d.ts +1 -0
  103. package/dist/providers/claude/tool-tracking.d.ts.map +1 -1
  104. package/dist/providers/claude/tool-tracking.js +3 -0
  105. package/dist/providers/claude/tool-tracking.js.map +1 -1
  106. package/dist/providers/codex/plan-mode-activator.d.ts +23 -0
  107. package/dist/providers/codex/plan-mode-activator.d.ts.map +1 -0
  108. package/dist/providers/codex/plan-mode-activator.js +207 -0
  109. package/dist/providers/codex/plan-mode-activator.js.map +1 -0
  110. package/dist/providers/codex/session.d.ts +1 -0
  111. package/dist/providers/codex/session.d.ts.map +1 -1
  112. package/dist/providers/codex/session.js +35 -18
  113. package/dist/providers/codex/session.js.map +1 -1
  114. package/dist/providers/codex/strategy.d.ts +2 -1
  115. package/dist/providers/codex/strategy.d.ts.map +1 -1
  116. package/dist/providers/codex/strategy.js +17 -13
  117. package/dist/providers/codex/strategy.js.map +1 -1
  118. package/dist/providers/copilot/session.d.ts.map +1 -1
  119. package/dist/providers/copilot/session.js +11 -20
  120. package/dist/providers/copilot/session.js.map +1 -1
  121. package/dist/providers/types.d.ts +76 -0
  122. package/dist/providers/types.d.ts.map +1 -1
  123. package/dist/providers/types.js.map +1 -1
  124. package/dist/pty/spawn.d.ts.map +1 -1
  125. package/dist/pty/spawn.js +6 -1
  126. package/dist/pty/spawn.js.map +1 -1
  127. package/dist/pty/types.d.ts +7 -2
  128. package/dist/pty/types.d.ts.map +1 -1
  129. package/dist/resume-tui.d.ts +52 -0
  130. package/dist/resume-tui.d.ts.map +1 -0
  131. package/dist/resume-tui.js +344 -0
  132. package/dist/resume-tui.js.map +1 -0
  133. package/dist/session/flow-snapshot.d.ts +14 -0
  134. package/dist/session/flow-snapshot.d.ts.map +1 -0
  135. package/dist/session/flow-snapshot.js +28 -0
  136. package/dist/session/flow-snapshot.js.map +1 -0
  137. package/dist/session/list.d.ts +16 -0
  138. package/dist/session/list.d.ts.map +1 -0
  139. package/dist/session/list.js +89 -0
  140. package/dist/session/list.js.map +1 -0
  141. package/dist/session/locator.d.ts +15 -0
  142. package/dist/session/locator.d.ts.map +1 -1
  143. package/dist/session/locator.js +46 -27
  144. package/dist/session/locator.js.map +1 -1
  145. package/dist/session/lock.d.ts +26 -0
  146. package/dist/session/lock.d.ts.map +1 -0
  147. package/dist/session/lock.js +95 -0
  148. package/dist/session/lock.js.map +1 -0
  149. package/dist/session/manifest.d.ts +80 -0
  150. package/dist/session/manifest.d.ts.map +1 -0
  151. package/dist/session/manifest.js +2 -0
  152. package/dist/session/manifest.js.map +1 -0
  153. package/dist/session/persistence.d.ts +19 -0
  154. package/dist/session/persistence.d.ts.map +1 -0
  155. package/dist/session/persistence.js +68 -0
  156. package/dist/session/persistence.js.map +1 -0
  157. package/dist/session/process-start-time.d.ts +17 -0
  158. package/dist/session/process-start-time.d.ts.map +1 -0
  159. package/dist/session/process-start-time.js +99 -0
  160. package/dist/session/process-start-time.js.map +1 -0
  161. package/dist/session/restore.d.ts +31 -0
  162. package/dist/session/restore.d.ts.map +1 -0
  163. package/dist/session/restore.js +111 -0
  164. package/dist/session/restore.js.map +1 -0
  165. package/dist/session/resume.d.ts +5 -0
  166. package/dist/session/resume.d.ts.map +1 -0
  167. package/dist/session/resume.js +109 -0
  168. package/dist/session/resume.js.map +1 -0
  169. package/dist/session/session-store.d.ts +43 -0
  170. package/dist/session/session-store.d.ts.map +1 -0
  171. package/dist/session/session-store.js +134 -0
  172. package/dist/session/session-store.js.map +1 -0
  173. package/dist/startup-tui.d.ts +10 -11
  174. package/dist/startup-tui.d.ts.map +1 -1
  175. package/dist/startup-tui.js +25 -108
  176. package/dist/startup-tui.js.map +1 -1
  177. package/dist/status-bar.js +1 -26
  178. package/dist/status-bar.js.map +1 -1
  179. package/dist/terminal/host.d.ts +22 -9
  180. package/dist/terminal/host.d.ts.map +1 -1
  181. package/dist/terminal/host.js +67 -78
  182. package/dist/terminal/host.js.map +1 -1
  183. package/dist/terminal/input-router.d.ts +24 -103
  184. package/dist/terminal/input-router.d.ts.map +1 -1
  185. package/dist/terminal/input-router.js +63 -364
  186. package/dist/terminal/input-router.js.map +1 -1
  187. package/dist/terminal/key-event-source.d.ts +52 -0
  188. package/dist/terminal/key-event-source.d.ts.map +1 -0
  189. package/dist/terminal/key-event-source.js +31 -0
  190. package/dist/terminal/key-event-source.js.map +1 -0
  191. package/dist/terminal/key-to-bytes.d.ts +11 -0
  192. package/dist/terminal/key-to-bytes.d.ts.map +1 -0
  193. package/dist/terminal/key-to-bytes.js +81 -0
  194. package/dist/terminal/key-to-bytes.js.map +1 -0
  195. package/dist/terminal/koffi-loader.d.ts +14 -0
  196. package/dist/terminal/koffi-loader.d.ts.map +1 -1
  197. package/dist/terminal/koffi-loader.js.map +1 -1
  198. package/dist/terminal/render.d.ts +1 -2
  199. package/dist/terminal/render.d.ts.map +1 -1
  200. package/dist/terminal/render.js +1 -30
  201. package/dist/terminal/render.js.map +1 -1
  202. package/dist/terminal/stdin-byte-source.d.ts +27 -0
  203. package/dist/terminal/stdin-byte-source.d.ts.map +1 -0
  204. package/dist/terminal/stdin-byte-source.js +92 -0
  205. package/dist/terminal/stdin-byte-source.js.map +1 -0
  206. package/dist/terminal/win32-console-mode.d.ts.map +1 -1
  207. package/dist/terminal/win32-console-mode.js.map +1 -1
  208. package/dist/terminal/win32-console-source.d.ts +26 -0
  209. package/dist/terminal/win32-console-source.d.ts.map +1 -0
  210. package/dist/terminal/win32-console-source.js +275 -0
  211. package/dist/terminal/win32-console-source.js.map +1 -0
  212. package/dist/terminal/win32-key-translator.d.ts +26 -0
  213. package/dist/terminal/win32-key-translator.d.ts.map +1 -0
  214. package/dist/terminal/win32-key-translator.js +87 -0
  215. package/dist/terminal/win32-key-translator.js.map +1 -0
  216. package/dist/terminal-input.d.ts +10 -0
  217. package/dist/terminal-input.d.ts.map +1 -1
  218. package/dist/terminal-input.js +132 -113
  219. package/dist/terminal-input.js.map +1 -1
  220. package/dist/user/host-curate-prompt.d.ts +2 -1
  221. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  222. package/dist/user/host-curate-prompt.js +13 -11
  223. package/dist/user/host-curate-prompt.js.map +1 -1
  224. package/dist/user/host-prompt.d.ts +4 -1
  225. package/dist/user/host-prompt.d.ts.map +1 -1
  226. package/dist/user/host-prompt.js +24 -6
  227. package/dist/user/host-prompt.js.map +1 -1
  228. package/dist/user/prompt.d.ts +7 -9
  229. package/dist/user/prompt.d.ts.map +1 -1
  230. package/dist/user/prompt.js +14 -23
  231. package/dist/user/prompt.js.map +1 -1
  232. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { posix as posixPath } from "node:path";
1
2
  import { AbstractCompletionDetector } from "../base-completion.js";
2
3
  import { CLAUDE_PLAN_FILE_PATH_REGEX, extractClaudeResponse, } from "./session.js";
3
4
  import { trackPendingToolUses } from "./tool-tracking.js";
@@ -10,6 +11,7 @@ import { trackPendingToolUses } from "./tool-tracking.js";
10
11
  */
11
12
  export class ClaudePlanModeDetector extends AbstractCompletionDetector {
12
13
  exitToolName;
14
+ ptyMonitor;
13
15
  pendingToolUses = new Set();
14
16
  pendingNonAsyncToolUses = new Set();
15
17
  exitToolCalled = false;
@@ -18,11 +20,21 @@ export class ClaudePlanModeDetector extends AbstractCompletionDetector {
18
20
  sawResolvedAskUserQuestionPrefetch = false;
19
21
  lastRelevantToolResultIdx = -1;
20
22
  lastResolvedPlanFileWriteResultIdx = -1;
23
+ lastResolvedPlanFileWritePath;
21
24
  lastToolResultIdx = -1;
22
25
  lastAssistantLineIdx = -1;
23
- constructor(pollMs = 200, quietMs = 500, exitToolName = "ExitPlanMode", staleFallbackMs = 30_000) {
26
+ constructor(pollMs = 200, quietMs = 500, exitToolName = "ExitPlanMode", staleFallbackMs = 180_000, ptyMonitor) {
24
27
  super(pollMs, quietMs, staleFallbackMs);
25
28
  this.exitToolName = exitToolName;
29
+ this.ptyMonitor = ptyMonitor;
30
+ }
31
+ onPtyData(data) {
32
+ super.onPtyData(data);
33
+ this.ptyMonitor?.feed(data);
34
+ }
35
+ dispose() {
36
+ this.ptyMonitor?.dispose();
37
+ super.dispose();
26
38
  }
27
39
  analyzeLines(currentLines) {
28
40
  const tracking = trackPendingToolUses(currentLines, {
@@ -38,14 +50,18 @@ export class ClaudePlanModeDetector extends AbstractCompletionDetector {
38
50
  tracking.sawResolvedToolSearchAskUserQuestionPrefetch;
39
51
  this.lastRelevantToolResultIdx = -1;
40
52
  this.lastResolvedPlanFileWriteResultIdx = -1;
53
+ this.lastResolvedPlanFileWritePath = undefined;
41
54
  this.lastToolResultIdx = tracking.lastToolResultIdx;
42
55
  this.lastAssistantLineIdx = tracking.lastAssistantLineIdx;
43
56
  for (const info of tracking.perToolUseInfo.values()) {
44
57
  if (info.resolvedResultIdx < 0)
45
58
  continue;
46
- const isPlanFileSelfRead = info.name === "Read" &&
59
+ const isPlanFileSelfRead = (info.name === "Read" &&
47
60
  typeof info.filePath === "string" &&
48
- CLAUDE_PLAN_FILE_PATH_REGEX.test(info.filePath);
61
+ CLAUDE_PLAN_FILE_PATH_REGEX.test(info.filePath)) ||
62
+ (info.name === "Bash" &&
63
+ typeof info.command === "string" &&
64
+ CLAUDE_PLAN_FILE_PATH_REGEX.test(info.command));
49
65
  if (info.name !== "ToolSearch" && !isPlanFileSelfRead) {
50
66
  this.lastRelevantToolResultIdx = Math.max(this.lastRelevantToolResultIdx, info.resolvedResultIdx);
51
67
  }
@@ -54,7 +70,10 @@ export class ClaudePlanModeDetector extends AbstractCompletionDetector {
54
70
  CLAUDE_PLAN_FILE_PATH_REGEX.test(info.filePath);
55
71
  if (isPlanFileWrite) {
56
72
  this.sawResolvedPlanFileWrite = true;
57
- this.lastResolvedPlanFileWriteResultIdx = Math.max(this.lastResolvedPlanFileWriteResultIdx, info.resolvedResultIdx);
73
+ if (info.resolvedResultIdx >= this.lastResolvedPlanFileWriteResultIdx) {
74
+ this.lastResolvedPlanFileWriteResultIdx = info.resolvedResultIdx;
75
+ this.lastResolvedPlanFileWritePath = info.filePath;
76
+ }
58
77
  }
59
78
  }
60
79
  if (this.priorLines.length > 0) {
@@ -72,6 +91,40 @@ export class ClaudePlanModeDetector extends AbstractCompletionDetector {
72
91
  shouldShortCircuit(_lines) {
73
92
  return this.exitToolCalled && this.pendingNonAsyncToolUses.size === 0;
74
93
  }
94
+ isSecondarySignalReady() {
95
+ if (!this.ptyMonitor)
96
+ return false;
97
+ const jsonlBase = this.resolvedPlanFileBasename();
98
+ if (!jsonlBase)
99
+ return false;
100
+ const match = this.ptyMonitor.scanCurrent();
101
+ if (!match)
102
+ return false;
103
+ // Basename equality AND-gate — load-bearing false-positive guard.
104
+ // `lastResolvedPlanFileWritePath` is derived strictly from `lastParsedLines`
105
+ // (current turn), so a prior-turn screen replay with a different plan
106
+ // filename cannot match a current-turn JSONL artifact.
107
+ if (jsonlBase !== match.footerBasename)
108
+ return false;
109
+ // Ordering invariant — identical to `isStaleFallbackReady`'s guard.
110
+ // The latest plan-file write must be ≥ latest non-ToolSearch /
111
+ // non-plan-self-read tool result, so a stale earlier-in-turn write
112
+ // followed by other tool work cannot fire this arm.
113
+ if (this.lastRelevantToolResultIdx >= 0 &&
114
+ this.lastResolvedPlanFileWriteResultIdx < this.lastRelevantToolResultIdx) {
115
+ return false;
116
+ }
117
+ return true;
118
+ }
119
+ onSecondarySignalResolved() {
120
+ const basename = this.resolvedPlanFileBasename() ?? "<unknown>";
121
+ console.error(`[poly-weaver] Claude plan-mode secondary signal fired (basename=${basename})`);
122
+ }
123
+ resolvedPlanFileBasename() {
124
+ return this.lastResolvedPlanFileWritePath
125
+ ? posixPath.basename(this.lastResolvedPlanFileWritePath.replace(/\\/g, "/"))
126
+ : undefined;
127
+ }
75
128
  isStaleFallbackReady() {
76
129
  if (this.pendingToolUses.size > 0)
77
130
  return false;
@@ -91,6 +144,7 @@ export class ClaudePlanModeDetector extends AbstractCompletionDetector {
91
144
  }
92
145
  shouldSuppressPtyTimerReset() {
93
146
  return ((this.exitToolCalled && this.pendingNonAsyncToolUses.size === 0) ||
147
+ this.isSecondarySignalReady() ||
94
148
  this.isStaleFallbackReady());
95
149
  }
96
150
  extractResponse(lines) {
@@ -1 +1 @@
1
- {"version":3,"file":"completion-plan-mode.js","sourceRoot":"","sources":["../../../src/providers/claude/completion-plan-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion-plan-mode.js","sourceRoot":"","sources":["../../../src/providers/claude/completion-plan-mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Header line that Claude renders above the plan-preview dialog (full line
3
+ * collapsed by VT row-join — whitespace tolerated). Stable since 2.1.74.
4
+ */
5
+ export declare const HEADER_V1: RegExp;
6
+ /**
7
+ * Footer line — the dialog's right-hand "ctrl-g to edit in <editor> · path"
8
+ * affordance. The basename capture group `([^\\/\s]+?\.md)` returns just
9
+ * the trailing plan-file segment (works on both Windows backslash and POSIX
10
+ * forward-slash paths the FOOTER may render).
11
+ */
12
+ export declare const FOOTER_V1: RegExp;
13
+ export interface PlanModePtyPattern {
14
+ header: RegExp;
15
+ footer: RegExp;
16
+ }
17
+ /**
18
+ * Resolve the highest-precedence pattern entry whose `minVersion` is
19
+ * satisfied by `version`. Returns `null` when `version` is undefined or
20
+ * predates every entry — callers degrade gracefully to JSONL-only
21
+ * completion detection.
22
+ */
23
+ export declare function getPlanModePtyPattern(version: string | undefined): PlanModePtyPattern | null;
24
+ export interface PlanModePtyMatch {
25
+ /** Basename of the plan file captured by FOOTER's `([^\\/\s]+?\.md)` group. */
26
+ footerBasename: string;
27
+ }
28
+ /**
29
+ * VT-backed pattern detector that watches the Claude plan-preview dialog.
30
+ *
31
+ * The monitor captures every post-spawn byte into a headless `VirtualTerminal`
32
+ * (no latching, no activation gate) and is queried on demand from the
33
+ * detector's poll loop. The "current turn" boundary lives on the JSONL side
34
+ * (via the detector's basename equality + ordering guards), not on the PTY
35
+ * side, so prior-turn screen replays from a resumed session cannot falsely
36
+ * resolve the current turn unless the current turn's JSONL independently
37
+ * agrees.
38
+ */
39
+ export declare class ClaudePlanModePtyMonitor {
40
+ private readonly patterns;
41
+ private readonly vt;
42
+ private disposed;
43
+ private feedSeq;
44
+ private lastScanSeq;
45
+ private lastScanResult;
46
+ constructor(patterns: PlanModePtyPattern);
47
+ feed(data: string): void;
48
+ scanCurrent(): PlanModePtyMatch | null;
49
+ dispose(): void;
50
+ }
51
+ //# sourceMappingURL=plan-mode-pty-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-mode-pty-monitor.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/plan-mode-pty-monitor.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,SAAS,QAC8F,CAAC;AAErH;;;;;GAKG;AACH,eAAO,MAAM,SAAS,QACoE,CAAC;AAY3F,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,kBAAkB,GAAG,IAAI,CAS3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IAUvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IATrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyC;IAC5D,OAAO,CAAC,QAAQ,CAAS;IAIzB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,cAAc,CAAiC;gBAE1B,QAAQ,EAAE,kBAAkB;IAEzD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMxB,WAAW,IAAI,gBAAgB,GAAG,IAAI;IAoBtC,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,97 @@
1
+ import { VirtualTerminal } from "../../terminal/virtual-terminal.js";
2
+ import { versionGte } from "../version.js";
3
+ /**
4
+ * Header line that Claude renders above the plan-preview dialog (full line
5
+ * collapsed by VT row-join — whitespace tolerated). Stable since 2.1.74.
6
+ */
7
+ export const HEADER_V1 = /Claude\s+has\s+written\s+up\s+a\s+plan\s+and\s+is\s+ready\s+to\s+execute\.\s+Would\s+you\s+like\s+to\s+proceed\?/;
8
+ /**
9
+ * Footer line — the dialog's right-hand "ctrl-g to edit in <editor> · path"
10
+ * affordance. The basename capture group `([^\\/\s]+?\.md)` returns just
11
+ * the trailing plan-file segment (works on both Windows backslash and POSIX
12
+ * forward-slash paths the FOOTER may render).
13
+ */
14
+ export const FOOTER_V1 = /ctrl-g\s+to\s+edit\s+in\s+\S+\s+·[\s\S]{0,200}?\.claude[\\/]plans[\\/]([^\\/\s]+?\.md)/;
15
+ const PATTERN_TABLE = [
16
+ { minVersion: "2.1.74", header: HEADER_V1, footer: FOOTER_V1 },
17
+ ];
18
+ /**
19
+ * Resolve the highest-precedence pattern entry whose `minVersion` is
20
+ * satisfied by `version`. Returns `null` when `version` is undefined or
21
+ * predates every entry — callers degrade gracefully to JSONL-only
22
+ * completion detection.
23
+ */
24
+ export function getPlanModePtyPattern(version) {
25
+ if (!version)
26
+ return null;
27
+ for (let i = PATTERN_TABLE.length - 1; i >= 0; i--) {
28
+ const entry = PATTERN_TABLE[i];
29
+ if (versionGte(version, entry.minVersion)) {
30
+ return { header: entry.header, footer: entry.footer };
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ const VT_COLS = 512;
36
+ const VT_ROWS = 80;
37
+ /**
38
+ * VT-backed pattern detector that watches the Claude plan-preview dialog.
39
+ *
40
+ * The monitor captures every post-spawn byte into a headless `VirtualTerminal`
41
+ * (no latching, no activation gate) and is queried on demand from the
42
+ * detector's poll loop. The "current turn" boundary lives on the JSONL side
43
+ * (via the detector's basename equality + ordering guards), not on the PTY
44
+ * side, so prior-turn screen replays from a resumed session cannot falsely
45
+ * resolve the current turn unless the current turn's JSONL independently
46
+ * agrees.
47
+ */
48
+ export class ClaudePlanModePtyMonitor {
49
+ patterns;
50
+ vt = new VirtualTerminal(VT_COLS, VT_ROWS);
51
+ disposed = false;
52
+ // Dirty-flag cache: `scanCurrent` runs on every PTY byte via
53
+ // `shouldSuppressPtyTimerReset`. The 80-row VT read + join + two regex
54
+ // tests is wasted work when no bytes have arrived since the last scan.
55
+ feedSeq = 0;
56
+ lastScanSeq = -1;
57
+ lastScanResult = null;
58
+ constructor(patterns) {
59
+ this.patterns = patterns;
60
+ }
61
+ feed(data) {
62
+ if (this.disposed)
63
+ return;
64
+ this.vt.write(data);
65
+ this.feedSeq++;
66
+ }
67
+ scanCurrent() {
68
+ if (this.disposed)
69
+ return null;
70
+ if (this.feedSeq === this.lastScanSeq)
71
+ return this.lastScanResult;
72
+ const lines = [];
73
+ const buf = this.vt.buffer;
74
+ for (let row = 0; row < this.vt.rows; row++) {
75
+ const line = buf.getLine(buf.viewportY + row);
76
+ if (line)
77
+ lines.push(line.translateToString(true));
78
+ }
79
+ const joined = lines.join("\n");
80
+ let result = null;
81
+ if (this.patterns.header.test(joined)) {
82
+ const m = joined.match(this.patterns.footer);
83
+ if (m)
84
+ result = { footerBasename: m[1] };
85
+ }
86
+ this.lastScanSeq = this.feedSeq;
87
+ this.lastScanResult = result;
88
+ return result;
89
+ }
90
+ dispose() {
91
+ if (this.disposed)
92
+ return;
93
+ this.disposed = true;
94
+ this.vt.dispose();
95
+ }
96
+ }
97
+ //# sourceMappingURL=plan-mode-pty-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-mode-pty-monitor.js","sourceRoot":"","sources":["../../../src/providers/claude/plan-mode-pty-monitor.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,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOvH,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,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,kBAAkB;CAalE"}
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,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWvH,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,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,kBAAkB;CAkBlE"}
@@ -2,6 +2,7 @@ import { flagIf } from "../types.js";
2
2
  import { versionGte } from "../version.js";
3
3
  import { ClaudePrimaryDetector } from "./completion.js";
4
4
  import { ClaudePlanModeDetector } from "./completion-plan-mode.js";
5
+ import { ClaudePlanModePtyMonitor, getPlanModePtyPattern, } from "./plan-mode-pty-monitor.js";
5
6
  import { ClaudeSessionHandler } from "./session.js";
6
7
  export class ClaudeStrategy {
7
8
  name = "claude";
@@ -35,7 +36,11 @@ export class ClaudeStrategy {
35
36
  createDetector(opts) {
36
37
  const useNativePlanMode = opts?.planMode === true && this.planMode.nativePlanFile === true;
37
38
  if (useNativePlanMode) {
38
- return new ClaudePlanModeDetector(200, 500, this.planMode.exitToolName, 30_000);
39
+ const patterns = getPlanModePtyPattern(this.version);
40
+ const monitor = patterns
41
+ ? new ClaudePlanModePtyMonitor(patterns)
42
+ : undefined;
43
+ return new ClaudePlanModeDetector(200, 500, this.planMode.exitToolName, 180_000, monitor);
39
44
  }
40
45
  return new ClaudePrimaryDetector(200, 500);
41
46
  }
@@ -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,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"}
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,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,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,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ;gBACtB,CAAC,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,IAAI,sBAAsB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,OAAO,EACP,OAAO,CACR,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -3,6 +3,7 @@ export interface ToolUseInfo {
3
3
  name: string | undefined;
4
4
  filePath: string | undefined;
5
5
  query: string | undefined;
6
+ command: string | undefined;
6
7
  useIdx: number;
7
8
  resolvedResultIdx: number;
8
9
  }
@@ -1 +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"}
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,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,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,CAuKhB"}
@@ -50,6 +50,9 @@ export function trackPendingToolUses(currentLines, opts) {
50
50
  query: typeof block.input?.query === "string"
51
51
  ? block.input.query
52
52
  : undefined,
53
+ command: typeof block.input?.command === "string"
54
+ ? block.input.command
55
+ : undefined,
53
56
  useIdx: idx,
54
57
  resolvedResultIdx: -1,
55
58
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tool-tracking.js","sourceRoot":"","sources":["../../../src/providers/claude/tool-tracking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-tracking.js","sourceRoot":"","sources":["../../../src/providers/claude/tool-tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { PtyHandle } from "../../pty/types.js";
2
+ import type { AttachedActivator, PlanModeActivator } from "../types.js";
3
+ /**
4
+ * Drives the Codex TUI into plan mode via Shift+Tab cycling, then delivers
5
+ * the planner prompt as a bracketed paste followed by Enter.
6
+ *
7
+ * See `src/providers/types.ts` for the contract. `attach()` registers the
8
+ * `onData` listener and begins buffering immediately so no startup bytes
9
+ * are missed during session discovery; `drive()` runs the detect / cycle /
10
+ * submit sequence using that buffer.
11
+ */
12
+ export declare class CodexPlanModeActivator implements PlanModeActivator {
13
+ private readonly pollMs;
14
+ private readonly submitDelayMs;
15
+ private readonly timeoutMs;
16
+ constructor(opts?: {
17
+ pollMs?: number;
18
+ submitDelayMs?: number;
19
+ timeoutMs?: number;
20
+ });
21
+ attach(handle: PtyHandle): AttachedActivator;
22
+ }
23
+ //# sourceMappingURL=plan-mode-activator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-mode-activator.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/plan-mode-activator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwCxE;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAMlF,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,iBAAiB;CAQ7C"}
@@ -0,0 +1,207 @@
1
+ import { ANSI_RE, PASTE_END, PASTE_START, SHIFT_TAB } from "../../ansi.js";
2
+ import { abortableSleep } from "../../session/locator.js";
3
+ import { VirtualTerminal } from "../../terminal/virtual-terminal.js";
4
+ /**
5
+ * Codex 0.130 renders the active mode as a compact status-line suffix
6
+ * (`... Ready ... Plan mode`). Older builds rendered a longer hint. Match
7
+ * the stable mode name, not a full sentence that may change.
8
+ */
9
+ const PLAN_MODE_RE = /\bPlan mode\b/i;
10
+ const CODEX_STARTED_RE = />_\s+OpenAI Codex\s+\(v[^)]+\)/;
11
+ const MODEL_CHANGED_RE = /\bModel changed\b/i;
12
+ const STATUS_CONTEXT_RE = /\b(?:Ready|Context)\b/i;
13
+ const PLAN_MODE_HINT_RE = /\bshift\+tab to cycle\b/i;
14
+ const PERMISSION_PROMPT_RE = /\b(?:do you trust|trust (?:this|the) (?:folder|workspace|directory|project|files)|workspace trust)\b/i;
15
+ const PERMISSION_OPTION_RE = /\b(?:yes,?\s*(?:proceed|continue|trust)|no,?\s*(?:exit|cancel|go back))\b/i;
16
+ const DEFAULT_POLL_MS = 750;
17
+ const DEFAULT_SUBMIT_DELAY_MS = 250;
18
+ const DEFAULT_TIMEOUT_MS = 60_000;
19
+ const BUFFER_CAPACITY = 8 * 1024;
20
+ const VT_COLS = 512;
21
+ const VT_ROWS = 80;
22
+ function isActivePlanModeLine(line) {
23
+ if (!PLAN_MODE_RE.test(line))
24
+ return false;
25
+ if (PLAN_MODE_HINT_RE.test(line))
26
+ return true;
27
+ if (MODEL_CHANGED_RE.test(line))
28
+ return false;
29
+ return STATUS_CONTEXT_RE.test(line);
30
+ }
31
+ function isPermissionPromptLine(line) {
32
+ return PERMISSION_PROMPT_RE.test(line) || PERMISSION_OPTION_RE.test(line);
33
+ }
34
+ function isCodexStarted(lines) {
35
+ if (!lines.some((line) => CODEX_STARTED_RE.test(line)))
36
+ return false;
37
+ return !lines.some((line) => isPermissionPromptLine(line));
38
+ }
39
+ /**
40
+ * Drives the Codex TUI into plan mode via Shift+Tab cycling, then delivers
41
+ * the planner prompt as a bracketed paste followed by Enter.
42
+ *
43
+ * See `src/providers/types.ts` for the contract. `attach()` registers the
44
+ * `onData` listener and begins buffering immediately so no startup bytes
45
+ * are missed during session discovery; `drive()` runs the detect / cycle /
46
+ * submit sequence using that buffer.
47
+ */
48
+ export class CodexPlanModeActivator {
49
+ pollMs;
50
+ submitDelayMs;
51
+ timeoutMs;
52
+ constructor(opts) {
53
+ this.pollMs = opts?.pollMs ?? DEFAULT_POLL_MS;
54
+ this.submitDelayMs = opts?.submitDelayMs ?? DEFAULT_SUBMIT_DELAY_MS;
55
+ this.timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
56
+ }
57
+ attach(handle) {
58
+ return new CodexAttachedActivator(handle, this.pollMs, this.submitDelayMs, this.timeoutMs);
59
+ }
60
+ }
61
+ class CodexAttachedActivator {
62
+ handle;
63
+ pollMs;
64
+ submitDelayMs;
65
+ timeoutMs;
66
+ vt = new VirtualTerminal(VT_COLS, VT_ROWS);
67
+ buffer = "";
68
+ detected = false;
69
+ codexStarted = false;
70
+ readyCallbackFired = false;
71
+ readyCallbackError;
72
+ readyCallback;
73
+ active = true;
74
+ constructor(handle, pollMs, submitDelayMs, timeoutMs) {
75
+ this.handle = handle;
76
+ this.pollMs = pollMs;
77
+ this.submitDelayMs = submitDelayMs;
78
+ this.timeoutMs = timeoutMs;
79
+ handle.onData((data) => {
80
+ if (!this.active)
81
+ return;
82
+ if (this.detected && this.codexStarted)
83
+ return;
84
+ // Strip ANSI SGR codes for the raw-text fast path. The rendered VT
85
+ // path below handles cursor-addressed repaints where the visible
86
+ // status text never appears contiguously in the byte stream.
87
+ const stripped = data.replace(ANSI_RE, "");
88
+ const next = this.buffer + stripped;
89
+ this.buffer = next.length > BUFFER_CAPACITY ? next.slice(-BUFFER_CAPACITY) : next;
90
+ this.updateStateFromText(this.buffer);
91
+ this.vt.write(data, () => {
92
+ if (!this.active)
93
+ return;
94
+ this.updateStateFromScreen();
95
+ });
96
+ });
97
+ }
98
+ async drive(prompt, opts) {
99
+ this.readyCallback = opts.onReadyForAutomation;
100
+ // Bytes received between attach() and drive() may have already set
101
+ // codexStarted. Fire the ready callback immediately so the
102
+ // "ready before first synthetic write" contract holds even when
103
+ // startup readiness arrived during the attach phase.
104
+ if (this.codexStarted) {
105
+ this.notifyReadyForAutomation();
106
+ }
107
+ try {
108
+ const deadline = Date.now() + this.timeoutMs;
109
+ // Cold Codex starts can show permission prompts and footer/status
110
+ // text before the normal TUI is ready. Wait for the rendered header
111
+ // line before sending synthetic Shift+Tab, so startup / permission
112
+ // input remains user-driven.
113
+ while (!this.codexStarted) {
114
+ this.throwReadyCallbackError();
115
+ await this.sleepOrTimeout(deadline, opts.signal);
116
+ }
117
+ this.throwReadyCallbackError();
118
+ // Leading sleep before the first Shift+Tab: the Plan mode status
119
+ // line can arrive within the same poll window as the header (the
120
+ // header chunk lands, then Codex repaints the status row a few ms
121
+ // later). Sleeping first lets that status reach `detected=true` so
122
+ // a resume already in plan mode is not toggled off by a stray
123
+ // Shift+Tab.
124
+ while (!this.detected) {
125
+ this.throwReadyCallbackError();
126
+ await this.sleepOrTimeout(deadline, opts.signal);
127
+ if (this.detected)
128
+ break;
129
+ this.throwReadyCallbackError();
130
+ this.handle.write(SHIFT_TAB);
131
+ }
132
+ this.throwReadyCallbackError();
133
+ // Deliver the planner prompt as a bracketed paste so embedded
134
+ // newlines stay intact, then submit with Enter.
135
+ this.handle.write(`${PASTE_START}${prompt}${PASTE_END}`);
136
+ await abortableSleep(this.submitDelayMs, opts.signal);
137
+ this.handle.write("\r");
138
+ }
139
+ finally {
140
+ this.dispose();
141
+ }
142
+ }
143
+ dispose() {
144
+ if (!this.active)
145
+ return;
146
+ this.active = false;
147
+ this.vt.dispose();
148
+ }
149
+ updateStateFromText(text) {
150
+ if (this.detected)
151
+ return;
152
+ const lines = text.split(/\r?\n|\r/);
153
+ if (lines.some((line) => isActivePlanModeLine(line))) {
154
+ this.detected = true;
155
+ }
156
+ }
157
+ updateStateFromScreen() {
158
+ if (this.detected && this.codexStarted)
159
+ return;
160
+ const lines = [];
161
+ const termBuffer = this.vt.buffer;
162
+ for (let row = 0; row < this.vt.rows; row++) {
163
+ const line = termBuffer.getLine(termBuffer.viewportY + row);
164
+ if (line)
165
+ lines.push(line.translateToString(true));
166
+ }
167
+ if (!this.detected && lines.some((line) => isActivePlanModeLine(line))) {
168
+ this.detected = true;
169
+ }
170
+ if (!this.codexStarted && isCodexStarted(lines)) {
171
+ this.codexStarted = true;
172
+ this.notifyReadyForAutomation();
173
+ }
174
+ }
175
+ notifyReadyForAutomation() {
176
+ if (this.readyCallbackFired)
177
+ return;
178
+ // Before drive() has set readyCallback, just record that the trigger
179
+ // happened — drive()'s entry-check will fire the callback once it is
180
+ // available. This preserves the "ready before first synthetic write"
181
+ // ordering even when the header arrives during the attach phase.
182
+ if (!this.readyCallback)
183
+ return;
184
+ this.readyCallbackFired = true;
185
+ try {
186
+ this.readyCallback();
187
+ }
188
+ catch (err) {
189
+ this.readyCallbackError = err;
190
+ }
191
+ }
192
+ throwReadyCallbackError() {
193
+ if (this.readyCallbackError instanceof Error)
194
+ throw this.readyCallbackError;
195
+ if (this.readyCallbackError !== undefined) {
196
+ throw new Error(String(this.readyCallbackError));
197
+ }
198
+ }
199
+ async sleepOrTimeout(deadline, signal) {
200
+ const remainingMs = deadline - Date.now();
201
+ if (remainingMs <= 0) {
202
+ throw new Error(`Codex plan mode activation timed out after ${Math.round(this.timeoutMs / 1000)}s`);
203
+ }
204
+ await abortableSleep(Math.min(this.pollMs, remainingMs), signal);
205
+ }
206
+ }
207
+ //# sourceMappingURL=plan-mode-activator.js.map