@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,341 @@
1
+ /**
2
+ * Daemon log tail reader — read the last N bytes of a daemon log file, newest
3
+ * bytes first, bounded so the result is safe to ship over a mesh P2P channel.
4
+ *
5
+ * Used by the mesh `get_mesh_node_logs` command: the coordinator asks a (possibly
6
+ * remote) daemon for its recent log tail instead of having to open a session and
7
+ * grep the file by hand. Because the mesh RPC envelope is sent as a single
8
+ * datachannel message (~256KB SCTP ceiling, no chunking), the returned tail is
9
+ * HARD-bounded by `tailBytes` (default 64KB, capped at MAX_TAIL_BYTES=128KB) and
10
+ * flags `truncated:true` when more content existed than fit.
11
+ *
12
+ * Two read modes:
13
+ * - No filter (no grep/sinceMs): byte-bounded tail of the active file — read the
14
+ * last `tailBytes` bytes only. Cheap, backward-compatible.
15
+ * - Filtered (grep and/or sinceMs given): FULL-FILE scan. The filter is applied
16
+ * across the ENTIRE file (plus the size-rotation `.1.log` backup) BEFORE the
17
+ * byte cap, then the last `tailBytes` worth of MATCHING lines are returned.
18
+ * This is the fix for "matches hidden behind polling spam": when the recent
19
+ * tail window is saturated with high-frequency lines (e.g. coordinator polling
20
+ * `get_pending_mesh_events`/`read_chat` every few seconds), a grep for a rarer
21
+ * earlier line (dispatch/inject/forward) previously matched 0 because the line
22
+ * had already scrolled out of the tail window before the filter ran. Filtering
23
+ * the whole file first surfaces those matches regardless of how much unrelated
24
+ * spam followed them.
25
+ *
26
+ * Boundary-safe: lines are cut on the newline byte (0x0A) only, which never
27
+ * appears inside a multibyte UTF-8 sequence, so decoding each complete byte
28
+ * segment never splits a multibyte char.
29
+ */
30
+
31
+ import * as fs from 'fs';
32
+ import { getCurrentDaemonLogPath, getDaemonLogDir } from './logger.js';
33
+
34
+ export const DEFAULT_TAIL_BYTES = 64 * 1024;
35
+ export const MAX_TAIL_BYTES = 128 * 1024;
36
+ const READ_CHUNK_BYTES = 64 * 1024;
37
+
38
+ export interface ReadDaemonLogTailArgs {
39
+ /** Date of the log file to read (defaults to today). YYYY-MM-DD string or Date. */
40
+ date?: string | Date;
41
+ /** Max bytes of tail to return. Clamped to (0, MAX_TAIL_BYTES]. Default 64KB. */
42
+ tailBytes?: number;
43
+ /** Optional regex source string; only lines matching (case-insensitive) are kept. */
44
+ grep?: string;
45
+ /** Optional epoch-ms floor; only lines whose leading [HH:MM:SS...] / ISO ts >= this are kept. */
46
+ sinceMs?: number;
47
+ }
48
+
49
+ export interface DaemonLogTailResult {
50
+ success: boolean;
51
+ error?: string;
52
+ lines: string[];
53
+ /**
54
+ * No-filter mode: true when the file was larger than the byte window.
55
+ * Filter mode: true when matching lines were dropped from the FRONT to fit
56
+ * the byte cap (i.e. there are older matches than the ones returned).
57
+ */
58
+ truncated: boolean;
59
+ logPath: string;
60
+ platform: NodeJS.Platform;
61
+ bytesReturned: number;
62
+ /** True when a grep/since filter dropped at least one line. */
63
+ filtered: boolean;
64
+ /** The grep source actually applied (echoed back for clarity). */
65
+ grep?: string;
66
+ /** True when the filtered full-file scan path ran (grep/sinceMs given). */
67
+ fullScan: boolean;
68
+ /** Total bytes read while scanning (filter mode scans the whole file + backup). */
69
+ scannedBytes: number;
70
+ /** Number of lines that matched the filter across the full scan (filter mode). */
71
+ matchedLineCount: number;
72
+ /** Number of scanned lines dropped by the filter ("N lines excluded by filter"). */
73
+ excludedByFilter: number;
74
+ }
75
+
76
+ function resolveLogPath(date?: string | Date): string {
77
+ if (date instanceof Date) return getCurrentDaemonLogPath(date);
78
+ if (typeof date === 'string' && date.trim()) {
79
+ const parsed = new Date(`${date.trim()}T00:00:00.000Z`);
80
+ if (!Number.isNaN(parsed.getTime())) return getCurrentDaemonLogPath(parsed);
81
+ }
82
+ return getCurrentDaemonLogPath();
83
+ }
84
+
85
+ function clampTailBytes(tailBytes?: number): number {
86
+ if (!Number.isFinite(tailBytes) || (tailBytes as number) <= 0) return DEFAULT_TAIL_BYTES;
87
+ return Math.min(Math.floor(tailBytes as number), MAX_TAIL_BYTES);
88
+ }
89
+
90
+ /**
91
+ * Read up to `limitBytes` from the end of `filePath`, on a UTF-8 line boundary.
92
+ * Returns the decoded text, whether the read was truncated (file bigger than the
93
+ * window), and the number of bytes actually decoded.
94
+ */
95
+ function readByteBoundedTail(filePath: string, limitBytes: number): { text: string; truncated: boolean; bytesReturned: number } {
96
+ const fd = fs.openSync(filePath, 'r');
97
+ try {
98
+ const stat = fs.fstatSync(fd);
99
+ const size = stat.size;
100
+ if (size === 0) return { text: '', truncated: false, bytesReturned: 0 };
101
+
102
+ const want = Math.min(limitBytes, size);
103
+ let start = size - want;
104
+ const truncated = start > 0;
105
+
106
+ // Collect chunks newest-last into a buffer covering [start, size).
107
+ const buffers: Buffer[] = [];
108
+ let position = start;
109
+ while (position < size) {
110
+ const chunkSize = Math.min(READ_CHUNK_BYTES, size - position);
111
+ const chunk = Buffer.alloc(chunkSize);
112
+ fs.readSync(fd, chunk, 0, chunkSize, position);
113
+ buffers.push(chunk);
114
+ position += chunkSize;
115
+ }
116
+ let buf = Buffer.concat(buffers);
117
+
118
+ // If we truncated mid-line, drop the leading partial line so we never emit
119
+ // a half-decoded line (and never split a multibyte char at the window edge).
120
+ if (truncated) {
121
+ const firstNewline = buf.indexOf(0x0a);
122
+ if (firstNewline >= 0) {
123
+ buf = buf.subarray(firstNewline + 1);
124
+ }
125
+ }
126
+ return { text: buf.toString('utf-8'), truncated, bytesReturned: buf.length };
127
+ } finally {
128
+ fs.closeSync(fd);
129
+ }
130
+ }
131
+
132
+ /** Split decoded text into lines, dropping the trailing empty element a final
133
+ * newline produces. Pure helper shared by both read modes. */
134
+ function splitLogLines(text: string): string[] {
135
+ const lines = text.split('\n');
136
+ if (lines.length && lines[lines.length - 1] === '') lines.pop();
137
+ return lines;
138
+ }
139
+
140
+ /**
141
+ * Keep the LAST lines whose cumulative UTF-8 byte size (counting one byte per
142
+ * line for the joining newline) stays within `limitBytes`. Always keeps at least
143
+ * the final line, even if it alone exceeds the cap (matches the no-filter path's
144
+ * "never return nothing when there is content" behaviour). `truncated` is true
145
+ * when earlier lines were dropped to fit.
146
+ */
147
+ function takeLastLinesWithinBytes(lines: string[], limitBytes: number): { kept: string[]; truncated: boolean; bytesReturned: number } {
148
+ if (lines.length === 0) return { kept: [], truncated: false, bytesReturned: 0 };
149
+ let total = 0;
150
+ let firstKept = lines.length;
151
+ for (let i = lines.length - 1; i >= 0; i--) {
152
+ const lineBytes = Buffer.byteLength(lines[i], 'utf-8') + 1; // +1 ≈ joining newline
153
+ // Once at least one line is kept, stop before overflowing the cap.
154
+ if (firstKept !== lines.length && total + lineBytes > limitBytes) break;
155
+ total += lineBytes;
156
+ firstKept = i;
157
+ }
158
+ return {
159
+ kept: lines.slice(firstKept),
160
+ truncated: firstKept > 0,
161
+ bytesReturned: total,
162
+ };
163
+ }
164
+
165
+ // Parse a leading timestamp from a log line into epoch ms. The unified logger
166
+ // writes `[HH:MM:SS.mmm]` (local time, today's date) and the startup banner uses
167
+ // a full timestamp; we best-effort parse `[HH:MM:SS...]` against the file's date.
168
+ // Returns null when no timestamp can be extracted (line is then kept by sinceMs).
169
+ function parseLineEpochMs(line: string, fileDate: Date): number | null {
170
+ const m = line.match(/^\[(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?\]/);
171
+ if (!m) {
172
+ // Try an embedded ISO timestamp as a fallback.
173
+ const iso = line.match(/\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?/);
174
+ if (iso) {
175
+ const t = Date.parse(iso[0].replace(' ', 'T'));
176
+ return Number.isNaN(t) ? null : t;
177
+ }
178
+ return null;
179
+ }
180
+ const d = new Date(fileDate);
181
+ d.setHours(Number(m[1]), Number(m[2]), Number(m[3]), m[4] ? Number(m[4].padEnd(3, '0')) : 0);
182
+ return d.getTime();
183
+ }
184
+
185
+ /** Build the case-insensitive line predicate for a grep source, falling back to
186
+ * a literal (lowercased substring) match when the source is not a valid regex. */
187
+ function buildGrepPredicate(grepSource: string): (line: string) => boolean {
188
+ let re: RegExp | null = null;
189
+ try {
190
+ re = new RegExp(grepSource, 'i');
191
+ } catch {
192
+ re = null;
193
+ }
194
+ if (re) {
195
+ const compiled = re;
196
+ return (line: string) => compiled.test(line);
197
+ }
198
+ const needle = grepSource.toLowerCase();
199
+ return (line: string) => line.toLowerCase().includes(needle);
200
+ }
201
+
202
+ function fileDateFor(date?: string | Date): Date {
203
+ if (date instanceof Date) return date;
204
+ if (typeof date === 'string' && date.trim()) return new Date(`${date.trim()}T00:00:00.000Z`);
205
+ return new Date();
206
+ }
207
+
208
+ function errorResult(error: string, logPath: string, platform: NodeJS.Platform): DaemonLogTailResult {
209
+ return {
210
+ success: false,
211
+ error,
212
+ lines: [],
213
+ truncated: false,
214
+ logPath,
215
+ platform,
216
+ bytesReturned: 0,
217
+ filtered: false,
218
+ fullScan: false,
219
+ scannedBytes: 0,
220
+ matchedLineCount: 0,
221
+ excludedByFilter: 0,
222
+ };
223
+ }
224
+
225
+ /**
226
+ * Read the daemon log tail for `date` (default today), bounded to `tailBytes`.
227
+ *
228
+ * - No grep/sinceMs → byte-bounded tail of the active file (legacy behaviour).
229
+ * - grep and/or sinceMs given → FULL-FILE scan: the filter is applied across the
230
+ * whole file (plus the `*.1.log` size-rotation backup) BEFORE the byte cap, so
231
+ * matches that have scrolled out of the recent tail window (e.g. behind
232
+ * coordinator polling spam) are still returned. Only the last `tailBytes` worth
233
+ * of matching lines ship over P2P.
234
+ *
235
+ * Falls back to the size-rotation backup (`*.1.log`) when the primary file does
236
+ * not exist.
237
+ */
238
+ export function readDaemonLogTail(args: ReadDaemonLogTailArgs = {}): DaemonLogTailResult {
239
+ const platform = process.platform;
240
+ const limitBytes = clampTailBytes(args.tailBytes);
241
+ const primaryPath = resolveLogPath(args.date);
242
+ const backupPath = primaryPath.replace(/\.log$/, '.1.log');
243
+ const primaryExists = fs.existsSync(primaryPath);
244
+ const backupExists = fs.existsSync(backupPath);
245
+
246
+ if (!primaryExists && !backupExists) {
247
+ return errorResult(
248
+ `No daemon log file at ${primaryPath} (dir: ${getDaemonLogDir()})`,
249
+ primaryPath,
250
+ platform,
251
+ );
252
+ }
253
+
254
+ // Reported log path: the active file when present, else the backup.
255
+ const logPath = primaryExists ? primaryPath : backupPath;
256
+
257
+ const hasGrep = typeof args.grep === 'string' && args.grep.trim().length > 0;
258
+ const hasSince = Number.isFinite(args.sinceMs);
259
+ const filterMode = hasGrep || hasSince;
260
+
261
+ // ── No-filter mode: cheap byte-bounded tail of the active file ──────────
262
+ if (!filterMode) {
263
+ let raw: { text: string; truncated: boolean; bytesReturned: number };
264
+ try {
265
+ raw = readByteBoundedTail(logPath, limitBytes);
266
+ } catch (e: any) {
267
+ return errorResult(`Failed to read ${logPath}: ${e?.message ?? String(e)}`, logPath, platform);
268
+ }
269
+ const lines = splitLogLines(raw.text);
270
+ return {
271
+ success: true,
272
+ lines,
273
+ truncated: raw.truncated,
274
+ logPath,
275
+ platform,
276
+ bytesReturned: raw.bytesReturned,
277
+ filtered: false,
278
+ fullScan: false,
279
+ scannedBytes: raw.bytesReturned,
280
+ matchedLineCount: lines.length,
281
+ excludedByFilter: 0,
282
+ };
283
+ }
284
+
285
+ // ── Filter mode: scan the WHOLE file (backup then primary, chronological)
286
+ // so matches behind a saturated tail window are still found. ────────────
287
+ let scannedBytes = 0;
288
+ let allLines: string[] = [];
289
+ try {
290
+ for (const p of [backupExists ? backupPath : null, primaryExists ? primaryPath : null]) {
291
+ if (!p) continue;
292
+ const buf = fs.readFileSync(p);
293
+ scannedBytes += buf.length;
294
+ allLines = allLines.concat(splitLogLines(buf.toString('utf-8')));
295
+ }
296
+ } catch (e: any) {
297
+ return errorResult(`Failed to read ${logPath}: ${e?.message ?? String(e)}`, logPath, platform);
298
+ }
299
+
300
+ const scannedLineCount = allLines.length;
301
+ let lines = allLines;
302
+
303
+ // since filter — keep lines at/after the floor (and lines with no timestamp).
304
+ if (hasSince) {
305
+ const fileDate = fileDateFor(args.date);
306
+ const floor = args.sinceMs as number;
307
+ lines = lines.filter((line) => {
308
+ const ts = parseLineEpochMs(line, fileDate);
309
+ return ts === null || ts >= floor;
310
+ });
311
+ }
312
+
313
+ // grep filter
314
+ let appliedGrep: string | undefined;
315
+ if (hasGrep) {
316
+ appliedGrep = (args.grep as string).trim();
317
+ const matches = buildGrepPredicate(appliedGrep);
318
+ lines = lines.filter(matches);
319
+ }
320
+
321
+ const matchedLineCount = lines.length;
322
+ const excludedByFilter = scannedLineCount - matchedLineCount;
323
+
324
+ // Byte cap applies to the MATCHING lines: keep the newest matches that fit.
325
+ const capped = takeLastLinesWithinBytes(lines, limitBytes);
326
+
327
+ return {
328
+ success: true,
329
+ lines: capped.kept,
330
+ truncated: capped.truncated,
331
+ logPath,
332
+ platform,
333
+ bytesReturned: capped.bytesReturned,
334
+ filtered: excludedByFilter > 0,
335
+ fullScan: true,
336
+ scannedBytes,
337
+ matchedLineCount,
338
+ excludedByFilter,
339
+ ...(appliedGrep ? { grep: appliedGrep } : {}),
340
+ };
341
+ }
@@ -7,7 +7,7 @@
7
7
  * 1. daemonLog(category, msg, level) — explicit per-category logging
8
8
  * 2. installGlobalInterceptor() — Auto-intercept console.log (once on daemon start)
9
9
  * 3. Recent log ring buffer — for remote transmission via P2P/WS
10
- * 4. File logging — ~/Library/Logs/adhdev/daemon.log (10MB rolling)
10
+ * 4. File logging — ~/.adhdev/logs/daemon-YYYY-MM-DD.log (date-based rolling)
11
11
  *
12
12
  * use:
13
13
  * import { daemonLog, LOG } from './daemon-logger';
@@ -20,6 +20,7 @@
20
20
  import * as fs from 'fs';
21
21
  import * as path from 'path';
22
22
  import * as os from 'os';
23
+ import { AsyncBatchWriter } from './async-batch-writer.js';
23
24
 
24
25
  // ─── Log Level ──────────────────────────────
25
26
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
@@ -36,11 +37,17 @@ export function setLogLevel(level: LogLevel): void {
36
37
 
37
38
  export function getLogLevel(): LogLevel { return currentLevel; }
38
39
  // ─── File logging (date-based rolling) ──────────────────────────────
39
- const LOG_DIR = process.platform === 'win32'
40
- ? path.join(process.env.LOCALAPPDATA || process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'adhdev', 'logs')
41
- : process.platform === 'darwin'
42
- ? path.join(os.homedir(), 'Library', 'Logs', 'adhdev')
43
- : path.join(os.homedir(), '.local', 'share', 'adhdev', 'logs');
40
+ // Logs live under the unified ADHDev home (~/.adhdev/logs/) on every platform,
41
+ // alongside config.json, providers/, history/, daemon.pid and session-host.log.
42
+ // Earlier builds wrote to OS-specific dirs (~/Library/Logs/adhdev on macOS,
43
+ // ~/.local/share/adhdev/logs on Linux, %LOCALAPPDATA%/adhdev/logs on Windows),
44
+ // which made the daemon log undiscoverable next to everything else under
45
+ // ~/.adhdev and inconsistent with session-host.log. Honor ADHDEV_CONFIG_DIR so
46
+ // isolated/standalone namespaces keep their logs in their own home.
47
+ const ADHDEV_HOME = process.env.ADHDEV_CONFIG_DIR && process.env.ADHDEV_CONFIG_DIR.trim()
48
+ ? process.env.ADHDEV_CONFIG_DIR.trim()
49
+ : path.join(os.homedir(), '.adhdev');
50
+ const LOG_DIR = path.join(ADHDEV_HOME, 'logs');
44
51
 
45
52
  const MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB per day
46
53
  const MAX_LOG_DAYS = 7; // 7-day retention
@@ -123,7 +130,7 @@ function writeToFile(line: string): void {
123
130
  checkDateRotation();
124
131
  rotateSizeIfNeeded();
125
132
  }
126
- fs.appendFileSync(currentLogFile, line + '\n');
133
+ AsyncBatchWriter.write(currentLogFile, line + '\n');
127
134
  } catch { }
128
135
  }
129
136