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

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 +66 -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 +53556 -19074
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +53380 -19063
  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 +1309 -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,80 @@
1
+ /**
2
+ * RF-ROUTER HIGH family — shared types for the extracted high-coupling command
3
+ * handlers. Like the LOW and MED families, each handler is a function of
4
+ * (context, args) that returns the exact CommandRouterResult the original
5
+ * `executeDaemonCommand` switch case returned, so the router facade is unchanged.
6
+ *
7
+ * HIGH handlers are the most router-coupled of the three families: in addition to
8
+ * the MED collaborators (mesh resolution, owner gating, inline-cache), they reach
9
+ * the router's aggregate-status memory cache and running-refine-job table — state
10
+ * the router owns and the `mesh_status` aggregate render and `get_mesh_review_inbox`
11
+ * re-entry both depend on. The router binds those onto HighFamilyContext at
12
+ * dispatch; they are NOT reachable from `deps`.
13
+ *
14
+ * Registry dispatch: DaemonCommandRouter.executeDaemonCommand looks up the cmd in
15
+ * highFamilyRegistry AFTER the LOW and MED registries and BEFORE its remaining
16
+ * switch; a hit returns the handler result, a miss falls through to the switch
17
+ * (and ultimately CommandHandler delegation).
18
+ */
19
+ import type {
20
+ CommandRouterDeps,
21
+ CommandRouterResult,
22
+ MeshGitProbeCache,
23
+ MeshRefineJobHandle,
24
+ } from '../router.js';
25
+ import type { ResolvedMeshForCommand } from '../med-family/types.js';
26
+
27
+ /**
28
+ * Router-private collaborators injected at dispatch. Each is a bound method or
29
+ * field of DaemonCommandRouter; handlers that don't need a given collaborator
30
+ * simply ignore it. The router owns this instance state (inline-mesh cache,
31
+ * aggregate-status memory cache, running-refine-job table, git-probe cache), so
32
+ * it cannot be read from `deps` — the registry receives bound references instead.
33
+ */
34
+ export interface HighFamilyContext {
35
+ deps: CommandRouterDeps;
36
+
37
+ /** Bound `DaemonCommandRouter.getMeshForCommand`. */
38
+ getMeshForCommand: (
39
+ meshId: string,
40
+ inlineMesh?: unknown,
41
+ options?: { preferInline?: boolean },
42
+ ) => Promise<ResolvedMeshForCommand>;
43
+
44
+ /** Bound `DaemonCommandRouter.getCachedAggregateMeshStatus`. */
45
+ getCachedAggregateMeshStatus: (
46
+ meshId: string,
47
+ mesh?: any,
48
+ options?: { requireDirectPeerTruth?: boolean; allowStalePending?: boolean },
49
+ ) => any | null;
50
+
51
+ /** Bound `DaemonCommandRouter.rememberAggregateMeshStatus`. */
52
+ rememberAggregateMeshStatus: (meshId: string, snapshot: any, refreshReason: string) => any;
53
+
54
+ /**
55
+ * Bound `DaemonCommandRouter.execute`. `get_mesh_review_inbox` re-enters the
56
+ * router with a `mesh_status` refresh to obtain computed node fields; this is
57
+ * the same self-call the inlined case made.
58
+ */
59
+ execute: (cmd: string, args: any, source?: string) => Promise<CommandRouterResult>;
60
+
61
+ /** Router's aggregate-status memory cache (`.has()` probe in mesh_status). */
62
+ aggregateMeshStatusCache: Map<string, { builtAt: number; snapshot: any; queueRevision: string }>;
63
+
64
+ /** Meshes with a background SWR freshen already in flight — coalesces the
65
+ * async refresh a stale-serve interactive open kicks off. */
66
+ swrRefreshInFlight: Set<string>;
67
+
68
+ /** Router's running-refine-job table (surfaced as activeRefineJobs in mesh_status). */
69
+ runningRefineJobs: Map<string, MeshRefineJobHandle>;
70
+
71
+ /** Router's inline-mesh cache (launch_mesh_coordinator caches cloud inline mesh). */
72
+ inlineMeshCache: Map<string, any>;
73
+
74
+ /** Router's mesh git-probe cache (shared probe dedup for mesh_status). */
75
+ meshGitProbeCache: MeshGitProbeCache;
76
+ }
77
+
78
+ export type HighFamilyHandler = (ctx: HighFamilyContext, args: any) => Promise<CommandRouterResult | null>;
79
+
80
+ export type HighFamilyRegistry = Map<string, HighFamilyHandler>;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * RF-ROUTER LOW family — coordinator-prompt override/append file commands.
3
+ *
4
+ * Extracted verbatim from DaemonCommandRouter.executeDaemonCommand. Both handlers
5
+ * read/write only the on-disk ~/.adhdev/coordinator-prompts directory (no router
6
+ * instance state) and return the same CommandRouterResult the inlined cases did.
7
+ */
8
+ import type { LowFamilyContext, LowFamilyHandler } from './types.js';
9
+
10
+ export const coordinatorPromptHandlers: Record<string, LowFamilyHandler> = {
11
+ /**
12
+ * Render the coordinator system prompt for a mesh + CLI type, so the
13
+ * dashboard can show the operator exactly what a coordinator session
14
+ * receives by default. This resolves the mesh, applies its repo-mesh
15
+ * config, and runs the SAME buildCoordinatorSystemPrompt the launch path
16
+ * uses — minus the runtime-only best-effort sections (mission / recent
17
+ * activity / operating notes), which are launch-scope and not part of the
18
+ * static "default base" an operator is trying to preview here.
19
+ *
20
+ * It respects mesh-level and user-file override/append layering, so the
21
+ * preview reflects the effective prompt: with no overrides configured it
22
+ * shows the pure daemon default; with an override set it shows that.
23
+ */
24
+ coordinator_prompt_preview: async (ctx: LowFamilyContext, args: any) => {
25
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
26
+ const cliType = typeof args?.cliType === 'string' && args.cliType.trim() ? args.cliType.trim() : 'claude-cli';
27
+ if (!meshId) return { success: false, error: 'meshId required' };
28
+ try {
29
+ // Prefer the router-bound resolver (inline cache aware); fall back to
30
+ // local config when a bare context is used (e.g. unit tests).
31
+ let mesh: any = null;
32
+ if (ctx.getMeshForCommand) {
33
+ const resolved = await ctx.getMeshForCommand(meshId);
34
+ mesh = resolved?.mesh ?? null;
35
+ }
36
+ if (!mesh) {
37
+ const { getMesh } = await import('../../config/mesh-config.js');
38
+ mesh = getMesh(meshId);
39
+ }
40
+ if (!mesh) return { success: false, error: `mesh not found: ${meshId}` };
41
+
42
+ // Apply the on-disk repo-mesh config overlay exactly as launch does,
43
+ // so policy/nodes reflect the effective mesh.
44
+ let effectiveMesh = mesh;
45
+ try {
46
+ const { loadRepoMeshJsonConfig, applyRepoMeshConfig } = await import('../../config/mesh-json-config.js');
47
+ const workspace = typeof mesh?.workspace === 'string' ? mesh.workspace : undefined;
48
+ if (workspace) {
49
+ const loaded = loadRepoMeshJsonConfig(workspace);
50
+ if (loaded?.sourceType !== 'invalid') {
51
+ effectiveMesh = applyRepoMeshConfig(mesh, loaded?.config);
52
+ }
53
+ }
54
+ } catch { /* overlay is best-effort — fall back to the raw mesh */ }
55
+
56
+ const { buildCoordinatorSystemPrompt } = await import('../../mesh/coordinator-prompt.js');
57
+ const prompt = buildCoordinatorSystemPrompt({ mesh: effectiveMesh, coordinatorCliType: cliType });
58
+ return { success: true, prompt, cliType, meshId, bytes: Buffer.byteLength(prompt, 'utf8') };
59
+ } catch (error: any) {
60
+ return { success: false, error: error?.message || String(error) };
61
+ }
62
+ },
63
+
64
+ list_coordinator_prompts: async (_ctx: LowFamilyContext, _args: any) => {
65
+ const fs = await import('node:fs');
66
+ const path = await import('node:path');
67
+ const os = await import('node:os');
68
+ const dir = path.join(os.homedir(), '.adhdev', 'coordinator-prompts');
69
+ const entries: Record<string, { override: string; append: string }> = {};
70
+ try {
71
+ if (fs.existsSync(dir)) {
72
+ for (const name of fs.readdirSync(dir)) {
73
+ // Bucket files into <key>.{md|append.md}; ignore others
74
+ // so a stray README or .DS_Store doesn't show up.
75
+ const matchOverride = name.match(/^([a-zA-Z0-9_.-]+)\.md$/);
76
+ const matchAppend = name.match(/^([a-zA-Z0-9_.-]+)\.append\.md$/);
77
+ // append-pattern wins when both match (file is `.append.md`).
78
+ const m = matchAppend || matchOverride;
79
+ if (!m) continue;
80
+ const isAppend = !!matchAppend;
81
+ const key = m[1];
82
+ const full = path.join(dir, name);
83
+ let content = '';
84
+ try { content = fs.readFileSync(full, 'utf8'); } catch { /* skip */ }
85
+ if (!entries[key]) entries[key] = { override: '', append: '' };
86
+ if (isAppend) entries[key].append = content;
87
+ else entries[key].override = content;
88
+ }
89
+ }
90
+ } catch (error: any) {
91
+ return { success: false, error: error?.message || String(error) };
92
+ }
93
+ return { success: true, dir, entries };
94
+ },
95
+
96
+ write_coordinator_prompt: async (_ctx: LowFamilyContext, args: any) => {
97
+ const fs = await import('node:fs');
98
+ const path = await import('node:path');
99
+ const os = await import('node:os');
100
+ const key = typeof args?.key === 'string' ? args.key.trim() : '';
101
+ const kind = args?.kind === 'append' ? 'append' : 'override';
102
+ const content = typeof args?.content === 'string' ? args.content : '';
103
+ // Whitelist key chars so a malicious caller can't write
104
+ // ../../etc/passwd. Same charset readUserPromptFile accepts.
105
+ if (!key || !/^[a-zA-Z0-9_.-]+$/.test(key)) {
106
+ return { success: false, error: 'key must match [a-zA-Z0-9_.-]+' };
107
+ }
108
+ const dir = path.join(os.homedir(), '.adhdev', 'coordinator-prompts');
109
+ const filename = kind === 'append' ? `${key}.append.md` : `${key}.md`;
110
+ const full = path.join(dir, filename);
111
+ try {
112
+ fs.mkdirSync(dir, { recursive: true });
113
+ if (content.trim()) {
114
+ fs.writeFileSync(full, content, { encoding: 'utf8', mode: 0o600 });
115
+ } else if (fs.existsSync(full)) {
116
+ // Empty content = "reset to default" — delete the file
117
+ // so the daemon's readUserPromptFile path falls through.
118
+ fs.unlinkSync(full);
119
+ }
120
+ return { success: true, path: full, kind, key };
121
+ } catch (error: any) {
122
+ return { success: false, error: error?.message || String(error) };
123
+ }
124
+ },
125
+ };
@@ -0,0 +1,120 @@
1
+ /**
2
+ * RF-ROUTER LOW family — daemon self-upgrade + machine-settings commands.
3
+ *
4
+ * Extracted verbatim from DaemonCommandRouter.executeDaemonCommand. The
5
+ * release-channel helpers (ReleaseChannel / CHANNEL_* / normalizeReleaseChannel /
6
+ * resolveUpgradeChannel) were router module-locals used only by daemon_upgrade, so
7
+ * they are relocated here unchanged. Handlers read only ctx.deps.packageName /
8
+ * ctx.deps.statusVersion plus process-global config + npm/upgrade helpers, and
9
+ * return the same CommandRouterResult the inlined cases did.
10
+ */
11
+ import { loadConfig, updateConfig } from '../../config/config.js';
12
+ import { execNpmCommandSync, resolveCurrentGlobalInstallSurface, spawnDetachedDaemonUpgradeHelper } from '../upgrade-helper.js';
13
+ import { LOG } from '../../logging/logger.js';
14
+ import type { LowFamilyContext, LowFamilyHandler } from './types.js';
15
+
16
+ type ReleaseChannel = 'stable' | 'preview';
17
+ const CHANNEL_NPM_TAG: Record<ReleaseChannel, 'latest' | 'next'> = { stable: 'latest', preview: 'next' };
18
+ const CHANNEL_SERVER_URL: Record<ReleaseChannel, string> = {
19
+ stable: 'https://api.adhf.dev',
20
+ preview: 'https://api-preview.adhf.dev',
21
+ };
22
+ // Vendor-managed serverUrls. A serverUrl equal to one of these (or unset) is
23
+ // steered to the channel default on upgrade; any other value is a user-set
24
+ // custom/self-host URL that must be preserved across upgrades.
25
+ const VENDOR_SERVER_URLS = new Set<string>(Object.values(CHANNEL_SERVER_URL));
26
+
27
+ function normalizeReleaseChannel(value: unknown): ReleaseChannel | null {
28
+ if (typeof value !== 'string') return null;
29
+ const normalized = value.trim().toLowerCase();
30
+ if (normalized === 'stable' || normalized === 'latest') return 'stable';
31
+ if (normalized === 'preview' || normalized === 'next') return 'preview';
32
+ return null;
33
+ }
34
+
35
+ function resolveUpgradeChannel(args: any): ReleaseChannel {
36
+ return normalizeReleaseChannel(args?.channel)
37
+ || normalizeReleaseChannel(args?.updatePolicy?.channel)
38
+ || normalizeReleaseChannel(args?.npmTag)
39
+ || normalizeReleaseChannel(loadConfig().updateChannel)
40
+ || 'stable';
41
+ }
42
+
43
+ export const daemonLifecycleHandlers: Record<string, LowFamilyHandler> = {
44
+ daemon_upgrade: async (ctx: LowFamilyContext, args: any) => {
45
+ LOG.info('Upgrade', 'Remote upgrade requested from dashboard');
46
+ try {
47
+ // Detect package name for upgrade
48
+ const isStandalone = ctx.deps.packageName === '@adhdev/daemon-standalone'
49
+ || process.argv[1]?.includes('daemon-standalone');
50
+ const pkgName = isStandalone ? '@adhdev/daemon-standalone' : 'adhdev';
51
+ const npmSurface = resolveCurrentGlobalInstallSurface({ packageName: pkgName });
52
+ const channel = resolveUpgradeChannel(args);
53
+ const npmTag = CHANNEL_NPM_TAG[channel];
54
+
55
+ // Check channel-pinned dist-tag and resolve it to a concrete install version.
56
+ const latest = String(execNpmCommandSync(['view', `${pkgName}@${npmTag}`, 'version'], { encoding: 'utf-8', timeout: 10000 }, npmSurface)).trim();
57
+ LOG.info('Upgrade', `Latest ${pkgName}@${npmTag}: v${latest}`);
58
+ // Only steer serverUrl to the channel's vendor default when the current
59
+ // value is unset or already a vendor default. A self-hoster's custom
60
+ // serverUrl must survive the upgrade instead of being clobbered.
61
+ const currentServerUrl = typeof loadConfig().serverUrl === 'string' ? loadConfig().serverUrl.trim() : '';
62
+ const useVendorServerUrl = currentServerUrl === '' || VENDOR_SERVER_URLS.has(currentServerUrl);
63
+ updateConfig(
64
+ useVendorServerUrl
65
+ ? { updateChannel: channel, serverUrl: CHANNEL_SERVER_URL[channel] } as any
66
+ : { updateChannel: channel } as any,
67
+ );
68
+ let currentInstalled: string | null = null;
69
+ try {
70
+ const currentJson = String(execNpmCommandSync(['ls', '-g', pkgName, '--depth=0', '--json'], {
71
+ encoding: 'utf-8',
72
+ timeout: 10000,
73
+ stdio: ['pipe', 'pipe', 'pipe'],
74
+ }, npmSurface)).trim();
75
+ const parsed = JSON.parse(currentJson);
76
+ currentInstalled = parsed?.dependencies?.[pkgName]?.version || null;
77
+ } catch {
78
+ // ignore ls failures; upgrade can still proceed
79
+ }
80
+
81
+ const runningVersion = typeof ctx.deps.statusVersion === 'string'
82
+ ? ctx.deps.statusVersion.trim().replace(/^v/, '')
83
+ : null;
84
+ if (currentInstalled === latest && runningVersion === latest) {
85
+ LOG.info('Upgrade', `Already on ${channel} channel version v${latest}; skipping install`);
86
+ return { success: true, upgraded: false, alreadyLatest: true, version: latest, channel, npmTag };
87
+ }
88
+ if (currentInstalled === latest && runningVersion && runningVersion !== latest) {
89
+ LOG.info('Upgrade', `Installed package is v${latest}, but running daemon is v${runningVersion}; scheduling restart`);
90
+ }
91
+
92
+ spawnDetachedDaemonUpgradeHelper({
93
+ packageName: pkgName,
94
+ targetVersion: latest,
95
+ parentPid: process.pid,
96
+ restartArgv: process.argv.slice(1),
97
+ cwd: process.cwd(),
98
+ sessionHostAppName: process.env.ADHDEV_SESSION_HOST_NAME || 'adhdev',
99
+ });
100
+ LOG.info('Upgrade', `Scheduled detached ${channel} upgrade to v${latest}`);
101
+
102
+ // Exit after the command response has been sent so the helper can replace the package cleanly.
103
+ setTimeout(() => {
104
+ LOG.info('Upgrade', 'Exiting daemon so detached upgrader can continue...');
105
+ process.exit(0);
106
+ }, 3000);
107
+
108
+ return { success: true, upgraded: true, version: latest, restarting: true, channel, npmTag };
109
+ } catch (e: any) {
110
+ LOG.error('Upgrade', `Failed: ${e.message}`);
111
+ return { success: false, error: e.message };
112
+ }
113
+ },
114
+
115
+ set_machine_nickname: async (_ctx: LowFamilyContext, args: any) => {
116
+ const nickname = args?.nickname;
117
+ updateConfig({ machineNickname: nickname || null });
118
+ return { success: true };
119
+ },
120
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * RF-ROUTER LOW family — diagnostics read commands.
3
+ *
4
+ * Extracted verbatim from DaemonCommandRouter.executeDaemonCommand. Both handlers
5
+ * read only process-global logging buffers (ring buffer + file fallback + debug
6
+ * trace) — no router instance state — and return the same CommandRouterResult the
7
+ * inlined cases did.
8
+ */
9
+ import * as fs from 'fs';
10
+ import { getRecentLogs, LOG_PATH } from '../../logging/logger.js';
11
+ import { getRecentDebugTrace } from '../../logging/debug-trace.js';
12
+ import type { LowFamilyContext, LowFamilyHandler } from './types.js';
13
+
14
+ export const diagnosticsHandlers: Record<string, LowFamilyHandler> = {
15
+ get_logs: async (_ctx: LowFamilyContext, args: any) => {
16
+ const count = parseInt(args?.count) || parseInt(args?.lines) || 100;
17
+ const minLevel = args?.minLevel || 'info';
18
+ const sinceTs = args?.since || 0;
19
+
20
+ try {
21
+ // Priority 1: ring buffer (fast and structured)
22
+ let logs = getRecentLogs(count, minLevel);
23
+ if (sinceTs > 0) {
24
+ logs = logs.filter((l: any) => l.ts > sinceTs);
25
+ }
26
+ if (logs.length > 0) {
27
+ return { success: true, logs, totalBuffered: logs.length };
28
+ }
29
+ // Incremental polling must not fall back to unfiltered file text: the file
30
+ // format is not timestamp-filterable, and returning its tail makes the UI
31
+ // replace structured logs with old raw fallback lines when nothing new exists.
32
+ if (sinceTs > 0) {
33
+ return { success: true, logs: [], totalBuffered: 0 };
34
+ }
35
+ // Priority 2: file fallback
36
+ if (fs.existsSync(LOG_PATH)) {
37
+ const content = fs.readFileSync(LOG_PATH, 'utf-8');
38
+ const allLines = content.split('\n');
39
+ const recent = allLines.slice(-count).join('\n');
40
+ return { success: true, logs: recent, totalLines: allLines.length };
41
+ }
42
+ return { success: true, logs: [], totalBuffered: 0 };
43
+ } catch (e: any) {
44
+ return { success: false, error: e.message };
45
+ }
46
+ },
47
+
48
+ get_debug_trace: async (_ctx: LowFamilyContext, args: any) => {
49
+ const count = parseInt(args?.count) || parseInt(args?.limit) || 100;
50
+ const sinceTs = Number(args?.since) || 0;
51
+ const interactionId = typeof args?.interactionId === 'string' ? args.interactionId : undefined;
52
+ const category = typeof args?.category === 'string' ? args.category : undefined;
53
+ const trace = getRecentDebugTrace({ interactionId, category, limit: count })
54
+ .filter((entry) => !sinceTs || entry.ts > sinceTs);
55
+ return { success: true, trace, count: trace.length };
56
+ },
57
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * RF-ROUTER LOW family — command registry.
3
+ *
4
+ * Aggregates the low-coupling command handlers extracted from
5
+ * DaemonCommandRouter.executeDaemonCommand into a single cmd → handler map.
6
+ * The router consults this registry before its switch (registry hit → return the
7
+ * handler result; miss → fall through to the remaining switch / CommandHandler
8
+ * delegation), so the facade and dispatch semantics are unchanged.
9
+ */
10
+ import { sessionHostHandlers } from './session-host.js';
11
+ import { specProviderDevHandlers } from './spec-providerdev.js';
12
+ import { refineConfigHandlers } from './refine-config.js';
13
+ import { diagnosticsHandlers } from './diagnostics.js';
14
+ import { statusMetaHandlers } from './status-meta.js';
15
+ import { coordinatorPromptHandlers } from './coordinator-prompt.js';
16
+ import { notificationHandlers } from './notification.js';
17
+ import { daemonLifecycleHandlers } from './daemon-lifecycle.js';
18
+ import { meshLedgerHandlers } from './mesh-ledger.js';
19
+ import { meshNodeLogsHandlers } from './mesh-node-logs.js';
20
+ import type { LowFamilyRegistry } from './types.js';
21
+
22
+ export type { LowFamilyContext, LowFamilyHandler, LowFamilyRegistry } from './types.js';
23
+
24
+ export const lowFamilyRegistry: LowFamilyRegistry = new Map(
25
+ Object.entries({
26
+ ...sessionHostHandlers,
27
+ ...specProviderDevHandlers,
28
+ ...refineConfigHandlers,
29
+ ...diagnosticsHandlers,
30
+ ...statusMetaHandlers,
31
+ ...coordinatorPromptHandlers,
32
+ ...notificationHandlers,
33
+ ...daemonLifecycleHandlers,
34
+ ...meshLedgerHandlers,
35
+ ...meshNodeLogsHandlers,
36
+ }),
37
+ );
@@ -0,0 +1,62 @@
1
+ /**
2
+ * RF-ROUTER LOW family — mesh ledger read / slice / import commands.
3
+ *
4
+ * Extracted verbatim from DaemonCommandRouter.executeDaemonCommand. Each handler
5
+ * touches only the on-disk mesh ledger (dynamically imported mesh-ledger module)
6
+ * keyed by meshId — no router instance state — and returns the same
7
+ * CommandRouterResult the inlined cases did.
8
+ */
9
+ import type { LowFamilyContext, LowFamilyHandler } from './types.js';
10
+
11
+ export const meshLedgerHandlers: Record<string, LowFamilyHandler> = {
12
+ get_mesh_ledger: async (_ctx: LowFamilyContext, args: any) => {
13
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
14
+ if (!meshId) return { success: false, error: 'meshId required' };
15
+ try {
16
+ const { readLedgerEntries, getLedgerSummary } = await import('../../mesh/mesh-ledger.js');
17
+ const tail = typeof args?.tail === 'number' ? args.tail : 20;
18
+ const since = typeof args?.since === 'string' ? args.since : undefined;
19
+ const kind = Array.isArray(args?.kind) ? args.kind.filter((k: any) => typeof k === 'string') : undefined;
20
+ const entries = readLedgerEntries(meshId, { tail, since, kind });
21
+ const summary = getLedgerSummary(meshId);
22
+ return { success: true, entries, summary };
23
+ } catch (e: any) {
24
+ return { success: false, error: e.message };
25
+ }
26
+ },
27
+
28
+ get_mesh_ledger_slice: async (_ctx: LowFamilyContext, args: any) => {
29
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
30
+ if (!meshId) return { success: false, error: 'meshId required' };
31
+ try {
32
+ const { readLedgerSlice } = await import('../../mesh/mesh-ledger.js');
33
+ const kind = Array.isArray(args?.kind) ? args.kind.filter((k: any) => typeof k === 'string') : undefined;
34
+ const slice = readLedgerSlice(meshId, {
35
+ afterId: typeof args?.afterId === 'string' ? args.afterId : undefined,
36
+ since: typeof args?.since === 'string' ? args.since : undefined,
37
+ kind,
38
+ limit: typeof args?.limit === 'number' ? args.limit : undefined,
39
+ });
40
+ return { success: true, slice };
41
+ } catch (e: any) {
42
+ return { success: false, error: e.message };
43
+ }
44
+ },
45
+
46
+ import_mesh_ledger_slice: async (_ctx: LowFamilyContext, args: any) => {
47
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
48
+ if (!meshId) return { success: false, error: 'meshId required' };
49
+ try {
50
+ const { appendRemoteLedgerEntries, getLedgerSummary } = await import('../../mesh/mesh-ledger.js');
51
+ const entries = Array.isArray(args?.entries)
52
+ ? args.entries as any[]
53
+ : Array.isArray(args?.slice?.entries)
54
+ ? args.slice.entries as any[]
55
+ : [];
56
+ const result = appendRemoteLedgerEntries(meshId, entries as any);
57
+ return { success: true, result, summary: getLedgerSummary(meshId) };
58
+ } catch (e: any) {
59
+ return { success: false, error: e.message };
60
+ }
61
+ },
62
+ };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * RF-ROUTER LOW family — coordinator-driven remote daemon log fetch.
3
+ *
4
+ * Extracted verbatim from DaemonCommandRouter.executeDaemonCommand. Unlike the
5
+ * other LOW handlers this one resolves a node's owning daemonId from the router's
6
+ * inline-mesh cache, so it consumes the router-bound `ctx.getMeshForCommand`
7
+ * helper (mesh state is router instance state, not reconstructable from deps). The
8
+ * forward/local-read/redact logic is otherwise unchanged; returns the same
9
+ * CommandRouterResult the inlined case did.
10
+ */
11
+ import { daemonIdsEquivalent, meshNodeIdMatches } from '@adhdev/mesh-shared';
12
+ import { readDaemonLogTail, MAX_TAIL_BYTES } from '../../logging/log-tail-reader.js';
13
+ import { redactLogLines } from '../../logging/log-redactor.js';
14
+ import type { CommandRouterResult } from '../router.js';
15
+ import type { LowFamilyContext, LowFamilyHandler } from './types.js';
16
+
17
+ export const meshNodeLogsHandlers: Record<string, LowFamilyHandler> = {
18
+ get_mesh_node_logs: async (ctx: LowFamilyContext, args: any) => {
19
+ // Coordinator-driven remote log fetch: read a (possibly remote)
20
+ // daemon's recent log tail over P2P instead of opening a session
21
+ // and grepping the file by hand. Mirrors fast_forward_mesh_node's
22
+ // forward pattern — resolve the node, forward to its owning daemon
23
+ // when remote, otherwise read locally. The reply tail is HARD
24
+ // byte-bounded and secret-redacted before it leaves the machine.
25
+ const meshId = typeof args?.meshId === 'string' ? args.meshId.trim() : '';
26
+ const nodeId = typeof args?.nodeId === 'string' ? args.nodeId.trim() : '';
27
+ let nodeDaemonId: string | undefined;
28
+ if (meshId && nodeId && ctx.getMeshForCommand) {
29
+ const meshRecord = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
30
+ const node = meshRecord?.mesh?.nodes?.find((n: any) => meshNodeIdMatches(n, nodeId));
31
+ nodeDaemonId = typeof node?.daemonId === 'string' ? node.daemonId.trim() : undefined;
32
+ }
33
+ // _meshDirectDispatch prevents re-forwarding (and P2P self-dial)
34
+ // once the call lands on the owning daemon — that daemon then reads
35
+ // its own logs even if the stored daemonId uses a legacy form.
36
+ const selfDaemonId = ctx.deps.statusInstanceId;
37
+ // daemonIdsEquivalent: a legacy-form daemonId resolving to this machine's core is
38
+ // local — read locally instead of forwarding. Equivalent → local.
39
+ const isRemote = nodeDaemonId && selfDaemonId && !daemonIdsEquivalent(nodeDaemonId, selfDaemonId);
40
+ if (isRemote && ctx.deps.dispatchMeshCommand && !args?._meshDirectDispatch) {
41
+ const forwarded = await ctx.deps.dispatchMeshCommand(nodeDaemonId!, 'get_mesh_node_logs', {
42
+ ...(typeof args === 'object' && args !== null ? args as Record<string, unknown> : {}),
43
+ _meshDirectDispatch: true,
44
+ });
45
+ return (forwarded ?? { success: false, error: 'no response from remote node' }) as CommandRouterResult;
46
+ }
47
+
48
+ // Local read on the owning daemon.
49
+ const rawTailBytes = Number(args?.tailBytes);
50
+ const tail = readDaemonLogTail({
51
+ date: typeof args?.date === 'string' ? args.date : undefined,
52
+ tailBytes: Number.isFinite(rawTailBytes) ? Math.min(rawTailBytes, MAX_TAIL_BYTES) : undefined,
53
+ grep: typeof args?.grep === 'string' ? args.grep : undefined,
54
+ sinceMs: Number.isFinite(Number(args?.sinceMs)) ? Number(args?.sinceMs) : undefined,
55
+ });
56
+ if (!tail.success) {
57
+ return {
58
+ success: false,
59
+ error: tail.error || 'failed to read daemon log tail',
60
+ nodeId,
61
+ logPath: tail.logPath,
62
+ platform: tail.platform,
63
+ } as CommandRouterResult;
64
+ }
65
+ // SECURITY: redact secrets from every line before returning over P2P.
66
+ const redactedLines = redactLogLines(tail.lines);
67
+ return {
68
+ success: true,
69
+ nodeId,
70
+ daemonId: selfDaemonId,
71
+ logPath: tail.logPath,
72
+ platform: tail.platform,
73
+ lines: redactedLines,
74
+ lineCount: redactedLines.length,
75
+ truncated: tail.truncated,
76
+ filtered: tail.filtered,
77
+ bytesReturned: tail.bytesReturned,
78
+ // Transparency meta — lets the coordinator see that a full-file grep
79
+ // ran past the recent tail window, and how much was scanned/excluded.
80
+ fullScan: tail.fullScan,
81
+ scannedBytes: tail.scannedBytes,
82
+ matchedLineCount: tail.matchedLineCount,
83
+ excludedByFilter: tail.excludedByFilter,
84
+ ...(tail.grep ? { grep: tail.grep } : {}),
85
+ } as CommandRouterResult;
86
+ },
87
+ };