visionclaw 0.1.219-beta.0 → 0.1.219-dev.codex-issue-2805-worker-runtime.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/dist/agent/api-proxy.d.ts +0 -16
  2. package/dist/agent/api-proxy.d.ts.map +1 -1
  3. package/dist/agent/api-proxy.js +9 -8
  4. package/dist/agent/api-proxy.js.map +1 -1
  5. package/dist/agent/browser-launcher.d.ts +3 -0
  6. package/dist/agent/browser-launcher.d.ts.map +1 -1
  7. package/dist/agent/browser-launcher.js +101 -43
  8. package/dist/agent/browser-launcher.js.map +1 -1
  9. package/dist/agent/coding-conventions.d.ts +8 -0
  10. package/dist/agent/coding-conventions.d.ts.map +1 -0
  11. package/dist/agent/coding-conventions.js +19 -0
  12. package/dist/agent/coding-conventions.js.map +1 -0
  13. package/dist/agent/command-handlers.d.ts.map +1 -1
  14. package/dist/agent/command-handlers.js +4 -16
  15. package/dist/agent/command-handlers.js.map +1 -1
  16. package/dist/agent/context-action-restart-fallback.d.ts.map +1 -1
  17. package/dist/agent/context-action-restart-fallback.js +9 -3
  18. package/dist/agent/context-action-restart-fallback.js.map +1 -1
  19. package/dist/agent/context-refresh.d.ts.map +1 -1
  20. package/dist/agent/context-refresh.js +0 -7
  21. package/dist/agent/context-refresh.js.map +1 -1
  22. package/dist/agent/context.d.ts +2 -4
  23. package/dist/agent/context.d.ts.map +1 -1
  24. package/dist/agent/context.js +12 -21
  25. package/dist/agent/context.js.map +1 -1
  26. package/dist/agent/engine-fallback.d.ts +0 -35
  27. package/dist/agent/engine-fallback.d.ts.map +1 -1
  28. package/dist/agent/engine-fallback.js +4 -3
  29. package/dist/agent/engine-fallback.js.map +1 -1
  30. package/dist/agent/engine-switch.d.ts +19 -38
  31. package/dist/agent/engine-switch.d.ts.map +1 -1
  32. package/dist/agent/engine-switch.js +46 -111
  33. package/dist/agent/engine-switch.js.map +1 -1
  34. package/dist/agent/engines/browser-tool-policy.d.ts +12 -1
  35. package/dist/agent/engines/browser-tool-policy.d.ts.map +1 -1
  36. package/dist/agent/engines/browser-tool-policy.js +17 -2
  37. package/dist/agent/engines/browser-tool-policy.js.map +1 -1
  38. package/dist/agent/engines/claude/executor-shell-groups.d.ts +11 -0
  39. package/dist/agent/engines/claude/executor-shell-groups.d.ts.map +1 -0
  40. package/dist/agent/engines/claude/executor-shell-groups.js +22 -0
  41. package/dist/agent/engines/claude/executor-shell-groups.js.map +1 -0
  42. package/dist/agent/engines/claude/session.d.ts +13 -4
  43. package/dist/agent/engines/claude/session.d.ts.map +1 -1
  44. package/dist/agent/engines/claude/session.js +165 -84
  45. package/dist/agent/engines/claude/session.js.map +1 -1
  46. package/dist/agent/engines/pi/shared/usage.d.ts +6 -8
  47. package/dist/agent/engines/pi/shared/usage.d.ts.map +1 -1
  48. package/dist/agent/engines/pi/shared/usage.js +24 -7
  49. package/dist/agent/engines/pi/shared/usage.js.map +1 -1
  50. package/dist/agent/engines/pi/tools.d.ts +3 -10
  51. package/dist/agent/engines/pi/tools.d.ts.map +1 -1
  52. package/dist/agent/engines/pi/tools.js +6 -20
  53. package/dist/agent/engines/pi/tools.js.map +1 -1
  54. package/dist/agent/engines/pi-coding/executor-shell.d.ts +4 -0
  55. package/dist/agent/engines/pi-coding/executor-shell.d.ts.map +1 -0
  56. package/dist/agent/engines/pi-coding/executor-shell.js +175 -0
  57. package/dist/agent/engines/pi-coding/executor-shell.js.map +1 -0
  58. package/dist/agent/engines/pi-coding/session.d.ts +4 -4
  59. package/dist/agent/engines/pi-coding/session.d.ts.map +1 -1
  60. package/dist/agent/engines/pi-coding/session.js +118 -66
  61. package/dist/agent/engines/pi-coding/session.js.map +1 -1
  62. package/dist/agent/engines/pi-coding/tools.d.ts +2 -5
  63. package/dist/agent/engines/pi-coding/tools.d.ts.map +1 -1
  64. package/dist/agent/engines/pi-coding/tools.js +7 -5
  65. package/dist/agent/engines/pi-coding/tools.js.map +1 -1
  66. package/dist/agent/engines/session-types.d.ts +8 -8
  67. package/dist/agent/engines/session-types.d.ts.map +1 -1
  68. package/dist/agent/external-context/interrupt.d.ts +0 -2
  69. package/dist/agent/external-context/interrupt.d.ts.map +1 -1
  70. package/dist/agent/external-context/interrupt.js +0 -1
  71. package/dist/agent/external-context/interrupt.js.map +1 -1
  72. package/dist/agent/external-context/registry.d.ts +0 -2
  73. package/dist/agent/external-context/registry.d.ts.map +1 -1
  74. package/dist/agent/external-context/registry.js +2 -4
  75. package/dist/agent/external-context/registry.js.map +1 -1
  76. package/dist/agent/external-context/runtime.d.ts.map +1 -1
  77. package/dist/agent/external-context/runtime.js +15 -14
  78. package/dist/agent/external-context/runtime.js.map +1 -1
  79. package/dist/agent/external-context/types.d.ts +0 -2
  80. package/dist/agent/external-context/types.d.ts.map +1 -1
  81. package/dist/agent/fast-responder.d.ts +4 -20
  82. package/dist/agent/fast-responder.d.ts.map +1 -1
  83. package/dist/agent/fast-responder.js +28 -42
  84. package/dist/agent/fast-responder.js.map +1 -1
  85. package/dist/agent/interrupt-handler.d.ts +0 -6
  86. package/dist/agent/interrupt-handler.d.ts.map +1 -1
  87. package/dist/agent/interrupt-handler.js +5 -47
  88. package/dist/agent/interrupt-handler.js.map +1 -1
  89. package/dist/agent/lab-run-system-prompt.d.ts.map +1 -1
  90. package/dist/agent/lab-run-system-prompt.js +4 -1
  91. package/dist/agent/lab-run-system-prompt.js.map +1 -1
  92. package/dist/agent/lifecycle-trace.d.ts.map +1 -1
  93. package/dist/agent/lifecycle-trace.js +6 -5
  94. package/dist/agent/lifecycle-trace.js.map +1 -1
  95. package/dist/agent/loop.d.ts +8 -2
  96. package/dist/agent/loop.d.ts.map +1 -1
  97. package/dist/agent/loop.js +287 -156
  98. package/dist/agent/loop.js.map +1 -1
  99. package/dist/agent/memory-protocol.d.ts +2 -2
  100. package/dist/agent/memory-protocol.d.ts.map +1 -1
  101. package/dist/agent/memory-protocol.js +3 -15
  102. package/dist/agent/memory-protocol.js.map +1 -1
  103. package/dist/agent/memory-store.d.ts +58 -0
  104. package/dist/agent/memory-store.d.ts.map +1 -0
  105. package/dist/agent/memory-store.js +152 -0
  106. package/dist/agent/memory-store.js.map +1 -0
  107. package/dist/agent/model-provider.d.ts +18 -5
  108. package/dist/agent/model-provider.d.ts.map +1 -1
  109. package/dist/agent/model-provider.js +58 -18
  110. package/dist/agent/model-provider.js.map +1 -1
  111. package/dist/agent/nightly-maintenance/dreaming-batch.d.ts +184 -0
  112. package/dist/agent/nightly-maintenance/dreaming-batch.d.ts.map +1 -0
  113. package/dist/agent/nightly-maintenance/dreaming-batch.js +192 -0
  114. package/dist/agent/nightly-maintenance/dreaming-batch.js.map +1 -0
  115. package/dist/agent/nightly-maintenance/dreaming-files.d.ts +48 -0
  116. package/dist/agent/nightly-maintenance/dreaming-files.d.ts.map +1 -0
  117. package/dist/agent/nightly-maintenance/dreaming-files.js +109 -0
  118. package/dist/agent/nightly-maintenance/dreaming-files.js.map +1 -0
  119. package/dist/agent/nightly-maintenance/dreaming-ledger.d.ts +62 -0
  120. package/dist/agent/nightly-maintenance/dreaming-ledger.d.ts.map +1 -0
  121. package/dist/agent/nightly-maintenance/dreaming-ledger.js +146 -0
  122. package/dist/agent/nightly-maintenance/dreaming-ledger.js.map +1 -0
  123. package/dist/agent/nightly-maintenance/dreaming-planner.d.ts +86 -0
  124. package/dist/agent/nightly-maintenance/dreaming-planner.d.ts.map +1 -0
  125. package/dist/agent/nightly-maintenance/dreaming-planner.js +304 -0
  126. package/dist/agent/nightly-maintenance/dreaming-planner.js.map +1 -0
  127. package/dist/agent/nightly-maintenance/dreaming-runner.d.ts +93 -0
  128. package/dist/agent/nightly-maintenance/dreaming-runner.d.ts.map +1 -0
  129. package/dist/agent/nightly-maintenance/dreaming-runner.js +156 -0
  130. package/dist/agent/nightly-maintenance/dreaming-runner.js.map +1 -0
  131. package/dist/agent/nightly-maintenance/dreaming-sources.d.ts +115 -0
  132. package/dist/agent/nightly-maintenance/dreaming-sources.d.ts.map +1 -0
  133. package/dist/agent/nightly-maintenance/dreaming-sources.js +270 -0
  134. package/dist/agent/nightly-maintenance/dreaming-sources.js.map +1 -0
  135. package/dist/agent/nightly-maintenance/index.d.ts +28 -8
  136. package/dist/agent/nightly-maintenance/index.d.ts.map +1 -1
  137. package/dist/agent/nightly-maintenance/index.js +42 -15
  138. package/dist/agent/nightly-maintenance/index.js.map +1 -1
  139. package/dist/agent/nightly-maintenance/skill-learning-gate.js +1 -1
  140. package/dist/agent/nightly-maintenance/skill-learning-gate.js.map +1 -1
  141. package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts +1 -1
  142. package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts.map +1 -1
  143. package/dist/agent/product-identity.d.ts +5 -4
  144. package/dist/agent/product-identity.d.ts.map +1 -1
  145. package/dist/agent/product-identity.js +7 -6
  146. package/dist/agent/product-identity.js.map +1 -1
  147. package/dist/agent/public-activity.js +1 -1
  148. package/dist/agent/public-activity.js.map +1 -1
  149. package/dist/agent/runtime-context.d.ts +27 -0
  150. package/dist/agent/runtime-context.d.ts.map +1 -0
  151. package/dist/agent/runtime-context.js +60 -0
  152. package/dist/agent/runtime-context.js.map +1 -0
  153. package/dist/agent/runtime-disclosure-policy.d.ts +6 -0
  154. package/dist/agent/runtime-disclosure-policy.d.ts.map +1 -0
  155. package/dist/agent/runtime-disclosure-policy.js +16 -0
  156. package/dist/agent/runtime-disclosure-policy.js.map +1 -0
  157. package/dist/agent/runtime-surface.d.ts +15 -4
  158. package/dist/agent/runtime-surface.d.ts.map +1 -1
  159. package/dist/agent/runtime-surface.js +0 -1
  160. package/dist/agent/runtime-surface.js.map +1 -1
  161. package/dist/agent/session-manager.d.ts +30 -126
  162. package/dist/agent/session-manager.d.ts.map +1 -1
  163. package/dist/agent/session-manager.js +60 -484
  164. package/dist/agent/session-manager.js.map +1 -1
  165. package/dist/agent/state.d.ts +42 -2
  166. package/dist/agent/state.d.ts.map +1 -1
  167. package/dist/agent/state.js +21 -11
  168. package/dist/agent/state.js.map +1 -1
  169. package/dist/agent/stream-handler.d.ts +6 -13
  170. package/dist/agent/stream-handler.d.ts.map +1 -1
  171. package/dist/agent/stream-handler.js +8 -62
  172. package/dist/agent/stream-handler.js.map +1 -1
  173. package/dist/agent/system-prompt.d.ts +2 -0
  174. package/dist/agent/system-prompt.d.ts.map +1 -1
  175. package/dist/agent/system-prompt.js +21 -20
  176. package/dist/agent/system-prompt.js.map +1 -1
  177. package/dist/agent/tool-usage.d.ts.map +1 -1
  178. package/dist/agent/tool-usage.js +0 -1
  179. package/dist/agent/tool-usage.js.map +1 -1
  180. package/dist/agent/transcript/transcript-backfill.js +3 -3
  181. package/dist/agent/transcript/transcript-backfill.js.map +1 -1
  182. package/dist/agent/transcript/transcript-indexer.d.ts +3 -31
  183. package/dist/agent/transcript/transcript-indexer.d.ts.map +1 -1
  184. package/dist/agent/transcript/transcript-indexer.js +58 -57
  185. package/dist/agent/transcript/transcript-indexer.js.map +1 -1
  186. package/dist/agent/transcript-parsers/trivial-tools.d.ts.map +1 -1
  187. package/dist/agent/transcript-parsers/trivial-tools.js +0 -2
  188. package/dist/agent/transcript-parsers/trivial-tools.js.map +1 -1
  189. package/dist/agent/transcript-parsers/types.d.ts +1 -1
  190. package/dist/agent/transcript-summarizer.d.ts +14 -0
  191. package/dist/agent/transcript-summarizer.d.ts.map +1 -1
  192. package/dist/agent/transcript-summarizer.js +69 -45
  193. package/dist/agent/transcript-summarizer.js.map +1 -1
  194. package/dist/agent/usage/usage-report-queue.d.ts.map +1 -1
  195. package/dist/agent/usage/usage-report-queue.js +53 -52
  196. package/dist/agent/usage/usage-report-queue.js.map +1 -1
  197. package/dist/agent/usage/usage-report-types.d.ts +1 -1
  198. package/dist/agent/usage/usage-report-types.d.ts.map +1 -1
  199. package/dist/agent/vocabulary-glossary.d.ts +3 -3
  200. package/dist/agent/wake-cycle-runner.d.ts +14 -17
  201. package/dist/agent/wake-cycle-runner.d.ts.map +1 -1
  202. package/dist/agent/wake-cycle-runner.js +121 -290
  203. package/dist/agent/wake-cycle-runner.js.map +1 -1
  204. package/dist/builtin-skills/owner-manual/SKILL.md +2 -2
  205. package/dist/calendar/occurrence-ownership.d.ts.map +1 -1
  206. package/dist/calendar/occurrence-ownership.js +6 -5
  207. package/dist/calendar/occurrence-ownership.js.map +1 -1
  208. package/dist/calendar/scheduler.d.ts.map +1 -1
  209. package/dist/calendar/scheduler.js +4 -3
  210. package/dist/calendar/scheduler.js.map +1 -1
  211. package/dist/channels/interface.d.ts +8 -2
  212. package/dist/channels/interface.d.ts.map +1 -1
  213. package/dist/channels/interface.js +8 -1
  214. package/dist/channels/interface.js.map +1 -1
  215. package/dist/channels/manager.d.ts.map +1 -1
  216. package/dist/channels/manager.js +5 -1
  217. package/dist/channels/manager.js.map +1 -1
  218. package/dist/channels/queue.d.ts.map +1 -1
  219. package/dist/channels/queue.js +8 -0
  220. package/dist/channels/queue.js.map +1 -1
  221. package/dist/channels/tui.d.ts +14 -1
  222. package/dist/channels/tui.d.ts.map +1 -1
  223. package/dist/channels/tui.js +64 -2
  224. package/dist/channels/tui.js.map +1 -1
  225. package/dist/cli/index.d.ts +2 -2
  226. package/dist/cli/index.d.ts.map +1 -1
  227. package/dist/cli/index.js +22 -53
  228. package/dist/cli/index.js.map +1 -1
  229. package/dist/config/index.d.ts +13 -7
  230. package/dist/config/index.d.ts.map +1 -1
  231. package/dist/config/index.js +51 -64
  232. package/dist/config/index.js.map +1 -1
  233. package/dist/config/types.d.ts +28 -7
  234. package/dist/config/types.d.ts.map +1 -1
  235. package/dist/config/types.js +22 -20
  236. package/dist/config/types.js.map +1 -1
  237. package/dist/conversations/lazy-runtime.d.ts +5 -0
  238. package/dist/conversations/lazy-runtime.d.ts.map +1 -0
  239. package/dist/conversations/lazy-runtime.js +12 -0
  240. package/dist/conversations/lazy-runtime.js.map +1 -0
  241. package/dist/conversations/runtime.d.ts +17 -0
  242. package/dist/conversations/runtime.d.ts.map +1 -0
  243. package/dist/conversations/runtime.js +92 -0
  244. package/dist/conversations/runtime.js.map +1 -0
  245. package/dist/conversations/scheduler.d.ts +57 -0
  246. package/dist/conversations/scheduler.d.ts.map +1 -0
  247. package/dist/conversations/scheduler.js +175 -0
  248. package/dist/conversations/scheduler.js.map +1 -0
  249. package/dist/data-processing/pipeline.d.ts +0 -2
  250. package/dist/data-processing/pipeline.d.ts.map +1 -1
  251. package/dist/data-processing/pipeline.js +19 -24
  252. package/dist/data-processing/pipeline.js.map +1 -1
  253. package/dist/data-processing/restructure.d.ts +0 -2
  254. package/dist/data-processing/restructure.d.ts.map +1 -1
  255. package/dist/data-processing/restructure.js +6 -9
  256. package/dist/data-processing/restructure.js.map +1 -1
  257. package/dist/data-processing/types.d.ts +2 -9
  258. package/dist/data-processing/types.d.ts.map +1 -1
  259. package/dist/data-processing/types.js +2 -13
  260. package/dist/data-processing/types.js.map +1 -1
  261. package/dist/email/email-route-store.d.ts.map +1 -1
  262. package/dist/email/email-route-store.js +6 -5
  263. package/dist/email/email-route-store.js.map +1 -1
  264. package/dist/i18n/messages.d.ts +26 -2
  265. package/dist/i18n/messages.d.ts.map +1 -1
  266. package/dist/i18n/messages.js +30 -5
  267. package/dist/i18n/messages.js.map +1 -1
  268. package/dist/index.js.map +1 -1
  269. package/dist/logger.d.ts +11 -0
  270. package/dist/logger.d.ts.map +1 -1
  271. package/dist/logger.js +49 -1
  272. package/dist/logger.js.map +1 -1
  273. package/dist/obs/mini-app/status.d.ts.map +1 -1
  274. package/dist/obs/mini-app/status.js +0 -1
  275. package/dist/obs/mini-app/status.js.map +1 -1
  276. package/dist/onboarding/onboarding-service-client.d.ts +1 -0
  277. package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
  278. package/dist/onboarding/onboarding-service-client.js.map +1 -1
  279. package/dist/onboarding/remote-set-owner.d.ts.map +1 -1
  280. package/dist/onboarding/remote-set-owner.js +0 -1
  281. package/dist/onboarding/remote-set-owner.js.map +1 -1
  282. package/dist/onboarding/set-owner.d.ts +1 -1
  283. package/dist/onboarding/set-owner.d.ts.map +1 -1
  284. package/dist/onboarding/set-owner.js +3 -6
  285. package/dist/onboarding/set-owner.js.map +1 -1
  286. package/dist/reconfigure.d.ts.map +1 -1
  287. package/dist/reconfigure.js +1 -32
  288. package/dist/reconfigure.js.map +1 -1
  289. package/dist/reset.d.ts.map +1 -1
  290. package/dist/reset.js +3 -1
  291. package/dist/reset.js.map +1 -1
  292. package/dist/threads/active-threads-store.d.ts.map +1 -1
  293. package/dist/threads/active-threads-store.js +8 -27
  294. package/dist/threads/active-threads-store.js.map +1 -1
  295. package/dist/threads/dreaming-execution.d.ts +10 -0
  296. package/dist/threads/dreaming-execution.d.ts.map +1 -0
  297. package/dist/threads/dreaming-execution.js +78 -0
  298. package/dist/threads/dreaming-execution.js.map +1 -0
  299. package/dist/threads/execution-authority.d.ts +43 -0
  300. package/dist/threads/execution-authority.d.ts.map +1 -0
  301. package/dist/threads/execution-authority.js +75 -0
  302. package/dist/threads/execution-authority.js.map +1 -0
  303. package/dist/threads/execution-budget.d.ts +107 -0
  304. package/dist/threads/execution-budget.d.ts.map +1 -0
  305. package/dist/threads/execution-budget.js +257 -0
  306. package/dist/threads/execution-budget.js.map +1 -0
  307. package/dist/threads/execution-host.d.ts +17 -0
  308. package/dist/threads/execution-host.d.ts.map +1 -0
  309. package/dist/threads/execution-host.js +66 -0
  310. package/dist/threads/execution-host.js.map +1 -0
  311. package/dist/threads/execution-scheduler.d.ts +162 -0
  312. package/dist/threads/execution-scheduler.d.ts.map +1 -0
  313. package/dist/threads/execution-scheduler.js +413 -0
  314. package/dist/threads/execution-scheduler.js.map +1 -0
  315. package/dist/threads/execution-snapshot.d.ts +91 -0
  316. package/dist/threads/execution-snapshot.d.ts.map +1 -0
  317. package/dist/threads/execution-snapshot.js +146 -0
  318. package/dist/threads/execution-snapshot.js.map +1 -0
  319. package/dist/threads/execution-store.d.ts +374 -0
  320. package/dist/threads/execution-store.d.ts.map +1 -0
  321. package/dist/threads/execution-store.js +910 -0
  322. package/dist/threads/execution-store.js.map +1 -0
  323. package/dist/threads/execution-thread-error.d.ts +9 -0
  324. package/dist/threads/execution-thread-error.d.ts.map +1 -0
  325. package/dist/threads/execution-thread-error.js +12 -0
  326. package/dist/threads/execution-thread-error.js.map +1 -0
  327. package/dist/threads/executor-exit.d.ts +18 -0
  328. package/dist/threads/executor-exit.d.ts.map +1 -0
  329. package/dist/threads/executor-exit.js +21 -0
  330. package/dist/threads/executor-exit.js.map +1 -0
  331. package/dist/threads/foreground-task.d.ts +91 -0
  332. package/dist/threads/foreground-task.d.ts.map +1 -0
  333. package/dist/threads/foreground-task.js +191 -0
  334. package/dist/threads/foreground-task.js.map +1 -0
  335. package/dist/threads/foreman-business.d.ts +9 -0
  336. package/dist/threads/foreman-business.d.ts.map +1 -0
  337. package/dist/threads/foreman-business.js +117 -0
  338. package/dist/threads/foreman-business.js.map +1 -0
  339. package/dist/threads/foreman-client.d.ts +18 -0
  340. package/dist/threads/foreman-client.d.ts.map +1 -0
  341. package/dist/threads/foreman-client.js +51 -0
  342. package/dist/threads/foreman-client.js.map +1 -0
  343. package/dist/threads/foreman-delivery.d.ts +5 -0
  344. package/dist/threads/foreman-delivery.d.ts.map +1 -0
  345. package/dist/threads/foreman-delivery.js +21 -0
  346. package/dist/threads/foreman-delivery.js.map +1 -0
  347. package/dist/threads/foreman-execution.d.ts +32 -0
  348. package/dist/threads/foreman-execution.d.ts.map +1 -0
  349. package/dist/threads/foreman-execution.js +90 -0
  350. package/dist/threads/foreman-execution.js.map +1 -0
  351. package/dist/threads/foreman-host.d.ts +77 -0
  352. package/dist/threads/foreman-host.d.ts.map +1 -0
  353. package/dist/threads/foreman-host.js +891 -0
  354. package/dist/threads/foreman-host.js.map +1 -0
  355. package/dist/threads/foreman-protocol.d.ts +242 -0
  356. package/dist/threads/foreman-protocol.d.ts.map +1 -0
  357. package/dist/threads/foreman-protocol.js +116 -0
  358. package/dist/threads/foreman-protocol.js.map +1 -0
  359. package/dist/threads/foreman-store.d.ts +151 -0
  360. package/dist/threads/foreman-store.d.ts.map +1 -0
  361. package/dist/threads/foreman-store.js +299 -0
  362. package/dist/threads/foreman-store.js.map +1 -0
  363. package/dist/threads/generic-execution.d.ts +25 -0
  364. package/dist/threads/generic-execution.d.ts.map +1 -0
  365. package/dist/threads/generic-execution.js +86 -0
  366. package/dist/threads/generic-execution.js.map +1 -0
  367. package/dist/threads/init-thread-dir.d.ts +2 -2
  368. package/dist/threads/init-thread-dir.d.ts.map +1 -1
  369. package/dist/threads/init-thread-dir.js +6 -6
  370. package/dist/threads/init-thread-dir.js.map +1 -1
  371. package/dist/threads/ipc.d.ts +108 -2
  372. package/dist/threads/ipc.d.ts.map +1 -1
  373. package/dist/threads/ipc.js +14 -2
  374. package/dist/threads/ipc.js.map +1 -1
  375. package/dist/threads/lab-run-thread.d.ts +3 -5
  376. package/dist/threads/lab-run-thread.d.ts.map +1 -1
  377. package/dist/threads/lab-run-thread.js +3 -5
  378. package/dist/threads/lab-run-thread.js.map +1 -1
  379. package/dist/threads/lab-runtime-policy.d.ts +26 -21
  380. package/dist/threads/lab-runtime-policy.d.ts.map +1 -1
  381. package/dist/threads/lab-runtime-policy.js +31 -126
  382. package/dist/threads/lab-runtime-policy.js.map +1 -1
  383. package/dist/threads/process-group.d.ts +41 -0
  384. package/dist/threads/process-group.d.ts.map +1 -0
  385. package/dist/threads/process-group.js +161 -0
  386. package/dist/threads/process-group.js.map +1 -0
  387. package/dist/threads/relay-adapter.d.ts +8 -0
  388. package/dist/threads/relay-adapter.d.ts.map +1 -1
  389. package/dist/threads/relay-adapter.js +26 -1
  390. package/dist/threads/relay-adapter.js.map +1 -1
  391. package/dist/threads/supervisor.d.ts +191 -57
  392. package/dist/threads/supervisor.d.ts.map +1 -1
  393. package/dist/threads/supervisor.js +766 -427
  394. package/dist/threads/supervisor.js.map +1 -1
  395. package/dist/threads/task-workspace.d.ts +8 -0
  396. package/dist/threads/task-workspace.d.ts.map +1 -0
  397. package/dist/threads/task-workspace.js +52 -0
  398. package/dist/threads/task-workspace.js.map +1 -0
  399. package/dist/threads/worker-entry.d.ts.map +1 -1
  400. package/dist/threads/worker-entry.js +314 -34
  401. package/dist/threads/worker-entry.js.map +1 -1
  402. package/dist/threads/worker-execution-runtime.d.ts +75 -0
  403. package/dist/threads/worker-execution-runtime.d.ts.map +1 -0
  404. package/dist/threads/worker-execution-runtime.js +142 -0
  405. package/dist/threads/worker-execution-runtime.js.map +1 -0
  406. package/dist/threads/worker-execution.d.ts +35 -0
  407. package/dist/threads/worker-execution.d.ts.map +1 -0
  408. package/dist/threads/worker-execution.js +2 -0
  409. package/dist/threads/worker-execution.js.map +1 -0
  410. package/dist/threads/worker-runtime-policy.d.ts +42 -0
  411. package/dist/threads/worker-runtime-policy.d.ts.map +1 -0
  412. package/dist/threads/worker-runtime-policy.js +98 -0
  413. package/dist/threads/worker-runtime-policy.js.map +1 -0
  414. package/dist/tools/adapter-tool.d.ts +12 -0
  415. package/dist/tools/adapter-tool.d.ts.map +1 -0
  416. package/dist/tools/adapter-tool.js +2 -0
  417. package/dist/tools/adapter-tool.js.map +1 -0
  418. package/dist/tools/data-service.d.ts +2 -2
  419. package/dist/tools/delegation.d.ts +121 -0
  420. package/dist/tools/delegation.d.ts.map +1 -0
  421. package/dist/tools/delegation.js +106 -0
  422. package/dist/tools/delegation.js.map +1 -0
  423. package/dist/tools/dream-memory.d.ts +122 -0
  424. package/dist/tools/dream-memory.d.ts.map +1 -0
  425. package/dist/tools/dream-memory.js +513 -0
  426. package/dist/tools/dream-memory.js.map +1 -0
  427. package/dist/tools/email.d.ts +1 -1
  428. package/dist/tools/execution-control.d.ts +31 -0
  429. package/dist/tools/execution-control.d.ts.map +1 -0
  430. package/dist/tools/execution-control.js +71 -0
  431. package/dist/tools/execution-control.js.map +1 -0
  432. package/dist/tools/index.d.ts +5 -7
  433. package/dist/tools/index.d.ts.map +1 -1
  434. package/dist/tools/index.js +7 -13
  435. package/dist/tools/index.js.map +1 -1
  436. package/dist/tools/mcp-manager.d.ts +1 -1
  437. package/dist/tools/memory.d.ts +1 -1
  438. package/dist/tools/memory.d.ts.map +1 -1
  439. package/dist/tools/memory.js +69 -45
  440. package/dist/tools/memory.js.map +1 -1
  441. package/dist/tools/notify.d.ts +5 -0
  442. package/dist/tools/notify.d.ts.map +1 -1
  443. package/dist/tools/notify.js +45 -10
  444. package/dist/tools/notify.js.map +1 -1
  445. package/dist/tools/skill.d.ts +1 -1
  446. package/dist/tools/totp.d.ts +1 -1
  447. package/dist/tui/client.d.ts +1 -16
  448. package/dist/tui/client.d.ts.map +1 -1
  449. package/dist/tui/client.js +0 -4
  450. package/dist/tui/client.js.map +1 -1
  451. package/dist/tui/index.d.ts.map +1 -1
  452. package/dist/tui/index.js +0 -41
  453. package/dist/tui/index.js.map +1 -1
  454. package/dist/tui/protocol.d.ts +2 -1
  455. package/dist/tui/protocol.d.ts.map +1 -1
  456. package/dist/tui/protocol.js +2 -1
  457. package/dist/tui/protocol.js.map +1 -1
  458. package/dist/tui/renderer.d.ts.map +1 -1
  459. package/dist/tui/renderer.js +0 -5
  460. package/dist/tui/renderer.js.map +1 -1
  461. package/dist/tui/request-store.d.ts +1 -1
  462. package/dist/tui/request-store.d.ts.map +1 -1
  463. package/dist/tui/request-store.js +2 -2
  464. package/dist/tui/request-store.js.map +1 -1
  465. package/dist/tui/server.d.ts.map +1 -1
  466. package/dist/tui/server.js +137 -25
  467. package/dist/tui/server.js.map +1 -1
  468. package/dist/utils/claude-transcripts.d.ts +6 -0
  469. package/dist/utils/claude-transcripts.d.ts.map +1 -1
  470. package/dist/utils/claude-transcripts.js +8 -2
  471. package/dist/utils/claude-transcripts.js.map +1 -1
  472. package/dist/utils/restart.d.ts.map +1 -1
  473. package/dist/utils/restart.js +6 -0
  474. package/dist/utils/restart.js.map +1 -1
  475. package/dist-agent/bundle.cjs +2 -2
  476. package/package.json +1 -1
  477. package/dist/agent/mailbox.d.ts +0 -50
  478. package/dist/agent/mailbox.d.ts.map +0 -1
  479. package/dist/agent/mailbox.js +0 -124
  480. package/dist/agent/mailbox.js.map +0 -1
  481. package/dist/agent/nightly-maintenance/memory-dreaming-sweep.d.ts +0 -77
  482. package/dist/agent/nightly-maintenance/memory-dreaming-sweep.d.ts.map +0 -1
  483. package/dist/agent/nightly-maintenance/memory-dreaming-sweep.js +0 -158
  484. package/dist/agent/nightly-maintenance/memory-dreaming-sweep.js.map +0 -1
  485. package/dist/agent/nightly-maintenance/memory-dreaming.d.ts +0 -116
  486. package/dist/agent/nightly-maintenance/memory-dreaming.d.ts.map +0 -1
  487. package/dist/agent/nightly-maintenance/memory-dreaming.js +0 -458
  488. package/dist/agent/nightly-maintenance/memory-dreaming.js.map +0 -1
  489. package/dist/threads/task-contracts.d.ts +0 -194
  490. package/dist/threads/task-contracts.d.ts.map +0 -1
  491. package/dist/threads/task-contracts.js +0 -82
  492. package/dist/threads/task-contracts.js.map +0 -1
  493. package/dist/threads/task-sidecar.d.ts +0 -145
  494. package/dist/threads/task-sidecar.d.ts.map +0 -1
  495. package/dist/threads/task-sidecar.js +0 -311
  496. package/dist/threads/task-sidecar.js.map +0 -1
  497. package/dist/threads/task-store.d.ts +0 -172
  498. package/dist/threads/task-store.d.ts.map +0 -1
  499. package/dist/threads/task-store.js +0 -599
  500. package/dist/threads/task-store.js.map +0 -1
  501. package/dist/threads/thread-task-context.d.ts +0 -40
  502. package/dist/threads/thread-task-context.d.ts.map +0 -1
  503. package/dist/threads/thread-task-context.js +0 -160
  504. package/dist/threads/thread-task-context.js.map +0 -1
  505. package/dist/threads/thread-task-controller.d.ts +0 -122
  506. package/dist/threads/thread-task-controller.d.ts.map +0 -1
  507. package/dist/threads/thread-task-controller.js +0 -276
  508. package/dist/threads/thread-task-controller.js.map +0 -1
  509. package/dist/threads/thread-task-runtime.d.ts +0 -354
  510. package/dist/threads/thread-task-runtime.d.ts.map +0 -1
  511. package/dist/threads/thread-task-runtime.js +0 -917
  512. package/dist/threads/thread-task-runtime.js.map +0 -1
  513. package/dist/tools/switch-session.d.ts +0 -15
  514. package/dist/tools/switch-session.d.ts.map +0 -1
  515. package/dist/tools/switch-session.js +0 -88
  516. package/dist/tools/switch-session.js.map +0 -1
  517. package/dist/tools/thread-tasks.d.ts +0 -23
  518. package/dist/tools/thread-tasks.d.ts.map +0 -1
  519. package/dist/tools/thread-tasks.js +0 -122
  520. package/dist/tools/thread-tasks.js.map +0 -1
@@ -0,0 +1,304 @@
1
+ /**
2
+ * The maintenance host's side of Dreaming (#2805 stage 2): plan one bounded
3
+ * batch, submit it as an internal execution, and apply its outcome.
4
+ *
5
+ * Runs in the main process only. It is the only writer of the Dreaming
6
+ * ledger, the batch files and the vocabulary glossary; the worker edits
7
+ * memory through `dream_memory` and reports everything else.
8
+ *
9
+ * Ingestion and consolidation are separate queues with separate progress:
10
+ * - ingestion takes the oldest pending slice of one transcript session and
11
+ * advances that session's watermark only for `ingested` or `no_new_facts`;
12
+ * - consolidation reviews a few memory files and records the hash each was
13
+ * reviewed at; a file changes or new files appear → it is due again.
14
+ * A failed, cancelled or unfinished batch keeps its inputs and defers them to
15
+ * the next local day.
16
+ */
17
+ import { randomUUID } from "node:crypto";
18
+ import fs from "node:fs";
19
+ import { contentHash } from "../memory-store.js";
20
+ import { getMemoriesDir } from "../../config/index.js";
21
+ import { logger } from "../../logger.js";
22
+ import { processVocabularyCandidates } from "./vocabulary-processor.js";
23
+ import { DreamingReportDataSchema, listDreamingBatchIds, readDreamEdits, readDreamingBatch, removeDreamingBatch, writeDreamingBatch, DREAMING_BATCH_VERSION, } from "./dreaming-batch.js";
24
+ import { dreamingStores, listMemoryFiles } from "./dreaming-files.js";
25
+ import { deferToNextDay, isDeferred, pruneDreamingRecords, readDreamingLedger, readLegacyDreamWatermarks, updateDreamingLedger, writeDreamingLedger, } from "./dreaming-ledger.js";
26
+ import { buildSlice, discoverTranscriptSources, DREAM_FIRST_INGESTION_WINDOW_MS, DREAM_MIN_SLICE_RECORDS, DREAM_SMALL_SLICE_MAX_AGE_MS, pendingStart, readSourceRecords, } from "./dreaming-sources.js";
27
+ /** Files per review batch, and the total bytes a review batch may cover. */
28
+ const REVIEW_MAX_FILES = 6;
29
+ const REVIEW_MAX_BYTES = 96_000;
30
+ /** One file larger than this is reviewed alone; pagination keeps every page bounded. */
31
+ const REVIEW_LARGE_FILE_BYTES = 64_000;
32
+ function localDate(now) {
33
+ const pad = (value) => String(value).padStart(2, "0");
34
+ return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`;
35
+ }
36
+ export class DreamingPlanner {
37
+ options;
38
+ legacyWatermarks = null;
39
+ constructor(options) {
40
+ this.options = options;
41
+ }
42
+ /** Once per night: bound the local edit log and backups. */
43
+ startNight() {
44
+ pruneDreamingRecords(this.now(), this.memoriesDir);
45
+ }
46
+ now() { return this.options.now?.() ?? new Date(); }
47
+ get memoriesDir() { return this.options.memoriesDir ?? getMemoriesDir(); }
48
+ stores() {
49
+ return dreamingStores({ memoriesDir: this.options.memoriesDir, autoMemoryDir: this.options.autoMemoryDir });
50
+ }
51
+ /**
52
+ * The next batch for `localDay`, written to disk, or null when both queues
53
+ * are empty for tonight. Ingestion goes first: new facts are what tidying
54
+ * should be informed by.
55
+ */
56
+ planNext(localDay) {
57
+ const ledger = readDreamingLedger(this.memoriesDir);
58
+ this.legacyWatermarks ??= readLegacyDreamWatermarks(this.memoriesDir);
59
+ const ingestion = this.planIngestion(ledger, localDay);
60
+ // Sources registered or moved past noise while planning are saved even when no batch results.
61
+ if (ingestion.ledgerChanged)
62
+ writeDreamingLedger(ledger, this.memoriesDir);
63
+ const batch = ingestion.batch ?? this.planConsolidation(ledger, localDay);
64
+ if (batch)
65
+ writeDreamingBatch(batch, this.memoriesDir);
66
+ return batch;
67
+ }
68
+ newBatch(kind, localDay) {
69
+ const now = this.now();
70
+ return {
71
+ version: DREAMING_BATCH_VERSION,
72
+ batchId: `dream-${randomUUID()}`,
73
+ kind,
74
+ localDay,
75
+ localDate: localDate(now),
76
+ createdAt: now.toISOString(),
77
+ vocabularyLearning: this.options.vocabularyLearning() && Boolean(this.options.ownerPublicId()),
78
+ };
79
+ }
80
+ /**
81
+ * The oldest pending slice among transcript sessions not deferred tonight.
82
+ * A session seen for the first time is registered with a fixed cutoff, so
83
+ * a later night continues from the same point instead of a moving window.
84
+ */
85
+ planIngestion(ledger, localDay) {
86
+ const nowMs = this.now().getTime();
87
+ let ledgerChanged = false;
88
+ const sources = discoverTranscriptSources(this.options.threadIds())
89
+ .filter((source) => !isDeferred(ledger, source.sourceKey, localDay))
90
+ .sort((a, b) => a.newestMtimeMs - b.newestMtimeMs);
91
+ for (const source of sources) {
92
+ let watermark = ledger.ingestion[source.sourceKey];
93
+ if (!watermark) {
94
+ if (nowMs - source.newestMtimeMs > DREAM_FIRST_INGESTION_WINDOW_MS)
95
+ continue;
96
+ // After an upgrade, history the single-pass Dreaming already covered is not read again.
97
+ const legacy = Math.max(0, ...source.files.map((file) => this.legacyWatermarks?.get(file) ?? 0));
98
+ watermark = {
99
+ record: null, timestamp: null, sourceMtimeMs: null,
100
+ cutoffMs: Math.max(nowMs - DREAM_FIRST_INGESTION_WINDOW_MS, legacy),
101
+ };
102
+ ledger.ingestion[source.sourceKey] = watermark;
103
+ ledgerChanged = true;
104
+ }
105
+ // Files unchanged since the last fully consumed slice: skip without reading them.
106
+ if (watermark.sourceMtimeMs !== null && source.newestMtimeMs <= watermark.sourceMtimeMs)
107
+ continue;
108
+ const records = readSourceRecords(source);
109
+ const cursor = pendingStart(records, watermark);
110
+ if (cursor.index >= records.length)
111
+ continue;
112
+ const slice = buildSlice(records, cursor.index, source.sourceKey, cursor.offset, cursor.textHash);
113
+ if (!slice.lastRecord)
114
+ continue;
115
+ if (slice.recordCount === 0) {
116
+ // Only records without content (compaction markers, metadata): move past them.
117
+ ledger.ingestion[source.sourceKey] = {
118
+ ...watermark,
119
+ record: slice.lastRecord.key,
120
+ recordOffset: slice.lastRecordOffset,
121
+ recordTextHash: slice.lastRecordTextHash ?? undefined,
122
+ timestamp: slice.lastRecord.timestamp,
123
+ sourceMtimeMs: slice.more ? null : source.newestMtimeMs,
124
+ };
125
+ ledgerChanged = true;
126
+ continue;
127
+ }
128
+ const newestMs = slice.newestTimestamp ? Date.parse(slice.newestTimestamp) : source.newestMtimeMs;
129
+ // A continuation is the tail of a record already admitted to a batch;
130
+ // delaying it as "small recent input" would leave the watermark parked
131
+ // in the middle of that record until the age threshold elapsed.
132
+ if (slice.recordCount < DREAM_MIN_SLICE_RECORDS && !slice.more && cursor.offset === 0 && nowMs - newestMs < DREAM_SMALL_SLICE_MAX_AGE_MS)
133
+ continue;
134
+ return {
135
+ ledgerChanged,
136
+ batch: {
137
+ ...this.newBatch("ingestion", localDay),
138
+ slice: {
139
+ sourceKey: source.sourceKey,
140
+ label: source.label,
141
+ toRecord: slice.lastRecord.key,
142
+ ...(slice.lastRecordOffset > 0 ? { toRecordOffset: slice.lastRecordOffset } : {}),
143
+ ...(slice.lastRecordOffset > 0 && slice.lastRecordTextHash
144
+ ? { toRecordTextHash: slice.lastRecordTextHash }
145
+ : {}),
146
+ toTimestamp: slice.lastRecord.timestamp,
147
+ recordCount: slice.recordCount,
148
+ text: slice.text,
149
+ more: slice.more,
150
+ sourceMtimeMs: source.newestMtimeMs,
151
+ },
152
+ files: [],
153
+ sources: slice.sources,
154
+ },
155
+ };
156
+ }
157
+ return { batch: null, ledgerChanged };
158
+ }
159
+ planConsolidation(ledger, localDay) {
160
+ const due = listMemoryFiles(this.stores())
161
+ .filter((file) => !isDeferred(ledger, file.virtualPath, localDay))
162
+ .map((file) => ({ ...file, hash: this.hashOf(file.fullPath) }))
163
+ .filter((file) => file.hash !== null
164
+ && ledger.consolidation[file.virtualPath]?.hash !== file.hash)
165
+ // Recently changed files first: that is where new facts just landed.
166
+ .sort((a, b) => b.mtimeMs - a.mtimeMs);
167
+ if (due.length === 0)
168
+ return null;
169
+ const files = [];
170
+ let bytes = 0;
171
+ for (const file of due) {
172
+ if (files.length > 0 && (files.length >= REVIEW_MAX_FILES || bytes + file.size > REVIEW_MAX_BYTES || file.size > REVIEW_LARGE_FILE_BYTES))
173
+ continue;
174
+ files.push({ path: file.virtualPath, hash: file.hash, size: file.size });
175
+ bytes += file.size;
176
+ if (file.size > REVIEW_LARGE_FILE_BYTES)
177
+ break;
178
+ }
179
+ return { ...this.newBatch("consolidation", localDay), files, sources: {} };
180
+ }
181
+ /**
182
+ * Apply a finished batch execution to the ledger and the glossary, then
183
+ * remove the batch file. Idempotent: a batch already applied is gone and
184
+ * returns null. `result` is the execution's terminal result; null when the
185
+ * execution never reached the store.
186
+ */
187
+ applyResult(batchId, result, options = {}) {
188
+ const batch = readDreamingBatch(batchId, this.memoriesDir);
189
+ if (!batch)
190
+ return null;
191
+ // A report committed before a cancel still describes work that was done.
192
+ const parsed = result?.data === undefined ? null : DreamingReportDataSchema.safeParse(result.data);
193
+ const report = parsed?.success ? parsed.data : null;
194
+ const status = result?.status ?? "failed";
195
+ const edits = readDreamEdits(batchId, batch.localDate, this.memoriesDir).filter((edit) => edit.result === "committed");
196
+ const editedPaths = [...new Set(edits.map((edit) => edit.path))];
197
+ // A cancel retries tonight only when it was a preemption (or nothing ran);
198
+ // a batch the host cancelled for overrunning waits for the next night.
199
+ const retryTonight = status === "cancelled" && options.retryTonight !== false;
200
+ let outcome = "failed";
201
+ updateDreamingLedger((ledger) => {
202
+ outcome = batch.kind === "ingestion"
203
+ ? this.applyIngestion(ledger, batch, report, status, editedPaths.length, retryTonight)
204
+ : this.applyConsolidation(ledger, batch, report, status, editedPaths.length, retryTonight);
205
+ }, this.memoriesDir);
206
+ let vocabularyMutated = false;
207
+ const ownerPublicId = this.options.ownerPublicId();
208
+ if (report && batch.vocabularyLearning && ownerPublicId && report.vocabularyCandidates.length > 0) {
209
+ try {
210
+ vocabularyMutated = processVocabularyCandidates(ownerPublicId, report.vocabularyCandidates, this.memoriesDir, new Map(Object.entries(batch.sources)));
211
+ }
212
+ catch (error) {
213
+ // Vocabulary never blocks memory progress; the message may quote a term, so log only its kind.
214
+ logger.warn(`[dreaming] Vocabulary processing failed: ${error instanceof Error ? error.name : "error"}`);
215
+ }
216
+ }
217
+ removeDreamingBatch(batchId, this.memoriesDir);
218
+ const summary = {
219
+ batchId,
220
+ kind: batch.kind,
221
+ outcome,
222
+ committedEdits: edits.length,
223
+ editedPaths,
224
+ vocabularyAccepted: report?.vocabularyCandidates.length ?? 0,
225
+ vocabularyRejected: report?.rejectedVocabulary ?? 0,
226
+ vocabularyMutated,
227
+ };
228
+ logger.system(`[dreaming] Batch ${batchId} kind=${batch.kind} outcome=${outcome} edits=${edits.length} files=${editedPaths.length} ` +
229
+ `vocabulary=${summary.vocabularyAccepted} accepted, ${summary.vocabularyRejected} rejected`);
230
+ return summary;
231
+ }
232
+ /** The watermark moves only for an explicit ingested or no_new_facts report. */
233
+ applyIngestion(ledger, batch, report, status, editedFiles, retryTonight) {
234
+ const slice = batch.slice;
235
+ if (!slice)
236
+ return "failed";
237
+ const ingestion = report?.ingestion?.status;
238
+ if (ingestion === "ingested" || ingestion === "no_new_facts") {
239
+ ledger.ingestion[slice.sourceKey] = {
240
+ record: slice.toRecord,
241
+ recordOffset: slice.toRecordOffset ?? 0,
242
+ recordTextHash: slice.toRecordOffset ? slice.toRecordTextHash : undefined,
243
+ timestamp: slice.toTimestamp,
244
+ cutoffMs: ledger.ingestion[slice.sourceKey]?.cutoffMs ?? 0,
245
+ // Records written while the batch ran are newer than this mtime and are still read.
246
+ sourceMtimeMs: slice.more ? null : slice.sourceMtimeMs,
247
+ };
248
+ return ingestion === "ingested" ? "completed" : "no_new_facts";
249
+ }
250
+ // A preempted batch retries tonight. Anything else keeps its input for the
251
+ // next night, which reads the latest memory and the same records.
252
+ if (retryTonight)
253
+ return "cancelled";
254
+ deferToNextDay(ledger, slice.sourceKey, batch.localDay);
255
+ if (status === "cancelled")
256
+ return "cancelled";
257
+ return ingestion === "not_done" || editedFiles > 0 ? "partial" : "failed";
258
+ }
259
+ /**
260
+ * Reviewed files record the hash they were reviewed at; the rest wait for
261
+ * the next night. Only a review the worker attests (it viewed the whole
262
+ * file) counts, and a file changed after its review is due again.
263
+ */
264
+ applyConsolidation(ledger, batch, report, status, editedFiles, retryTonight) {
265
+ const entries = new Map((report?.files ?? []).map((file) => [file.path, file]));
266
+ // The worker's hash proves what it viewed, but the owner or another
267
+ // writer may have changed the file after the report was emitted and
268
+ // before the host applied it. Never mark that newer content reviewed.
269
+ const current = new Map(listMemoryFiles(this.stores()).map((file) => [file.virtualPath, file.fullPath]));
270
+ let reviewed = 0;
271
+ for (const file of batch.files) {
272
+ const entry = entries.get(file.path);
273
+ const fullPath = current.get(file.path);
274
+ const currentHash = fullPath ? this.hashOf(fullPath) : null;
275
+ if ((entry?.status === "tidied" || entry?.status === "unchanged") && entry.hash && entry.hash === currentHash) {
276
+ ledger.consolidation[file.path] = { hash: entry.hash, reviewedAt: this.now().toISOString() };
277
+ reviewed += 1;
278
+ }
279
+ else if (!retryTonight) {
280
+ deferToNextDay(ledger, file.path, batch.localDay);
281
+ }
282
+ }
283
+ if (status === "cancelled")
284
+ return "cancelled";
285
+ if (reviewed === batch.files.length)
286
+ return "completed";
287
+ if (reviewed > 0 || editedFiles > 0)
288
+ return "partial";
289
+ return report ? "partial" : "failed";
290
+ }
291
+ hashOf(fullPath) {
292
+ try {
293
+ return contentHash(fs.readFileSync(fullPath, "utf8"));
294
+ }
295
+ catch {
296
+ return null;
297
+ }
298
+ }
299
+ /** Batch files left by a host that stopped before applying them. */
300
+ pendingBatchIds() {
301
+ return listDreamingBatchIds(this.memoriesDir);
302
+ }
303
+ }
304
+ //# sourceMappingURL=dreaming-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dreaming-planner.js","sourceRoot":"","sources":["../../../src/agent/nightly-maintenance/dreaming-planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Runs Dreaming one batch at a time as a maintenance execution (#2805 stage 2).
3
+ *
4
+ * Each `runBatch` call plans one bounded batch, submits it through the
5
+ * supervisor's trusted maintenance entry, waits until its executor is
6
+ * confirmed stopped, and applies the outcome. The step owner holds worker
7
+ * admission throughout, so no other writer starts next to the batch, and the
8
+ * hold is released only after the stop is confirmed.
9
+ *
10
+ * Preemption: owner input during a batch cancels it. The cancel becomes final
11
+ * only once the executor exits; edits already committed stay, the input is
12
+ * kept, and a later step continues from the unchanged watermark.
13
+ */
14
+ import { type ExecutionRecord } from "../../threads/execution-store.js";
15
+ import { DEFAULT_DREAMING_BATCH_BUDGET } from "./dreaming-batch.js";
16
+ import type { DreamingBatchSummary, DreamingPlanner } from "./dreaming-planner.js";
17
+ /** The supervisor's maintenance entry, as Dreaming uses it. */
18
+ export interface MaintenanceExecutionHost {
19
+ submitMaintenanceExecution(input: {
20
+ taskId: string;
21
+ payload: {
22
+ goal: string;
23
+ inputRefs: string[];
24
+ title: string;
25
+ };
26
+ budget: typeof DEFAULT_DREAMING_BATCH_BUDGET;
27
+ }): ExecutionRecord;
28
+ cancelMaintenanceExecution(reason: string): void;
29
+ cancelStaleMaintenanceExecution(executionId: string): ExecutionRecord | null;
30
+ getExecutionRecord(executionId: string): ExecutionRecord | null;
31
+ latestExecutionForTask(taskId: string): ExecutionRecord | null;
32
+ discardMaintenanceExecutionContent(executionId: string): void;
33
+ }
34
+ export type DreamingStepResult = {
35
+ kind: "idle";
36
+ } | {
37
+ kind: "batch";
38
+ summary: DreamingBatchSummary | null;
39
+ }
40
+ /** Preempted: the step gives way; nothing is retried until the next maintenance tick. */
41
+ | {
42
+ kind: "yielded";
43
+ summary: DreamingBatchSummary | null;
44
+ } | {
45
+ kind: "blocked";
46
+ reason: string;
47
+ };
48
+ export declare class DreamingRunner {
49
+ private readonly planner;
50
+ private readonly host;
51
+ private readonly options;
52
+ private current;
53
+ private preempted;
54
+ /** Why the current batch was cancelled, if it was. */
55
+ private cancelCause;
56
+ constructor(planner: DreamingPlanner, host: MaintenanceExecutionHost, options?: {
57
+ pollMs?: number;
58
+ });
59
+ /** A batch is executing under this runner. */
60
+ get active(): boolean;
61
+ /** Once per night, before the first batch. */
62
+ startNight(): void;
63
+ /** A maintenance step acquired admission; earlier preemptions are spent. */
64
+ beginStep(): void;
65
+ /**
66
+ * Owner input arrived: cancel the running batch, or keep this step from
67
+ * starting one. The cancel completes only after the executor stops.
68
+ */
69
+ preempt(reason?: string): void;
70
+ /**
71
+ * Finish batches a previous host left behind. A batch whose execution
72
+ * already ended is applied; one still queued is cancelled first. A batch
73
+ * whose executor is not yet confirmed stopped blocks Dreaming until it is.
74
+ */
75
+ recoverLeftovers(): {
76
+ blocked: boolean;
77
+ };
78
+ /**
79
+ * Plan and run one batch for `localDay`. Resolves after the batch's
80
+ * executor is confirmed stopped and its outcome is applied.
81
+ */
82
+ runBatch(localDay: number): Promise<DreamingStepResult>;
83
+ /**
84
+ * Terminal state is written only after the host confirmed the executor
85
+ * stopped. The worker enforces its own budget; past `limitMs` the host
86
+ * cancels as a backstop and keeps waiting for the confirmed stop.
87
+ */
88
+ private waitForTerminal;
89
+ private cancelCauseOf;
90
+ /** Whether the step should stop starting new batches. */
91
+ get wasPreempted(): boolean;
92
+ }
93
+ //# sourceMappingURL=dreaming-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dreaming-runner.d.ts","sourceRoot":"","sources":["../../../src/agent/nightly-maintenance/dreaming-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAwC,MAAM,qBAAqB,CAAC;AAC1G,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEnF,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,0BAA0B,CAAC,KAAK,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,MAAM,EAAE,OAAO,6BAA6B,CAAC;KAC9C,GAAG,eAAe,CAAC;IACpB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IAC7E,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IAChE,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IAC/D,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/D;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE;AACzD,yFAAyF;GACvF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQxC,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAAsC;gBAGtC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAGpD,8CAA8C;IAC9C,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,8CAA8C;IAC9C,UAAU,IAAI,IAAI;IAIlB,4EAA4E;IAC5E,SAAS,IAAI,IAAI;IAIjB;;;OAGG;IACH,OAAO,CAAC,MAAM,SAAgB,GAAG,IAAI;IAOrC;;;;OAIG;IACH,gBAAgB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;IAexC;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiC7D;;;;OAIG;YACW,eAAe;IAiB7B,OAAO,CAAC,aAAa;IAIrB,yDAAyD;IACzD,IAAI,YAAY,IAAI,OAAO,CAE1B;CACF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Runs Dreaming one batch at a time as a maintenance execution (#2805 stage 2).
3
+ *
4
+ * Each `runBatch` call plans one bounded batch, submits it through the
5
+ * supervisor's trusted maintenance entry, waits until its executor is
6
+ * confirmed stopped, and applies the outcome. The step owner holds worker
7
+ * admission throughout, so no other writer starts next to the batch, and the
8
+ * hold is released only after the stop is confirmed.
9
+ *
10
+ * Preemption: owner input during a batch cancels it. The cancel becomes final
11
+ * only once the executor exits; edits already committed stay, the input is
12
+ * kept, and a later step continues from the unchanged watermark.
13
+ */
14
+ import { logger } from "../../logger.js";
15
+ import { isTerminalExecutionState } from "../../threads/execution-store.js";
16
+ import { DEFAULT_DREAMING_BATCH_BUDGET, dreamingBatchRef } from "./dreaming-batch.js";
17
+ const POLL_MS = 250;
18
+ /** Host backstop beyond the worker's own time budget: startup plus the stop grace. */
19
+ const OVERRUN_GRACE_MS = 2 * 60_000;
20
+ /** A batch that never reached an executor: its inputs are kept and retried tonight. */
21
+ const NOT_STARTED = { status: "cancelled" };
22
+ export class DreamingRunner {
23
+ planner;
24
+ host;
25
+ options;
26
+ current = null;
27
+ preempted = false;
28
+ /** Why the current batch was cancelled, if it was. */
29
+ cancelCause = null;
30
+ constructor(planner, host, options = {}) {
31
+ this.planner = planner;
32
+ this.host = host;
33
+ this.options = options;
34
+ }
35
+ /** A batch is executing under this runner. */
36
+ get active() {
37
+ return this.current !== null;
38
+ }
39
+ /** Once per night, before the first batch. */
40
+ startNight() {
41
+ this.planner.startNight();
42
+ }
43
+ /** A maintenance step acquired admission; earlier preemptions are spent. */
44
+ beginStep() {
45
+ this.preempted = false;
46
+ }
47
+ /**
48
+ * Owner input arrived: cancel the running batch, or keep this step from
49
+ * starting one. The cancel completes only after the executor stops.
50
+ */
51
+ preempt(reason = "owner input") {
52
+ this.preempted = true;
53
+ if (!this.current)
54
+ return;
55
+ this.cancelCause ??= "preempt";
56
+ this.host.cancelMaintenanceExecution(reason);
57
+ }
58
+ /**
59
+ * Finish batches a previous host left behind. A batch whose execution
60
+ * already ended is applied; one still queued is cancelled first. A batch
61
+ * whose executor is not yet confirmed stopped blocks Dreaming until it is.
62
+ */
63
+ recoverLeftovers() {
64
+ for (const batchId of this.planner.pendingBatchIds()) {
65
+ let record = this.host.latestExecutionForTask(batchId);
66
+ if (record?.state === "queued")
67
+ record = this.host.cancelStaleMaintenanceExecution(record.executionId);
68
+ if (record && !isTerminalExecutionState(record.state)) {
69
+ logger.warn(`[dreaming] Batch ${batchId} from a previous run has not stopped (state=${record.state}); waiting`);
70
+ return { blocked: true };
71
+ }
72
+ // No record: the host stopped between planning and submitting; nothing ran.
73
+ this.planner.applyResult(batchId, record?.result ?? NOT_STARTED);
74
+ if (record)
75
+ this.host.discardMaintenanceExecutionContent(record.executionId);
76
+ }
77
+ return { blocked: false };
78
+ }
79
+ /**
80
+ * Plan and run one batch for `localDay`. Resolves after the batch's
81
+ * executor is confirmed stopped and its outcome is applied.
82
+ */
83
+ async runBatch(localDay) {
84
+ if (this.recoverLeftovers().blocked)
85
+ return { kind: "blocked", reason: "previous batch not stopped" };
86
+ if (this.preempted)
87
+ return { kind: "yielded", summary: null };
88
+ const batch = this.planner.planNext(localDay);
89
+ if (!batch)
90
+ return { kind: "idle" };
91
+ let record;
92
+ try {
93
+ record = this.host.submitMaintenanceExecution({
94
+ taskId: batch.batchId,
95
+ payload: { goal: goalFor(batch), inputRefs: [dreamingBatchRef(batch.batchId)], title: "Memory dreaming" },
96
+ budget: DEFAULT_DREAMING_BATCH_BUDGET,
97
+ });
98
+ }
99
+ catch (error) {
100
+ // Nothing ran; the batch keeps its inputs and is planned again later.
101
+ this.planner.applyResult(batch.batchId, NOT_STARTED);
102
+ return { kind: "blocked", reason: error instanceof Error ? error.message : String(error) };
103
+ }
104
+ // From here a preemption cancels this execution (see preempt()).
105
+ this.current = record.executionId;
106
+ this.cancelCause = null;
107
+ try {
108
+ const finished = await this.waitForTerminal(record.executionId, DEFAULT_DREAMING_BATCH_BUDGET.maxDurationMs + OVERRUN_GRACE_MS);
109
+ // Set by preempt() or the overrun backstop while the batch ran.
110
+ const cause = this.cancelCauseOf();
111
+ const summary = this.planner.applyResult(batch.batchId, finished.result, { retryTonight: cause !== "overrun" });
112
+ this.host.discardMaintenanceExecutionContent(record.executionId);
113
+ return { kind: cause === "preempt" ? "yielded" : "batch", summary };
114
+ }
115
+ finally {
116
+ this.current = null;
117
+ this.cancelCause = null;
118
+ }
119
+ }
120
+ /**
121
+ * Terminal state is written only after the host confirmed the executor
122
+ * stopped. The worker enforces its own budget; past `limitMs` the host
123
+ * cancels as a backstop and keeps waiting for the confirmed stop.
124
+ */
125
+ async waitForTerminal(executionId, limitMs) {
126
+ const deadline = Date.now() + limitMs;
127
+ let overrunCancelled = false;
128
+ for (;;) {
129
+ const record = this.host.getExecutionRecord(executionId);
130
+ if (!record)
131
+ throw new Error(`Maintenance execution ${executionId} disappeared`);
132
+ if (isTerminalExecutionState(record.state))
133
+ return record;
134
+ if (!overrunCancelled && Date.now() >= deadline) {
135
+ overrunCancelled = true;
136
+ logger.warn(`[dreaming] Batch execution ${executionId} overran its time budget; cancelling`);
137
+ this.cancelCause ??= "overrun";
138
+ this.host.cancelMaintenanceExecution("batch overran its time budget");
139
+ }
140
+ await new Promise((resolve) => setTimeout(resolve, this.options.pollMs ?? POLL_MS));
141
+ }
142
+ }
143
+ cancelCauseOf() {
144
+ return this.cancelCause;
145
+ }
146
+ /** Whether the step should stop starting new batches. */
147
+ get wasPreempted() {
148
+ return this.preempted;
149
+ }
150
+ }
151
+ function goalFor(batch) {
152
+ return batch.kind === "ingestion"
153
+ ? "Ingest new conversation records into memory (Dreaming batch)"
154
+ : "Review and tidy memory files (Dreaming batch)";
155
+ }
156
+ //# sourceMappingURL=dreaming-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dreaming-runner.js","sourceRoot":"","sources":["../../../src/agent/nightly-maintenance/dreaming-runner.ts"],"names":[],"mappings":"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"}