pulseed 0.5.4 → 0.6.0

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 (561) hide show
  1. package/README.md +13 -9
  2. package/dist/adapters/datasources/artifact-metric-datasource.d.ts +18 -0
  3. package/dist/adapters/datasources/artifact-metric-datasource.d.ts.map +1 -0
  4. package/dist/adapters/datasources/artifact-metric-datasource.js +592 -0
  5. package/dist/adapters/datasources/artifact-metric-datasource.js.map +1 -0
  6. package/dist/adapters/types/mcp.d.ts +6 -6
  7. package/dist/base/types/goal-activation.d.ts +14 -2
  8. package/dist/base/types/goal-activation.d.ts.map +1 -1
  9. package/dist/base/types/goal-activation.js +4 -0
  10. package/dist/base/types/goal-activation.js.map +1 -1
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/interface/chat/chat-runner-commands.d.ts +6 -0
  16. package/dist/interface/chat/chat-runner-commands.d.ts.map +1 -1
  17. package/dist/interface/chat/chat-runner-commands.js +94 -2
  18. package/dist/interface/chat/chat-runner-commands.js.map +1 -1
  19. package/dist/interface/chat/chat-runner-event-bridge.d.ts +8 -1
  20. package/dist/interface/chat/chat-runner-event-bridge.d.ts.map +1 -1
  21. package/dist/interface/chat/chat-runner-event-bridge.js +69 -3
  22. package/dist/interface/chat/chat-runner-event-bridge.js.map +1 -1
  23. package/dist/interface/chat/chat-runner-routes.d.ts.map +1 -1
  24. package/dist/interface/chat/chat-runner-routes.js +23 -7
  25. package/dist/interface/chat/chat-runner-routes.js.map +1 -1
  26. package/dist/interface/chat/chat-runner-support.d.ts +25 -1
  27. package/dist/interface/chat/chat-runner-support.d.ts.map +1 -1
  28. package/dist/interface/chat/chat-runner-support.js +66 -12
  29. package/dist/interface/chat/chat-runner-support.js.map +1 -1
  30. package/dist/interface/chat/chat-runner.d.ts.map +1 -1
  31. package/dist/interface/chat/chat-runner.js +38 -8
  32. package/dist/interface/chat/chat-runner.js.map +1 -1
  33. package/dist/interface/chat/cross-platform-session.d.ts.map +1 -1
  34. package/dist/interface/chat/cross-platform-session.js +13 -1
  35. package/dist/interface/chat/cross-platform-session.js.map +1 -1
  36. package/dist/interface/chat/event-subscriber.d.ts.map +1 -1
  37. package/dist/interface/chat/event-subscriber.js +20 -0
  38. package/dist/interface/chat/event-subscriber.js.map +1 -1
  39. package/dist/interface/chat/failure-recovery.d.ts +43 -1
  40. package/dist/interface/chat/failure-recovery.d.ts.map +1 -1
  41. package/dist/interface/chat/failure-recovery.js +259 -89
  42. package/dist/interface/chat/failure-recovery.js.map +1 -1
  43. package/dist/interface/chat/ingress-router.d.ts +2 -1
  44. package/dist/interface/chat/ingress-router.d.ts.map +1 -1
  45. package/dist/interface/chat/ingress-router.js +2 -3
  46. package/dist/interface/chat/ingress-router.js.map +1 -1
  47. package/dist/interface/chat/tend-command.js +1 -0
  48. package/dist/interface/chat/tend-command.js.map +1 -1
  49. package/dist/interface/cli/cli-command-registry.d.ts.map +1 -1
  50. package/dist/interface/cli/cli-command-registry.js +19 -3
  51. package/dist/interface/cli/cli-command-registry.js.map +1 -1
  52. package/dist/interface/cli/commands/daemon-shared.d.ts +2 -1
  53. package/dist/interface/cli/commands/daemon-shared.d.ts.map +1 -1
  54. package/dist/interface/cli/commands/daemon-shared.js +33 -1
  55. package/dist/interface/cli/commands/daemon-shared.js.map +1 -1
  56. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  57. package/dist/interface/cli/commands/daemon.js +59 -8
  58. package/dist/interface/cli/commands/daemon.js.map +1 -1
  59. package/dist/interface/cli/commands/goal-read.d.ts.map +1 -1
  60. package/dist/interface/cli/commands/goal-read.js +10 -3
  61. package/dist/interface/cli/commands/goal-read.js.map +1 -1
  62. package/dist/interface/cli/commands/notify.d.ts.map +1 -1
  63. package/dist/interface/cli/commands/notify.js +7 -1
  64. package/dist/interface/cli/commands/notify.js.map +1 -1
  65. package/dist/interface/cli/commands/run.d.ts.map +1 -1
  66. package/dist/interface/cli/commands/run.js +29 -0
  67. package/dist/interface/cli/commands/run.js.map +1 -1
  68. package/dist/interface/cli/commands/runtime.d.ts +1 -1
  69. package/dist/interface/cli/commands/runtime.d.ts.map +1 -1
  70. package/dist/interface/cli/commands/runtime.js +407 -2
  71. package/dist/interface/cli/commands/runtime.js.map +1 -1
  72. package/dist/interface/cli/data-source-bootstrap.d.ts.map +1 -1
  73. package/dist/interface/cli/data-source-bootstrap.js +25 -12
  74. package/dist/interface/cli/data-source-bootstrap.js.map +1 -1
  75. package/dist/interface/cli/setup.d.ts.map +1 -1
  76. package/dist/interface/cli/setup.js +14 -0
  77. package/dist/interface/cli/setup.js.map +1 -1
  78. package/dist/interface/cli/utils/loop-runner.d.ts.map +1 -1
  79. package/dist/interface/cli/utils/loop-runner.js +2 -1
  80. package/dist/interface/cli/utils/loop-runner.js.map +1 -1
  81. package/dist/interface/cli/utils.d.ts.map +1 -1
  82. package/dist/interface/cli/utils.js +8 -1
  83. package/dist/interface/cli/utils.js.map +1 -1
  84. package/dist/interface/tui/app.d.ts +4 -1
  85. package/dist/interface/tui/app.d.ts.map +1 -1
  86. package/dist/interface/tui/app.js +268 -10
  87. package/dist/interface/tui/app.js.map +1 -1
  88. package/dist/interface/tui/chat-surface.d.ts +2 -0
  89. package/dist/interface/tui/chat-surface.d.ts.map +1 -1
  90. package/dist/interface/tui/chat-surface.js +3 -0
  91. package/dist/interface/tui/chat-surface.js.map +1 -1
  92. package/dist/interface/tui/dashboard.d.ts +37 -1
  93. package/dist/interface/tui/dashboard.d.ts.map +1 -1
  94. package/dist/interface/tui/dashboard.js +264 -1
  95. package/dist/interface/tui/dashboard.js.map +1 -1
  96. package/dist/interface/tui/entry-deps.d.ts +3 -1
  97. package/dist/interface/tui/entry-deps.d.ts.map +1 -1
  98. package/dist/interface/tui/entry-deps.js +19 -1
  99. package/dist/interface/tui/entry-deps.js.map +1 -1
  100. package/dist/interface/tui/entry.d.ts.map +1 -1
  101. package/dist/interface/tui/entry.js +4 -2
  102. package/dist/interface/tui/entry.js.map +1 -1
  103. package/dist/interface/tui/intent-recognizer.d.ts +8 -3
  104. package/dist/interface/tui/intent-recognizer.d.ts.map +1 -1
  105. package/dist/interface/tui/intent-recognizer.js +74 -68
  106. package/dist/interface/tui/intent-recognizer.js.map +1 -1
  107. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.d.ts.map +1 -1
  108. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js +41 -0
  109. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js.map +1 -1
  110. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +1 -1
  111. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts +1 -1
  112. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts.map +1 -1
  113. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js +3 -2
  114. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js.map +1 -1
  115. package/dist/orchestrator/execution/agent-loop/core-phase-runner.d.ts +1 -1
  116. package/dist/orchestrator/execution/agent-loop/core-phase-runner.d.ts.map +1 -1
  117. package/dist/orchestrator/execution/agent-loop/core-phase-runner.js +10 -1
  118. package/dist/orchestrator/execution/agent-loop/core-phase-runner.js.map +1 -1
  119. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.d.ts +2 -0
  120. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.d.ts.map +1 -1
  121. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.js +4 -0
  122. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.js.map +1 -1
  123. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts +8 -8
  124. package/dist/orchestrator/execution/task/task-generation.d.ts +3 -1
  125. package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
  126. package/dist/orchestrator/execution/task/task-generation.js +17 -2
  127. package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
  128. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts +5 -1
  129. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts.map +1 -1
  130. package/dist/orchestrator/execution/task/task-lifecycle-runner.js +9 -5
  131. package/dist/orchestrator/execution/task/task-lifecycle-runner.js.map +1 -1
  132. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +10 -1
  133. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  134. package/dist/orchestrator/execution/task/task-lifecycle.js +108 -7
  135. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  136. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts +2 -1
  137. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts.map +1 -1
  138. package/dist/orchestrator/execution/task/task-prompt-builder.js +4 -2
  139. package/dist/orchestrator/execution/task/task-prompt-builder.js.map +1 -1
  140. package/dist/orchestrator/execution/types/pipeline.d.ts +6 -6
  141. package/dist/orchestrator/goal/types/goal.d.ts +282 -0
  142. package/dist/orchestrator/goal/types/goal.d.ts.map +1 -1
  143. package/dist/orchestrator/goal/types/goal.js +20 -0
  144. package/dist/orchestrator/goal/types/goal.js.map +1 -1
  145. package/dist/orchestrator/loop/core-loop/contracts.d.ts +46 -3
  146. package/dist/orchestrator/loop/core-loop/contracts.d.ts.map +1 -1
  147. package/dist/orchestrator/loop/core-loop/contracts.js.map +1 -1
  148. package/dist/orchestrator/loop/core-loop/decision-engine.d.ts.map +1 -1
  149. package/dist/orchestrator/loop/core-loop/decision-engine.js +4 -0
  150. package/dist/orchestrator/loop/core-loop/decision-engine.js.map +1 -1
  151. package/dist/orchestrator/loop/core-loop/dream-review-checkpoint.d.ts +48 -0
  152. package/dist/orchestrator/loop/core-loop/dream-review-checkpoint.d.ts.map +1 -0
  153. package/dist/orchestrator/loop/core-loop/dream-review-checkpoint.js +377 -0
  154. package/dist/orchestrator/loop/core-loop/dream-review-checkpoint.js.map +1 -0
  155. package/dist/orchestrator/loop/core-loop/evidence-ledger.js +1 -1
  156. package/dist/orchestrator/loop/core-loop/evidence-ledger.js.map +1 -1
  157. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts +1 -0
  158. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts.map +1 -1
  159. package/dist/orchestrator/loop/core-loop/iteration-kernel.js +492 -1
  160. package/dist/orchestrator/loop/core-loop/iteration-kernel.js.map +1 -1
  161. package/dist/orchestrator/loop/core-loop/phase-policy.d.ts.map +1 -1
  162. package/dist/orchestrator/loop/core-loop/phase-policy.js +35 -0
  163. package/dist/orchestrator/loop/core-loop/phase-policy.js.map +1 -1
  164. package/dist/orchestrator/loop/core-loop/phase-runtime.d.ts +2 -0
  165. package/dist/orchestrator/loop/core-loop/phase-runtime.d.ts.map +1 -1
  166. package/dist/orchestrator/loop/core-loop/phase-runtime.js +43 -2
  167. package/dist/orchestrator/loop/core-loop/phase-runtime.js.map +1 -1
  168. package/dist/orchestrator/loop/core-loop/phase-specs.d.ts +969 -2
  169. package/dist/orchestrator/loop/core-loop/phase-specs.d.ts.map +1 -1
  170. package/dist/orchestrator/loop/core-loop/phase-specs.js +198 -0
  171. package/dist/orchestrator/loop/core-loop/phase-specs.js.map +1 -1
  172. package/dist/orchestrator/loop/core-loop/public-research.d.ts +32 -0
  173. package/dist/orchestrator/loop/core-loop/public-research.d.ts.map +1 -0
  174. package/dist/orchestrator/loop/core-loop/public-research.js +112 -0
  175. package/dist/orchestrator/loop/core-loop/public-research.js.map +1 -0
  176. package/dist/orchestrator/loop/core-loop/task-cycle-stall.d.ts.map +1 -1
  177. package/dist/orchestrator/loop/core-loop/task-cycle-stall.js +141 -5
  178. package/dist/orchestrator/loop/core-loop/task-cycle-stall.js.map +1 -1
  179. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts +4 -0
  180. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts.map +1 -1
  181. package/dist/orchestrator/loop/core-loop/task-cycle.js +7 -0
  182. package/dist/orchestrator/loop/core-loop/task-cycle.js.map +1 -1
  183. package/dist/orchestrator/loop/core-loop.d.ts +15 -5
  184. package/dist/orchestrator/loop/core-loop.d.ts.map +1 -1
  185. package/dist/orchestrator/loop/core-loop.js +283 -17
  186. package/dist/orchestrator/loop/core-loop.js.map +1 -1
  187. package/dist/orchestrator/loop/loop-report-helper.d.ts.map +1 -1
  188. package/dist/orchestrator/loop/loop-report-helper.js +4 -0
  189. package/dist/orchestrator/loop/loop-report-helper.js.map +1 -1
  190. package/dist/orchestrator/loop/loop-result-types.d.ts +20 -1
  191. package/dist/orchestrator/loop/loop-result-types.d.ts.map +1 -1
  192. package/dist/orchestrator/loop/loop-result-types.js.map +1 -1
  193. package/dist/orchestrator/loop/post-loop-hooks.d.ts +1 -0
  194. package/dist/orchestrator/loop/post-loop-hooks.d.ts.map +1 -1
  195. package/dist/orchestrator/loop/post-loop-hooks.js +34 -1
  196. package/dist/orchestrator/loop/post-loop-hooks.js.map +1 -1
  197. package/dist/orchestrator/loop/run-policy.d.ts +10 -0
  198. package/dist/orchestrator/loop/run-policy.d.ts.map +1 -0
  199. package/dist/orchestrator/loop/run-policy.js +30 -0
  200. package/dist/orchestrator/loop/run-policy.js.map +1 -0
  201. package/dist/orchestrator/strategy/divergent-exploration.d.ts +37 -0
  202. package/dist/orchestrator/strategy/divergent-exploration.d.ts.map +1 -0
  203. package/dist/orchestrator/strategy/divergent-exploration.js +324 -0
  204. package/dist/orchestrator/strategy/divergent-exploration.js.map +1 -0
  205. package/dist/orchestrator/strategy/strategy-helpers.d.ts +108 -0
  206. package/dist/orchestrator/strategy/strategy-helpers.d.ts.map +1 -1
  207. package/dist/orchestrator/strategy/strategy-helpers.js +34 -2
  208. package/dist/orchestrator/strategy/strategy-helpers.js.map +1 -1
  209. package/dist/orchestrator/strategy/strategy-manager-base.d.ts +20 -1
  210. package/dist/orchestrator/strategy/strategy-manager-base.d.ts.map +1 -1
  211. package/dist/orchestrator/strategy/strategy-manager-base.js +71 -6
  212. package/dist/orchestrator/strategy/strategy-manager-base.js.map +1 -1
  213. package/dist/orchestrator/strategy/types/cross-portfolio.d.ts +2 -2
  214. package/dist/orchestrator/strategy/types/strategy.d.ts +364 -0
  215. package/dist/orchestrator/strategy/types/strategy.d.ts.map +1 -1
  216. package/dist/orchestrator/strategy/types/strategy.js +43 -0
  217. package/dist/orchestrator/strategy/types/strategy.js.map +1 -1
  218. package/dist/platform/dream/dream-activation.d.ts +1 -1
  219. package/dist/platform/dream/dream-event-workflows.d.ts +6 -6
  220. package/dist/platform/dream/dream-types.d.ts +91 -91
  221. package/dist/platform/drive/metric-history.d.ts +61 -0
  222. package/dist/platform/drive/metric-history.d.ts.map +1 -0
  223. package/dist/platform/drive/metric-history.js +206 -0
  224. package/dist/platform/drive/metric-history.js.map +1 -0
  225. package/dist/platform/drive/progress-predictor.d.ts +7 -0
  226. package/dist/platform/drive/progress-predictor.d.ts.map +1 -1
  227. package/dist/platform/drive/progress-predictor.js +23 -0
  228. package/dist/platform/drive/progress-predictor.js.map +1 -1
  229. package/dist/platform/drive/stall-detector.d.ts +3 -1
  230. package/dist/platform/drive/stall-detector.d.ts.map +1 -1
  231. package/dist/platform/drive/stall-detector.js +40 -1
  232. package/dist/platform/drive/stall-detector.js.map +1 -1
  233. package/dist/platform/drive/types/satisficing.d.ts +2 -2
  234. package/dist/platform/drive/types/stall.d.ts +4 -0
  235. package/dist/platform/drive/types/stall.d.ts.map +1 -1
  236. package/dist/platform/drive/types/stall.js +1 -0
  237. package/dist/platform/drive/types/stall.js.map +1 -1
  238. package/dist/platform/knowledge/types/learning.d.ts +2 -2
  239. package/dist/platform/observation/data-source-adapter.d.ts +1 -0
  240. package/dist/platform/observation/data-source-adapter.d.ts.map +1 -1
  241. package/dist/platform/observation/data-source-adapter.js.map +1 -1
  242. package/dist/platform/observation/observation-datasource.d.ts.map +1 -1
  243. package/dist/platform/observation/observation-datasource.js +2 -0
  244. package/dist/platform/observation/observation-datasource.js.map +1 -1
  245. package/dist/platform/observation/types/data-source.d.ts +153 -9
  246. package/dist/platform/observation/types/data-source.d.ts.map +1 -1
  247. package/dist/platform/observation/types/data-source.js +13 -1
  248. package/dist/platform/observation/types/data-source.js.map +1 -1
  249. package/dist/platform/soil/contracts.d.ts +65 -65
  250. package/dist/platform/soil/importer.d.ts +6 -6
  251. package/dist/platform/soil/types.d.ts +8 -8
  252. package/dist/platform/time/deadline-finalization.d.ts +57 -0
  253. package/dist/platform/time/deadline-finalization.d.ts.map +1 -0
  254. package/dist/platform/time/deadline-finalization.js +136 -0
  255. package/dist/platform/time/deadline-finalization.js.map +1 -0
  256. package/dist/platform/time/execution-mode.d.ts +29 -0
  257. package/dist/platform/time/execution-mode.d.ts.map +1 -0
  258. package/dist/platform/time/execution-mode.js +84 -0
  259. package/dist/platform/time/execution-mode.js.map +1 -0
  260. package/dist/platform/traits/types/curiosity.d.ts +9 -9
  261. package/dist/platform/traits/types/guardrail.d.ts +6 -6
  262. package/dist/reporting/report-formatters.d.ts.map +1 -1
  263. package/dist/reporting/report-formatters.js +67 -2
  264. package/dist/reporting/report-formatters.js.map +1 -1
  265. package/dist/reporting/reporting-engine.d.ts.map +1 -1
  266. package/dist/reporting/reporting-engine.js +3 -1
  267. package/dist/reporting/reporting-engine.js.map +1 -1
  268. package/dist/reporting/reporting-types.d.ts +4 -0
  269. package/dist/reporting/reporting-types.d.ts.map +1 -1
  270. package/dist/reporting/types/report.d.ts +59 -0
  271. package/dist/reporting/types/report.d.ts.map +1 -1
  272. package/dist/reporting/types/report.js +9 -0
  273. package/dist/reporting/types/report.js.map +1 -1
  274. package/dist/runtime/command-dispatcher.d.ts +2 -0
  275. package/dist/runtime/command-dispatcher.d.ts.map +1 -1
  276. package/dist/runtime/command-dispatcher.js +16 -0
  277. package/dist/runtime/command-dispatcher.js.map +1 -1
  278. package/dist/runtime/confirmation-decision.d.ts +94 -0
  279. package/dist/runtime/confirmation-decision.d.ts.map +1 -0
  280. package/dist/runtime/confirmation-decision.js +109 -0
  281. package/dist/runtime/confirmation-decision.js.map +1 -0
  282. package/dist/runtime/control/daemon-runtime-control-executor.d.ts.map +1 -1
  283. package/dist/runtime/control/daemon-runtime-control-executor.js +31 -1
  284. package/dist/runtime/control/daemon-runtime-control-executor.js.map +1 -1
  285. package/dist/runtime/control/runtime-control-intent.d.ts +9 -1
  286. package/dist/runtime/control/runtime-control-intent.d.ts.map +1 -1
  287. package/dist/runtime/control/runtime-control-intent.js +82 -16
  288. package/dist/runtime/control/runtime-control-intent.js.map +1 -1
  289. package/dist/runtime/control/runtime-control-service.d.ts +35 -1
  290. package/dist/runtime/control/runtime-control-service.d.ts.map +1 -1
  291. package/dist/runtime/control/runtime-control-service.js +285 -5
  292. package/dist/runtime/control/runtime-control-service.js.map +1 -1
  293. package/dist/runtime/daemon/client.d.ts +12 -0
  294. package/dist/runtime/daemon/client.d.ts.map +1 -1
  295. package/dist/runtime/daemon/client.js +9 -0
  296. package/dist/runtime/daemon/client.js.map +1 -1
  297. package/dist/runtime/daemon/runner-commands.d.ts +6 -2
  298. package/dist/runtime/daemon/runner-commands.d.ts.map +1 -1
  299. package/dist/runtime/daemon/runner-commands.js +237 -1
  300. package/dist/runtime/daemon/runner-commands.js.map +1 -1
  301. package/dist/runtime/daemon/runner-goal-cycle.d.ts.map +1 -1
  302. package/dist/runtime/daemon/runner-goal-cycle.js +59 -1
  303. package/dist/runtime/daemon/runner-goal-cycle.js.map +1 -1
  304. package/dist/runtime/daemon/runner-startup.d.ts.map +1 -1
  305. package/dist/runtime/daemon/runner-startup.js +12 -2
  306. package/dist/runtime/daemon/runner-startup.js.map +1 -1
  307. package/dist/runtime/daemon/runner.d.ts +4 -0
  308. package/dist/runtime/daemon/runner.d.ts.map +1 -1
  309. package/dist/runtime/daemon/runner.js +14 -1
  310. package/dist/runtime/daemon/runner.js.map +1 -1
  311. package/dist/runtime/daemon/runtime-ownership.d.ts +9 -0
  312. package/dist/runtime/daemon/runtime-ownership.d.ts.map +1 -1
  313. package/dist/runtime/daemon/runtime-ownership.js +248 -1
  314. package/dist/runtime/daemon/runtime-ownership.js.map +1 -1
  315. package/dist/runtime/dream-sidecar-review.d.ts +92 -0
  316. package/dist/runtime/dream-sidecar-review.d.ts.map +1 -0
  317. package/dist/runtime/dream-sidecar-review.js +495 -0
  318. package/dist/runtime/dream-sidecar-review.js.map +1 -0
  319. package/dist/runtime/event/server-command-handler.d.ts +2 -4
  320. package/dist/runtime/event/server-command-handler.d.ts.map +1 -1
  321. package/dist/runtime/event/server-command-handler.js +36 -6
  322. package/dist/runtime/event/server-command-handler.js.map +1 -1
  323. package/dist/runtime/event/server-snapshot-reader.d.ts +15 -1
  324. package/dist/runtime/event/server-snapshot-reader.d.ts.map +1 -1
  325. package/dist/runtime/event/server-snapshot-reader.js +66 -2
  326. package/dist/runtime/event/server-snapshot-reader.js.map +1 -1
  327. package/dist/runtime/event/server-types.d.ts +7 -0
  328. package/dist/runtime/event/server-types.d.ts.map +1 -1
  329. package/dist/runtime/event/server.d.ts +5 -0
  330. package/dist/runtime/event/server.d.ts.map +1 -1
  331. package/dist/runtime/event/server.js +43 -11
  332. package/dist/runtime/event/server.js.map +1 -1
  333. package/dist/runtime/evidence-answer.d.ts +41 -0
  334. package/dist/runtime/evidence-answer.d.ts.map +1 -0
  335. package/dist/runtime/evidence-answer.js +366 -0
  336. package/dist/runtime/evidence-answer.js.map +1 -0
  337. package/dist/runtime/executor/goal-worker.d.ts +4 -1
  338. package/dist/runtime/executor/goal-worker.d.ts.map +1 -1
  339. package/dist/runtime/executor/goal-worker.js +5 -1
  340. package/dist/runtime/executor/goal-worker.js.map +1 -1
  341. package/dist/runtime/executor/loop-supervisor.d.ts +4 -0
  342. package/dist/runtime/executor/loop-supervisor.d.ts.map +1 -1
  343. package/dist/runtime/executor/loop-supervisor.js +35 -6
  344. package/dist/runtime/executor/loop-supervisor.js.map +1 -1
  345. package/dist/runtime/guardrails/backpressure-controller.d.ts +32 -0
  346. package/dist/runtime/guardrails/backpressure-controller.d.ts.map +1 -0
  347. package/dist/runtime/guardrails/backpressure-controller.js +88 -0
  348. package/dist/runtime/guardrails/backpressure-controller.js.map +1 -0
  349. package/dist/runtime/guardrails/circuit-breaker.d.ts +32 -0
  350. package/dist/runtime/guardrails/circuit-breaker.d.ts.map +1 -0
  351. package/dist/runtime/guardrails/circuit-breaker.js +88 -0
  352. package/dist/runtime/guardrails/circuit-breaker.js.map +1 -0
  353. package/dist/runtime/guardrails/guardrail-store.d.ts +23 -0
  354. package/dist/runtime/guardrails/guardrail-store.d.ts.map +1 -0
  355. package/dist/runtime/guardrails/guardrail-store.js +95 -0
  356. package/dist/runtime/guardrails/guardrail-store.js.map +1 -0
  357. package/dist/runtime/guardrails/index.d.ts +4 -0
  358. package/dist/runtime/guardrails/index.d.ts.map +1 -0
  359. package/dist/runtime/guardrails/index.js +4 -0
  360. package/dist/runtime/guardrails/index.js.map +1 -0
  361. package/dist/runtime/interactive-automation/browser-session-store.d.ts +43 -0
  362. package/dist/runtime/interactive-automation/browser-session-store.d.ts.map +1 -0
  363. package/dist/runtime/interactive-automation/browser-session-store.js +104 -0
  364. package/dist/runtime/interactive-automation/browser-session-store.js.map +1 -0
  365. package/dist/runtime/interactive-automation/failure-classifier.d.ts +12 -0
  366. package/dist/runtime/interactive-automation/failure-classifier.d.ts.map +1 -0
  367. package/dist/runtime/interactive-automation/failure-classifier.js +50 -0
  368. package/dist/runtime/interactive-automation/failure-classifier.js.map +1 -0
  369. package/dist/runtime/interactive-automation/index.d.ts +2 -0
  370. package/dist/runtime/interactive-automation/index.d.ts.map +1 -1
  371. package/dist/runtime/interactive-automation/index.js +2 -0
  372. package/dist/runtime/interactive-automation/index.js.map +1 -1
  373. package/dist/runtime/interactive-automation/providers/manus-browser.d.ts.map +1 -1
  374. package/dist/runtime/interactive-automation/providers/manus-browser.js +17 -1
  375. package/dist/runtime/interactive-automation/providers/manus-browser.js.map +1 -1
  376. package/dist/runtime/interactive-automation/types.d.ts +4 -0
  377. package/dist/runtime/interactive-automation/types.d.ts.map +1 -1
  378. package/dist/runtime/interactive-automation/types.js.map +1 -1
  379. package/dist/runtime/notification-routing.d.ts +45 -2
  380. package/dist/runtime/notification-routing.d.ts.map +1 -1
  381. package/dist/runtime/notification-routing.js +196 -79
  382. package/dist/runtime/notification-routing.js.map +1 -1
  383. package/dist/runtime/run-spec/confirmation.d.ts +34 -0
  384. package/dist/runtime/run-spec/confirmation.d.ts.map +1 -0
  385. package/dist/runtime/run-spec/confirmation.js +176 -0
  386. package/dist/runtime/run-spec/confirmation.js.map +1 -0
  387. package/dist/runtime/run-spec/derive.d.ts +284 -0
  388. package/dist/runtime/run-spec/derive.d.ts.map +1 -0
  389. package/dist/runtime/run-spec/derive.js +379 -0
  390. package/dist/runtime/run-spec/derive.js.map +1 -0
  391. package/dist/runtime/run-spec/index.d.ts +5 -0
  392. package/dist/runtime/run-spec/index.d.ts.map +1 -0
  393. package/dist/runtime/run-spec/index.js +5 -0
  394. package/dist/runtime/run-spec/index.js.map +1 -0
  395. package/dist/runtime/run-spec/store.d.ts +11 -0
  396. package/dist/runtime/run-spec/store.d.ts.map +1 -0
  397. package/dist/runtime/run-spec/store.js +36 -0
  398. package/dist/runtime/run-spec/store.js.map +1 -0
  399. package/dist/runtime/run-spec/types.d.ts +495 -0
  400. package/dist/runtime/run-spec/types.d.ts.map +1 -0
  401. package/dist/runtime/run-spec/types.js +87 -0
  402. package/dist/runtime/run-spec/types.js.map +1 -0
  403. package/dist/runtime/schedule/engine-execution.d.ts +2 -1
  404. package/dist/runtime/schedule/engine-execution.d.ts.map +1 -1
  405. package/dist/runtime/schedule/engine-execution.js +1 -1
  406. package/dist/runtime/schedule/engine-execution.js.map +1 -1
  407. package/dist/runtime/schedule/engine-layers.d.ts +2 -1
  408. package/dist/runtime/schedule/engine-layers.d.ts.map +1 -1
  409. package/dist/runtime/schedule/engine-layers.js +3 -1
  410. package/dist/runtime/schedule/engine-layers.js.map +1 -1
  411. package/dist/runtime/schedule/engine.d.ts +2 -1
  412. package/dist/runtime/schedule/engine.d.ts.map +1 -1
  413. package/dist/runtime/schedule/engine.js.map +1 -1
  414. package/dist/runtime/schedule/history.d.ts +4 -4
  415. package/dist/runtime/session-registry/registry.d.ts.map +1 -1
  416. package/dist/runtime/session-registry/registry.js +2 -0
  417. package/dist/runtime/session-registry/registry.js.map +1 -1
  418. package/dist/runtime/session-registry/types.d.ts +102 -94
  419. package/dist/runtime/session-registry/types.d.ts.map +1 -1
  420. package/dist/runtime/session-registry/types.js +2 -0
  421. package/dist/runtime/session-registry/types.js.map +1 -1
  422. package/dist/runtime/store/artifact-retention.d.ts +44 -0
  423. package/dist/runtime/store/artifact-retention.d.ts.map +1 -0
  424. package/dist/runtime/store/artifact-retention.js +263 -0
  425. package/dist/runtime/store/artifact-retention.js.map +1 -0
  426. package/dist/runtime/store/background-run-store.d.ts +1 -0
  427. package/dist/runtime/store/background-run-store.d.ts.map +1 -1
  428. package/dist/runtime/store/background-run-store.js +1 -0
  429. package/dist/runtime/store/background-run-store.js.map +1 -1
  430. package/dist/runtime/store/budget-store.d.ts +442 -0
  431. package/dist/runtime/store/budget-store.d.ts.map +1 -0
  432. package/dist/runtime/store/budget-store.js +318 -0
  433. package/dist/runtime/store/budget-store.js.map +1 -0
  434. package/dist/runtime/store/dream-checkpoints.d.ts +9 -0
  435. package/dist/runtime/store/dream-checkpoints.d.ts.map +1 -0
  436. package/dist/runtime/store/dream-checkpoints.js +16 -0
  437. package/dist/runtime/store/dream-checkpoints.js.map +1 -0
  438. package/dist/runtime/store/evaluator-results.d.ts +97 -0
  439. package/dist/runtime/store/evaluator-results.d.ts.map +1 -0
  440. package/dist/runtime/store/evaluator-results.js +355 -0
  441. package/dist/runtime/store/evaluator-results.js.map +1 -0
  442. package/dist/runtime/store/evidence-ledger.d.ts +5298 -0
  443. package/dist/runtime/store/evidence-ledger.d.ts.map +1 -0
  444. package/dist/runtime/store/evidence-ledger.js +1452 -0
  445. package/dist/runtime/store/evidence-ledger.js.map +1 -0
  446. package/dist/runtime/store/experiment-queue-store.d.ts +1164 -0
  447. package/dist/runtime/store/experiment-queue-store.d.ts.map +1 -0
  448. package/dist/runtime/store/experiment-queue-store.js +341 -0
  449. package/dist/runtime/store/experiment-queue-store.js.map +1 -0
  450. package/dist/runtime/store/health-store.d.ts.map +1 -1
  451. package/dist/runtime/store/health-store.js +6 -0
  452. package/dist/runtime/store/health-store.js.map +1 -1
  453. package/dist/runtime/store/index.d.ts +25 -2
  454. package/dist/runtime/store/index.d.ts.map +1 -1
  455. package/dist/runtime/store/index.js +13 -1
  456. package/dist/runtime/store/index.js.map +1 -1
  457. package/dist/runtime/store/metric-history.d.ts +10 -0
  458. package/dist/runtime/store/metric-history.d.ts.map +1 -0
  459. package/dist/runtime/store/metric-history.js +56 -0
  460. package/dist/runtime/store/metric-history.js.map +1 -0
  461. package/dist/runtime/store/operator-handoff-store.d.ts +179 -0
  462. package/dist/runtime/store/operator-handoff-store.d.ts.map +1 -0
  463. package/dist/runtime/store/operator-handoff-store.js +120 -0
  464. package/dist/runtime/store/operator-handoff-store.js.map +1 -0
  465. package/dist/runtime/store/postmortem-report.d.ts +485 -0
  466. package/dist/runtime/store/postmortem-report.d.ts.map +1 -0
  467. package/dist/runtime/store/postmortem-report.js +561 -0
  468. package/dist/runtime/store/postmortem-report.js.map +1 -0
  469. package/dist/runtime/store/reproducibility-manifest.d.ts +565 -0
  470. package/dist/runtime/store/reproducibility-manifest.d.ts.map +1 -0
  471. package/dist/runtime/store/reproducibility-manifest.js +392 -0
  472. package/dist/runtime/store/reproducibility-manifest.js.map +1 -0
  473. package/dist/runtime/store/research-evidence.d.ts +8 -0
  474. package/dist/runtime/store/research-evidence.d.ts.map +1 -0
  475. package/dist/runtime/store/research-evidence.js +15 -0
  476. package/dist/runtime/store/research-evidence.js.map +1 -0
  477. package/dist/runtime/store/runtime-operation-schemas.d.ts +70 -24
  478. package/dist/runtime/store/runtime-operation-schemas.d.ts.map +1 -1
  479. package/dist/runtime/store/runtime-operation-schemas.js +16 -1
  480. package/dist/runtime/store/runtime-operation-schemas.js.map +1 -1
  481. package/dist/runtime/store/runtime-paths.d.ts +25 -0
  482. package/dist/runtime/store/runtime-paths.d.ts.map +1 -1
  483. package/dist/runtime/store/runtime-paths.js +73 -0
  484. package/dist/runtime/store/runtime-paths.js.map +1 -1
  485. package/dist/runtime/store/runtime-schemas.d.ts +1936 -17
  486. package/dist/runtime/store/runtime-schemas.d.ts.map +1 -1
  487. package/dist/runtime/store/runtime-schemas.js +201 -0
  488. package/dist/runtime/store/runtime-schemas.js.map +1 -1
  489. package/dist/runtime/store/safe-pause-store.d.ts +28 -0
  490. package/dist/runtime/store/safe-pause-store.d.ts.map +1 -0
  491. package/dist/runtime/store/safe-pause-store.js +103 -0
  492. package/dist/runtime/store/safe-pause-store.js.map +1 -0
  493. package/dist/runtime/types/daemon.d.ts +224 -14
  494. package/dist/runtime/types/daemon.d.ts.map +1 -1
  495. package/dist/runtime/types/daemon.js +27 -2
  496. package/dist/runtime/types/daemon.js.map +1 -1
  497. package/dist/runtime/types/envelope.d.ts +10 -10
  498. package/dist/runtime/types/hook.d.ts +9 -9
  499. package/dist/runtime/types/notification.d.ts +6 -6
  500. package/dist/runtime/types/plugin.d.ts +2 -2
  501. package/dist/runtime/types/schedule.d.ts +97 -54
  502. package/dist/runtime/types/schedule.d.ts.map +1 -1
  503. package/dist/runtime/types/schedule.js +10 -1
  504. package/dist/runtime/types/schedule.js.map +1 -1
  505. package/dist/runtime/types/trigger.d.ts +2 -2
  506. package/dist/tools/automation/InteractiveAutomationTools.d.ts +10 -0
  507. package/dist/tools/automation/InteractiveAutomationTools.d.ts.map +1 -1
  508. package/dist/tools/automation/InteractiveAutomationTools.js +139 -8
  509. package/dist/tools/automation/InteractiveAutomationTools.js.map +1 -1
  510. package/dist/tools/builtin/exports.d.ts +1 -1
  511. package/dist/tools/builtin/exports.d.ts.map +1 -1
  512. package/dist/tools/builtin/exports.js +1 -1
  513. package/dist/tools/builtin/exports.js.map +1 -1
  514. package/dist/tools/builtin/factory.d.ts +5 -0
  515. package/dist/tools/builtin/factory.d.ts.map +1 -1
  516. package/dist/tools/builtin/factory.js +18 -2
  517. package/dist/tools/builtin/factory.js.map +1 -1
  518. package/dist/tools/kaggle/KaggleExperimentTools.d.ts +792 -8
  519. package/dist/tools/kaggle/KaggleExperimentTools.d.ts.map +1 -1
  520. package/dist/tools/kaggle/KaggleExperimentTools.js +284 -19
  521. package/dist/tools/kaggle/KaggleExperimentTools.js.map +1 -1
  522. package/dist/tools/kaggle/KaggleSubmissionTools.d.ts +18 -12
  523. package/dist/tools/kaggle/KaggleSubmissionTools.d.ts.map +1 -1
  524. package/dist/tools/kaggle/KaggleSubmissionTools.js +23 -4
  525. package/dist/tools/kaggle/KaggleSubmissionTools.js.map +1 -1
  526. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.d.ts +28 -9
  527. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.d.ts.map +1 -1
  528. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js +182 -4
  529. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js.map +1 -1
  530. package/dist/tools/kaggle/index.d.ts +1 -1
  531. package/dist/tools/kaggle/index.d.ts.map +1 -1
  532. package/dist/tools/kaggle/index.js +1 -1
  533. package/dist/tools/kaggle/index.js.map +1 -1
  534. package/dist/tools/kaggle/metrics.d.ts +845 -4
  535. package/dist/tools/kaggle/metrics.d.ts.map +1 -1
  536. package/dist/tools/kaggle/metrics.js +410 -1
  537. package/dist/tools/kaggle/metrics.js.map +1 -1
  538. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.d.ts +6 -0
  539. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.d.ts.map +1 -1
  540. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.js +9 -2
  541. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.js.map +1 -1
  542. package/dist/tools/mutation/TaskCreateTool/TaskCreateTool.d.ts +4 -4
  543. package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts +4 -4
  544. package/dist/tools/query/MemoryRecallTool/MemoryRecallTool.d.ts +2 -2
  545. package/dist/tools/query/runtime-dream-review-tool.d.ts +34 -0
  546. package/dist/tools/query/runtime-dream-review-tool.d.ts.map +1 -0
  547. package/dist/tools/query/runtime-dream-review-tool.js +62 -0
  548. package/dist/tools/query/runtime-dream-review-tool.js.map +1 -0
  549. package/dist/tools/query/runtime-session-tools.d.ts.map +1 -1
  550. package/dist/tools/query/runtime-session-tools.js +2 -0
  551. package/dist/tools/query/runtime-session-tools.js.map +1 -1
  552. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts +103 -103
  553. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts.map +1 -1
  554. package/dist/tools/runtime/LongRunningRuntimeTools.js +60 -0
  555. package/dist/tools/runtime/LongRunningRuntimeTools.js.map +1 -1
  556. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.d.ts +62 -32
  557. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.d.ts.map +1 -1
  558. package/dist/tools/schedule/UpdateScheduleTool/UpdateScheduleTool.d.ts +78 -44
  559. package/dist/tools/schedule/UpdateScheduleTool/UpdateScheduleTool.d.ts.map +1 -1
  560. package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts +4 -4
  561. package/package.json +2 -1
@@ -1,7 +1,10 @@
1
1
  import { DaemonClient, isDaemonRunning } from "../daemon/client.js";
2
2
  export function createDaemonRuntimeControlExecutor(options) {
3
3
  return async (operation) => {
4
- if (operation.kind !== "restart_daemon" && operation.kind !== "restart_gateway") {
4
+ if (operation.kind !== "restart_daemon"
5
+ && operation.kind !== "restart_gateway"
6
+ && operation.kind !== "pause_run"
7
+ && operation.kind !== "resume_run") {
5
8
  return {
6
9
  ok: false,
7
10
  state: "failed",
@@ -22,6 +25,33 @@ export function createDaemonRuntimeControlExecutor(options) {
22
25
  authToken: daemonInfo.authToken,
23
26
  baseDir: options.baseDir,
24
27
  });
28
+ if (operation.kind === "pause_run" || operation.kind === "resume_run") {
29
+ const goalId = operation.target?.goal_id;
30
+ if (!goalId) {
31
+ return {
32
+ ok: false,
33
+ state: "blocked",
34
+ message: `Runtime control operation ${operation.kind} is blocked because no goal bridge was resolved.`,
35
+ };
36
+ }
37
+ const response = operation.kind === "pause_run"
38
+ ? await client.pauseGoal(goalId)
39
+ : await client.resumeGoal(goalId);
40
+ if (!response.ok) {
41
+ return {
42
+ ok: false,
43
+ state: "failed",
44
+ message: `PulSeed daemon rejected ${operation.kind} for goal ${goalId}.`,
45
+ };
46
+ }
47
+ return {
48
+ ok: true,
49
+ state: "running",
50
+ message: operation.kind === "pause_run"
51
+ ? `Safe-pause request for ${operation.target?.run_id ?? goalId} was sent through the typed daemon API.`
52
+ : `Resume request for ${operation.target?.run_id ?? goalId} was sent through the typed daemon API.`,
53
+ };
54
+ }
25
55
  const response = await client.requestRuntimeControl({
26
56
  operationId: operation.operation_id,
27
57
  kind: operation.kind,
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-runtime-control-executor.js","sourceRoot":"","sources":["../../../src/runtime/control/daemon-runtime-control-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkBpE,MAAM,UAAU,kCAAkC,CAChD,OAA4C;IAE5C,OAAO,KAAK,EAAE,SAAS,EAAyC,EAAE;QAChE,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,6BAA6B,SAAS,CAAC,IAAI,0BAA0B;aAC/E,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,2DAA2D;aACrE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACjC,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC;YAClD,WAAW,EAAE,SAAS,CAAC,YAAY;YACnC,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,sDAAsD;aAChE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,SAAS;YAChB,OAAO,EACL,SAAS,CAAC,IAAI,KAAK,iBAAiB;gBAClC,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,oDAAoD;SAC3D,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"daemon-runtime-control-executor.js","sourceRoot":"","sources":["../../../src/runtime/control/daemon-runtime-control-executor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,15 @@
1
+ import type { ILLMClient } from "../../base/llm/llm-client.js";
1
2
  import type { RuntimeControlOperationKind } from "../store/runtime-operation-schemas.js";
2
3
  export interface RuntimeControlIntent {
3
4
  kind: RuntimeControlOperationKind;
4
5
  reason: string;
6
+ target?: RuntimeControlTargetHint;
7
+ externalActions?: string[];
8
+ irreversible?: boolean;
5
9
  }
6
- export declare function recognizeRuntimeControlIntent(input: string): RuntimeControlIntent | null;
10
+ export interface RuntimeControlTargetHint {
11
+ runId?: string;
12
+ sessionId?: string;
13
+ }
14
+ export declare function recognizeRuntimeControlIntent(input: string, llmClient?: Pick<ILLMClient, "sendMessage" | "parseJSON">): Promise<RuntimeControlIntent | null>;
7
15
  //# sourceMappingURL=runtime-control-intent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-control-intent.d.ts","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAcxF"}
1
+ {"version":3,"file":"runtime-control-intent.d.ts","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-intent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsDD,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,CAAC,GACxD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAetC"}
@@ -1,23 +1,89 @@
1
- const RESTART_TERMS = [/再起動/, /リスタート/i, /\brestart\b/i];
2
- const RUNTIME_TERMS = [/pulseed/i, /daemon/i, /gateway/i, /runtime/i, /自身/, /自分/];
3
- const EXPLANATION_TERMS = [/設計/, /説明/, /教えて/, /どう/, /\bexplain\b/i, /\bhow\b/i, /\bwhy\b/i];
4
- function anyMatch(input, patterns) {
5
- return patterns.some((pattern) => pattern.test(input));
1
+ import { z } from "zod";
2
+ const RuntimeControlIntentDecisionSchema = z.object({
3
+ intent: z.enum([
4
+ "none",
5
+ "inspect_run",
6
+ "pause_run",
7
+ "resume_run",
8
+ "finalize_run",
9
+ "restart_daemon",
10
+ "restart_gateway",
11
+ ]),
12
+ reason: z.string().min(1).optional(),
13
+ target: z.object({
14
+ runId: z.string().min(1).optional(),
15
+ sessionId: z.string().min(1).optional(),
16
+ }).optional(),
17
+ externalActions: z.array(z.enum([
18
+ "submit",
19
+ "publish",
20
+ "secret",
21
+ "production_mutation",
22
+ "destructive_cleanup",
23
+ ])).optional(),
24
+ irreversible: z.boolean().optional(),
25
+ });
26
+ function buildRuntimeControlIntentSystemPrompt() {
27
+ return `You classify one operator chat message for PulSeed runtime control routing.
28
+
29
+ Decide whether the user's primary intent is to operate on an existing active or recent long-running runtime session, or on the PulSeed daemon/gateway itself.
30
+
31
+ Return only JSON matching:
32
+ {
33
+ "intent": "none" | "inspect_run" | "pause_run" | "resume_run" | "finalize_run" | "restart_daemon" | "restart_gateway",
34
+ "reason": "short reason using the user's words",
35
+ "target": { "runId": "optional exact run id", "sessionId": "optional exact session id" },
36
+ "externalActions": ["submit" | "publish" | "secret" | "production_mutation" | "destructive_cleanup"],
37
+ "irreversible": true | false
6
38
  }
7
- export function recognizeRuntimeControlIntent(input) {
39
+
40
+ Classification rules:
41
+ - Choose inspect_run, pause_run, resume_run, or finalize_run only when the user is asking to inspect/control/finalize an existing runtime run/session/execution.
42
+ - Choose none for ordinary project work, coding requests, implementation continuation, evidence/progress Q&A, status questions, explanations, help, or requests to create/start new work.
43
+ - Choose none for broad follow-ups like "continue", "finish the implementation", or "続けて" unless the message itself clearly refers to resuming/finalizing a runtime run/session/execution.
44
+ - Choose finalize_run for closing/finalizing a run. Mark irreversible true.
45
+ - If finalize would involve external submit/publish, secrets, production mutation, or destructive cleanup, include the matching externalActions. Do not assume these actions should execute.
46
+ - If the user names a run id or session id, copy it exactly into target. Otherwise omit target.
47
+ - Use restart_daemon/restart_gateway only when the user is asking to restart the PulSeed daemon or gateway, not for run/session pause/resume/finalize.
48
+ - When uncertain, choose none.`;
49
+ }
50
+ export async function recognizeRuntimeControlIntent(input, llmClient) {
8
51
  const trimmed = input.trim();
9
- if (!trimmed)
52
+ if (!trimmed || !llmClient)
10
53
  return null;
11
- if (anyMatch(trimmed, EXPLANATION_TERMS))
54
+ const response = await llmClient.sendMessage([{ role: "user", content: trimmed }], {
55
+ system: buildRuntimeControlIntentSystemPrompt(),
56
+ max_tokens: 512,
57
+ temperature: 0,
58
+ model_tier: "light",
59
+ });
60
+ const decision = llmClient.parseJSON(response.content, RuntimeControlIntentDecisionSchema);
61
+ return toRuntimeControlIntent(trimmed, decision);
62
+ }
63
+ function toRuntimeControlIntent(input, decision) {
64
+ if (decision.intent === "none")
12
65
  return null;
13
- if (!anyMatch(trimmed, RUNTIME_TERMS))
66
+ const target = normalizeTarget(decision.target);
67
+ return {
68
+ kind: decision.intent,
69
+ reason: decision.reason?.trim() || input,
70
+ ...(target ? { target } : {}),
71
+ ...(decision.externalActions && decision.externalActions.length > 0
72
+ ? { externalActions: [...new Set(decision.externalActions)] }
73
+ : {}),
74
+ ...(decision.intent === "finalize_run" || decision.irreversible
75
+ ? { irreversible: true }
76
+ : {}),
77
+ };
78
+ }
79
+ function normalizeTarget(target) {
80
+ const runId = target?.runId?.trim();
81
+ const sessionId = target?.sessionId?.trim();
82
+ if (!runId && !sessionId)
14
83
  return null;
15
- if (anyMatch(trimmed, RESTART_TERMS)) {
16
- if (/gateway/i.test(trimmed)) {
17
- return { kind: "restart_gateway", reason: trimmed };
18
- }
19
- return { kind: "restart_daemon", reason: trimmed };
20
- }
21
- return null;
84
+ return {
85
+ ...(runId ? { runId } : {}),
86
+ ...(sessionId ? { sessionId } : {}),
87
+ };
22
88
  }
23
89
  //# sourceMappingURL=runtime-control-intent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-control-intent.js","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-intent.ts"],"names":[],"mappings":"AAOA,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AACxD,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClF,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE5F,SAAS,QAAQ,CAAC,KAAa,EAAE,QAAkB;IACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnD,IAAI,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"runtime-control-intent.js","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-intent.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
+ import type { StateManager } from "../../base/state/state-manager.js";
2
+ import { createRuntimeSessionRegistry } from "../session-registry/index.js";
3
+ import { type RuntimeEvidenceLedgerPort } from "../store/evidence-ledger.js";
1
4
  import { RuntimeOperationStore } from "../store/runtime-operation-store.js";
5
+ import { RuntimeOperatorHandoffStore } from "../store/operator-handoff-store.js";
2
6
  import type { RuntimeControlActor, RuntimeControlOperation, RuntimeControlOperationKind, RuntimeControlOperationState, RuntimeControlReplyTarget } from "../store/runtime-operation-schemas.js";
3
7
  import type { RuntimeControlIntent } from "./runtime-control-intent.js";
4
8
  export interface RuntimeControlRequest {
@@ -8,6 +12,19 @@ export interface RuntimeControlRequest {
8
12
  replyTarget?: RuntimeControlReplyTarget;
9
13
  approvalFn?: (reason: string) => Promise<boolean>;
10
14
  }
15
+ export interface RuntimeRunControlRequestBase {
16
+ runId?: string;
17
+ sessionId?: string;
18
+ reason: string;
19
+ cwd: string;
20
+ requestedBy?: RuntimeControlActor;
21
+ replyTarget?: RuntimeControlReplyTarget;
22
+ approvalFn?: (reason: string) => Promise<boolean>;
23
+ }
24
+ export interface RuntimeFinalizeRunRequest extends RuntimeRunControlRequestBase {
25
+ externalActions?: string[];
26
+ irreversible?: boolean;
27
+ }
11
28
  export interface RuntimeControlResult {
12
29
  success: boolean;
13
30
  message: string;
@@ -23,16 +40,33 @@ export type RuntimeControlExecutor = (operation: RuntimeControlOperation, reques
23
40
  export interface RuntimeControlServiceOptions {
24
41
  operationStore?: RuntimeOperationStore;
25
42
  runtimeRoot?: string;
43
+ stateManager?: StateManager;
44
+ sessionRegistry?: Pick<ReturnType<typeof createRuntimeSessionRegistry>, "snapshot">;
45
+ evidenceLedger?: RuntimeEvidenceLedgerPort;
46
+ operatorHandoffStore?: Pick<RuntimeOperatorHandoffStore, "create">;
26
47
  executor?: RuntimeControlExecutor;
27
48
  now?: () => Date;
28
49
  }
29
50
  export declare class RuntimeControlService {
30
51
  private readonly operationStore;
52
+ private readonly sessionRegistry?;
53
+ private readonly evidenceLedger?;
54
+ private readonly operatorHandoffStore?;
31
55
  private readonly executor?;
32
56
  private readonly now;
33
57
  constructor(options?: RuntimeControlServiceOptions);
34
58
  request(request: RuntimeControlRequest): Promise<RuntimeControlResult>;
59
+ inspectRun(request: RuntimeRunControlRequestBase): Promise<RuntimeControlResult>;
60
+ pauseRun(request: RuntimeRunControlRequestBase): Promise<RuntimeControlResult>;
61
+ resumeRun(request: RuntimeRunControlRequestBase): Promise<RuntimeControlResult>;
62
+ finalizeRun(request: RuntimeFinalizeRunRequest): Promise<RuntimeControlResult>;
63
+ private handleRunControl;
35
64
  private createInitialOperation;
65
+ private createBlockedOperation;
66
+ private resolveTarget;
67
+ private proposeFinalize;
68
+ private formatInspection;
69
+ private appendControlEvidence;
36
70
  private approveIfRequired;
37
71
  private acknowledge;
38
72
  private executeAcknowledgedOperation;
@@ -41,5 +75,5 @@ export declare class RuntimeControlService {
41
75
  private update;
42
76
  private nowIso;
43
77
  }
44
- export declare function isExecutableRuntimeControlKind(kind: RuntimeControlOperationKind): kind is Extract<RuntimeControlOperationKind, "restart_daemon" | "restart_gateway">;
78
+ export declare function isExecutableRuntimeControlKind(kind: RuntimeControlOperationKind): kind is Extract<RuntimeControlOperationKind, "restart_daemon" | "restart_gateway" | "pause_run" | "resume_run">;
45
79
  //# sourceMappingURL=runtime-control-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-control-service.d.ts","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,4BAA4B,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,4BAA4B,CAAC;CACtC;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,SAAS,EAAE,uBAAuB,EAClC,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC3C,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAMD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,OAAO,GAAE,4BAAiC;IAMhD,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAiB9D,sBAAsB;YAiBtB,iBAAiB;IAuC/B,OAAO,CAAC,WAAW;YAOL,4BAA4B;YA+B5B,QAAQ;IAYtB,OAAO,CAAC,QAAQ;YASF,MAAM;IAcpB,OAAO,CAAC,MAAM;CAGf;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,2BAA2B,GAChC,IAAI,IAAI,OAAO,CAAC,2BAA2B,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,CAEpF"}
1
+ {"version":3,"file":"runtime-control-service.d.ts","sourceRoot":"","sources":["../../../src/runtime/control/runtime-control-service.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,31 @@
1
1
  import { randomUUID } from "node:crypto";
2
+ import { createRuntimeSessionRegistry, } from "../session-registry/index.js";
3
+ import { RuntimeEvidenceLedger } from "../store/evidence-ledger.js";
2
4
  import { RuntimeOperationStore } from "../store/runtime-operation-store.js";
5
+ import { RuntimeOperatorHandoffStore } from "../store/operator-handoff-store.js";
6
+ const ACTIVE_RUN_STATUSES = new Set(["queued", "running"]);
7
+ const ATTENTION_RUN_STATUSES = new Set(["failed", "timed_out", "lost"]);
3
8
  export class RuntimeControlService {
4
9
  operationStore;
10
+ sessionRegistry;
11
+ evidenceLedger;
12
+ operatorHandoffStore;
5
13
  executor;
6
14
  now;
7
15
  constructor(options = {}) {
8
16
  this.operationStore = options.operationStore ?? new RuntimeOperationStore(options.runtimeRoot);
17
+ this.sessionRegistry = options.sessionRegistry ?? (options.stateManager
18
+ ? createRuntimeSessionRegistry({ stateManager: options.stateManager })
19
+ : undefined);
20
+ this.evidenceLedger = options.evidenceLedger ?? (options.runtimeRoot ? new RuntimeEvidenceLedger(options.runtimeRoot) : undefined);
21
+ this.operatorHandoffStore = options.operatorHandoffStore ?? (options.runtimeRoot ? new RuntimeOperatorHandoffStore(options.runtimeRoot) : undefined);
9
22
  this.executor = options.executor;
10
23
  this.now = options.now ?? (() => new Date());
11
24
  }
12
25
  async request(request) {
26
+ if (isRunControlKind(request.intent.kind)) {
27
+ return this.handleRunControl(request);
28
+ }
13
29
  if (!isExecutableRuntimeControlKind(request.intent.kind)) {
14
30
  return {
15
31
  success: false,
@@ -24,8 +40,71 @@ export class RuntimeControlService {
24
40
  const acknowledged = await this.acknowledge(approved.operation);
25
41
  return this.executeAcknowledgedOperation(acknowledged, request);
26
42
  }
43
+ inspectRun(request) {
44
+ return this.request({ ...request, intent: { kind: "inspect_run", reason: request.reason, target: targetFromRunRequest(request) } });
45
+ }
46
+ pauseRun(request) {
47
+ return this.request({ ...request, intent: { kind: "pause_run", reason: request.reason, target: targetFromRunRequest(request) } });
48
+ }
49
+ resumeRun(request) {
50
+ return this.request({ ...request, intent: { kind: "resume_run", reason: request.reason, target: targetFromRunRequest(request) } });
51
+ }
52
+ finalizeRun(request) {
53
+ return this.request({
54
+ ...request,
55
+ intent: {
56
+ kind: "finalize_run",
57
+ reason: request.reason,
58
+ target: targetFromRunRequest(request),
59
+ externalActions: request.externalActions,
60
+ irreversible: request.irreversible ?? true,
61
+ },
62
+ });
63
+ }
64
+ async handleRunControl(request) {
65
+ const initial = await this.createInitialOperation(request);
66
+ if (initial.state === "blocked")
67
+ return this.toResult(initial);
68
+ if (request.intent.kind === "inspect_run") {
69
+ const inspected = await this.update(initial, "verified", {
70
+ ok: true,
71
+ message: await this.formatInspection(initial),
72
+ });
73
+ await this.appendControlEvidence(inspected);
74
+ return this.toResult(inspected);
75
+ }
76
+ if (request.intent.kind === "finalize_run") {
77
+ const proposed = await this.proposeFinalize(initial, request);
78
+ await this.appendControlEvidence(proposed);
79
+ return this.toResult(proposed);
80
+ }
81
+ if (!initial.target?.goal_id) {
82
+ const blocked = await this.update(initial, "blocked", {
83
+ ok: false,
84
+ message: `Runtime control ${request.intent.kind} is blocked: selected run ${initial.target?.run_id ?? "unknown"} has no typed goal/runtime bridge yet.`,
85
+ });
86
+ await this.appendControlEvidence(blocked);
87
+ return this.toResult(blocked);
88
+ }
89
+ const approved = await this.approveIfRequired(initial, request.approvalFn);
90
+ if (!approved.ok)
91
+ return approved.result;
92
+ const acknowledged = await this.acknowledge(approved.operation);
93
+ const result = await this.executeAcknowledgedOperation(acknowledged, request);
94
+ if (result.operationId) {
95
+ const operation = await this.operationStore.load(result.operationId);
96
+ if (operation)
97
+ await this.appendControlEvidence(operation);
98
+ }
99
+ return result;
100
+ }
27
101
  async createInitialOperation(request) {
102
+ const target = await this.resolveTarget(request);
103
+ if (!target.ok) {
104
+ return this.createBlockedOperation(request, target.result.message);
105
+ }
28
106
  const requestedAt = this.nowIso();
107
+ const risk = riskForIntent(request.intent);
29
108
  const operation = {
30
109
  operation_id: randomUUID(),
31
110
  kind: request.intent.kind,
@@ -36,9 +115,134 @@ export class RuntimeControlService {
36
115
  reply_target: normalizeReplyTarget(request.replyTarget ?? { surface: "chat" }),
37
116
  reason: request.intent.reason,
38
117
  expected_health: expectedHealthFor(request.intent.kind),
118
+ ...(target.run
119
+ ? {
120
+ target: {
121
+ run_id: target.run.id,
122
+ ...(target.run.child_session_id ? { session_id: target.run.child_session_id } : {}),
123
+ ...(target.goalId ? { goal_id: target.goalId } : {}),
124
+ },
125
+ }
126
+ : {}),
127
+ ...(risk ? { risk } : {}),
39
128
  };
40
129
  return this.operationStore.save(operation);
41
130
  }
131
+ async createBlockedOperation(request, message) {
132
+ const now = this.nowIso();
133
+ return this.operationStore.save({
134
+ operation_id: randomUUID(),
135
+ kind: request.intent.kind,
136
+ state: "blocked",
137
+ requested_at: now,
138
+ updated_at: now,
139
+ requested_by: request.requestedBy ?? { surface: "chat" },
140
+ reply_target: normalizeReplyTarget(request.replyTarget ?? { surface: "chat" }),
141
+ reason: request.intent.reason,
142
+ expected_health: expectedHealthFor(request.intent.kind),
143
+ result: { ok: false, message },
144
+ });
145
+ }
146
+ async resolveTarget(request) {
147
+ if (!isRunControlKind(request.intent.kind))
148
+ return { ok: true };
149
+ if (!this.sessionRegistry) {
150
+ return blocked("Runtime session catalog is not available for run control.");
151
+ }
152
+ const snapshot = await this.sessionRegistry.snapshot();
153
+ const explicitRunId = request.intent.target?.runId;
154
+ const explicitSessionId = request.intent.target?.sessionId;
155
+ const run = explicitRunId
156
+ ? snapshot.background_runs.find((candidate) => candidate.id === explicitRunId)
157
+ : explicitSessionId
158
+ ? snapshot.background_runs.find((candidate) => candidate.child_session_id === explicitSessionId)
159
+ : selectImplicitTarget(snapshot, request);
160
+ if (!run) {
161
+ const candidates = selectableRuns(snapshot);
162
+ if (!explicitRunId && !explicitSessionId && candidates.length > 1) {
163
+ return blocked(`Multiple active/recent runtime runs match this request. Specify one run id: ${candidates.map((candidate) => candidate.id).join(", ")}`);
164
+ }
165
+ return blocked("No active or recent long-running runtime run matched this request.");
166
+ }
167
+ if (!isCurrentRunForControl(run, request.intent.kind)) {
168
+ return blocked(`Runtime run ${run.id} is stale or terminal for ${request.intent.kind}; refusing to reuse previous-session state.`);
169
+ }
170
+ return { ok: true, run, goalId: resolveGoalId(run, snapshot) };
171
+ }
172
+ async proposeFinalize(operation, request) {
173
+ const approved = await this.approveIfRequired(operation, request.approvalFn);
174
+ if (!approved.ok)
175
+ return this.operationStore.load(operation.operation_id).then((saved) => saved ?? operation);
176
+ const handoff = await this.operatorHandoffStore?.create({
177
+ handoff_id: `handoff:${operation.target?.run_id ?? operation.operation_id}:runtime-finalize`,
178
+ ...(operation.target?.goal_id ? { goal_id: operation.target.goal_id } : {}),
179
+ ...(operation.target?.run_id ? { run_id: operation.target.run_id } : {}),
180
+ triggers: [
181
+ "finalization",
182
+ ...(operation.risk?.irreversible ? ["irreversible_action"] : []),
183
+ ...((operation.risk?.external_actions.length ?? 0) > 0 ? ["external_action"] : []),
184
+ ],
185
+ title: "Runtime finalization approval required",
186
+ summary: operation.reason,
187
+ current_status: `Run ${operation.target?.run_id ?? "unknown"} is awaiting operator finalization approval.`,
188
+ recommended_action: "Review the proposed finalization. External submit/publish/secret/production/destructive actions remain blocked until explicit approval.",
189
+ candidate_options: [
190
+ { id: "approve_finalize", label: "Approve finalization", tradeoff: "Allows the runtime to finalize without external submission." },
191
+ { id: "keep_running", label: "Keep running", tradeoff: "Leaves the background run unchanged." },
192
+ ],
193
+ risks: [
194
+ "Finalization may be irreversible.",
195
+ ...((operation.risk?.external_actions ?? []).map((action) => `External action requested but not executed: ${action}`)),
196
+ ],
197
+ required_approvals: ["operator_finalization"],
198
+ next_action: {
199
+ label: "approve runtime finalization",
200
+ approval_required: true,
201
+ },
202
+ gate: {
203
+ autonomous_task_generation: "pause",
204
+ external_action_requires_approval: true,
205
+ },
206
+ });
207
+ return this.update(approved.operation, "blocked", {
208
+ ok: true,
209
+ message: [
210
+ `Finalization proposal recorded for ${operation.target?.run_id ?? "the selected run"}.`,
211
+ handoff ? `Operator handoff: ${handoff.handoff_id}.` : "Operator handoff store is not configured.",
212
+ "No external submit/publish/secret/production/destructive action was executed.",
213
+ ].join(" "),
214
+ });
215
+ }
216
+ async formatInspection(operation) {
217
+ if (!this.sessionRegistry || !operation.target?.run_id)
218
+ return "Runtime run inspection is unavailable.";
219
+ const snapshot = await this.sessionRegistry.snapshot();
220
+ const run = snapshot.background_runs.find((candidate) => candidate.id === operation.target?.run_id);
221
+ if (!run)
222
+ return `Runtime run ${operation.target.run_id} was not found.`;
223
+ return [
224
+ `Runtime run ${run.id}: ${run.status}.`,
225
+ run.title ? `Title: ${run.title}.` : null,
226
+ run.summary ? `Summary: ${run.summary}.` : null,
227
+ run.error ? `Error: ${run.error}.` : null,
228
+ `Updated: ${run.updated_at ?? "unknown"}.`,
229
+ ].filter((line) => Boolean(line)).join(" ");
230
+ }
231
+ async appendControlEvidence(operation) {
232
+ if (!this.evidenceLedger || !operation.target?.run_id)
233
+ return;
234
+ await this.evidenceLedger.append({
235
+ kind: operation.state === "failed" || operation.state === "blocked" ? "decision" : "execution",
236
+ scope: { run_id: operation.target.run_id },
237
+ outcome: operation.result?.ok ? "continued" : "blocked",
238
+ summary: operation.result?.message ?? ackMessage(operation.kind),
239
+ result: {
240
+ status: operation.state,
241
+ summary: operation.result?.message ?? ackMessage(operation.kind),
242
+ },
243
+ raw_refs: [{ kind: "runtime_control_operation", id: operation.operation_id }],
244
+ });
245
+ }
42
246
  async approveIfRequired(operation, approvalFn) {
43
247
  if (!requiresApproval(operation.kind)) {
44
248
  return { ok: true, operation };
@@ -48,7 +252,7 @@ export class RuntimeControlService {
48
252
  }
49
253
  let approved;
50
254
  try {
51
- approved = await approvalFn(approvalReason(operation.kind, operation.reason));
255
+ approved = await approvalFn(approvalReason(operation));
52
256
  }
53
257
  catch (err) {
54
258
  return this.failStep(operation, "failed", err instanceof Error ? err.message : String(err));
@@ -124,10 +328,13 @@ export class RuntimeControlService {
124
328
  }
125
329
  }
126
330
  export function isExecutableRuntimeControlKind(kind) {
127
- return kind === "restart_daemon" || kind === "restart_gateway";
331
+ return kind === "restart_daemon" || kind === "restart_gateway" || kind === "pause_run" || kind === "resume_run";
332
+ }
333
+ function isRunControlKind(kind) {
334
+ return kind === "inspect_run" || kind === "pause_run" || kind === "resume_run" || kind === "finalize_run";
128
335
  }
129
336
  function requiresApproval(kind) {
130
- return isExecutableRuntimeControlKind(kind);
337
+ return kind === "restart_daemon" || kind === "restart_gateway" || kind === "pause_run" || kind === "resume_run" || kind === "finalize_run";
131
338
  }
132
339
  function normalizeReplyTarget(target) {
133
340
  return {
@@ -153,8 +360,9 @@ function expectedHealthFor(kind) {
153
360
  gateway_acceptance: isExecutableRuntimeControlKind(kind),
154
361
  };
155
362
  }
156
- function approvalReason(kind, reason) {
157
- return `Runtime control ${kind}: ${reason}`;
363
+ function approvalReason(operation) {
364
+ const target = operation.target?.run_id ? ` for ${operation.target.run_id}` : "";
365
+ return `Runtime control ${operation.kind}${target}: ${operation.reason}`;
158
366
  }
159
367
  function ackMessage(kind) {
160
368
  switch (kind) {
@@ -166,6 +374,78 @@ function ackMessage(kind) {
166
374
  return "runtime 設定の再読み込みを開始します。";
167
375
  case "self_update":
168
376
  return "PulSeed 自身の更新準備を開始します。実行前に内容を確認します。";
377
+ case "inspect_run":
378
+ return "runtime run の状況を確認しました。";
379
+ case "pause_run":
380
+ return "runtime run の safe pause を要求します。";
381
+ case "resume_run":
382
+ return "runtime run の再開を要求します。";
383
+ case "finalize_run":
384
+ return "runtime run の最終化 proposal を作成します。";
169
385
  }
170
386
  }
387
+ function targetFromRunRequest(request) {
388
+ if (!request.runId && !request.sessionId)
389
+ return undefined;
390
+ return {
391
+ ...(request.runId ? { runId: request.runId } : {}),
392
+ ...(request.sessionId ? { sessionId: request.sessionId } : {}),
393
+ };
394
+ }
395
+ function riskForIntent(intent) {
396
+ if (intent.kind !== "finalize_run")
397
+ return null;
398
+ return {
399
+ requires_approval: true,
400
+ irreversible: intent.irreversible ?? true,
401
+ external_actions: intent.externalActions ?? [],
402
+ };
403
+ }
404
+ function selectableRuns(snapshot) {
405
+ return [...snapshot.background_runs]
406
+ .filter((run) => ACTIVE_RUN_STATUSES.has(run.status) || ATTENTION_RUN_STATUSES.has(run.status))
407
+ .sort((left, right) => compareUpdated(right, left));
408
+ }
409
+ function selectImplicitTarget(snapshot, request) {
410
+ const candidates = selectableRuns(snapshot);
411
+ const conversationId = request.replyTarget?.conversation_id ?? request.requestedBy?.conversation_id;
412
+ const currentSessionId = conversationId ? `session:conversation:${conversationId}` : null;
413
+ const scoped = currentSessionId
414
+ ? candidates.filter((run) => run.parent_session_id === currentSessionId)
415
+ : [];
416
+ if (scoped.length === 1)
417
+ return scoped[0];
418
+ if (scoped.length > 1)
419
+ return null;
420
+ return candidates.length === 1 ? candidates[0] : null;
421
+ }
422
+ function isCurrentRunForControl(run, kind) {
423
+ if (kind === "inspect_run")
424
+ return ACTIVE_RUN_STATUSES.has(run.status) || ATTENTION_RUN_STATUSES.has(run.status);
425
+ if (kind === "pause_run")
426
+ return ACTIVE_RUN_STATUSES.has(run.status);
427
+ if (kind === "resume_run")
428
+ return ACTIVE_RUN_STATUSES.has(run.status) || ATTENTION_RUN_STATUSES.has(run.status);
429
+ if (kind === "finalize_run")
430
+ return ACTIVE_RUN_STATUSES.has(run.status) || ATTENTION_RUN_STATUSES.has(run.status);
431
+ return false;
432
+ }
433
+ function resolveGoalId(run, snapshot) {
434
+ if (run.kind !== "coreloop_run")
435
+ return null;
436
+ if (run.goal_id)
437
+ return run.goal_id;
438
+ const child = run.child_session_id
439
+ ? snapshot.sessions.find((session) => session.id === run.child_session_id)
440
+ : null;
441
+ const title = child?.title ?? run.title ?? "";
442
+ const match = title.match(/^CoreLoop goal\s+(.+)$/);
443
+ return match?.[1]?.trim() || null;
444
+ }
445
+ function compareUpdated(left, right) {
446
+ return Date.parse(left.updated_at ?? left.started_at ?? left.created_at ?? "") - Date.parse(right.updated_at ?? right.started_at ?? right.created_at ?? "");
447
+ }
448
+ function blocked(message) {
449
+ return { ok: false, result: { success: false, message, state: "blocked" } };
450
+ }
171
451
  //# sourceMappingURL=runtime-control-service.js.map