pulseed 0.4.0 → 0.4.2

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 (335) hide show
  1. package/dist/base/state/state-manager-goal-write.d.ts +22 -0
  2. package/dist/base/state/state-manager-goal-write.d.ts.map +1 -0
  3. package/dist/base/state/state-manager-goal-write.js +74 -0
  4. package/dist/base/state/state-manager-goal-write.js.map +1 -0
  5. package/dist/base/state/state-manager-wal.d.ts +11 -0
  6. package/dist/base/state/state-manager-wal.d.ts.map +1 -0
  7. package/dist/base/state/state-manager-wal.js +89 -0
  8. package/dist/base/state/state-manager-wal.js.map +1 -0
  9. package/dist/base/state/state-manager.d.ts +1 -4
  10. package/dist/base/state/state-manager.d.ts.map +1 -1
  11. package/dist/base/state/state-manager.js +18 -127
  12. package/dist/base/state/state-manager.js.map +1 -1
  13. package/dist/interface/chat/chat-runner.d.ts +1 -1
  14. package/dist/interface/chat/event-subscriber.d.ts +4 -0
  15. package/dist/interface/chat/event-subscriber.d.ts.map +1 -1
  16. package/dist/interface/chat/event-subscriber.js +49 -2
  17. package/dist/interface/chat/event-subscriber.js.map +1 -1
  18. package/dist/interface/chat/tend-command.d.ts +1 -1
  19. package/dist/interface/cli/cli-command-registry.js +1 -1
  20. package/dist/interface/cli/cli-command-registry.js.map +1 -1
  21. package/dist/interface/cli/commands/chat.js +2 -2
  22. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  23. package/dist/interface/cli/commands/daemon.js +87 -44
  24. package/dist/interface/cli/commands/daemon.js.map +1 -1
  25. package/dist/interface/cli/commands/schedule.js +2 -2
  26. package/dist/interface/cli/commands/setup/steps-runtime.js +1 -1
  27. package/dist/interface/cli/ensure-api-key.d.ts +4 -1
  28. package/dist/interface/cli/ensure-api-key.d.ts.map +1 -1
  29. package/dist/interface/cli/ensure-api-key.js +52 -15
  30. package/dist/interface/cli/ensure-api-key.js.map +1 -1
  31. package/dist/interface/tui/app.d.ts +1 -1
  32. package/dist/interface/tui/chat/scroll.d.ts +14 -0
  33. package/dist/interface/tui/chat/scroll.d.ts.map +1 -0
  34. package/dist/interface/tui/chat/scroll.js +46 -0
  35. package/dist/interface/tui/chat/scroll.js.map +1 -0
  36. package/dist/interface/tui/chat/suggestions.d.ts +8 -0
  37. package/dist/interface/tui/chat/suggestions.d.ts.map +1 -0
  38. package/dist/interface/tui/chat/suggestions.js +112 -0
  39. package/dist/interface/tui/chat/suggestions.js.map +1 -0
  40. package/dist/interface/tui/chat/types.d.ts +31 -0
  41. package/dist/interface/tui/chat/types.d.ts.map +1 -0
  42. package/dist/interface/tui/chat/types.js +2 -0
  43. package/dist/interface/tui/chat/types.js.map +1 -0
  44. package/dist/interface/tui/chat/viewport.d.ts +3 -0
  45. package/dist/interface/tui/chat/viewport.d.ts.map +1 -0
  46. package/dist/interface/tui/chat/viewport.js +78 -0
  47. package/dist/interface/tui/chat/viewport.js.map +1 -0
  48. package/dist/interface/tui/chat.d.ts +5 -49
  49. package/dist/interface/tui/chat.d.ts.map +1 -1
  50. package/dist/interface/tui/chat.js +7 -236
  51. package/dist/interface/tui/chat.js.map +1 -1
  52. package/dist/interface/tui/entry.js +3 -3
  53. package/dist/interface/tui/use-loop.d.ts +1 -1
  54. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +3 -0
  55. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  56. package/dist/orchestrator/execution/task/task-lifecycle.js +3 -0
  57. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  58. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts.map +1 -1
  59. package/dist/orchestrator/execution/task/task-verifier-rules.js +34 -2
  60. package/dist/orchestrator/execution/task/task-verifier-rules.js.map +1 -1
  61. package/dist/orchestrator/execution/task/task-verifier-types.d.ts +2 -0
  62. package/dist/orchestrator/execution/task/task-verifier-types.d.ts.map +1 -1
  63. package/dist/orchestrator/loop/checkpoint-manager-loop.d.ts +1 -1
  64. package/dist/orchestrator/loop/checkpoint-manager-loop.d.ts.map +1 -1
  65. package/dist/orchestrator/loop/core-loop/capability.d.ts +22 -0
  66. package/dist/orchestrator/loop/core-loop/capability.d.ts.map +1 -0
  67. package/dist/orchestrator/loop/core-loop/capability.js +151 -0
  68. package/dist/orchestrator/loop/core-loop/capability.js.map +1 -0
  69. package/dist/orchestrator/loop/core-loop/contracts.d.ts +245 -0
  70. package/dist/orchestrator/loop/core-loop/contracts.d.ts.map +1 -0
  71. package/dist/orchestrator/loop/core-loop/contracts.js +40 -0
  72. package/dist/orchestrator/loop/core-loop/contracts.js.map +1 -0
  73. package/dist/orchestrator/loop/core-loop/control.d.ts +27 -0
  74. package/dist/orchestrator/loop/core-loop/control.d.ts.map +1 -0
  75. package/dist/orchestrator/loop/core-loop/control.js +72 -0
  76. package/dist/orchestrator/loop/core-loop/control.js.map +1 -0
  77. package/dist/orchestrator/loop/core-loop/learning.d.ts +31 -0
  78. package/dist/orchestrator/loop/core-loop/learning.d.ts.map +1 -0
  79. package/dist/orchestrator/loop/core-loop/learning.js +92 -0
  80. package/dist/orchestrator/loop/core-loop/learning.js.map +1 -0
  81. package/dist/orchestrator/loop/core-loop/preparation.d.ts +63 -0
  82. package/dist/orchestrator/loop/core-loop/preparation.d.ts.map +1 -0
  83. package/dist/orchestrator/loop/core-loop/preparation.js +362 -0
  84. package/dist/orchestrator/loop/core-loop/preparation.js.map +1 -0
  85. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts +29 -0
  86. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts.map +1 -0
  87. package/dist/orchestrator/loop/core-loop/task-cycle.js +674 -0
  88. package/dist/orchestrator/loop/core-loop/task-cycle.js.map +1 -0
  89. package/dist/orchestrator/loop/core-loop-capability.d.ts +1 -24
  90. package/dist/orchestrator/loop/core-loop-capability.d.ts.map +1 -1
  91. package/dist/orchestrator/loop/core-loop-capability.js +1 -153
  92. package/dist/orchestrator/loop/core-loop-capability.js.map +1 -1
  93. package/dist/orchestrator/loop/core-loop-learning.d.ts +1 -34
  94. package/dist/orchestrator/loop/core-loop-learning.d.ts.map +1 -1
  95. package/dist/orchestrator/loop/core-loop-learning.js +1 -95
  96. package/dist/orchestrator/loop/core-loop-learning.js.map +1 -1
  97. package/dist/orchestrator/loop/core-loop-phases-b.d.ts +1 -31
  98. package/dist/orchestrator/loop/core-loop-phases-b.d.ts.map +1 -1
  99. package/dist/orchestrator/loop/core-loop-phases-b.js +1 -669
  100. package/dist/orchestrator/loop/core-loop-phases-b.js.map +1 -1
  101. package/dist/orchestrator/loop/core-loop-phases-c.d.ts +1 -26
  102. package/dist/orchestrator/loop/core-loop-phases-c.d.ts.map +1 -1
  103. package/dist/orchestrator/loop/core-loop-phases-c.js +1 -71
  104. package/dist/orchestrator/loop/core-loop-phases-c.js.map +1 -1
  105. package/dist/orchestrator/loop/core-loop-phases.d.ts +1 -68
  106. package/dist/orchestrator/loop/core-loop-phases.d.ts.map +1 -1
  107. package/dist/orchestrator/loop/core-loop-phases.js +1 -367
  108. package/dist/orchestrator/loop/core-loop-phases.js.map +1 -1
  109. package/dist/orchestrator/loop/core-loop-types.d.ts +1 -244
  110. package/dist/orchestrator/loop/core-loop-types.d.ts.map +1 -1
  111. package/dist/orchestrator/loop/core-loop-types.js +1 -39
  112. package/dist/orchestrator/loop/core-loop-types.js.map +1 -1
  113. package/dist/orchestrator/loop/core-loop.d.ts +3 -3
  114. package/dist/orchestrator/loop/core-loop.d.ts.map +1 -1
  115. package/dist/orchestrator/loop/core-loop.js +6 -6
  116. package/dist/orchestrator/loop/core-loop.js.map +1 -1
  117. package/dist/orchestrator/loop/loop-report-helper.d.ts +1 -1
  118. package/dist/orchestrator/loop/loop-report-helper.d.ts.map +1 -1
  119. package/dist/orchestrator/loop/parallel-dispatch.d.ts +2 -2
  120. package/dist/orchestrator/loop/parallel-dispatch.d.ts.map +1 -1
  121. package/dist/orchestrator/loop/post-loop-hooks.d.ts +1 -1
  122. package/dist/orchestrator/loop/post-loop-hooks.d.ts.map +1 -1
  123. package/dist/orchestrator/loop/tree-loop-runner.d.ts +1 -1
  124. package/dist/orchestrator/loop/tree-loop-runner.d.ts.map +1 -1
  125. package/dist/orchestrator/loop/tree-loop-runner.js +1 -1
  126. package/dist/orchestrator/loop/tree-loop-runner.js.map +1 -1
  127. package/dist/platform/dream/dream-schedule-suggestions.d.ts +1 -1
  128. package/dist/platform/drive/drive-system.d.ts +8 -0
  129. package/dist/platform/drive/drive-system.d.ts.map +1 -1
  130. package/dist/platform/drive/drive-system.js +39 -22
  131. package/dist/platform/drive/drive-system.js.map +1 -1
  132. package/dist/platform/observation/engine/observe-context.d.ts +4 -0
  133. package/dist/platform/observation/engine/observe-context.d.ts.map +1 -0
  134. package/dist/platform/observation/engine/observe-context.js +26 -0
  135. package/dist/platform/observation/engine/observe-context.js.map +1 -0
  136. package/dist/platform/observation/engine/observe-datasource-stage.d.ts +33 -0
  137. package/dist/platform/observation/engine/observe-datasource-stage.d.ts.map +1 -0
  138. package/dist/platform/observation/engine/observe-datasource-stage.js +66 -0
  139. package/dist/platform/observation/engine/observe-datasource-stage.js.map +1 -0
  140. package/dist/platform/observation/engine/observe-llm-stage.d.ts +25 -0
  141. package/dist/platform/observation/engine/observe-llm-stage.d.ts.map +1 -0
  142. package/dist/platform/observation/engine/observe-llm-stage.js +79 -0
  143. package/dist/platform/observation/engine/observe-llm-stage.js.map +1 -0
  144. package/dist/platform/observation/engine/observe-precheck.d.ts +21 -0
  145. package/dist/platform/observation/engine/observe-precheck.d.ts.map +1 -0
  146. package/dist/platform/observation/engine/observe-precheck.js +51 -0
  147. package/dist/platform/observation/engine/observe-precheck.js.map +1 -0
  148. package/dist/platform/observation/engine/observe-self-report.d.ts +18 -0
  149. package/dist/platform/observation/engine/observe-self-report.d.ts.map +1 -0
  150. package/dist/platform/observation/engine/observe-self-report.js +26 -0
  151. package/dist/platform/observation/engine/observe-self-report.js.map +1 -0
  152. package/dist/platform/observation/engine/observe-tool-stage.d.ts +21 -0
  153. package/dist/platform/observation/engine/observe-tool-stage.d.ts.map +1 -0
  154. package/dist/platform/observation/engine/observe-tool-stage.js +49 -0
  155. package/dist/platform/observation/engine/observe-tool-stage.js.map +1 -0
  156. package/dist/platform/observation/observation-engine.d.ts.map +1 -1
  157. package/dist/platform/observation/observation-engine.js +67 -246
  158. package/dist/platform/observation/observation-engine.js.map +1 -1
  159. package/dist/prompt/context-assembler.d.ts +61 -13
  160. package/dist/prompt/context-assembler.d.ts.map +1 -1
  161. package/dist/prompt/context-assembler.js +18 -3
  162. package/dist/prompt/context-assembler.js.map +1 -1
  163. package/dist/runtime/approval-broker.d.ts.map +1 -1
  164. package/dist/runtime/approval-broker.js +1 -0
  165. package/dist/runtime/approval-broker.js.map +1 -1
  166. package/dist/runtime/command-dispatcher.d.ts +35 -0
  167. package/dist/runtime/command-dispatcher.d.ts.map +1 -0
  168. package/dist/runtime/command-dispatcher.js +145 -0
  169. package/dist/runtime/command-dispatcher.js.map +1 -0
  170. package/dist/runtime/daemon/client.d.ts +67 -0
  171. package/dist/runtime/daemon/client.d.ts.map +1 -0
  172. package/dist/runtime/daemon/client.js +330 -0
  173. package/dist/runtime/daemon/client.js.map +1 -0
  174. package/dist/runtime/daemon/health.d.ts +31 -0
  175. package/dist/runtime/daemon/health.d.ts.map +1 -0
  176. package/dist/runtime/daemon/health.js +113 -0
  177. package/dist/runtime/daemon/health.js.map +1 -0
  178. package/dist/runtime/daemon/index.d.ts +9 -0
  179. package/dist/runtime/daemon/index.d.ts.map +1 -0
  180. package/dist/runtime/daemon/index.js +8 -0
  181. package/dist/runtime/daemon/index.js.map +1 -0
  182. package/dist/runtime/daemon/maintenance.d.ts +47 -0
  183. package/dist/runtime/daemon/maintenance.d.ts.map +1 -0
  184. package/dist/runtime/daemon/maintenance.js +230 -0
  185. package/dist/runtime/daemon/maintenance.js.map +1 -0
  186. package/dist/runtime/daemon/persistence.d.ts +20 -0
  187. package/dist/runtime/daemon/persistence.d.ts.map +1 -0
  188. package/dist/runtime/daemon/persistence.js +112 -0
  189. package/dist/runtime/daemon/persistence.js.map +1 -0
  190. package/dist/runtime/daemon/runner-lifecycle.d.ts +29 -0
  191. package/dist/runtime/daemon/runner-lifecycle.d.ts.map +1 -0
  192. package/dist/runtime/daemon/runner-lifecycle.js +56 -0
  193. package/dist/runtime/daemon/runner-lifecycle.js.map +1 -0
  194. package/dist/runtime/daemon/runner.d.ts +229 -0
  195. package/dist/runtime/daemon/runner.d.ts.map +1 -0
  196. package/dist/runtime/daemon/runner.js +875 -0
  197. package/dist/runtime/daemon/runner.js.map +1 -0
  198. package/dist/runtime/daemon/runtime-ownership.d.ts +30 -0
  199. package/dist/runtime/daemon/runtime-ownership.d.ts.map +1 -0
  200. package/dist/runtime/daemon/runtime-ownership.js +132 -0
  201. package/dist/runtime/daemon/runtime-ownership.js.map +1 -0
  202. package/dist/runtime/daemon/signals.d.ts +17 -0
  203. package/dist/runtime/daemon/signals.d.ts.map +1 -0
  204. package/dist/runtime/daemon/signals.js +31 -0
  205. package/dist/runtime/daemon/signals.js.map +1 -0
  206. package/dist/runtime/daemon/types.d.ts +8 -0
  207. package/dist/runtime/daemon/types.d.ts.map +1 -0
  208. package/dist/runtime/daemon/types.js +2 -0
  209. package/dist/runtime/daemon/types.js.map +1 -0
  210. package/dist/runtime/daemon-client.d.ts +1 -55
  211. package/dist/runtime/daemon-client.d.ts.map +1 -1
  212. package/dist/runtime/daemon-client.js +1 -297
  213. package/dist/runtime/daemon-client.js.map +1 -1
  214. package/dist/runtime/daemon-health.d.ts +1 -30
  215. package/dist/runtime/daemon-health.d.ts.map +1 -1
  216. package/dist/runtime/daemon-health.js +1 -112
  217. package/dist/runtime/daemon-health.js.map +1 -1
  218. package/dist/runtime/daemon-runner-lifecycle.d.ts +2 -0
  219. package/dist/runtime/daemon-runner-lifecycle.d.ts.map +1 -0
  220. package/dist/runtime/daemon-runner-lifecycle.js +2 -0
  221. package/dist/runtime/daemon-runner-lifecycle.js.map +1 -0
  222. package/dist/runtime/daemon-runner.d.ts +1 -231
  223. package/dist/runtime/daemon-runner.d.ts.map +1 -1
  224. package/dist/runtime/daemon-runner.js +1 -1042
  225. package/dist/runtime/daemon-runner.js.map +1 -1
  226. package/dist/runtime/daemon-runtime-ownership.d.ts +2 -0
  227. package/dist/runtime/daemon-runtime-ownership.d.ts.map +1 -0
  228. package/dist/runtime/daemon-runtime-ownership.js +2 -0
  229. package/dist/runtime/daemon-runtime-ownership.js.map +1 -0
  230. package/dist/runtime/daemon-signals.d.ts +1 -16
  231. package/dist/runtime/daemon-signals.d.ts.map +1 -1
  232. package/dist/runtime/daemon-signals.js +1 -30
  233. package/dist/runtime/daemon-signals.js.map +1 -1
  234. package/dist/runtime/event/dispatcher.d.ts +34 -0
  235. package/dist/runtime/event/dispatcher.d.ts.map +1 -0
  236. package/dist/runtime/event/dispatcher.js +124 -0
  237. package/dist/runtime/event/dispatcher.js.map +1 -0
  238. package/dist/runtime/event/index.d.ts +5 -0
  239. package/dist/runtime/event/index.d.ts.map +1 -0
  240. package/dist/runtime/event/index.js +5 -0
  241. package/dist/runtime/event/index.js.map +1 -0
  242. package/dist/runtime/event/server-snapshot-reader.d.ts +31 -0
  243. package/dist/runtime/event/server-snapshot-reader.d.ts.map +1 -0
  244. package/dist/runtime/event/server-snapshot-reader.js +94 -0
  245. package/dist/runtime/event/server-snapshot-reader.js.map +1 -0
  246. package/dist/runtime/event/server-sse.d.ts +25 -0
  247. package/dist/runtime/event/server-sse.d.ts.map +1 -0
  248. package/dist/runtime/event/server-sse.js +149 -0
  249. package/dist/runtime/event/server-sse.js.map +1 -0
  250. package/dist/runtime/event/server.d.ts +114 -0
  251. package/dist/runtime/event/server.d.ts.map +1 -0
  252. package/dist/runtime/event/server.js +651 -0
  253. package/dist/runtime/event/server.js.map +1 -0
  254. package/dist/runtime/event-dispatcher.d.ts +2 -0
  255. package/dist/runtime/event-dispatcher.d.ts.map +1 -0
  256. package/dist/runtime/event-dispatcher.js +2 -0
  257. package/dist/runtime/event-dispatcher.js.map +1 -0
  258. package/dist/runtime/event-server-snapshot-reader.d.ts +2 -0
  259. package/dist/runtime/event-server-snapshot-reader.d.ts.map +1 -0
  260. package/dist/runtime/event-server-snapshot-reader.js +2 -0
  261. package/dist/runtime/event-server-snapshot-reader.js.map +1 -0
  262. package/dist/runtime/event-server-sse.d.ts +2 -0
  263. package/dist/runtime/event-server-sse.d.ts.map +1 -0
  264. package/dist/runtime/event-server-sse.js +2 -0
  265. package/dist/runtime/event-server-sse.js.map +1 -0
  266. package/dist/runtime/event-server.d.ts +1 -91
  267. package/dist/runtime/event-server.d.ts.map +1 -1
  268. package/dist/runtime/event-server.js +1 -698
  269. package/dist/runtime/event-server.js.map +1 -1
  270. package/dist/runtime/executor/loop-supervisor.d.ts +9 -5
  271. package/dist/runtime/executor/loop-supervisor.d.ts.map +1 -1
  272. package/dist/runtime/executor/loop-supervisor.js +59 -76
  273. package/dist/runtime/executor/loop-supervisor.js.map +1 -1
  274. package/dist/runtime/gateway/http-channel-adapter.d.ts +1 -1
  275. package/dist/runtime/plugin-loader.d.ts +1 -1
  276. package/dist/runtime/queue/index.d.ts +0 -4
  277. package/dist/runtime/queue/index.d.ts.map +1 -1
  278. package/dist/runtime/queue/index.js +0 -2
  279. package/dist/runtime/queue/index.js.map +1 -1
  280. package/dist/runtime/queue/journal-backed-queue.d.ts.map +1 -1
  281. package/dist/runtime/queue/journal-backed-queue.js +2 -0
  282. package/dist/runtime/queue/journal-backed-queue.js.map +1 -1
  283. package/dist/runtime/schedule/engine-layers.d.ts +44 -0
  284. package/dist/runtime/schedule/engine-layers.d.ts.map +1 -0
  285. package/dist/runtime/schedule/engine-layers.js +433 -0
  286. package/dist/runtime/schedule/engine-layers.js.map +1 -0
  287. package/dist/runtime/schedule/engine.d.ts +82 -0
  288. package/dist/runtime/schedule/engine.d.ts.map +1 -0
  289. package/dist/runtime/schedule/engine.js +480 -0
  290. package/dist/runtime/schedule/engine.js.map +1 -0
  291. package/dist/runtime/schedule/index.d.ts +5 -0
  292. package/dist/runtime/schedule/index.d.ts.map +1 -0
  293. package/dist/runtime/schedule/index.js +5 -0
  294. package/dist/runtime/schedule/index.js.map +1 -0
  295. package/dist/runtime/schedule/presets.d.ts +536 -0
  296. package/dist/runtime/schedule/presets.d.ts.map +1 -0
  297. package/dist/runtime/schedule/presets.js +166 -0
  298. package/dist/runtime/schedule/presets.js.map +1 -0
  299. package/dist/runtime/schedule/source.d.ts +65 -0
  300. package/dist/runtime/schedule/source.d.ts.map +1 -0
  301. package/dist/runtime/schedule/source.js +16 -0
  302. package/dist/runtime/schedule/source.js.map +1 -0
  303. package/dist/runtime/schedule-engine-layers.d.ts +1 -43
  304. package/dist/runtime/schedule-engine-layers.d.ts.map +1 -1
  305. package/dist/runtime/schedule-engine-layers.js +1 -432
  306. package/dist/runtime/schedule-engine-layers.js.map +1 -1
  307. package/dist/runtime/schedule-engine.d.ts +1 -81
  308. package/dist/runtime/schedule-engine.d.ts.map +1 -1
  309. package/dist/runtime/schedule-engine.js +1 -479
  310. package/dist/runtime/schedule-engine.js.map +1 -1
  311. package/dist/runtime/schedule-presets.d.ts +1 -535
  312. package/dist/runtime/schedule-presets.d.ts.map +1 -1
  313. package/dist/runtime/schedule-presets.js +1 -165
  314. package/dist/runtime/schedule-presets.js.map +1 -1
  315. package/dist/runtime/schedule-source.d.ts +1 -64
  316. package/dist/runtime/schedule-source.d.ts.map +1 -1
  317. package/dist/runtime/schedule-source.js +1 -15
  318. package/dist/runtime/schedule-source.js.map +1 -1
  319. package/dist/runtime/types/daemon.d.ts.map +1 -1
  320. package/dist/runtime/types/daemon.js +2 -1
  321. package/dist/runtime/types/daemon.js.map +1 -1
  322. package/dist/runtime/watchdog.d.ts +44 -0
  323. package/dist/runtime/watchdog.d.ts.map +1 -0
  324. package/dist/runtime/watchdog.js +185 -0
  325. package/dist/runtime/watchdog.js.map +1 -0
  326. package/dist/tools/builtin/index.d.ts +1 -1
  327. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.d.ts +1 -1
  328. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.js +1 -1
  329. package/dist/tools/schedule/GetScheduleTool/GetScheduleTool.d.ts +1 -1
  330. package/dist/tools/schedule/ListSchedulesTool/ListSchedulesTool.d.ts +1 -1
  331. package/dist/tools/schedule/PauseScheduleTool/PauseScheduleTool.d.ts +1 -1
  332. package/dist/tools/schedule/RemoveScheduleTool/RemoveScheduleTool.d.ts +1 -1
  333. package/dist/tools/schedule/ResumeScheduleTool/ResumeScheduleTool.d.ts +1 -1
  334. package/dist/tools/schedule/UpdateScheduleTool/UpdateScheduleTool.d.ts +1 -1
  335. package/package.json +1 -1
@@ -0,0 +1,230 @@
1
+ import { z } from "zod";
2
+ import { getInternalIdentityPrefix } from "../../base/config/identity-loader.js";
3
+ import { PulSeedEventSchema } from "../../base/types/drive.js";
4
+ import { createEnvelope } from "../types/envelope.js";
5
+ const ProactiveResponseSchema = z.object({
6
+ action: z.enum(["suggest_goal", "investigate", "preemptive_check", "sleep"]),
7
+ details: z.record(z.string(), z.unknown()).optional(),
8
+ });
9
+ export async function collectGoalCycleScheduleSnapshot(driveSystem, goalIds) {
10
+ const snapshot = [];
11
+ for (const goalId of goalIds) {
12
+ snapshot.push(await driveSystem.getGoalActivationSnapshot(goalId));
13
+ }
14
+ return snapshot;
15
+ }
16
+ export async function determineActiveGoalsForCycle(driveSystem, goalIds, snapshot = []) {
17
+ const eligibleIds = [];
18
+ const scores = new Map();
19
+ const snapshotByGoalId = new Map(snapshot.map((entry) => [entry.goalId, entry]));
20
+ for (const goalId of goalIds) {
21
+ const entry = snapshotByGoalId.get(goalId)
22
+ ?? await driveSystem.getGoalActivationSnapshot(goalId);
23
+ if (entry.shouldActivate) {
24
+ eligibleIds.push(goalId);
25
+ const nextCheckAt = entry.schedule ? new Date(entry.schedule.next_check_at).getTime() : 0;
26
+ scores.set(goalId, -nextCheckAt);
27
+ }
28
+ }
29
+ return driveSystem.prioritizeGoals(eligibleIds, scores);
30
+ }
31
+ export function getNextIntervalForGoals(config, goalIds) {
32
+ const goalIntervals = config.goal_intervals;
33
+ if (!goalIntervals || goalIds.length === 0) {
34
+ return config.check_interval_ms;
35
+ }
36
+ let minInterval = config.check_interval_ms;
37
+ for (const goalId of goalIds) {
38
+ const override = goalIntervals[goalId];
39
+ if (override !== undefined && override < minInterval) {
40
+ minInterval = override;
41
+ }
42
+ }
43
+ return minInterval;
44
+ }
45
+ export async function processCronTasksForDaemon(params) {
46
+ const { cronScheduler, logger, acceptRuntimeEnvelope } = params;
47
+ if (!cronScheduler) {
48
+ return;
49
+ }
50
+ try {
51
+ const dueTasks = await cronScheduler.getDueTasks();
52
+ for (const task of dueTasks) {
53
+ logger.info(`Cron task due: ${task.id} (type=${task.type})`, {
54
+ cron: task.cron,
55
+ type: task.type,
56
+ });
57
+ const envelope = createEnvelope({
58
+ type: "event",
59
+ name: "cron_task_due",
60
+ source: "cron-scheduler",
61
+ priority: "normal",
62
+ payload: task,
63
+ dedupe_key: `cron-${task.id}`,
64
+ });
65
+ acceptRuntimeEnvelope(envelope);
66
+ }
67
+ }
68
+ catch (err) {
69
+ logger.warn("Failed to process cron tasks", {
70
+ error: err instanceof Error ? err.message : String(err),
71
+ });
72
+ }
73
+ }
74
+ export async function processScheduleEntriesForDaemon(params) {
75
+ const { scheduleEngine, logger, acceptRuntimeEnvelope } = params;
76
+ if (!scheduleEngine) {
77
+ return;
78
+ }
79
+ try {
80
+ const results = await scheduleEngine.tick();
81
+ for (const result of results) {
82
+ if (result.status === "error") {
83
+ logger.warn(`Schedule entry ${result.entry_id} failed: ${result.error_message}`);
84
+ continue;
85
+ }
86
+ const goalId = result["goal_id"];
87
+ if (!goalId) {
88
+ logger.warn("schedule_activated envelope missing goal_id", {
89
+ entry_id: result["entry_id"],
90
+ });
91
+ }
92
+ const envelope = createEnvelope({
93
+ type: "event",
94
+ name: "schedule_activated",
95
+ source: "schedule-engine",
96
+ goal_id: goalId,
97
+ priority: "normal",
98
+ payload: result,
99
+ dedupe_key: result.entry_id,
100
+ });
101
+ acceptRuntimeEnvelope(envelope);
102
+ }
103
+ }
104
+ catch (err) {
105
+ logger.error("Failed to process schedule entries", {
106
+ error: err instanceof Error ? err.message : String(err),
107
+ });
108
+ }
109
+ }
110
+ export async function expireOldCronTasks(cronScheduler, logger) {
111
+ if (!cronScheduler) {
112
+ return;
113
+ }
114
+ try {
115
+ await cronScheduler.expireOldTasks();
116
+ logger.debug("Expired old cron tasks");
117
+ }
118
+ catch (err) {
119
+ logger.warn("Failed to expire cron tasks", {
120
+ error: err instanceof Error ? err.message : String(err),
121
+ });
122
+ }
123
+ }
124
+ export async function runProactiveMaintenance(params) {
125
+ const { config, llmClient, state, lastProactiveTickAt, logger } = params;
126
+ if (!config.proactive_mode || !llmClient) {
127
+ return lastProactiveTickAt;
128
+ }
129
+ if (Date.now() - lastProactiveTickAt < config.proactive_interval_ms) {
130
+ return lastProactiveTickAt;
131
+ }
132
+ try {
133
+ const goalSummaries = state.active_goals.length > 0
134
+ ? state.active_goals.map((id) => `- ${id}`).join("\n")
135
+ : "(no active goals)";
136
+ const prompt = `${getInternalIdentityPrefix("proactive engine")} Given the current state of all goals:\n${goalSummaries}\n\nDecide what action to take:\n- "suggest_goal": A new goal should be created (provide title + description)\n- "investigate": Something needs investigation (provide what and why)\n- "preemptive_check": Run a pre-emptive observation (provide goal_id)\n- "sleep": Nothing needs attention right now\n\nRespond with JSON: { "action": "...", "details": { ... } }`;
137
+ const response = await llmClient.sendMessage([{ role: "user", content: prompt }], { model_tier: "light" });
138
+ const parsed = ProactiveResponseSchema.safeParse(llmClient.parseJSON(response.content, ProactiveResponseSchema));
139
+ if (!parsed.success) {
140
+ logger.warn("Proactive tick: failed to parse LLM response", {
141
+ raw: response.content,
142
+ error: parsed.error.message,
143
+ });
144
+ return Date.now();
145
+ }
146
+ const { action, details } = parsed.data;
147
+ if (action === "sleep") {
148
+ logger.debug("Proactive tick: LLM decided to sleep");
149
+ }
150
+ else {
151
+ logger.info(`Proactive tick: action=${action}`, { details });
152
+ }
153
+ }
154
+ catch (err) {
155
+ logger.warn("Proactive tick: LLM error (ignored)", {
156
+ error: err instanceof Error ? err.message : String(err),
157
+ });
158
+ }
159
+ return Date.now();
160
+ }
161
+ export async function getMaxGapScoreForGoals(driveSystem, goalIds, snapshot = []) {
162
+ const snapshotByGoalId = new Map(snapshot.map((entry) => [entry.goalId, entry]));
163
+ let max = 0;
164
+ for (const goalId of goalIds) {
165
+ const entry = snapshotByGoalId.get(goalId);
166
+ if (entry) {
167
+ const score = entry.schedule?.["last_gap_score"];
168
+ if (typeof score === "number" && score > max) {
169
+ max = score;
170
+ }
171
+ continue;
172
+ }
173
+ try {
174
+ const fallbackEntry = await driveSystem.getGoalActivationSnapshot(goalId);
175
+ const schedule = fallbackEntry.schedule;
176
+ const score = schedule["last_gap_score"];
177
+ if (typeof score === "number" && score > max) {
178
+ max = score;
179
+ }
180
+ }
181
+ catch {
182
+ // Non-fatal — just use 0 for this goal
183
+ }
184
+ }
185
+ return max;
186
+ }
187
+ function getPersistedDaemonStateSnapshot(state) {
188
+ return JSON.stringify({
189
+ status: state.status,
190
+ active_goals: [...state.active_goals],
191
+ loop_count: state.loop_count,
192
+ last_loop_at: state.last_loop_at,
193
+ interrupted_goals: state.interrupted_goals ? [...state.interrupted_goals] : undefined,
194
+ });
195
+ }
196
+ export async function runSupervisorMaintenanceCycleForDaemon(params) {
197
+ const snapshot = await collectGoalCycleScheduleSnapshot(params.driveSystem, [...params.currentGoalIds]);
198
+ const activeGoals = await determineActiveGoalsForCycle(params.driveSystem, [...params.currentGoalIds], snapshot);
199
+ const stateBeforeMaintenance = getPersistedDaemonStateSnapshot(params.state);
200
+ for (const goalId of activeGoals) {
201
+ params.supervisor?.activateGoal(goalId);
202
+ }
203
+ await params.processCronTasks();
204
+ await params.processScheduleEntries();
205
+ await params.proactiveTick();
206
+ if (getPersistedDaemonStateSnapshot(params.state) !== stateBeforeMaintenance) {
207
+ await params.saveDaemonState();
208
+ }
209
+ if (params.eventServer) {
210
+ void params.eventServer.broadcast?.("daemon_status", {
211
+ status: params.state.status,
212
+ activeGoals: params.state.active_goals,
213
+ loopCount: params.state.loop_count,
214
+ lastLoopAt: params.state.last_loop_at,
215
+ });
216
+ }
217
+ }
218
+ export async function writeChatMessageEvent(driveSystem, goalId, message) {
219
+ await driveSystem.writeEvent(PulSeedEventSchema.parse({
220
+ type: "internal",
221
+ source: "command-dispatcher",
222
+ timestamp: new Date().toISOString(),
223
+ data: {
224
+ goal_id: goalId,
225
+ kind: "chat_message",
226
+ message,
227
+ },
228
+ }));
229
+ }
230
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/runtime/daemon/maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { DaemonState } from "../../base/types/daemon.js";
2
+ import type { Logger } from "../logger.js";
3
+ import type { RuntimeOwnershipCoordinator } from "./runtime-ownership.js";
4
+ import type { ShutdownMarker } from "./types.js";
5
+ export declare function saveDaemonStateFile(baseDir: string, state: DaemonState, logger: Logger): Promise<void>;
6
+ export declare function loadDaemonStateFile(baseDir: string): Promise<DaemonState | null>;
7
+ export declare function restoreInterruptedGoals(baseDir: string, goalIds: string[], logger: Logger): Promise<string[]>;
8
+ export declare function writeShutdownMarkerFile(baseDir: string, marker: ShutdownMarker, logger: Logger): Promise<void>;
9
+ export declare function readShutdownMarkerFile(baseDir: string): Promise<ShutdownMarker | null>;
10
+ export declare function deleteShutdownMarkerFile(baseDir: string): Promise<void>;
11
+ export declare function checkCrashRecoveryMarker(baseDir: string, logger: Logger): Promise<void>;
12
+ export declare function cleanupDaemonRun(params: {
13
+ baseDir: string;
14
+ state: DaemonState;
15
+ currentGoalIds: string[];
16
+ currentLoopIndex: number;
17
+ runtimeOwnership: RuntimeOwnershipCoordinator;
18
+ logger: Logger;
19
+ }): Promise<void>;
20
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/runtime/daemon/persistence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAWtF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAG5F;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7E;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7F;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,2BAA2B,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChB"}
@@ -0,0 +1,112 @@
1
+ import * as fsp from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { readJsonFileOrNull, writeJsonFileAtomic } from "../../base/utils/json-io.js";
4
+ import { DaemonStateSchema } from "../../base/types/daemon.js";
5
+ export async function saveDaemonStateFile(baseDir, state, logger) {
6
+ const statePath = path.join(baseDir, "daemon-state.json");
7
+ try {
8
+ await writeJsonFileAtomic(statePath, state);
9
+ }
10
+ catch (err) {
11
+ logger.warn("Failed to save daemon state", {
12
+ error: err instanceof Error ? err.message : String(err),
13
+ });
14
+ }
15
+ }
16
+ export async function loadDaemonStateFile(baseDir) {
17
+ const statePath = path.join(baseDir, "daemon-state.json");
18
+ const data = await readJsonFileOrNull(statePath);
19
+ if (data === null) {
20
+ return null;
21
+ }
22
+ try {
23
+ return DaemonStateSchema.parse(data);
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ export async function restoreInterruptedGoals(baseDir, goalIds, logger) {
30
+ const saved = await loadDaemonStateFile(baseDir);
31
+ if (!saved?.interrupted_goals?.length) {
32
+ return goalIds;
33
+ }
34
+ const merged = Array.from(new Set([...goalIds, ...saved.interrupted_goals]));
35
+ if (merged.length > goalIds.length) {
36
+ logger.info("Restored interrupted goals from previous run", {
37
+ interrupted: saved.interrupted_goals,
38
+ merged,
39
+ });
40
+ }
41
+ return merged;
42
+ }
43
+ export async function writeShutdownMarkerFile(baseDir, marker, logger) {
44
+ const markerPath = path.join(baseDir, "shutdown-state.json");
45
+ try {
46
+ await writeJsonFileAtomic(markerPath, marker);
47
+ }
48
+ catch (err) {
49
+ logger.warn("Failed to write shutdown marker", {
50
+ error: err instanceof Error ? err.message : String(err),
51
+ });
52
+ }
53
+ }
54
+ export async function readShutdownMarkerFile(baseDir) {
55
+ const markerPath = path.join(baseDir, "shutdown-state.json");
56
+ return readJsonFileOrNull(markerPath);
57
+ }
58
+ export async function deleteShutdownMarkerFile(baseDir) {
59
+ const markerPath = path.join(baseDir, "shutdown-state.json");
60
+ try {
61
+ await fsp.unlink(markerPath);
62
+ }
63
+ catch {
64
+ // File may not exist — ignore
65
+ }
66
+ }
67
+ export async function checkCrashRecoveryMarker(baseDir, logger) {
68
+ const marker = await readShutdownMarkerFile(baseDir);
69
+ if (!marker) {
70
+ return;
71
+ }
72
+ if (marker.state === "clean_shutdown") {
73
+ logger.info("Resuming from clean shutdown", {
74
+ previous_loop_index: marker.loop_index,
75
+ previous_goals: marker.goal_ids,
76
+ shutdown_at: marker.timestamp,
77
+ });
78
+ }
79
+ else {
80
+ logger.warn("Recovering from crash — previous instance did not shut down cleanly", {
81
+ previous_loop_index: marker.loop_index,
82
+ previous_goals: marker.goal_ids,
83
+ last_seen_at: marker.timestamp,
84
+ });
85
+ }
86
+ await deleteShutdownMarkerFile(baseDir);
87
+ }
88
+ export async function cleanupDaemonRun(params) {
89
+ const { baseDir, state, currentGoalIds, currentLoopIndex, runtimeOwnership, logger, } = params;
90
+ const wasCrashed = state.status === "crashed";
91
+ if (!wasCrashed) {
92
+ state.status = "stopped";
93
+ if (state.interrupted_goals === undefined) {
94
+ state.interrupted_goals = [...state.active_goals];
95
+ }
96
+ }
97
+ await saveDaemonStateFile(baseDir, state, logger);
98
+ await runtimeOwnership.releaseLeadership();
99
+ await runtimeOwnership.saveFinalHealth(wasCrashed ? "failed" : "degraded");
100
+ await writeShutdownMarkerFile(baseDir, {
101
+ goal_ids: currentGoalIds,
102
+ loop_index: currentLoopIndex,
103
+ timestamp: new Date().toISOString(),
104
+ reason: wasCrashed ? "max_retries" : "stop",
105
+ state: wasCrashed ? "running" : "clean_shutdown",
106
+ }, logger);
107
+ logger.info("Daemon stopped", {
108
+ loop_count: state.loop_count,
109
+ crash_count: state.crash_count,
110
+ });
111
+ }
112
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/runtime/daemon/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { EventServer } from "../event/server.js";
2
+ import type { Logger } from "../logger.js";
3
+ interface DaemonStatusSnapshot {
4
+ status: string;
5
+ activeGoals: string[];
6
+ loopCount: number;
7
+ startedAt: string;
8
+ }
9
+ interface DaemonStatusHeartbeatOptions {
10
+ eventServer: EventServer | undefined;
11
+ getSnapshot: () => DaemonStatusSnapshot;
12
+ }
13
+ interface ProcessShutdownCoordinatorOptions {
14
+ logger: Logger;
15
+ gracefulShutdownTimeoutMs: number;
16
+ onShutdown: () => void;
17
+ onForceStop: () => void;
18
+ }
19
+ export declare function startDaemonStatusHeartbeat(options: DaemonStatusHeartbeatOptions): () => void;
20
+ export declare class ProcessShutdownCoordinator {
21
+ private readonly options;
22
+ private shutdownHandler;
23
+ private forceStopTimer;
24
+ constructor(options: ProcessShutdownCoordinatorOptions);
25
+ activate(): void;
26
+ dispose(): void;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=runner-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/daemon/runner-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,WAAW,EAAE,MAAM,oBAAoB,CAAC;CACzC;AAED,UAAU,iCAAiC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,EAAE,MAAM,CAAC;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,4BAA4B,GACpC,MAAM,IAAI,CAmBZ;AAED,qBAAa,0BAA0B;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,cAAc,CAA8C;gBAEvC,OAAO,EAAE,iCAAiC;IAEvE,QAAQ,IAAI,IAAI;IAuBhB,OAAO,IAAI,IAAI;CAYhB"}
@@ -0,0 +1,56 @@
1
+ export function startDaemonStatusHeartbeat(options) {
2
+ const timer = setInterval(() => {
3
+ const { eventServer } = options;
4
+ const snapshot = options.getSnapshot();
5
+ if (!eventServer || snapshot.status !== "running") {
6
+ return;
7
+ }
8
+ void eventServer.broadcast?.("daemon_status", {
9
+ status: snapshot.status,
10
+ activeGoals: snapshot.activeGoals,
11
+ loopCount: snapshot.loopCount,
12
+ uptime: Date.now() - new Date(snapshot.startedAt).getTime(),
13
+ });
14
+ }, 30_000);
15
+ return () => {
16
+ clearInterval(timer);
17
+ };
18
+ }
19
+ export class ProcessShutdownCoordinator {
20
+ options;
21
+ shutdownHandler = null;
22
+ forceStopTimer = null;
23
+ constructor(options) {
24
+ this.options = options;
25
+ }
26
+ activate() {
27
+ const shutdown = () => {
28
+ if (this.shutdownHandler === null) {
29
+ return;
30
+ }
31
+ if (this.forceStopTimer !== null) {
32
+ return;
33
+ }
34
+ this.options.onShutdown();
35
+ this.forceStopTimer = setTimeout(() => {
36
+ this.options.logger.warn(`Graceful shutdown timeout (${this.options.gracefulShutdownTimeoutMs}ms) exceeded, forcing stop`);
37
+ this.options.onForceStop();
38
+ }, this.options.gracefulShutdownTimeoutMs);
39
+ };
40
+ this.shutdownHandler = shutdown;
41
+ process.on("SIGTERM", shutdown);
42
+ process.on("SIGINT", shutdown);
43
+ }
44
+ dispose() {
45
+ if (this.forceStopTimer !== null) {
46
+ clearTimeout(this.forceStopTimer);
47
+ this.forceStopTimer = null;
48
+ }
49
+ if (this.shutdownHandler) {
50
+ process.removeListener("SIGTERM", this.shutdownHandler);
51
+ process.removeListener("SIGINT", this.shutdownHandler);
52
+ this.shutdownHandler = null;
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=runner-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/daemon/runner-lifecycle.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,0BAA0B,CACxC,OAAqC;IAErC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO;QACT,CAAC;QAED,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE;YAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC,EAAE,MAAM,CAAC,CAAC;IAEX,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,0BAA0B;IAIR;IAHrB,eAAe,GAAwB,IAAI,CAAC;IAC5C,cAAc,GAAyC,IAAI,CAAC;IAEpE,YAA6B,OAA0C;QAA1C,YAAO,GAAP,OAAO,CAAmC;IAAG,CAAC;IAE3E,QAAQ;QACN,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACtB,8BAA8B,IAAI,CAAC,OAAO,CAAC,yBAAyB,4BAA4B,CACjG,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACxD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;CACF"}