@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
@@ -0,0 +1,230 @@
1
+ /**
2
+ * RF-ROUTER MED family — fast-forward / refine convergence commands.
3
+ *
4
+ * mesh_init, plan_mesh_refine_node, fast_forward_mesh_node, refine_mesh_node and
5
+ * batch_refine_mesh_nodes. These resolve the target node, forward to the owning
6
+ * daemon when the node is remote, and run (or plan) the fast-forward / refine
7
+ * convergence. Extracted verbatim from executeDaemonCommand; the async execute
8
+ * paths delegate back to the router's refine-job starters via ctx.
9
+ */
10
+ import { daemonIdsEquivalent, meshNodeIdMatches } from '@adhdev/mesh-shared';
11
+ import { fastForwardMeshNode } from '../../mesh/mesh-fast-forward.js';
12
+ import { runMeshInit } from '../../mesh/mesh-init.js';
13
+ import { detectCLIs } from '../../detection/cli-detector.js';
14
+ import { buildMeshRefineValidationPlan } from '../router.js';
15
+ import type { CommandRouterResult } from '../router.js';
16
+ import type { MedFamilyContext, MedFamilyHandler } from './types.js';
17
+
18
+ export const fastForwardHandlers: Record<string, MedFamilyHandler> = {
19
+ mesh_init: async (ctx: MedFamilyContext, args: any) => {
20
+ const workspace = typeof args?.workspace === 'string' && args.workspace.trim() ? args.workspace.trim() : process.cwd();
21
+ const mesh = args?.inlineMesh || {};
22
+ try {
23
+ const detected = await detectCLIs(ctx.deps.providerLoader, { includeVersion: true });
24
+ return { ...runMeshInit(mesh, workspace, detected, {
25
+ write: args?.write === true,
26
+ overwrite: args?.overwrite === true,
27
+ }) };
28
+ } catch (e: any) {
29
+ return { success: false, error: e?.message || String(e) };
30
+ }
31
+ },
32
+
33
+ plan_mesh_refine_node: async (ctx: MedFamilyContext, args: any) => {
34
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
35
+ const nodeId = typeof args?.nodeId === 'string' ? args.nodeId.trim() : '';
36
+ if (!meshId || !nodeId) return { success: false, error: 'meshId and nodeId required' };
37
+ // preferInline: plan is the dry-run sibling of refine — clone nodes must resolve.
38
+ const meshRecord = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
39
+ const mesh = meshRecord?.mesh;
40
+ const node = mesh?.nodes?.find((n: any) => meshNodeIdMatches(n, nodeId));
41
+ if (!node?.workspace) return { success: false, error: `Node '${nodeId}' workspace not found` };
42
+ return {
43
+ success: true,
44
+ dryRun: true,
45
+ nodeId,
46
+ workspace: node.workspace,
47
+ validationPlan: buildMeshRefineValidationPlan(mesh, node.workspace),
48
+ mergeWillRun: false,
49
+ cleanupWillRun: false,
50
+ };
51
+ },
52
+
53
+ fast_forward_mesh_node: async (ctx: MedFamilyContext, args: any) => {
54
+ // The whole handler is wrapped: the safety-gate evaluation (mesh resolution,
55
+ // git status/stash/submodule fan-out) can throw on some platforms — notably a
56
+ // win32 daemon whose git invocation parsing or slow submodule probe raises
57
+ // before fastForwardMeshNode's own guarded body runs. router.execute re-throws,
58
+ // so an escaping throw surfaces to the coordinator as an opaque
59
+ // "Daemon IPC command failed" instead of the structured blockingReasons result
60
+ // a mac node returns cleanly. Catch it and return the same blocked shape so the
61
+ // coordinator can read the reason and route, never an IPC crash. Mirrors the
62
+ // mesh_init handler's try-catch contract.
63
+ const workspaceForError = typeof args?.workspace === 'string' ? args.workspace.trim() : '';
64
+ const meshIdForError = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
65
+ const nodeIdForError = typeof args?.nodeId === 'string' ? args.nodeId.trim() : '';
66
+ try {
67
+ const meshId = meshIdForError;
68
+ const nodeId = nodeIdForError;
69
+ let workspace = workspaceForError;
70
+ let submoduleIgnorePaths = Array.isArray(args?.submoduleIgnorePaths)
71
+ ? args.submoduleIgnorePaths.filter((value: unknown): value is string => typeof value === 'string')
72
+ : undefined;
73
+ let nodeDaemonId: string | undefined;
74
+ let allowAutoPublishSubmoduleMainCommits = false;
75
+ if (meshId && nodeId) {
76
+ // preferInline so fast-forward can resolve inline-cache-only clone worktree nodes.
77
+ const meshRecord = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
78
+ const mesh = meshRecord?.mesh;
79
+ const node = mesh?.nodes?.find((n: any) => meshNodeIdMatches(n, nodeId));
80
+ if (!workspace) {
81
+ workspace = typeof node?.workspace === 'string' ? node.workspace.trim() : '';
82
+ }
83
+ if (!submoduleIgnorePaths && Array.isArray(node?.policy?.submoduleIgnorePaths)) {
84
+ submoduleIgnorePaths = node.policy.submoduleIgnorePaths.filter((value: unknown): value is string => typeof value === 'string');
85
+ }
86
+ allowAutoPublishSubmoduleMainCommits = mesh?.policy?.allowAutoPublishSubmoduleMainCommits === true;
87
+ nodeDaemonId = typeof node?.daemonId === 'string' ? node.daemonId.trim() : undefined;
88
+ }
89
+ // If the target node belongs to a remote daemon, forward the command there.
90
+ // _meshDirectDispatch prevents re-forwarding (and P2P self-dial) when the stored
91
+ // daemonId uses a legacy format that doesn't match the receiving daemon's identity.
92
+ const selfDaemonId = ctx.deps.statusInstanceId;
93
+ // daemonIdsEquivalent: a legacy-form stored daemonId that resolves to THIS
94
+ // machine's core must be treated as local (not remote) so it is not forwarded /
95
+ // P2P self-dialed. Equivalent → local.
96
+ const isRemote = nodeDaemonId && selfDaemonId && !daemonIdsEquivalent(nodeDaemonId, selfDaemonId);
97
+ if (isRemote && ctx.deps.dispatchMeshCommand && !args?._meshDirectDispatch) {
98
+ const forwarded = await ctx.deps.dispatchMeshCommand(nodeDaemonId!, 'fast_forward_mesh_node', {
99
+ ...(typeof args === 'object' && args !== null ? args as Record<string, unknown> : {}),
100
+ workspace,
101
+ _meshDirectDispatch: true,
102
+ });
103
+ return (forwarded ?? { success: false, error: 'no response from remote node' }) as CommandRouterResult;
104
+ }
105
+ const result = await (fastForwardMeshNode({
106
+ meshId: meshId || undefined,
107
+ nodeId: nodeId || undefined,
108
+ workspace,
109
+ branch: typeof args?.branch === 'string' ? args.branch : undefined,
110
+ execute: args?.execute === true,
111
+ dryRun: args?.dryRun === true,
112
+ updateSubmodules: args?.updateSubmodules === true,
113
+ submoduleIgnorePaths,
114
+ mode: args?.mode === 'push' ? 'push' : 'merge',
115
+ pushSubmodules: args?.pushSubmodules === true,
116
+ allowAutoPublishSubmoduleMainCommits,
117
+ }) as Promise<unknown>);
118
+ return result as CommandRouterResult;
119
+ } catch (e: any) {
120
+ const errorMessage = e?.message || String(e);
121
+ return {
122
+ success: false,
123
+ code: 'fast_forward_safety_gate_error',
124
+ ...(meshIdForError ? { meshId: meshIdForError } : {}),
125
+ ...(nodeIdForError ? { nodeId: nodeIdForError } : {}),
126
+ workspace: workspaceForError,
127
+ mode: args?.mode === 'push' ? 'push' : 'merge',
128
+ allowed: false,
129
+ willRun: false,
130
+ executed: false,
131
+ // Surface the throw as a blocking reason instead of an opaque IPC crash
132
+ // so the coordinator gets the same structured shape a clean node returns.
133
+ blockingReasons: ['fast_forward_safety_gate_error'],
134
+ operationError: errorMessage,
135
+ error: errorMessage,
136
+ } as CommandRouterResult;
137
+ }
138
+ },
139
+
140
+ refine_mesh_node: async (ctx: MedFamilyContext, args: any) => {
141
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
142
+ const nodeId = typeof args?.nodeId === 'string' ? args.nodeId.trim() : '';
143
+ if (!meshId || !nodeId) return { success: false, error: 'meshId and nodeId required' };
144
+
145
+ // Remote forward: a worktree node lives on its OWN daemon's machine, so the
146
+ // refine (cd into node.workspace, merge → push → cleanup) must run on THAT
147
+ // daemon — not the coordinator, whose filesystem has no such path. The sibling
148
+ // fast_forward_mesh_node / clone_mesh_node handlers already forward to the
149
+ // node's daemon; refine_mesh_node was the gap (the coordinator would cd into a
150
+ // non-existent local path and fail), so remote-machine worktrees could not be
151
+ // converged at all. Forward both dry-run (plan reads the worktree git state)
152
+ // and execute (async merge job) so the same machine that owns the worktree
153
+ // resolves it.
154
+ //
155
+ // coordinatorDaemonId: refine is ASYNC — the completed/failed event is queued
156
+ // on the executing daemon's pending-events queue scoped to a coordinator id and
157
+ // recovered by the coordinator's reconcile loop (pullRemoteNodeQueues →
158
+ // get_pending_mesh_events). Without stamping our own status id, the remote
159
+ // daemon would fall back to ITS OWN statusInstanceId as the coordinator
160
+ // (startMeshRefineJob), scoping the terminal event to the wrong inbox where the
161
+ // real coordinator never pulls it. Stamp the canonical status id (which is in
162
+ // the coordinator's self-identity set used to scope the remote drain) so the
163
+ // event routes back here. Preserve any caller-supplied coordinatorDaemonId.
164
+ //
165
+ // _meshDirectDispatch prevents re-forwarding (and P2P self-dial) once the call
166
+ // has landed on the owning daemon — that daemon then executes locally even if
167
+ // the stored daemonId uses a legacy form that doesn't match its own identity.
168
+ {
169
+ const meshRecordForForward = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
170
+ const forwardNode = meshRecordForForward?.mesh?.nodes?.find((n: any) => meshNodeIdMatches(n, nodeId));
171
+ const nodeDaemonId = typeof forwardNode?.daemonId === 'string' ? forwardNode.daemonId.trim() : undefined;
172
+ const selfDaemonId = ctx.deps.statusInstanceId;
173
+ // daemonIdsEquivalent: a legacy-form daemonId resolving to this machine's core
174
+ // is local — execute locally instead of forwarding. Equivalent → local.
175
+ const isRemote = nodeDaemonId && selfDaemonId && !daemonIdsEquivalent(nodeDaemonId, selfDaemonId);
176
+ if (isRemote && ctx.deps.dispatchMeshCommand && !args?._meshDirectDispatch) {
177
+ const callerCoordinatorDaemonId = typeof args?.coordinatorDaemonId === 'string' && args.coordinatorDaemonId.trim()
178
+ ? args.coordinatorDaemonId.trim()
179
+ : undefined;
180
+ const forwarded = await ctx.deps.dispatchMeshCommand(nodeDaemonId!, 'refine_mesh_node', {
181
+ ...(typeof args === 'object' && args !== null ? args as Record<string, unknown> : {}),
182
+ coordinatorDaemonId: callerCoordinatorDaemonId || selfDaemonId,
183
+ _meshDirectDispatch: true,
184
+ });
185
+ return (forwarded ?? { success: false, error: 'no response from remote node' }) as CommandRouterResult;
186
+ }
187
+ }
188
+
189
+ // Dry-run (plan-only) is the default and stays synchronous: it does no
190
+ // validation/merge/push and returns the plan instantly. Only execute=true
191
+ // (and not dry_run) goes through the async refine job that actually
192
+ // validates → merges → pushes → cleans up. Mirrors the
193
+ // batch_refine_mesh_nodes / fast_forward_mesh_node dry_run/execute contract.
194
+ const isDryRun = args?.dryRun !== false && args?.execute !== true;
195
+ if (isDryRun) {
196
+ // preferInline: plan is the dry-run sibling of refine — clone nodes must resolve.
197
+ const meshRecord = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
198
+ const mesh = meshRecord?.mesh;
199
+ const node = mesh?.nodes?.find((n: any) => meshNodeIdMatches(n, nodeId));
200
+ if (!node?.workspace) return { success: false, error: `Node '${nodeId}' workspace not found` };
201
+ return {
202
+ success: true,
203
+ dryRun: true,
204
+ nodeId,
205
+ workspace: node.workspace,
206
+ validationPlan: buildMeshRefineValidationPlan(mesh, node.workspace),
207
+ mergeWillRun: false,
208
+ cleanupWillRun: false,
209
+ hint: 'Dry-run only — no merge/push/cleanup performed. Re-invoke with execute:true to converge this node.',
210
+ };
211
+ }
212
+ return ctx.startMeshRefineJob(meshId, nodeId, args);
213
+ },
214
+
215
+ batch_refine_mesh_nodes: async (ctx: MedFamilyContext, args: any) => {
216
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
217
+ if (!meshId) return { success: false, error: 'meshId required' };
218
+ const requestedNodeIds = Array.isArray(args?.nodeIds)
219
+ ? (args.nodeIds as unknown[]).filter((v): v is string => typeof v === 'string' && v.trim().length > 0).map(v => v.trim())
220
+ : undefined;
221
+ // Dry-run (plan-only) stays synchronous: it does no validation/merge and
222
+ // returns instantly. Execute goes through the async batch job — immediate
223
+ // {async:true, status:'accepted'} + background convergence + terminal event,
224
+ // matching the single-node refine_mesh_node contract so long validation
225
+ // suites can't time out the IPC and strand the coordinator.
226
+ const isDryRun = args?.dryRun !== false && args?.execute !== true;
227
+ if (isDryRun) return ctx.batchRefineMeshNodes(meshId, requestedNodeIds, args);
228
+ return ctx.startMeshRefineBatchJob(meshId, requestedNodeIds, args);
229
+ },
230
+ };
@@ -0,0 +1,163 @@
1
+ /**
2
+ * RF-ROUTER MED family — IDE lifecycle + provider/IDE detection commands.
3
+ *
4
+ * stop_ide, restart_ide, launch_ide, detect_provider, detect_ides. launch_ide
5
+ * spawns the IDE, connects CDP, registers extension providers and refreshes
6
+ * detection. restart_ide stops (with kill) then launches.
7
+ *
8
+ * launch_ide self-recursion: the original case bodies for restart_session
9
+ * (cli-agent family) and restart_ide re-entered `executeDaemonCommand('launch_ide')`.
10
+ * Lifting the launch_ide body into the module-level `launchIde(ctx, args)` helper
11
+ * lets those handlers invoke the launch directly (ctx.launchIde) without recursing
12
+ * back through the registry, while the launch_ide handler simply delegates to it.
13
+ */
14
+ import { DaemonCdpManager } from '../../cdp/manager.js';
15
+ import { registerExtensionProviders } from '../../cdp/setup.js';
16
+ import { launchWithCdp } from '../../launch.js';
17
+ import { loadConfig } from '../../config/config.js';
18
+ import { loadState, saveState } from '../../config/state-store.js';
19
+ import { resolveIdeLaunchWorkspace } from '../../config/workspaces.js';
20
+ import { appendRecentActivity } from '../../config/recent-activity.js';
21
+ import { detectIDEs } from '../../detection/ide-detector.js';
22
+ import { detectCLI } from '../../detection/cli-detector.js';
23
+ import { LOG } from '../../logging/logger.js';
24
+ import type { CommandRouterResult } from '../router.js';
25
+ import type { MedFamilyContext, MedFamilyHandler } from './types.js';
26
+
27
+ /**
28
+ * IDE launch + CDP connect. Lifted verbatim from the original `launch_ide` switch
29
+ * case so restart_session / restart_ide can call it directly instead of recursing
30
+ * through executeDaemonCommand. Reads the router's CDP managers and detection
31
+ * caches via ctx.deps.
32
+ */
33
+ export async function launchIde(ctx: MedFamilyContext, args: any): Promise<CommandRouterResult> {
34
+ const ideKey = args?.ideId || args?.ideType;
35
+ const resolvedWorkspace = resolveIdeLaunchWorkspace(
36
+ {
37
+ workspace: args?.workspace,
38
+ workspaceId: args?.workspaceId,
39
+ useDefaultWorkspace: args?.useDefaultWorkspace,
40
+ },
41
+ loadConfig(),
42
+ );
43
+ const launchArgs = {
44
+ ideId: ideKey,
45
+ workspace: resolvedWorkspace,
46
+ newWindow: args?.newWindow,
47
+ };
48
+ LOG.info('LaunchIDE', `target=${ideKey || 'auto'}`);
49
+ const result = await launchWithCdp(launchArgs);
50
+
51
+ if (result.success && result.port && result.ideId && !ctx.deps.cdpManagers.has(result.ideId)) {
52
+ const logFn = ctx.deps.getCdpLogFn
53
+ ? ctx.deps.getCdpLogFn(result.ideId)
54
+ : LOG.forComponent(`CDP:${result.ideId}`).asLogFn();
55
+ const provider = ctx.deps.providerLoader.getMeta(result.ideId);
56
+ const manager = new DaemonCdpManager(result.port, logFn, undefined, provider?.targetFilter);
57
+ const connected = await manager.connect();
58
+ if (connected) {
59
+ // Register active extension providers for this IDE in CDP manager
60
+ registerExtensionProviders(ctx.deps.providerLoader, manager, result.ideId);
61
+ ctx.deps.cdpManagers.set(result.ideId, manager);
62
+ LOG.info('CDP', `Connected: ${result.ideId} (port ${result.port})`);
63
+ LOG.info('CDP', `${ctx.deps.cdpManagers.size} IDE(s) connected`);
64
+
65
+ // Notify consumer (e.g. setupIdeInstance)
66
+ ctx.deps.onCdpManagerCreated?.(result.ideId, manager);
67
+ }
68
+ }
69
+ ctx.deps.onIdeConnected?.();
70
+ try {
71
+ const results = await detectIDEs(ctx.deps.providerLoader);
72
+ ctx.deps.detectedIdes.value = results;
73
+ ctx.deps.providerLoader.setIdeDetectionResults(results, true);
74
+ } catch { /* ignore detection refresh errors */ }
75
+ if (result.success && resolvedWorkspace) {
76
+ try {
77
+ const next = appendRecentActivity(loadState(), {
78
+ kind: 'ide',
79
+ providerType: result.ideId || ideKey,
80
+ providerName: result.ideId || ideKey,
81
+ workspace: resolvedWorkspace,
82
+ title: result.ideId || ideKey,
83
+ });
84
+ saveState(next);
85
+ } catch { /* ignore activity persist errors */ }
86
+ } else if (result.success && (result.ideId || ideKey)) {
87
+ try {
88
+ saveState(appendRecentActivity(loadState(), {
89
+ kind: 'ide',
90
+ providerType: result.ideId || ideKey,
91
+ providerName: result.ideId || ideKey,
92
+ title: result.ideId || ideKey,
93
+ }));
94
+ } catch { /* ignore activity persist errors */ }
95
+ }
96
+ return { ...result };
97
+ }
98
+
99
+ export const ideHandlers: Record<string, MedFamilyHandler> = {
100
+ // ─── IDE stop ───
101
+ stop_ide: async (ctx: MedFamilyContext, args: any) => {
102
+ const ideType = args?.ideType;
103
+ if (!ideType) throw new Error('ideType required');
104
+ const killProcess = args?.killProcess !== false; // default true
105
+ await ctx.stopIde(ideType, killProcess);
106
+ try {
107
+ const results = await detectIDEs(ctx.deps.providerLoader);
108
+ ctx.deps.detectedIdes.value = results;
109
+ ctx.deps.providerLoader.setIdeDetectionResults(results, true);
110
+ } catch { /* ignore detection refresh errors */ }
111
+ return { success: true, ideType, stopped: true, processKilled: killProcess };
112
+ },
113
+
114
+ // ─── IDE restart ───
115
+ restart_ide: async (ctx: MedFamilyContext, args: any) => {
116
+ const ideType = args?.ideType;
117
+ if (!ideType) throw new Error('ideType required');
118
+ await ctx.stopIde(ideType, true); // always kill process on restart
119
+ const launchResult = await ctx.launchIde({ ideType, enableCdp: true, workspace: args?.workspace });
120
+ return { success: true, ideType, restarted: true, launch: launchResult };
121
+ },
122
+
123
+ // ─── IDE launch + CDP connect ───
124
+ launch_ide: async (ctx: MedFamilyContext, args: any) => {
125
+ return launchIde(ctx, args);
126
+ },
127
+
128
+ // ─── Detect providers ───
129
+ detect_provider: async (ctx: MedFamilyContext, args: any) => {
130
+ const providerType = typeof args?.providerType === 'string' ? args.providerType.trim() : '';
131
+ if (!providerType) return { success: false, error: 'providerType is required' };
132
+ const normalizedType = ctx.deps.providerLoader.resolveAlias(providerType);
133
+ const provider = ctx.deps.providerLoader.getByAlias(providerType);
134
+ if (!provider) return { success: false, error: `Provider not found: ${providerType}` };
135
+ if (provider.category !== 'cli' && provider.category !== 'acp') {
136
+ return { success: false, error: `Provider detection is only supported for CLI/ACP providers: ${providerType}` };
137
+ }
138
+ if (!ctx.deps.providerLoader.isMachineProviderEnabled(normalizedType)) {
139
+ return { success: false, error: `Provider is disabled on this machine: ${providerType}` };
140
+ }
141
+ const detected = await detectCLI(normalizedType, ctx.deps.providerLoader, { includeVersion: false });
142
+ ctx.deps.providerLoader.setCliDetectionResults([{
143
+ id: normalizedType,
144
+ installed: !!detected,
145
+ path: detected?.path,
146
+ }], false);
147
+ ctx.deps.onStatusChange?.();
148
+ return {
149
+ success: true,
150
+ providerType: normalizedType,
151
+ detected: !!detected,
152
+ path: detected?.path || null,
153
+ };
154
+ },
155
+
156
+ // ─── Detect IDEs ───
157
+ detect_ides: async (ctx: MedFamilyContext, _args: any) => {
158
+ const results = await detectIDEs(ctx.deps.providerLoader);
159
+ ctx.deps.detectedIdes.value = results;
160
+ ctx.deps.providerLoader.setIdeDetectionResults(results, true);
161
+ return { success: true, detectedInfo: results };
162
+ },
163
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * RF-ROUTER MED family — command registry.
3
+ *
4
+ * Aggregates the medium-coupling command handlers extracted from
5
+ * DaemonCommandRouter.executeDaemonCommand into a single cmd → handler map. The
6
+ * router consults this registry after the LOW-family registry and before its
7
+ * switch (registry hit → return the handler result; miss → fall through to the
8
+ * remaining switch / CommandHandler delegation), so the facade and dispatch
9
+ * semantics are unchanged.
10
+ *
11
+ * MED handlers differ from LOW handlers in that they need router-private
12
+ * collaborators (mesh resolution, owner gating, inline-cache mutation, worktree /
13
+ * session cleanup, refine job starters, IDE launch). The router binds those onto
14
+ * MedFamilyContext at dispatch — see types.ts.
15
+ */
16
+ import { cliAgentHandlers } from './cli-agent.js';
17
+ import { ideHandlers } from './ide.js';
18
+ import { meshCrudHandlers } from './mesh-crud.js';
19
+ import { meshHostPairingHandlers } from './mesh-host-pairing.js';
20
+ import { meshQueueHandlers } from './mesh-queue.js';
21
+ import { fastForwardHandlers } from './fast-forward.js';
22
+ import { meshRestartHandlers } from './mesh-restart.js';
23
+ import type { MedFamilyRegistry } from './types.js';
24
+
25
+ export type { MedFamilyContext, MedFamilyHandler, MedFamilyRegistry } from './types.js';
26
+
27
+ export const medFamilyRegistry: MedFamilyRegistry = new Map(
28
+ Object.entries({
29
+ ...cliAgentHandlers,
30
+ ...ideHandlers,
31
+ ...meshCrudHandlers,
32
+ ...meshHostPairingHandlers,
33
+ ...meshQueueHandlers,
34
+ ...fastForwardHandlers,
35
+ ...meshRestartHandlers,
36
+ }),
37
+ );