@adhdev/daemon-core 0.9.82-rc.49 → 0.9.82-rc.490

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 (473) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +9 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/build-info.d.ts +37 -0
  4. package/dist/chat/source-machine.d.ts +166 -0
  5. package/dist/chat/source-resolver.d.ts +104 -0
  6. package/dist/chat/subscription-updates.d.ts +1 -0
  7. package/dist/cli-adapter-types.d.ts +68 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +220 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +137 -64
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +5 -0
  12. package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
  13. package/dist/cli-adapters/provider-cli-shared.d.ts +74 -0
  14. package/dist/cli-adapters/pty-write-chunking.d.ts +34 -0
  15. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  16. package/dist/cli-adapters/resolve-executable.d.ts +69 -0
  17. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
  18. package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
  19. package/dist/cli-adapters/terminal-screen.d.ts +4 -11
  20. package/dist/commands/chat-commands-debug-bundle.d.ts +14 -0
  21. package/dist/commands/chat-commands-read.d.ts +23 -0
  22. package/dist/commands/chat-commands-scope.d.ts +39 -0
  23. package/dist/commands/chat-commands-shared.d.ts +33 -0
  24. package/dist/commands/chat-commands-write.d.ts +14 -0
  25. package/dist/commands/chat-commands.d.ts +10 -23
  26. package/dist/commands/cli-manager.d.ts +71 -1
  27. package/dist/commands/handler.d.ts +125 -0
  28. package/dist/commands/high-family/index.d.ts +3 -0
  29. package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
  30. package/dist/commands/high-family/mesh-events.d.ts +2 -0
  31. package/dist/commands/high-family/mesh-status.d.ts +2 -0
  32. package/dist/commands/high-family/types.d.ts +64 -0
  33. package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
  34. package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
  35. package/dist/commands/low-family/diagnostics.d.ts +2 -0
  36. package/dist/commands/low-family/index.d.ts +3 -0
  37. package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
  38. package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
  39. package/dist/commands/low-family/notification.d.ts +2 -0
  40. package/dist/commands/low-family/refine-config.d.ts +2 -0
  41. package/dist/commands/low-family/session-host.d.ts +2 -0
  42. package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
  43. package/dist/commands/low-family/status-meta.d.ts +2 -0
  44. package/dist/commands/low-family/types.d.ts +33 -0
  45. package/dist/commands/med-family/cli-agent.d.ts +2 -0
  46. package/dist/commands/med-family/fast-forward.d.ts +2 -0
  47. package/dist/commands/med-family/ide.d.ts +10 -0
  48. package/dist/commands/med-family/index.d.ts +3 -0
  49. package/dist/commands/med-family/mesh-crud.d.ts +48 -0
  50. package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
  51. package/dist/commands/med-family/mesh-queue.d.ts +2 -0
  52. package/dist/commands/med-family/mesh-restart.d.ts +2 -0
  53. package/dist/commands/med-family/types.d.ts +152 -0
  54. package/dist/commands/mesh-coordinator.d.ts +85 -1
  55. package/dist/commands/router-aggregate-status.d.ts +24 -0
  56. package/dist/commands/router-mesh-session-owner.d.ts +59 -0
  57. package/dist/commands/router-refine.d.ts +151 -0
  58. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  59. package/dist/commands/router.d.ts +203 -15
  60. package/dist/commands/upgrade-helper.d.ts +41 -1
  61. package/dist/config/chat-history.d.ts +11 -0
  62. package/dist/config/config.d.ts +19 -0
  63. package/dist/config/mesh-config.d.ts +65 -0
  64. package/dist/config/mesh-json-config.d.ts +199 -0
  65. package/dist/config/registry-resolver.d.ts +54 -0
  66. package/dist/config/repo-settings.d.ts +77 -0
  67. package/dist/config/state-store.d.ts +30 -0
  68. package/dist/daemon/dev-server.d.ts +0 -2
  69. package/dist/detection/cli-detector.d.ts +17 -0
  70. package/dist/detection/ide-detector.d.ts +13 -0
  71. package/dist/detection/win32-ide-version.d.ts +37 -0
  72. package/dist/git/change-impact-config.d.ts +159 -0
  73. package/dist/git/git-commands.d.ts +26 -2
  74. package/dist/git/git-diff.d.ts +6 -0
  75. package/dist/git/git-executor.d.ts +11 -0
  76. package/dist/git/git-status.d.ts +80 -0
  77. package/dist/git/git-types.d.ts +2 -50
  78. package/dist/git/git-worktree.d.ts +71 -1
  79. package/dist/git/index.d.ts +3 -1
  80. package/dist/index.d.ts +70 -17
  81. package/dist/index.js +53532 -19073
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +53283 -18989
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/installer.d.ts +1 -4
  86. package/dist/ipc/local-ipc-server.d.ts +91 -0
  87. package/dist/launch.d.ts +1 -1
  88. package/dist/logging/async-batch-writer.d.ts +10 -0
  89. package/dist/logging/debug-config.d.ts +16 -0
  90. package/dist/logging/log-redactor.d.ts +24 -0
  91. package/dist/logging/log-tail-reader.d.ts +81 -0
  92. package/dist/logging/logger.d.ts +1 -1
  93. package/dist/mesh/contracts.d.ts +256 -0
  94. package/dist/mesh/coordinator-prompt.d.ts +76 -0
  95. package/dist/mesh/coordinator-registry.d.ts +59 -0
  96. package/dist/mesh/mesh-active-work.d.ts +203 -0
  97. package/dist/mesh/mesh-clone-grace.d.ts +8 -0
  98. package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
  99. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  100. package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
  101. package/dist/mesh/mesh-event-classify.d.ts +7 -0
  102. package/dist/mesh/mesh-event-forwarding.d.ts +58 -0
  103. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  104. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  105. package/dist/mesh/mesh-events-pending.d.ts +258 -0
  106. package/dist/mesh/mesh-events-stale.d.ts +61 -0
  107. package/dist/mesh/mesh-events-utils.d.ts +75 -0
  108. package/dist/mesh/mesh-events.d.ts +6 -49
  109. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  110. package/dist/mesh/mesh-host-ownership.d.ts +21 -1
  111. package/dist/mesh/mesh-init.d.ts +128 -0
  112. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  113. package/dist/mesh/mesh-ledger.d.ts +139 -1
  114. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  115. package/dist/mesh/mesh-missions.d.ts +281 -0
  116. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  117. package/dist/mesh/mesh-queue-assignment.d.ts +162 -0
  118. package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
  119. package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
  120. package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
  121. package/dist/mesh/mesh-reconcile-loop.d.ts +84 -0
  122. package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
  123. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  124. package/dist/mesh/mesh-refine-gates.d.ts +457 -0
  125. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  126. package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
  127. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  128. package/dist/mesh/mesh-routing.d.ts +70 -0
  129. package/dist/mesh/mesh-runtime-store.d.ts +567 -0
  130. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  131. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  132. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  133. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +34 -0
  134. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  135. package/dist/mesh/mesh-work-queue.d.ts +392 -1
  136. package/dist/mesh/preview-freshness.d.ts +28 -0
  137. package/dist/mesh/refine-config.d.ts +97 -0
  138. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  139. package/dist/providers/acp-provider-instance.d.ts +5 -0
  140. package/dist/providers/approval-utils.d.ts +46 -0
  141. package/dist/providers/chat-message-normalization.d.ts +58 -1
  142. package/dist/providers/cli-provider-effect-format.d.ts +30 -0
  143. package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
  144. package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
  145. package/dist/providers/cli-provider-instance-types.d.ts +45 -0
  146. package/dist/providers/cli-provider-instance.d.ts +426 -30
  147. package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
  148. package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
  149. package/dist/providers/contracts.d.ts +196 -6
  150. package/dist/providers/external-sources.d.ts +71 -0
  151. package/dist/providers/manual-attendance.d.ts +79 -0
  152. package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
  153. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  154. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  155. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  156. package/dist/providers/native-history/constants.d.ts +12 -0
  157. package/dist/providers/native-history/dispatcher.d.ts +44 -0
  158. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  159. package/dist/providers/native-history/index.d.ts +13 -0
  160. package/dist/providers/provider-instance-manager.d.ts +30 -0
  161. package/dist/providers/provider-instance.d.ts +31 -1
  162. package/dist/providers/provider-loader.d.ts +42 -5
  163. package/dist/providers/provider-trust.d.ts +31 -0
  164. package/dist/providers/read-chat-contract.d.ts +29 -0
  165. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  166. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  167. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  168. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  169. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  170. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  171. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  172. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  173. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  174. package/dist/providers/sdk/v1/index.d.ts +30 -0
  175. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  176. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  177. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  178. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  179. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  180. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  181. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  182. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  183. package/dist/providers/spec/adapter.d.ts +98 -0
  184. package/dist/providers/spec/cli-adapter.d.ts +223 -0
  185. package/dist/providers/spec/evaluator.d.ts +45 -0
  186. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  187. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  188. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  189. package/dist/providers/spec/fsm-types.d.ts +202 -0
  190. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  191. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  192. package/dist/providers/spec/route.d.ts +4 -0
  193. package/dist/providers/spec/types.d.ts +244 -0
  194. package/dist/providers/status-monitor.d.ts +7 -7
  195. package/dist/providers/transcript-v2.d.ts +176 -0
  196. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  197. package/dist/providers/working-dir.d.ts +17 -0
  198. package/dist/repo-mesh-types.d.ts +616 -12
  199. package/dist/runtime-defaults.d.ts +2 -0
  200. package/dist/session-host/managed-host.d.ts +64 -0
  201. package/dist/session-host/runtime-surface.d.ts +10 -16
  202. package/dist/sessions/registry.d.ts +26 -0
  203. package/dist/shared-types-extra.d.ts +2 -4
  204. package/dist/shared-types.d.ts +110 -55
  205. package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
  206. package/dist/status/normalize.d.ts +1 -1
  207. package/dist/status/normalize.js +1 -0
  208. package/dist/status/normalize.js.map +1 -1
  209. package/dist/status/normalize.mjs +1 -0
  210. package/dist/status/normalize.mjs.map +1 -1
  211. package/dist/status/reporter.d.ts +2 -0
  212. package/dist/status/snapshot.d.ts +27 -0
  213. package/dist/system/hash.d.ts +8 -0
  214. package/dist/system/load-better-sqlite3.d.ts +21 -0
  215. package/dist/types.d.ts +20 -6
  216. package/package.json +11 -4
  217. package/src/agent-stream/poller.ts +2 -3
  218. package/src/agent-stream/provider-adapter.ts +1 -1
  219. package/src/boot/daemon-lifecycle.ts +80 -14
  220. package/src/boot/process-hardening.ts +89 -0
  221. package/src/build-info.ts +73 -0
  222. package/src/chat/source-machine.ts +534 -0
  223. package/src/chat/source-resolver.ts +0 -0
  224. package/src/chat/subscription-updates.ts +20 -1
  225. package/src/cli-adapter-types.d.ts +3 -1
  226. package/src/cli-adapter-types.ts +68 -2
  227. package/src/cli-adapters/cli-script-runner.ts +421 -0
  228. package/src/cli-adapters/cli-state-engine.ts +1282 -0
  229. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  230. package/src/cli-adapters/provider-cli-adapter.ts +1048 -1143
  231. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  232. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  233. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  234. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  235. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  236. package/src/cli-adapters/pty-transport.ts +2 -1
  237. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  238. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  239. package/src/cli-adapters/resolve-executable.ts +204 -0
  240. package/src/cli-adapters/session-host-transport.ts +2 -1
  241. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  242. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  243. package/src/cli-adapters/terminal-screen.ts +16 -81
  244. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  245. package/src/commands/chat-commands-read.ts +2788 -0
  246. package/src/commands/chat-commands-scope.ts +54 -0
  247. package/src/commands/chat-commands-shared.ts +114 -0
  248. package/src/commands/chat-commands-write.ts +891 -0
  249. package/src/commands/chat-commands.ts +19 -1841
  250. package/src/commands/cli-manager.d.ts +2 -0
  251. package/src/commands/cli-manager.ts +724 -27
  252. package/src/commands/handler.ts +865 -2
  253. package/src/commands/high-family/index.ts +28 -0
  254. package/src/commands/high-family/mesh-coordinator-launch.ts +696 -0
  255. package/src/commands/high-family/mesh-events.ts +102 -0
  256. package/src/commands/high-family/mesh-status.ts +857 -0
  257. package/src/commands/high-family/types.ts +80 -0
  258. package/src/commands/low-family/coordinator-prompt.ts +125 -0
  259. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  260. package/src/commands/low-family/diagnostics.ts +57 -0
  261. package/src/commands/low-family/index.ts +37 -0
  262. package/src/commands/low-family/mesh-ledger.ts +62 -0
  263. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  264. package/src/commands/low-family/notification.ts +116 -0
  265. package/src/commands/low-family/refine-config.ts +106 -0
  266. package/src/commands/low-family/session-host.ts +282 -0
  267. package/src/commands/low-family/spec-providerdev.ts +217 -0
  268. package/src/commands/low-family/status-meta.ts +112 -0
  269. package/src/commands/low-family/types.ts +39 -0
  270. package/src/commands/med-family/cli-agent.ts +270 -0
  271. package/src/commands/med-family/fast-forward.ts +230 -0
  272. package/src/commands/med-family/ide.ts +163 -0
  273. package/src/commands/med-family/index.ts +37 -0
  274. package/src/commands/med-family/mesh-crud.ts +1268 -0
  275. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  276. package/src/commands/med-family/mesh-queue.ts +167 -0
  277. package/src/commands/med-family/mesh-restart.ts +92 -0
  278. package/src/commands/med-family/types.ts +153 -0
  279. package/src/commands/mesh-coordinator.ts +334 -124
  280. package/src/commands/router-aggregate-status.ts +209 -0
  281. package/src/commands/router-mesh-session-owner.ts +114 -0
  282. package/src/commands/router-refine.ts +1794 -0
  283. package/src/commands/router-worktree-cleanup.ts +870 -0
  284. package/src/commands/router.ts +567 -4149
  285. package/src/commands/stream-commands.ts +8 -0
  286. package/src/commands/upgrade-helper.ts +310 -45
  287. package/src/config/chat-history.ts +517 -24
  288. package/src/config/config.ts +30 -0
  289. package/src/config/mesh-config.ts +300 -24
  290. package/src/config/mesh-json-config.ts +376 -0
  291. package/src/config/recent-activity.ts +8 -2
  292. package/src/config/registry-resolver.ts +100 -0
  293. package/src/config/repo-settings.ts +111 -0
  294. package/src/config/state-store.ts +55 -0
  295. package/src/daemon/dev-auto-implement.ts +3 -2
  296. package/src/daemon/dev-cli-debug.ts +10 -1
  297. package/src/daemon/dev-server.ts +0 -541
  298. package/src/detection/cli-detector.ts +94 -9
  299. package/src/detection/ide-detector.ts +55 -16
  300. package/src/detection/win32-ide-version.ts +106 -0
  301. package/src/git/change-impact-config.ts +354 -0
  302. package/src/git/git-commands.ts +112 -16
  303. package/src/git/git-diff.ts +81 -11
  304. package/src/git/git-executor.ts +12 -0
  305. package/src/git/git-status.ts +822 -48
  306. package/src/git/git-types.ts +14 -62
  307. package/src/git/git-worktree.ts +261 -4
  308. package/src/git/index.ts +17 -0
  309. package/src/index.ts +190 -13
  310. package/src/installer.d.ts +1 -1
  311. package/src/installer.ts +8 -6
  312. package/src/ipc/local-ipc-server.ts +278 -0
  313. package/src/launch.d.ts +1 -1
  314. package/src/launch.ts +37 -28
  315. package/src/logging/async-batch-writer.ts +55 -0
  316. package/src/logging/command-log.ts +7 -5
  317. package/src/logging/debug-config.ts +25 -0
  318. package/src/logging/debug-trace.ts +7 -2
  319. package/src/logging/log-redactor.ts +100 -0
  320. package/src/logging/log-tail-reader.ts +341 -0
  321. package/src/logging/logger.ts +14 -7
  322. package/src/mesh/contracts.ts +510 -0
  323. package/src/mesh/coordinator-prompt.ts +627 -34
  324. package/src/mesh/coordinator-registry.ts +121 -0
  325. package/src/mesh/mesh-active-work.ts +706 -0
  326. package/src/mesh/mesh-clone-grace.ts +68 -0
  327. package/src/mesh/mesh-completion-synthesis.ts +416 -0
  328. package/src/mesh/mesh-coordinator-config.ts +97 -0
  329. package/src/mesh/mesh-delivery-policy.ts +284 -0
  330. package/src/mesh/mesh-event-classify.ts +78 -0
  331. package/src/mesh/mesh-event-forwarding.ts +2030 -0
  332. package/src/mesh/mesh-event-trace.ts +67 -0
  333. package/src/mesh/mesh-events-coordinator.ts +32 -0
  334. package/src/mesh/mesh-events-pending.ts +1548 -0
  335. package/src/mesh/mesh-events-stale.ts +452 -0
  336. package/src/mesh/mesh-events-utils.ts +443 -0
  337. package/src/mesh/mesh-events.ts +43 -1035
  338. package/src/mesh/mesh-fast-forward.ts +856 -0
  339. package/src/mesh/mesh-host-ownership.ts +41 -3
  340. package/src/mesh/mesh-init.ts +350 -0
  341. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  342. package/src/mesh/mesh-ledger.ts +897 -102
  343. package/src/mesh/mesh-magi-status.ts +223 -0
  344. package/src/mesh/mesh-missions.ts +695 -0
  345. package/src/mesh/mesh-node-identity.ts +2065 -0
  346. package/src/mesh/mesh-queue-assignment.ts +2498 -0
  347. package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
  348. package/src/mesh/mesh-reconcile-config.ts +66 -0
  349. package/src/mesh/mesh-reconcile-identity.ts +103 -0
  350. package/src/mesh/mesh-reconcile-loop.ts +1696 -0
  351. package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
  352. package/src/mesh/mesh-refine-batch.ts +205 -0
  353. package/src/mesh/mesh-refine-gates.ts +1792 -0
  354. package/src/mesh/mesh-refine-status.ts +231 -0
  355. package/src/mesh/mesh-remote-event-pull.ts +279 -0
  356. package/src/mesh/mesh-review-inbox.ts +308 -0
  357. package/src/mesh/mesh-routing.ts +291 -0
  358. package/src/mesh/mesh-runtime-store.ts +2292 -0
  359. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  360. package/src/mesh/mesh-task-inflight.ts +70 -0
  361. package/src/mesh/mesh-task-stats.ts +161 -0
  362. package/src/mesh/mesh-unresolved-forward-outbox.ts +215 -0
  363. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  364. package/src/mesh/mesh-work-queue.ts +1489 -145
  365. package/src/mesh/preview-freshness.ts +163 -0
  366. package/src/mesh/refine-config.ts +129 -12
  367. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  368. package/src/providers/acp-provider-instance.ts +43 -10
  369. package/src/providers/approval-utils.d.ts +5 -0
  370. package/src/providers/approval-utils.ts +100 -6
  371. package/src/providers/chat-message-normalization.ts +126 -4
  372. package/src/providers/cli-provider-effect-format.ts +53 -0
  373. package/src/providers/cli-provider-history-dedup.ts +75 -0
  374. package/src/providers/cli-provider-input-prompt.ts +133 -0
  375. package/src/providers/cli-provider-instance-types.ts +131 -0
  376. package/src/providers/cli-provider-instance.ts +2771 -499
  377. package/src/providers/cli-provider-status-helpers.ts +123 -0
  378. package/src/providers/cli-provider-transcript-merge.ts +114 -0
  379. package/src/providers/contracts.d.ts +55 -0
  380. package/src/providers/contracts.ts +207 -6
  381. package/src/providers/extension-provider-instance.ts +12 -7
  382. package/src/providers/external-sources.ts +218 -0
  383. package/src/providers/ide-provider-instance.ts +35 -12
  384. package/src/providers/manual-attendance.ts +105 -0
  385. package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
  386. package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
  387. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  388. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  389. package/src/providers/native-history/constants.ts +19 -0
  390. package/src/providers/native-history/dispatcher.ts +617 -0
  391. package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
  392. package/src/providers/native-history/index.ts +30 -0
  393. package/src/providers/provider-instance-manager.ts +71 -0
  394. package/src/providers/provider-instance.ts +24 -1
  395. package/src/providers/provider-loader.ts +700 -55
  396. package/src/providers/provider-schema.ts +93 -14
  397. package/src/providers/provider-trust.ts +114 -0
  398. package/src/providers/read-chat-contract.ts +76 -16
  399. package/src/providers/sdk/README.md +49 -0
  400. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  401. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  402. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  403. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  404. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  405. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  406. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  407. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  408. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  409. package/src/providers/sdk/v1/index.ts +152 -0
  410. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  411. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  412. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  413. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +538 -0
  414. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  415. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  416. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  417. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  418. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  419. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  420. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  421. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  422. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  423. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  424. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  425. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  426. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  427. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  428. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  429. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  430. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  431. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  432. package/src/providers/sdk/v1/validators/index.ts +19 -0
  433. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  434. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  435. package/src/providers/spec/adapter.ts +246 -0
  436. package/src/providers/spec/cli-adapter.ts +1064 -0
  437. package/src/providers/spec/evaluator.ts +407 -0
  438. package/src/providers/spec/fsm-driver.ts +1528 -0
  439. package/src/providers/spec/fsm-evaluator.ts +290 -0
  440. package/src/providers/spec/fsm-loader.ts +128 -0
  441. package/src/providers/spec/fsm-types.ts +301 -0
  442. package/src/providers/spec/native-history-executor.ts +1241 -0
  443. package/src/providers/spec/pre-launch-trust.ts +104 -0
  444. package/src/providers/spec/route.ts +51 -0
  445. package/src/providers/spec/types.ts +284 -0
  446. package/src/providers/status-monitor.d.ts +7 -7
  447. package/src/providers/status-monitor.ts +37 -22
  448. package/src/providers/transcript-v2.ts +567 -0
  449. package/src/providers/types/interactive-prompt.ts +536 -0
  450. package/src/providers/version-archive.ts +64 -24
  451. package/src/providers/working-dir.ts +23 -0
  452. package/src/repo-mesh-types.ts +861 -14
  453. package/src/runtime-defaults.ts +39 -0
  454. package/src/session-host/managed-host.ts +218 -0
  455. package/src/session-host/runtime-surface.ts +20 -80
  456. package/src/sessions/registry.ts +44 -0
  457. package/src/shared-types-extra.ts +2 -4
  458. package/src/shared-types.d.ts +8 -0
  459. package/src/shared-types.ts +148 -55
  460. package/src/status/builders.ts +69 -6
  461. package/src/status/chat-tail-hot-sessions.ts +117 -2
  462. package/src/status/normalize.ts +2 -0
  463. package/src/status/reporter.ts +19 -1
  464. package/src/status/snapshot.ts +100 -27
  465. package/src/system/hash.ts +23 -0
  466. package/src/system/host-memory.ts +29 -12
  467. package/src/system/load-better-sqlite3.ts +68 -0
  468. package/src/types.ts +26 -6
  469. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  470. package/dist/mesh/mesh-sync.d.ts +0 -53
  471. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  472. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  473. package/src/mesh/mesh-sync.ts +0 -111
@@ -4,6 +4,7 @@ export interface TurnParseScope {
4
4
  startedAt: number;
5
5
  bufferStart: number;
6
6
  rawBufferStart: number;
7
+ taskId?: string;
7
8
  }
8
9
  export declare function normalizeCliParsedMessages(parsedMessages: any[], options: {
9
10
  scope?: TurnParseScope | null;
@@ -15,6 +16,7 @@ export declare function buildCliParseInput(options: {
15
16
  accumulatedRawBuffer: string;
16
17
  recentOutputBuffer: string;
17
18
  terminalScreenText: string;
19
+ workingDir?: string;
18
20
  baseMessages: CliChatMessage[];
19
21
  partialResponse: string;
20
22
  isWaitingForResponse?: boolean;
@@ -10,6 +10,12 @@ export interface TurnParseScope {
10
10
  startedAt: number;
11
11
  bufferStart: number;
12
12
  rawBufferStart: number;
13
+ // ARCH-REFACTOR R1 (per-turn task identity): the mesh task this turn was started
14
+ // for, bound to the turn at submit time. The completion event for this turn reads
15
+ // its taskId from here (via engine.currentTurnTaskId) instead of the last-write-wins
16
+ // session scalar (settings.meshActiveTaskId), so a second task that attaches before
17
+ // this turn completes can no longer make this turn's completion carry the wrong id.
18
+ taskId?: string;
13
19
  }
14
20
 
15
21
  function sliceFromOffset(text: string, start: number): string {
@@ -35,22 +41,30 @@ export function buildCliParseInput(options: {
35
41
  accumulatedRawBuffer: string;
36
42
  recentOutputBuffer: string;
37
43
  terminalScreenText: string;
44
+ workingDir?: string;
45
+ providerSessionId?: string;
46
+ historySessionId?: string;
38
47
  baseMessages: CliChatMessage[];
39
48
  partialResponse: string;
40
49
  isWaitingForResponse?: boolean;
41
50
  scope?: TurnParseScope | null;
42
51
  runtimeSettings: Record<string, any>;
52
+ spawnAt?: number;
43
53
  }): CliScriptInput {
44
54
  const {
45
55
  accumulatedBuffer,
46
56
  accumulatedRawBuffer,
47
57
  recentOutputBuffer,
48
58
  terminalScreenText,
59
+ workingDir,
60
+ providerSessionId,
61
+ historySessionId,
49
62
  baseMessages,
50
63
  partialResponse,
51
64
  isWaitingForResponse,
52
65
  scope,
53
66
  runtimeSettings,
67
+ spawnAt,
54
68
  } = options;
55
69
  const buffer = scope
56
70
  ? sliceFromOffset(accumulatedBuffer, scope.bufferStart)
@@ -66,6 +80,10 @@ export function buildCliParseInput(options: {
66
80
  rawBuffer,
67
81
  recentBuffer,
68
82
  screenText,
83
+ workspace: workingDir,
84
+ workingDir,
85
+ providerSessionId,
86
+ historySessionId,
69
87
  screen: buildCliScreenSnapshot(screenText),
70
88
  bufferScreen: buildCliScreenSnapshot(buffer),
71
89
  recentScreen: buildCliScreenSnapshot(recentBuffer),
@@ -74,6 +92,7 @@ export function buildCliParseInput(options: {
74
92
  isWaitingForResponse,
75
93
  promptText: scope?.prompt || '',
76
94
  settings: { ...runtimeSettings },
95
+ ...(typeof spawnAt === 'number' && spawnAt > 0 ? { spawnAt } : {}),
77
96
  };
78
97
  }
79
98
 
@@ -34,20 +34,69 @@ export function resolveCliSpawnPlan(options: {
34
34
  const configuredCommand = typeof runtimeSettings.executablePath === 'string' && runtimeSettings.executablePath.trim()
35
35
  ? runtimeSettings.executablePath.trim()
36
36
  : spawnConfig.command;
37
- const binaryPath = findBinary(configuredCommand);
37
+ return resolveCliSpawnPlanFromParts({
38
+ command: configuredCommand,
39
+ baseArgs: spawnConfig.args,
40
+ shell: spawnConfig.shell,
41
+ baseEnv: spawnConfig.env,
42
+ workingDir,
43
+ extraArgs,
44
+ extraEnv,
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Cols/rows for a PTY spawn. Defaults to the session-host terminal size; the
50
+ * spec driver may override per-instance.
51
+ */
52
+ export interface CliSpawnGeometry {
53
+ cols?: number;
54
+ rows?: number;
55
+ }
56
+
57
+ /**
58
+ * Core spawn-plan resolution from already-flattened spawn parts — the single
59
+ * source of truth for binary resolution (findBinary: PATH + npm-global / Node
60
+ * dir fallback), `{{workingDir}}` token substitution, shell wrapping
61
+ * (script-shims / non-absolute / non-native binaries), and env sanitization +
62
+ * TERMINAL_CWD. Both the legacy provider-module path (resolveCliSpawnPlan) and
63
+ * the spec/FSM path (FsmDriver.buildAdapterOpts) feed into this so the two
64
+ * spawn paths can never diverge.
65
+ */
66
+ export function resolveCliSpawnPlanFromParts(options: {
67
+ /** Raw command from the spec/provider (`binary` / `spawn.command`), or an
68
+ * operator-configured executable path override. */
69
+ command: string;
70
+ /** Base launch args declared by the spec/provider (`spawn_args` /
71
+ * `spawn.args`). */
72
+ baseArgs?: string[];
73
+ /** When true, always wrap the launch in a login shell. */
74
+ shell?: boolean;
75
+ /** Base env declared by the spec/provider (`env` / `spawn.env`). */
76
+ baseEnv?: Record<string, string>;
77
+ workingDir: string;
78
+ /** Per-launch extra args (e.g. resume session id) appended after baseArgs. */
79
+ extraArgs?: string[];
80
+ extraEnv?: Record<string, string>;
81
+ geometry?: CliSpawnGeometry;
82
+ }): CliSpawnPlan {
83
+ const { command, baseArgs, shell, baseEnv, workingDir, extraArgs, extraEnv, geometry } = options;
84
+ const binaryPath = findBinary(command);
38
85
  const isWin = os.platform() === 'win32';
39
- const allArgs = [...spawnConfig.args, ...extraArgs];
86
+ const allArgs = [...(baseArgs ?? []), ...(extraArgs ?? [])].map((arg) =>
87
+ typeof arg === 'string' ? arg.replace(/\{\{workingDir\}\}/g, workingDir) : arg,
88
+ );
40
89
 
41
90
  let shellCmd: string;
42
91
  let shellArgs: string[];
43
92
  const useShellUnix = !isWin && (
44
- !!spawnConfig.shell
93
+ !!shell
45
94
  || !path.isAbsolute(binaryPath)
46
95
  || isScriptBinary(binaryPath)
47
96
  || !looksLikeMachOOrElf(binaryPath)
48
97
  );
49
98
  const isCmdShim = isWin && /\.(cmd|bat)$/i.test(binaryPath);
50
- const useShellWin = !!spawnConfig.shell
99
+ const useShellWin = !!shell
51
100
  || isCmdShim
52
101
  || !path.isAbsolute(binaryPath)
53
102
  || isScriptBinary(binaryPath);
@@ -66,7 +115,7 @@ export function resolveCliSpawnPlan(options: {
66
115
  shellArgs = allArgs;
67
116
  }
68
117
 
69
- const env = buildCliSpawnEnv(process.env, { ...(spawnConfig.env || {}), ...(extraEnv || {}) });
118
+ const env = buildCliSpawnEnv(process.env, { ...(baseEnv || {}), ...(extraEnv || {}) });
70
119
  // Some CLI agents, notably Hermes, route their tools through TERMINAL_CWD
71
120
  // rather than process.cwd(). Keep the generic ADHDev launch workspace as
72
121
  // the single source of truth so PTY cwd and tool cwd cannot diverge.
@@ -80,8 +129,8 @@ export function resolveCliSpawnPlan(options: {
80
129
  isWin,
81
130
  useShell,
82
131
  ptyOptions: {
83
- cols: DEFAULT_SESSION_HOST_COLS,
84
- rows: DEFAULT_SESSION_HOST_ROWS,
132
+ cols: geometry?.cols ?? DEFAULT_SESSION_HOST_COLS,
133
+ rows: geometry?.rows ?? DEFAULT_SESSION_HOST_ROWS,
85
134
  cwd: workingDir,
86
135
  env,
87
136
  },
@@ -18,6 +18,8 @@ export interface CliSessionStatus {
18
18
  activeModal: { message: string; buttons: string[] } | null;
19
19
  errorMessage?: string;
20
20
  errorReason?: string;
21
+ lastOutputAt?: number;
22
+ lastScreenChangeAt?: number;
21
23
  }
22
24
  export interface CliScripts {
23
25
  detectStatus?: (input: CliStatusInput) => string | null;
@@ -55,6 +57,8 @@ export interface CliScriptInput {
55
57
  rawBuffer: string;
56
58
  recentBuffer: string;
57
59
  screenText: string;
60
+ workspace?: string;
61
+ workingDir?: string;
58
62
  screen: CliScreenSnapshot;
59
63
  bufferScreen: CliScreenSnapshot;
60
64
  recentScreen: CliScreenSnapshot;
@@ -4,6 +4,7 @@ import { execSync } from 'child_process';
4
4
  import type { ProviderResumeCapability } from '../providers/contracts.js';
5
5
  import type { ChatMessageKind } from '../providers/chat-message-normalization.js';
6
6
  import type { ChatBubbleState } from '../types.js';
7
+ import type { InteractivePrompt } from '../providers/types/interactive-prompt.js';
7
8
  import { sanitizeSpawnEnv } from './spawn-env.js';
8
9
 
9
10
  export interface CliChatMessage {
@@ -28,8 +29,63 @@ export interface CliSessionStatus {
28
29
  messages: CliChatMessage[];
29
30
  workingDir: string;
30
31
  activeModal: { message: string; buttons: string[] } | null;
32
+ /**
33
+ * Monotonic counter identifying which approval *entry* the current modal
34
+ * belongs to. Bumped by the FSM on every fresh waiting_approval entry.
35
+ * Consumers (e.g. auto-approval) use it to distinguish a genuinely new
36
+ * approval from the same approval re-observed across TUI paint flaps —
37
+ * two distinct approvals can carry identical message/button text, so the
38
+ * seq is the only reliable discriminator.
39
+ */
40
+ approvalEntrySeq?: number;
41
+ /**
42
+ * The approval entry seq that the engine's last resolveModal() handled. When
43
+ * `lastResolvedEntrySeq >= approvalEntrySeq` (and approvalEntrySeq > 0) it is positive
44
+ * evidence that the current/latest approval entry was resolved through ADHDev (auto-approve
45
+ * fire, dashboard / mesh_approve, or dev-cli-debug — all route through resolveModal). The
46
+ * completion finalization gate uses this to avoid confirming a waiting_approval→idle
47
+ * transition for which no resolution actually occurred (a false idle: the spec's text-based
48
+ * approval→idle rule tripped while the modal is still on screen).
49
+ */
50
+ lastResolvedEntrySeq?: number;
51
+ activeInteractivePrompt?: InteractivePrompt | null;
52
+ pendingOutboundCount?: number;
53
+ pendingOutboundMessages?: Array<{
54
+ id: string;
55
+ role: 'user';
56
+ content: string;
57
+ queuedAt: number;
58
+ source: string;
59
+ }>;
31
60
  errorMessage?: string;
32
61
  errorReason?: string;
62
+ providerSessionId?: string;
63
+ /**
64
+ * Spec/FSM adapters only (SpecCliAdapter): true once the driver has observed
65
+ * its first non-initial idle state — the prompt is genuinely drawn. The
66
+ * legacy ProviderCliAdapter never sets it (undefined). CliProviderInstance
67
+ * uses it to re-arm the queue-claim agent:ready on the first genuine ready,
68
+ * independent of the boot-time starting→idle one-shot (which is consumed too
69
+ * early for specs whose initial state already reports status 'idle', e.g.
70
+ * antigravity-cli — without the re-arm the worker never claims its queued
71
+ * task and the coordinator relaunch-loops).
72
+ */
73
+ fsmReadySeen?: boolean;
74
+ /**
75
+ * Timestamp (ms) of the most recent raw PTY output chunk. Advances on every
76
+ * byte the process emits, including tool/build output that produces no
77
+ * parsed assistant text. Liveness watchdogs use this to distinguish a real
78
+ * stall (no output at all) from an active turn whose assistant buffer is
79
+ * momentarily static while a tool runs.
80
+ */
81
+ lastOutputAt?: number;
82
+ /**
83
+ * Timestamp (ms) of the most recent *visible* terminal screen change.
84
+ * Stricter than lastOutputAt — only advances when the rendered screen
85
+ * content actually differs, so repeated keepalive bytes do not register as
86
+ * progress. Preferred liveness signal for the no-progress watchdog.
87
+ */
88
+ lastScreenChangeAt?: number;
33
89
  bufferState?: {
34
90
  responseBuffer?: { truncated: boolean; droppedChars: number; maxChars: number };
35
91
  recentOutputBuffer?: { truncated: boolean; droppedChars: number; maxChars: number };
@@ -43,6 +99,9 @@ export interface ParsedSession {
43
99
  messages: any[];
44
100
  modal: { message: string; buttons: string[] } | null;
45
101
  parsedStatus: string | null;
102
+ errorMessage?: string;
103
+ errorReason?: string;
104
+ providerSessionId?: string;
46
105
  transcriptAuthority?: 'provider' | 'daemon';
47
106
  coverage?: 'full' | 'tail' | 'current-turn';
48
107
  }
@@ -94,6 +153,10 @@ export interface CliScriptInput {
94
153
  rawBuffer: string;
95
154
  recentBuffer: string;
96
155
  screenText: string;
156
+ workspace?: string;
157
+ workingDir?: string;
158
+ providerSessionId?: string;
159
+ historySessionId?: string;
97
160
  screen: CliScreenSnapshot;
98
161
  bufferScreen: CliScreenSnapshot;
99
162
  recentScreen: CliScreenSnapshot;
@@ -103,6 +166,7 @@ export interface CliScriptInput {
103
166
  promptText?: string;
104
167
  settings?: Record<string, any>;
105
168
  args?: Record<string, any>;
169
+ spawnAt?: number;
106
170
  }
107
171
 
108
172
  export interface CliStatusInput {
@@ -141,16 +205,26 @@ export interface CliProviderModule {
141
205
  binary: string;
142
206
  approvalKeys?: Record<number, string>;
143
207
  sendDelayMs?: number;
208
+ /** Wall-clock budget (ms) for a single provider script invocation. Default 50. Range 1..5000.
209
+ * Exceeding the budget records `timedOut: true` on the invocation trace and emits a
210
+ * throttled WARN — it does NOT abort the script (Node CJS can't interrupt sync code). */
211
+ scriptCallBudgetMs?: number;
144
212
  sendKey?: string;
145
213
  submitStrategy?: 'wait_for_echo' | 'immediate';
146
214
  /** Require the typed prompt to be visible on the PTY screen before sending Enter. */
147
215
  requirePromptEchoBeforeSubmit?: boolean;
148
216
  /** Allow sending another prompt while the CLI is still generating so users can intervene mid-turn. */
149
217
  allowInputDuringGeneration?: boolean;
218
+ /** When true, only transition to idle after the parsed transcript includes a final standard assistant message. */
219
+ requiresFinalAssistantBeforeIdle?: boolean;
220
+ /** When true, allow providers to augment stale snapshot data before parse. Reserved for future use. */
221
+ augmentStaleSnapshot?: boolean;
150
222
  /** When provider-owned, daemon treats provider parser output as canonical transcript authority. */
151
223
  transcriptAuthority?: 'provider' | 'daemon';
152
224
  /** Full context lets provider-owned parsers canonicalize retained history instead of daemon prefix stitching. */
153
225
  transcriptContext?: 'full' | 'tail';
226
+ /** v1 declarative tui block — used by CliScriptRunner to synthesize SDK helpers (declarativeDetectStatus, declarativeParseApproval). */
227
+ tui?: Record<string, unknown>;
154
228
  scripts?: CliScripts;
155
229
  spawn: {
156
230
  command: string;
@@ -342,7 +416,18 @@ export class TerminalTranscriptAccumulator {
342
416
  this.ensureRow();
343
417
  if (final === 'A') this.row = Math.max(0, this.row - count);
344
418
  else if (final === 'B') this.row += count;
345
- else if (final === 'C') this.col += count;
419
+ else if (final === 'C') {
420
+ // (fix) Cursor-forward must materialize spaces in the cells it
421
+ // skips, otherwise rendered transcripts collapse "Do you" written
422
+ // as "Do\x1b[1Cyou" into "Doyou". That mis-rendering broke
423
+ // Claude Code's approval-prompt and prompt-line detection
424
+ // (parseApproval saw "Doyouwanttoproceed?" and returned null).
425
+ const line = this.lines[this.row];
426
+ for (let c = this.col; c < this.col + count; c += 1) {
427
+ if (line[c] === undefined) line[c] = ' ';
428
+ }
429
+ this.col += count;
430
+ }
346
431
  else if (final === 'D') this.col = Math.max(0, this.col - count);
347
432
  else if (final === 'G') this.col = Math.max(0, count - 1);
348
433
  else if (final === 'H' || final === 'f') {
@@ -484,17 +569,42 @@ export function findBinary(name: string): string {
484
569
  return path.isAbsolute(expanded) ? expanded : path.resolve(expanded);
485
570
  }
486
571
  const isWin = os.platform() === 'win32';
487
- try {
488
- const cmd = isWin ? `where ${trimmed}` : `which ${trimmed}`;
489
- return execSync(cmd, {
490
- encoding: 'utf-8',
491
- timeout: 5000,
492
- stdio: ['pipe', 'pipe', 'pipe'],
493
- ...(isWin ? { windowsHide: true } : {}),
494
- }).trim().split('\n')[0].trim();
495
- } catch {
496
- return isWin ? `${trimmed}.cmd` : trimmed;
572
+ const paths = (process.env.PATH || '').split(path.delimiter);
573
+ // Also search well-known global-bin directories that are frequently NOT on
574
+ // the daemon's inherited PATH. A daemon running under one Node install (e.g.
575
+ // nvm) never sees another npm prefix's bin dir — notably npm's Windows
576
+ // default prefix at %APPDATA%\npm, where `npm i -g @openai/codex` lands. We
577
+ // append these after PATH (so explicit PATH entries still win) so that an
578
+ // npm-global CLI resolves to an absolute path; the spawn layer's .cmd-shim
579
+ // handling then launches it correctly regardless of PATH.
580
+ const extraDirs: string[] = [];
581
+ if (isWin) {
582
+ if (process.env.APPDATA) extraDirs.push(path.join(process.env.APPDATA, 'npm'));
583
+ try { extraDirs.push(path.dirname(process.execPath)); } catch { /* best-effort */ }
584
+ } else {
585
+ extraDirs.push(path.join(os.homedir(), '.npm-global', 'bin'));
586
+ extraDirs.push('/usr/local/bin', '/opt/homebrew/bin');
587
+ try { extraDirs.push(path.dirname(process.execPath)); } catch { /* best-effort */ }
588
+ }
589
+ const searchDirs = [...paths, ...extraDirs];
590
+ const exes = isWin ? ['.exe', '.cmd', '.bat', ''] : [''];
591
+
592
+ for (const p of searchDirs) {
593
+ if (!p) continue;
594
+ for (const ext of exes) {
595
+ const fullPath = path.join(p, trimmed + ext);
596
+ try {
597
+ const fs = require('fs');
598
+ if (fs.existsSync(fullPath)) {
599
+ const stat = fs.statSync(fullPath);
600
+ if (stat.isFile() && (isWin || (stat.mode & 0o111))) {
601
+ return fullPath;
602
+ }
603
+ }
604
+ } catch { }
605
+ }
497
606
  }
607
+ return isWin ? `${trimmed}.cmd` : trimmed;
498
608
  }
499
609
 
500
610
  export function isScriptBinary(binaryPath: string): boolean {
@@ -1,5 +1,6 @@
1
1
  import * as os from 'os';
2
2
  import { ensureNodePtySpawnHelperPermissions } from './spawn-env.js';
3
+ import { resolveWin32Executable } from './resolve-executable.js';
3
4
 
4
5
  let cachedPty: any | null | undefined;
5
6
 
@@ -119,7 +120,7 @@ export class NodePtyTransportFactory implements PtyTransportFactory {
119
120
  cwd = os.homedir();
120
121
  }
121
122
  }
122
- const handle = pty.spawn(command, args, {
123
+ const handle = pty.spawn(resolveWin32Executable(command), args, {
123
124
  name: 'xterm-256color',
124
125
  cols: options.cols,
125
126
  rows: options.rows,
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Shared win32 ConPTY paced-write chunking.
3
+ *
4
+ * A single unbounded ConPTY `write()` can overflow the console input pipe and
5
+ * drop LEADING bytes once the payload exceeds ~1KB — the "long task message gets
6
+ * truncated (head lost, tail kept)" failure. The fix is to split a large body
7
+ * into bounded chunks written with a short inter-chunk gap so the console input
8
+ * buffer keeps up. Small bodies still go out in a single write.
9
+ *
10
+ * This module is the SINGLE source of truth for the chunk size / gap / surrogate-
11
+ * safe split so the two write paths that need it — the spec FsmDriver
12
+ * (writeWin32Body) and the legacy ProviderCliAdapter (writeToPty / submit paths)
13
+ * — cannot drift apart and regress on one side (the original bug: "one branch
14
+ * patched, the other not").
15
+ */
16
+ 'use strict';
17
+
18
+ // Defensive paced PTY write tuning. 1024 chars per chunk stays comfortably under
19
+ // the ConPTY input-pipe threshold; an 8ms gap lets the console reader drain
20
+ // between chunks without adding meaningful latency to a normal-sized prompt.
21
+ export const WIN32_PTY_WRITE_CHUNK_CHARS = 1024;
22
+ export const WIN32_PTY_WRITE_CHUNK_GAP_MS = 8;
23
+
24
+ /** Split `text` into chunks of at most `size` UTF-16 units without ever cutting
25
+ * between a high and low surrogate (which would corrupt an astral char — emoji,
26
+ * etc. — on the UTF-8 PTY write). */
27
+ export function chunkPreservingSurrogates(text: string, size: number): string[] {
28
+ const chunks: string[] = [];
29
+ let offset = 0;
30
+ while (offset < text.length) {
31
+ let end = Math.min(text.length, offset + size);
32
+ if (end < text.length) {
33
+ const code = text.charCodeAt(end - 1);
34
+ // Boundary lands on a high surrogate → pull back one so the pair stays
35
+ // together in the next chunk.
36
+ if (code >= 0xd800 && code <= 0xdbff) end -= 1;
37
+ }
38
+ if (end <= offset) end = Math.min(text.length, offset + size); // size 1 on a lone surrogate
39
+ chunks.push(text.slice(offset, end));
40
+ offset = end;
41
+ }
42
+ return chunks;
43
+ }
44
+
45
+ /** True when a body of `length` UTF-16 units should be paced into multiple
46
+ * chunks on win32 rather than written in a single PTY write. */
47
+ export function shouldChunkWin32Write(length: number): boolean {
48
+ return length > WIN32_PTY_WRITE_CHUNK_CHARS;
49
+ }
50
+
51
+ /**
52
+ * Drive a paced, surrogate-safe chunked write of `text` over a `write(chunk)`
53
+ * sink, calling `onChunkWritten` after each chunk (e.g. to advance an input-
54
+ * activity timestamp) and `onDone` once the final chunk is out. The optional
55
+ * `setTimer` lets the caller own the timer handle (so it can be cleared on
56
+ * shutdown) and supply a custom scheduler in tests; it defaults to setTimeout.
57
+ *
58
+ * Bodies at or below the chunk threshold are written in a SINGLE write — the
59
+ * common case — so this is a no-op pacing wrapper for normal-sized prompts.
60
+ *
61
+ * Returns the chunks that will be written (useful for assertions/logging).
62
+ */
63
+ export interface PacedWin32WriteOptions {
64
+ write: (chunk: string) => void;
65
+ onChunkWritten?: () => void;
66
+ onDone?: () => void;
67
+ /** Schedule the next chunk; must return a handle the caller can clear.
68
+ * Defaults to setTimeout. */
69
+ setTimer?: (fn: () => void, delayMs: number) => ReturnType<typeof setTimeout>;
70
+ /** Store the pending timer handle so the caller can clear it on shutdown. */
71
+ onTimer?: (handle: ReturnType<typeof setTimeout> | null) => void;
72
+ chunkChars?: number;
73
+ gapMs?: number;
74
+ }
75
+
76
+ export function writeWin32Paced(text: string, opts: PacedWin32WriteOptions): string[] {
77
+ const chunkChars = opts.chunkChars ?? WIN32_PTY_WRITE_CHUNK_CHARS;
78
+ const gapMs = opts.gapMs ?? WIN32_PTY_WRITE_CHUNK_GAP_MS;
79
+ const setTimer = opts.setTimer ?? ((fn, delayMs) => setTimeout(fn, delayMs));
80
+
81
+ if (text.length <= chunkChars) {
82
+ opts.onTimer?.(null);
83
+ opts.write(text);
84
+ opts.onChunkWritten?.();
85
+ opts.onDone?.();
86
+ return [text];
87
+ }
88
+
89
+ const chunks = chunkPreservingSurrogates(text, chunkChars);
90
+ let idx = 0;
91
+ const writeNext = (): void => {
92
+ opts.onTimer?.(null);
93
+ if (idx >= chunks.length) { opts.onDone?.(); return; }
94
+ opts.write(chunks[idx]);
95
+ opts.onChunkWritten?.();
96
+ idx += 1;
97
+ if (idx < chunks.length) {
98
+ const handle = setTimer(writeNext, gapMs);
99
+ opts.onTimer?.(handle);
100
+ } else {
101
+ opts.onDone?.();
102
+ }
103
+ };
104
+ writeNext();
105
+ return chunks;
106
+ }