@humwick/server 0.130.1 → 0.130.3

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 (811) hide show
  1. package/README.md +5 -0
  2. package/bundled/prompts/manifest.json +1 -0
  3. package/bundled/prompts/task.hydration.md +1 -1
  4. package/bundled/roles/builder.md +1 -1
  5. package/docs/guides/sub-coordinators.md +12 -5
  6. package/docs/guides/tools-administration.md +4 -0
  7. package/docs/guides/tools-coordination.md +2 -0
  8. package/docs/guides/tools-tasks.md +8 -0
  9. package/docs/guides/workflows.md +74 -0
  10. package/docs/openapi.json +486 -4
  11. package/package.json +10 -18
  12. package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
  13. package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
  14. package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
  15. package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
  16. package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
  17. package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
  18. package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
  19. package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
  20. package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
  21. package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
  22. package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
  23. package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
  24. package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
  25. package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
  26. package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
  27. package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
  28. package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
  29. package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
  30. package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
  31. package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
  32. package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
  33. package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
  34. package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
  35. package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
  36. package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
  37. package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
  38. package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
  39. package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
  40. package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
  41. package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
  42. package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
  43. package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
  44. package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
  45. package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
  46. package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
  47. package/public/assets/index-CqqgOI5R.js +15 -0
  48. package/public/assets/index-MYAIwYTX.css +2 -0
  49. package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
  50. package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
  51. package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
  52. package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
  53. package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
  54. package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
  55. package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
  56. package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
  57. package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
  58. package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
  59. package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
  60. package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
  61. package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
  62. package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
  63. package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
  64. package/public/assets/projects-M_m6AHws.js +2 -0
  65. package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
  66. package/public/assets/provider-display-BEeLXC_D.js +2 -0
  67. package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
  68. package/public/assets/run-card-Dt4I4jaP.js +2 -0
  69. package/public/assets/scroll-text-BKXS1ahr.js +2 -0
  70. package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
  71. package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
  72. package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
  73. package/public/assets/shipping-H6gzEeZB.js +2 -0
  74. package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
  75. package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
  76. package/public/assets/store-DKPDIZBe.js +9 -0
  77. package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
  78. package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
  79. package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
  80. package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
  81. package/public/assets/token-estimate-Co-Jdphh.js +2 -0
  82. package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
  83. package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
  84. package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
  85. package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
  86. package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
  87. package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
  88. package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
  89. package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
  90. package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
  91. package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
  92. package/public/cosmos.html +4 -4
  93. package/public/index.html +31 -29
  94. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  95. package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
  96. package/runner/src/adapters/claude-effort.ts +2 -4
  97. package/runner/src/adapters/claude-headless.ts +1 -1
  98. package/runner/src/adapters/claude-launch-exit.ts +26 -0
  99. package/runner/src/adapters/claude-session-probe.ts +1 -1
  100. package/runner/src/adapters/claude-tmux.ts +38 -10
  101. package/runner/src/adapters/claude.ts +28 -75
  102. package/runner/src/adapters/codex-launch-config.ts +4 -5
  103. package/runner/src/adapters/codex.ts +1 -1
  104. package/runner/src/adapters/opencode-provider.ts +7 -22
  105. package/runner/src/adapters/opencode.ts +4 -4
  106. package/runner/src/adapters/provider-quota-harvest.ts +20 -71
  107. package/runner/src/agent-runner/credentials.ts +42 -12
  108. package/runner/src/agent-runner/inbox.ts +27 -0
  109. package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
  110. package/runner/src/agent-runner/liveness-exchange.ts +104 -0
  111. package/runner/src/bin/claude.ts +4 -0
  112. package/runner/src/bin/codex.ts +4 -0
  113. package/runner/src/bin/opencode.ts +4 -0
  114. package/runner/src/claude-system-prompt.ts +49 -0
  115. package/runner/src/index.ts +5 -2
  116. package/runner/src/launch-assembly.ts +14 -10
  117. package/runner/src/profile-home.ts +1 -1
  118. package/runner/src/project-instructions.ts +2 -2
  119. package/runner/src/provider-command.ts +18 -0
  120. package/runner/src/provider-setup.ts +35 -0
  121. package/runner/src/providers.ts +2 -1
  122. package/runner/src/runner-core.ts +32 -38
  123. package/runner/src/runner-helpers.ts +0 -8
  124. package/runner/src/session-scratch.ts +6 -2
  125. package/runner/src/spawn-input.ts +2 -1
  126. package/runner/src/test-run-dedup.ts +59 -56
  127. package/runner/test-support/provisioning-context.ts +4 -2
  128. package/runner/test-support/runner-harness.ts +2 -1
  129. package/scripts/cd-config.ts +8 -0
  130. package/scripts/gate-run-lease.ts +10 -7
  131. package/scripts/gate.sh +5 -1
  132. package/scripts/steward-policy-cleanup.ts +2 -2
  133. package/src/agent-authz.ts +2 -2
  134. package/src/agent-drive-arbiter.ts +3 -8
  135. package/src/agent-exit-cleanup-async.ts +2 -2
  136. package/src/agent-exit-cleanup.ts +23 -19
  137. package/src/agent-lifecycle-events.ts +112 -85
  138. package/src/agent-ref.ts +3 -2
  139. package/src/agent-status-events.ts +43 -14
  140. package/src/auth/password.ts +4 -3
  141. package/src/auth/session-refresh.ts +1 -1
  142. package/src/auth/session.test-fixture.ts +2 -2
  143. package/src/auth/session.ts +7 -7
  144. package/src/automations/crud.ts +8 -81
  145. package/src/automations/dispatch.ts +33 -58
  146. package/src/automations/index.ts +1 -1
  147. package/src/automations/persistence.ts +65 -0
  148. package/src/automations/precheck.ts +18 -16
  149. package/src/automations/read-async.ts +11 -0
  150. package/src/automations/reconcile.ts +30 -39
  151. package/src/automations/storage.ts +33 -10
  152. package/src/automations/write-async.ts +33 -0
  153. package/src/branch-land-notice.ts +93 -0
  154. package/src/branch-landed.ts +31 -98
  155. package/src/bus.ts +40 -39
  156. package/src/cd-deploy-notify.ts +32 -4
  157. package/src/cd-host-lag-notify.ts +7 -6
  158. package/src/ci/incidents.ts +2 -2
  159. package/src/ci/monitor.ts +5 -8
  160. package/src/ci/notifications.ts +4 -4
  161. package/src/ci/root-missing.ts +4 -9
  162. package/src/ci/transition-notify.ts +12 -44
  163. package/src/claude-app/oauth-http.ts +3 -3
  164. package/src/cli/cd-pauses.ts +19 -0
  165. package/src/cli/orchestrator.ts +1 -1
  166. package/src/cli/state.ts +2 -19
  167. package/src/cli/task-edit.ts +22 -0
  168. package/src/cli/task.ts +3 -1
  169. package/src/cli/workflow.ts +19 -4
  170. package/src/commands-db.ts +7 -7
  171. package/src/commands-write.ts +8 -0
  172. package/src/compaction-watch.ts +10 -8
  173. package/src/config-store-write.ts +13 -1
  174. package/src/config-store.ts +25 -14
  175. package/src/config.ts +4 -11
  176. package/src/connectors.ts +10 -8
  177. package/src/context-advisory.ts +22 -21
  178. package/src/db/activity-async.ts +6 -1
  179. package/src/db/activity-write-ops.ts +12 -1
  180. package/src/db/activity.ts +1 -14
  181. package/src/db/agent-action-write.ts +36 -0
  182. package/src/db/agent-control-async.ts +9 -0
  183. package/src/db/agent-control-write.ts +49 -0
  184. package/src/db/agent-effort-observe.ts +22 -0
  185. package/src/db/agent-meta.ts +14 -3
  186. package/src/db/agent-search.ts +1 -15
  187. package/src/db/agents-async.ts +59 -9
  188. package/src/db/agents-write-ops.ts +12 -3
  189. package/src/db/agents.ts +95 -65
  190. package/src/db/auth-identities.ts +2 -2
  191. package/src/db/automation-read-ops.ts +11 -0
  192. package/src/db/automation-write-ops.ts +46 -0
  193. package/src/db/blackboard.ts +2 -2
  194. package/src/db/browser-session-write.ts +32 -0
  195. package/src/db/bus-outbox-write-ops.ts +3 -1
  196. package/src/db/checkout-refresh-schema.ts +47 -0
  197. package/src/db/checkout-refresh.ts +5 -5
  198. package/src/db/ci-incidents-async.ts +5 -5
  199. package/src/db/ci-incidents-write-ops.ts +2 -2
  200. package/src/db/command-agent-profile-backfill.ts +39 -0
  201. package/src/db/command-agent-profiles.ts +5 -1
  202. package/src/db/command-retention.ts +126 -0
  203. package/src/db/command-row.ts +10 -2
  204. package/src/db/commands-list-query.ts +2 -0
  205. package/src/db/commands-planner-stats.test-fixture.ts +8 -0
  206. package/src/db/commands-read-ops.ts +16 -0
  207. package/src/db/commands-spawn-read.ts +1 -1
  208. package/src/db/config-store-write-ops.ts +7 -2
  209. package/src/db/connection.ts +1 -182
  210. package/src/db/context-carry-write.ts +74 -0
  211. package/src/db/continuation-archives-async.ts +5 -0
  212. package/src/db/continuation-archives-write-ops.ts +7 -0
  213. package/src/db/continuations.ts +6 -6
  214. package/src/db/db-error-registry.ts +12 -0
  215. package/src/db/db-writer-worker.ts +8 -1
  216. package/src/db/deploy-events-async.ts +1 -0
  217. package/src/db/deploy-events-read-ops.ts +2 -1
  218. package/src/db/deploy-events.ts +35 -4
  219. package/src/db/gateway.ts +26 -133
  220. package/src/db/history-retention-ops.ts +13 -0
  221. package/src/db/hosts-registration.ts +10 -2
  222. package/src/db/hosts.ts +9 -6
  223. package/src/db/inbox-async.ts +2 -2
  224. package/src/db/inbox-read-ops.ts +1 -1
  225. package/src/db/inbox.ts +9 -17
  226. package/src/db/index.ts +2 -0
  227. package/src/db/integrations-async.ts +8 -0
  228. package/src/db/integrations-ops.ts +15 -0
  229. package/src/db/integrations.ts +15 -21
  230. package/src/db/issue-associations.ts +2 -2
  231. package/src/db/issue-lifecycle.ts +3 -4
  232. package/src/db/issue-refs-async.ts +23 -0
  233. package/src/db/issue-refs-read-ops.ts +6 -0
  234. package/src/db/issue-refs-write-ops.ts +29 -0
  235. package/src/db/issue-refs.ts +15 -16
  236. package/src/db/kernel-event-log-schema.ts +2 -0
  237. package/src/db/land-boundaries.ts +51 -5
  238. package/src/db/land-gate-attestations.ts +2 -2
  239. package/src/db/landing-receipts.ts +2 -2
  240. package/src/db/lifecycle-context-write.ts +5 -0
  241. package/src/db/lifecycle-tail-async.ts +76 -0
  242. package/src/db/lifecycle-tail-write-ops.ts +62 -0
  243. package/src/db/lifecycle-write-window.ts +2 -1
  244. package/src/db/lineage-pair-dedupe-sql.ts +3 -3
  245. package/src/db/long-running-work.ts +2 -2
  246. package/src/db/main-connection-mode.ts +11 -0
  247. package/src/db/main-connection-writes.ts +41 -2
  248. package/src/db/maintenance-job-reconcile.ts +61 -0
  249. package/src/db/maintenance-job-runs-async.ts +14 -0
  250. package/src/db/maintenance-job-write-ops.ts +9 -0
  251. package/src/db/maintenance-pauses.ts +2 -2
  252. package/src/db/mappers.ts +2 -14
  253. package/src/db/merge-lease.ts +1 -15
  254. package/src/db/message-send.ts +4 -0
  255. package/src/db/messages.ts +31 -25
  256. package/src/db/migrations.ts +25 -16
  257. package/src/db/notification-write-ops.ts +19 -0
  258. package/src/db/operator-answer-write.ts +19 -0
  259. package/src/db/orchestrators.ts +14 -76
  260. package/src/db/pairs-async.ts +22 -1
  261. package/src/db/pairs-write-ops.ts +8 -3
  262. package/src/db/pairs.ts +42 -61
  263. package/src/db/plan-dispatch-schema.ts +5 -1
  264. package/src/db/plan-ready-notices.ts +43 -0
  265. package/src/db/plan-tools-include-migration.ts +36 -0
  266. package/src/db/plans-write-ops.ts +2 -0
  267. package/src/db/presence-buffer.ts +5 -0
  268. package/src/db/presence-loop.ts +18 -23
  269. package/src/db/presence-write.ts +0 -6
  270. package/src/db/project-entries-async.ts +14 -0
  271. package/src/db/project-entries-read-ops.ts +5 -1
  272. package/src/db/project-entries-write-ops.ts +8 -0
  273. package/src/db/project-entries.ts +15 -12
  274. package/src/db/project-journal.ts +2 -2
  275. package/src/db/project-profile-instructions.ts +50 -0
  276. package/src/db/project-trust-approvals.ts +2 -2
  277. package/src/db/prompt-templates.ts +4 -4
  278. package/src/db/prompt-versions.ts +9 -2
  279. package/src/db/provider-config-history.ts +8 -3
  280. package/src/db/provider-model-seed.ts +34 -0
  281. package/src/db/read-op-marshaling-fixtures.ts +23 -0
  282. package/src/db/read-ops.ts +8 -0
  283. package/src/db/retention.ts +13 -2
  284. package/src/db/review-publish-write.ts +8 -0
  285. package/src/db/routing-policy.ts +2 -3
  286. package/src/db/runtime-admin-async.ts +19 -0
  287. package/src/db/runtime-admin-write-ops.ts +36 -0
  288. package/src/db/runtime-tail-async.ts +288 -0
  289. package/src/db/runtime-tail-write-ops.ts +97 -0
  290. package/src/db/schema.ts +13 -4
  291. package/src/db/spawn-budget.ts +5 -0
  292. package/src/db/spawn-delegation-state.ts +11 -4
  293. package/src/db/spawn-delegation.ts +1 -11
  294. package/src/db/sql-audit-indexes.ts +3 -0
  295. package/src/db/stats-async.ts +9 -6
  296. package/src/db/task-entity.ts +28 -6
  297. package/src/db/task-list.ts +3 -1
  298. package/src/db/tasks.ts +1 -17
  299. package/src/db/team-claim-policy.ts +60 -0
  300. package/src/db/teams-async.ts +4 -0
  301. package/src/db/teams-write-ops.ts +4 -0
  302. package/src/db/terminal-events.ts +15 -0
  303. package/src/db/timer-cutover-bodies.ts +292 -0
  304. package/src/db/timer-cutover-core.ts +37 -278
  305. package/src/db/timer-cutover-state.ts +40 -0
  306. package/src/db/timer-cutover-write-ops.ts +1 -40
  307. package/src/db/timer-ingress.ts +7 -1
  308. package/src/db/token-db-write-ops.ts +19 -0
  309. package/src/db/token-standing-async.ts +12 -0
  310. package/src/db/token-standing.ts +21 -20
  311. package/src/db/token-usage-retention.ts +33 -0
  312. package/src/db/token-usage-write-ops.ts +1 -1
  313. package/src/db/token-usage.ts +4 -1
  314. package/src/db/user-invites-async.ts +13 -0
  315. package/src/db/user-invites.ts +3 -3
  316. package/src/db/users.ts +14 -6
  317. package/src/db/workflow-contact.ts +1 -1
  318. package/src/db/workflow-task-read-ops.ts +30 -0
  319. package/src/db/workspaces.ts +8 -5
  320. package/src/db/write-ops.ts +37 -12
  321. package/src/db/writer-fault-seam.ts +2 -9
  322. package/src/db/writer-fault-test-ops.ts +18 -0
  323. package/src/db/writer-gateway.ts +58 -56
  324. package/src/dev.ts +8 -3
  325. package/src/dispatch-availability.ts +10 -6
  326. package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
  327. package/src/event-loop-lag.ts +4 -2
  328. package/src/event-loop-yield.ts +2 -2
  329. package/src/events.ts +10 -8
  330. package/src/host/disk-alert.ts +121 -0
  331. package/src/host-provider-store.ts +5 -4
  332. package/src/hub-metrics-report.ts +5 -1
  333. package/src/hub-metrics.ts +38 -18
  334. package/src/injection-sweep-pacing.ts +6 -8
  335. package/src/land-gate-notifications.ts +11 -10
  336. package/src/land-gate-queue-progress.ts +3 -3
  337. package/src/land-settle-dispatch.ts +52 -92
  338. package/src/lifecycle-context-pressure.ts +11 -10
  339. package/src/lifecycle-manager.ts +107 -100
  340. package/src/maintenance/breaker.ts +18 -16
  341. package/src/maintenance/cd-watcher.ts +3 -3
  342. package/src/maintenance/checkout-refresh.ts +18 -1
  343. package/src/maintenance/critical-job-watchdog.ts +19 -20
  344. package/src/maintenance/events.ts +3 -3
  345. package/src/maintenance/history-retention-job.ts +30 -0
  346. package/src/maintenance/index.ts +1 -0
  347. package/src/maintenance/jobs.ts +32 -69
  348. package/src/maintenance/long-running-work.ts +3 -1
  349. package/src/maintenance/offline-agent-prune-job.ts +28 -0
  350. package/src/maintenance/orphaned-sessions.ts +5 -4
  351. package/src/maintenance/pauses.ts +4 -10
  352. package/src/maintenance/plan-ready-notice-job.ts +71 -0
  353. package/src/maintenance/scheduler.ts +98 -137
  354. package/src/maintenance/stalled-delivery-pager.ts +10 -9
  355. package/src/maintenance/teams.ts +19 -30
  356. package/src/maintenance/workspaces.ts +18 -28
  357. package/src/managed-policy-escalation.ts +7 -7
  358. package/src/managed-policy.ts +32 -28
  359. package/src/managed-provider-gate.ts +5 -4
  360. package/src/managed-spawn-reservation.ts +5 -4
  361. package/src/mcp/index.ts +12 -9
  362. package/src/mcp/output-descriptions.ts +8 -8
  363. package/src/mcp/presentation.ts +6 -5
  364. package/src/mcp/project-profile-instructions.ts +32 -0
  365. package/src/mcp/runtime-output.ts +6 -1
  366. package/src/mcp/self-care-visibility.ts +2 -2
  367. package/src/mcp/spawn-targets-matrix.ts +10 -1
  368. package/src/mcp/tool-groups.ts +4 -3
  369. package/src/mcp/tool-roles.ts +81 -0
  370. package/src/mcp/tools-spawn.ts +4 -3
  371. package/src/mcp/tools-workspace.ts +1 -1
  372. package/src/mcp-agent-action.ts +1 -2
  373. package/src/mcp-blackboard-tools.ts +6 -5
  374. package/src/mcp-decision-tools.ts +7 -7
  375. package/src/mcp-egress-tools.ts +10 -9
  376. package/src/mcp-issue-activity-tools.ts +2 -2
  377. package/src/mcp-issue-association-tools.ts +4 -4
  378. package/src/mcp-issue-ref-tools.ts +13 -12
  379. package/src/mcp-maintenance-tools.ts +2 -2
  380. package/src/mcp-merge-tools.ts +5 -5
  381. package/src/mcp-notification-subscription-tools.ts +14 -15
  382. package/src/mcp-output-levels.test-fixture.ts +1 -1
  383. package/src/mcp-profile-trust-tools.ts +5 -5
  384. package/src/mcp-project-journal-tools.ts +4 -12
  385. package/src/mcp-project-tools.ts +17 -18
  386. package/src/mcp-provider-catalog.ts +2 -2
  387. package/src/mcp-routing-policy-tools.ts +3 -2
  388. package/src/mcp-task-tools.ts +11 -5
  389. package/src/mcp-team-template-tools.ts +3 -3
  390. package/src/mcp-team-tools.ts +6 -6
  391. package/src/mcp-workflow-tools.ts +13 -4
  392. package/src/memory-area-injection.ts +13 -12
  393. package/src/memory-boundary-capture.ts +6 -6
  394. package/src/memory-injection.ts +45 -43
  395. package/src/merge-pause-maintenance.ts +5 -4
  396. package/src/notification-router.ts +44 -17
  397. package/src/notification-types.ts +2 -1
  398. package/src/notify.ts +5 -5
  399. package/src/observed-reset-refresh.ts +4 -4
  400. package/src/operator-alarm.ts +23 -11
  401. package/src/project-ingest.ts +6 -6
  402. package/src/project-instructions.ts +12 -1
  403. package/src/project-profile-instruction-text.ts +6 -0
  404. package/src/project-profile-instructions.ts +20 -0
  405. package/src/project-trust.ts +12 -11
  406. package/src/prompt-resolver.ts +3 -3
  407. package/src/provider-catalog-store.ts +3 -49
  408. package/src/provider-config-store.ts +12 -11
  409. package/src/provider-model-seed.ts +1 -18
  410. package/src/provider-quota-async.ts +5 -7
  411. package/src/provider-quota-config-store.ts +5 -4
  412. package/src/provider-secrets.test-fixture.ts +3 -3
  413. package/src/provider-timeline-event.ts +4 -7
  414. package/src/quota-band-delivery.ts +2 -2
  415. package/src/recipe-runner.ts +6 -5
  416. package/src/repo-config-source.ts +10 -4
  417. package/src/retention-config-store.ts +4 -3
  418. package/src/reviewer-pipeline.ts +11 -10
  419. package/src/routes/_route.ts +4 -4
  420. package/src/routes/_shared.ts +13 -12
  421. package/src/routes/agent-effort.ts +5 -5
  422. package/src/routes/agent-heartbeat-quota.ts +23 -0
  423. package/src/routes/agent-keep.ts +1 -1
  424. package/src/routes/agent-profiles.ts +6 -6
  425. package/src/routes/agent-reporting.ts +1 -1
  426. package/src/routes/agent-self-effort.ts +5 -5
  427. package/src/routes/agent-sessions.ts +24 -24
  428. package/src/routes/agents-spawn.ts +2 -2
  429. package/src/routes/agents.ts +19 -121
  430. package/src/routes/auth.ts +14 -15
  431. package/src/routes/authority-audit.ts +2 -2
  432. package/src/routes/automations.ts +6 -5
  433. package/src/routes/channel-binding-delete.ts +1 -1
  434. package/src/routes/channel-output.ts +3 -3
  435. package/src/routes/claude-api-budget.ts +5 -5
  436. package/src/routes/commands-listing.ts +5 -1
  437. package/src/routes/commands.ts +31 -29
  438. package/src/routes/context-resets.ts +2 -2
  439. package/src/routes/continuation-archives.ts +2 -2
  440. package/src/routes/coordinator-teams.ts +1 -1
  441. package/src/routes/decisions.ts +2 -2
  442. package/src/routes/host-secret-files.ts +1 -1
  443. package/src/routes/hosts.ts +11 -11
  444. package/src/routes/inbox.ts +3 -2
  445. package/src/routes/index.ts +12 -2
  446. package/src/routes/integrations.ts +32 -56
  447. package/src/routes/issue-activity.ts +2 -2
  448. package/src/routes/issue-associations.ts +4 -4
  449. package/src/routes/issue-refs.ts +9 -9
  450. package/src/routes/kernel-timers-operator.ts +1 -1
  451. package/src/routes/memory.ts +1 -1
  452. package/src/routes/merges.ts +11 -11
  453. package/src/routes/messages.ts +23 -17
  454. package/src/routes/orchestrator-bootstrap.ts +2 -2
  455. package/src/routes/orchestrator-host-registration.ts +4 -2
  456. package/src/routes/orchestrator-host-utilization.ts +5 -3
  457. package/src/routes/orchestrator-proxy.ts +4 -4
  458. package/src/routes/orchestrator.ts +28 -19
  459. package/src/routes/pairs.ts +8 -8
  460. package/src/routes/project-profile-instructions.ts +27 -0
  461. package/src/routes/project-trust.ts +3 -3
  462. package/src/routes/projects.ts +16 -16
  463. package/src/routes/prompt-templates.ts +12 -12
  464. package/src/routes/provider-config.ts +6 -6
  465. package/src/routes/provider-quota-config.ts +2 -2
  466. package/src/routes/provider-quotas.ts +10 -10
  467. package/src/routes/run-command.ts +1 -1
  468. package/src/routes/secrets-backup.ts +2 -2
  469. package/src/routes/secrets-import.ts +1 -1
  470. package/src/routes/secrets-vault.ts +7 -7
  471. package/src/routes/settings.ts +6 -6
  472. package/src/routes/shipping.ts +9 -1
  473. package/src/routes/spawn-policy.ts +8 -7
  474. package/src/routes/sse.ts +2 -2
  475. package/src/routes/stats.ts +6 -6
  476. package/src/routes/task-http.ts +15 -1
  477. package/src/routes/task-issues.ts +11 -26
  478. package/src/routes/tasks.ts +22 -53
  479. package/src/routes/team-templates.ts +12 -12
  480. package/src/routes/teams-config.ts +2 -2
  481. package/src/routes/teams.ts +10 -10
  482. package/src/routes/tokens.ts +30 -22
  483. package/src/routes/users.ts +24 -24
  484. package/src/routes/viewer-read.ts +3 -3
  485. package/src/routes/web-tool-calls.ts +4 -4
  486. package/src/routes/workflows.ts +22 -7
  487. package/src/routes/workspaces.ts +17 -16
  488. package/src/routing-policy-normalize.ts +1 -2
  489. package/src/routing-policy-push.ts +6 -6
  490. package/src/routing-step-defaults.ts +0 -2
  491. package/src/runner-token-mint-limit.ts +63 -0
  492. package/src/runtime-grant.ts +21 -13
  493. package/src/runtime-tokens.ts +59 -35
  494. package/src/secrets-broker/config.ts +1 -1
  495. package/src/secrets-broker/service.ts +2 -2
  496. package/src/security.ts +16 -21
  497. package/src/self-resume-carry.ts +21 -110
  498. package/src/self-resume-supersede.ts +4 -3
  499. package/src/self-resume.ts +54 -66
  500. package/src/server-background.ts +2 -2
  501. package/src/server.ts +26 -24
  502. package/src/services/agent-action.ts +12 -31
  503. package/src/services/agent-effort.ts +7 -32
  504. package/src/services/agent-hang-watchdog-job.ts +2 -2
  505. package/src/services/agent-heartbeat.ts +166 -0
  506. package/src/services/agent-reporting.ts +1 -1
  507. package/src/services/browser-inventory.ts +3 -3
  508. package/src/services/browser-session-state.ts +3 -2
  509. package/src/services/browser-session.ts +21 -27
  510. package/src/services/bus-command-update.ts +9 -9
  511. package/src/services/checkout-refresh-state.ts +1 -0
  512. package/src/services/checkout-refresh.test-fixture.ts +3 -2
  513. package/src/services/command-host.ts +7 -2
  514. package/src/services/coordinator-digest.ts +3 -2
  515. package/src/services/dispatch-command.ts +12 -13
  516. package/src/services/effective-launch-driver.ts +14 -9
  517. package/src/services/host-changed-paths.test-fixture.ts +5 -6
  518. package/src/services/host-project-readiness.ts +2 -2
  519. package/src/services/host-providers.ts +1 -1
  520. package/src/services/host-utilization.ts +27 -4
  521. package/src/services/idle-agent-digest.ts +17 -12
  522. package/src/services/idle-epics.ts +9 -10
  523. package/src/services/interrupt-agent.ts +12 -9
  524. package/src/services/issue-activity.ts +3 -3
  525. package/src/services/issue-associations.ts +15 -18
  526. package/src/services/issue-lifecycle-comments.ts +3 -2
  527. package/src/services/issue-lifecycle.ts +69 -72
  528. package/src/services/issue-refs.ts +10 -15
  529. package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
  530. package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
  531. package/src/services/kernel-timers-ingress.ts +4 -4
  532. package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
  533. package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
  534. package/src/services/kernel-timers-outbox.ts +1 -1
  535. package/src/services/kernel-timers-stage10-operator.ts +1 -1
  536. package/src/services/kernel-timers.ts +4 -3
  537. package/src/services/land-gate-placement.ts +11 -2
  538. package/src/services/land-issue-relations.ts +5 -4
  539. package/src/services/land-restart-retry.ts +7 -6
  540. package/src/services/landed-ancestry.ts +25 -8
  541. package/src/services/legacy-landing-host.ts +4 -1
  542. package/src/services/legacy-landing-recovery.ts +8 -6
  543. package/src/services/managed-running.ts +17 -17
  544. package/src/services/memory-areas.ts +17 -53
  545. package/src/services/merge-pause.ts +9 -15
  546. package/src/services/operator-decisions.ts +37 -41
  547. package/src/services/orchestrator-registration-recovery.ts +6 -2
  548. package/src/services/orchestrator-upgrade.ts +14 -12
  549. package/src/services/permission-decision.ts +4 -3
  550. package/src/services/plan-ci-notice.ts +57 -0
  551. package/src/services/plan-ci-recovery.ts +2 -55
  552. package/src/services/plan-conformance.ts +4 -4
  553. package/src/services/plan-dispatch-policy.ts +10 -3
  554. package/src/services/plan-dispatch.ts +35 -14
  555. package/src/services/plan-graph.ts +39 -261
  556. package/src/services/plan-import.ts +1 -1
  557. package/src/services/plan-live-bindings.ts +8 -37
  558. package/src/services/plan-task-create.ts +1 -1
  559. package/src/services/plan-terminal-refs.ts +2 -12
  560. package/src/services/plan-wake-digest.ts +9 -3
  561. package/src/services/profile-trust.ts +6 -5
  562. package/src/services/project-config-read.ts +70 -0
  563. package/src/services/project-profile-instructions.ts +54 -0
  564. package/src/services/project.ts +11 -10
  565. package/src/services/prompt-templates.ts +6 -5
  566. package/src/services/provider-hold-nudge.ts +9 -9
  567. package/src/services/provider-hold-record.ts +13 -12
  568. package/src/services/provider-state-audit.ts +19 -18
  569. package/src/services/provisioning-harness/budget-baseline.json +4 -4
  570. package/src/services/provisioning-harness/driver.ts +1 -1
  571. package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
  572. package/src/services/provisioning-harness/lifecycle.ts +24 -22
  573. package/src/services/provisioning-harness/prepare.ts +16 -17
  574. package/src/services/rate-limit-resume.ts +10 -9
  575. package/src/services/red-main-auto-revert.ts +7 -5
  576. package/src/services/red-main-controller-deps.ts +20 -3
  577. package/src/services/red-main-incident.ts +3 -1
  578. package/src/services/red-main-quarantine.ts +2 -3
  579. package/src/services/register-agent.ts +22 -22
  580. package/src/services/restart-project-role.ts +1 -1
  581. package/src/services/restart-spawn.ts +74 -61
  582. package/src/services/review-publish.ts +7 -24
  583. package/src/services/review-ref-reconcile.ts +29 -38
  584. package/src/services/runtime-dependency-alert.ts +27 -0
  585. package/src/services/scheduler-command.ts +11 -9
  586. package/src/services/scheduler.ts +5 -5
  587. package/src/services/self-care-state.ts +2 -1
  588. package/src/services/self-effort-grant.ts +5 -25
  589. package/src/services/self-effort.ts +5 -5
  590. package/src/services/send-message.ts +21 -34
  591. package/src/services/shutdown-agent.ts +17 -14
  592. package/src/services/spawn-agent.ts +25 -43
  593. package/src/services/spawn-chain-inspector.ts +7 -14
  594. package/src/services/spawn-cwd-placement.ts +21 -5
  595. package/src/services/spawn-issue-activity.ts +8 -6
  596. package/src/services/spawn-launch.ts +17 -1
  597. package/src/services/spawn-loss-escalation.ts +1 -1
  598. package/src/services/spawn-policy.ts +68 -0
  599. package/src/services/spawn-registration-watchdog.ts +2 -2
  600. package/src/services/spawn-repo-probe.ts +7 -5
  601. package/src/services/spawn-tree-cleanup.ts +8 -9
  602. package/src/services/steward-reaper.ts +4 -4
  603. package/src/services/task-context-hydration.ts +25 -1
  604. package/src/services/task-delivery.ts +20 -34
  605. package/src/services/task-dispatch.ts +3 -0
  606. package/src/services/task-entity.ts +40 -203
  607. package/src/services/task-issue-link.ts +13 -20
  608. package/src/services/task-issue-weave.ts +12 -11
  609. package/src/services/task-lifecycle.ts +27 -31
  610. package/src/services/task-repo-cwd.ts +37 -0
  611. package/src/services/task-review-hold.ts +4 -17
  612. package/src/services/task-semantic-events.ts +13 -11
  613. package/src/services/task-state-reconcile.ts +8 -17
  614. package/src/services/task-validation.ts +2 -2
  615. package/src/services/team-templates.ts +12 -11
  616. package/src/services/team.ts +31 -98
  617. package/src/services/terminal-provider-exit.ts +6 -5
  618. package/src/services/timer-message-fire-chaos-worker.ts +7 -3
  619. package/src/services/timer-message-fire-outbox.ts +1 -1
  620. package/src/services/transient-agent-reaper.ts +25 -20
  621. package/src/services/turn-reconcile-audit.ts +9 -9
  622. package/src/services/user-onboarding.ts +8 -6
  623. package/src/services/user-profile.ts +6 -9
  624. package/src/services/work-finality.ts +16 -4
  625. package/src/services/workflow-auto-start.ts +26 -13
  626. package/src/services/workflow-caller.ts +61 -4
  627. package/src/services/workflow-child-proof-worker.ts +1 -1
  628. package/src/services/workflow-ci-main.ts +1 -1
  629. package/src/services/workflow-control-proof-worker.ts +1 -1
  630. package/src/services/workflow-coordinator.ts +8 -2
  631. package/src/services/workflow-decisions.ts +5 -5
  632. package/src/services/workflow-deferred-cleanup.ts +5 -3
  633. package/src/services/workflow-effect-driver.ts +42 -17
  634. package/src/services/workflow-effects.ts +58 -37
  635. package/src/services/workflow-land-notice.ts +10 -0
  636. package/src/services/workflow-pause-text.ts +43 -0
  637. package/src/services/workflow-pins.ts +7 -4
  638. package/src/services/workflow-reconcile.ts +14 -11
  639. package/src/services/workflow-resume-pins.ts +3 -3
  640. package/src/services/workflow-routing-defaults.ts +18 -0
  641. package/src/services/workflow-run-view.ts +6 -3
  642. package/src/services/workflow-run.test-fixture.ts +1 -1
  643. package/src/services/workflow-runs.ts +61 -33
  644. package/src/services/workflow-supervisor-state.ts +26 -1
  645. package/src/services/workflow-supervisor.ts +11 -6
  646. package/src/services/workspace-recovery.ts +4 -3
  647. package/src/settings/registry.ts +1 -2
  648. package/src/spawn-admission.ts +10 -2
  649. package/src/spawn-command.ts +4 -4
  650. package/src/spawn-models.ts +10 -12
  651. package/src/spawn-placement.ts +28 -10
  652. package/src/spawn-targets.ts +9 -9
  653. package/src/sse-agent-status.ts +15 -6
  654. package/src/sse.ts +49 -24
  655. package/src/startup-context-injection.ts +62 -57
  656. package/src/state-adoption/cd-cutover.ts +53 -7
  657. package/src/state-adoption/fleet-cutover.ts +35 -0
  658. package/src/state-adoption/fleet-plan.ts +36 -0
  659. package/src/state-adoption/index.ts +2 -2
  660. package/src/state-adoption/linux-plan.ts +2 -2
  661. package/src/state-adoption/linux.ts +2 -2
  662. package/src/state-adoption/macos-plan.ts +2 -2
  663. package/src/state-adoption/macos.ts +1 -1
  664. package/src/steward-handoff.ts +4 -3
  665. package/src/steward-policy-cleanup.ts +9 -8
  666. package/src/steward.ts +9 -8
  667. package/src/task-dispatch-live.ts +6 -3
  668. package/src/task-dispatcher.ts +3 -3
  669. package/src/teams-config-store.ts +4 -3
  670. package/src/token-db-write.ts +10 -0
  671. package/src/token-db.ts +2 -2
  672. package/src/token-usage-async.ts +2 -4
  673. package/src/user-awaiting-reply.ts +5 -5
  674. package/src/workspace-actions.ts +24 -29
  675. package/src/workspace-auto-merge.ts +14 -12
  676. package/src/workspace-changed-paths-client.ts +16 -5
  677. package/src/workspace-cleanup-stale.ts +30 -7
  678. package/src/workspace-command-settle.ts +26 -17
  679. package/src/workspace-config.ts +1 -1
  680. package/src/workspace-conflict-resolver.ts +9 -7
  681. package/src/workspace-dead-owner-recovery.ts +5 -4
  682. package/src/workspace-escalation.ts +12 -11
  683. package/src/workspace-human-escalation.ts +3 -3
  684. package/src/workspace-land-gate-watchdog.ts +3 -3
  685. package/src/workspace-land-refusal.ts +20 -0
  686. package/src/workspace-land-stopped.ts +1 -0
  687. package/src/workspace-merge.ts +10 -26
  688. package/src/workspace-nothing-to-land-notice.ts +2 -2
  689. package/src/workspace-orphans.ts +18 -37
  690. package/src/workspace-pr-completion.ts +10 -8
  691. package/src/workspace-rekey.ts +3 -3
  692. package/src/workspace-steward-failure.ts +2 -2
  693. package/src/workspace-steward-wake.ts +4 -4
  694. package/node_modules/@humwick/kernel/LICENSE +0 -167
  695. package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
  696. package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
  697. package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
  698. package/node_modules/@humwick/kernel/config.ts +0 -111
  699. package/node_modules/@humwick/kernel/contract.ts +0 -572
  700. package/node_modules/@humwick/kernel/control-authz.ts +0 -281
  701. package/node_modules/@humwick/kernel/control.ts +0 -645
  702. package/node_modules/@humwick/kernel/effects.ts +0 -493
  703. package/node_modules/@humwick/kernel/event-log.ts +0 -319
  704. package/node_modules/@humwick/kernel/http-transport.ts +0 -384
  705. package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
  706. package/node_modules/@humwick/kernel/identity.ts +0 -248
  707. package/node_modules/@humwick/kernel/index.ts +0 -28
  708. package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
  709. package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
  710. package/node_modules/@humwick/kernel/landing.ts +0 -953
  711. package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
  712. package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
  713. package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
  714. package/node_modules/@humwick/kernel/message-authority.ts +0 -281
  715. package/node_modules/@humwick/kernel/module-host.ts +0 -722
  716. package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
  717. package/node_modules/@humwick/kernel/package.json +0 -39
  718. package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
  719. package/node_modules/@humwick/kernel/persistence.ts +0 -510
  720. package/node_modules/@humwick/kernel/registry.ts +0 -60
  721. package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
  722. package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
  723. package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
  724. package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
  725. package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
  726. package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
  727. package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
  728. package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
  729. package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
  730. package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
  731. package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
  732. package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
  733. package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
  734. package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
  735. package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
  736. package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
  737. package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
  738. package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
  739. package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
  740. package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
  741. package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
  742. package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
  743. package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
  744. package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
  745. package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
  746. package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
  747. package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
  748. package/node_modules/@humwick/offload/LICENSE +0 -167
  749. package/node_modules/@humwick/offload/README.md +0 -57
  750. package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
  751. package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
  752. package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
  753. package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
  754. package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
  755. package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
  756. package/node_modules/@humwick/offload/dist/envelope.js +0 -80
  757. package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
  758. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
  759. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
  760. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
  761. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
  762. package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
  763. package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
  764. package/node_modules/@humwick/offload/dist/index.js +0 -5
  765. package/node_modules/@humwick/offload/dist/index.js.map +0 -1
  766. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
  767. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
  768. package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
  769. package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
  770. package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
  771. package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
  772. package/node_modules/@humwick/offload/dist/types.js +0 -176
  773. package/node_modules/@humwick/offload/dist/types.js.map +0 -1
  774. package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
  775. package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
  776. package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
  777. package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
  778. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
  779. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
  780. package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
  781. package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
  782. package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
  783. package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
  784. package/node_modules/@humwick/offload/dist/worker.js +0 -1
  785. package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
  786. package/node_modules/@humwick/offload/package.json +0 -42
  787. package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
  788. package/node_modules/@humwick/offload/src/envelope.ts +0 -92
  789. package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
  790. package/node_modules/@humwick/offload/src/index.ts +0 -4
  791. package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
  792. package/node_modules/@humwick/offload/src/types.ts +0 -235
  793. package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
  794. package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
  795. package/node_modules/@humwick/offload/src/worker.ts +0 -5
  796. package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
  797. package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
  798. package/public/assets/index-B7ZerHLY.css +0 -2
  799. package/public/assets/index-BU3uWo2t.js +0 -15
  800. package/public/assets/projects-B_lmcqfO.js +0 -2
  801. package/public/assets/provider-display-DbLWpP3j.js +0 -2
  802. package/public/assets/run-card-CO_bguQf.js +0 -2
  803. package/public/assets/shipping-Bu8p1gEw.js +0 -2
  804. package/public/assets/store-BvtFdlGX.js +0 -9
  805. package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
  806. package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
  807. package/runner/src/agent-runner/http-liveness.ts +0 -85
  808. package/runner/src/gate-run-lease-probe.ts +0 -38
  809. package/src/db/claude-catalog-reconcile.ts +0 -27
  810. package/src/db/on-loop-write-transaction.ts +0 -34
  811. package/src/routing-model-aliases.ts +0 -21
@@ -1,18 +1,7 @@
1
- import {
2
- clearTeamZeroMembersSince,
3
- countLiveTeamMembers,
4
- createActivityEventAsync,
5
- agentsWithPendingOwnRelayRun,
6
- getAgent,
7
- getCrashReport,
8
- hasTerminalEvent,
9
- getTeamBusyState,
10
- getTeamRoster,
11
- listActiveTeams,
12
- setTeamZeroMembersSince,
13
- TEAM_AUTO_REAP_SUMMARY_PREFIX,
14
- } from "../db";
15
- import { clearTeamIdleEntry, coordinatorsWithPendingTimers, getTeamIdleEntries, setTeamIdleEntry } from "../db/team-idle";
1
+ import { setTeamIdleEntryAsync, clearTeamIdleEntryAsync } from "../db/runtime-tail-async";
2
+ import { setTeamZeroMembersSinceAsync, clearTeamZeroMembersSinceAsync } from "../db/teams-async";
3
+ import { countLiveTeamMembers, createActivityEventAsync, agentsWithPendingOwnRelayRun, getAgent, getCrashReport, hasTerminalEvent, getTeamBusyState, getTeamRoster, listActiveTeams, TEAM_AUTO_REAP_SUMMARY_PREFIX } from "../db";
4
+ import { coordinatorsWithPendingTimers, getTeamIdleEntries } from "../db/team-idle";
16
5
  import { openWorkflowRunHolders } from "../db/workflow-task-read-ops";
17
6
  import { STALE_TTL_MS, stewardFallbackTarget } from "../config";
18
7
  import { agentProviderState } from "../provider-state";
@@ -48,13 +37,13 @@ function memberIsAlive(member: AgentCard, freshCutoff: number): boolean {
48
37
  * after its land, a graceful shutdown). This watchdog must surface ONLY a genuine silent death:
49
38
  * an agent that went quiet with NO terminal event of any kind.
50
39
  */
51
- function detectSilentMembers(
40
+ async function detectSilentMembers(
52
41
  teamId: string,
53
42
  coordinatorId: string | undefined,
54
43
  now: number,
55
44
  thresholdMs: number,
56
45
  out: { pingedMembers: string[]; watchedMembers: number },
57
- ): void {
46
+ ): Promise<void> {
58
47
  const freshCutoff = now - thresholdMs;
59
48
  const watch = teamMemberWatchTracker.get(teamId) ?? new Map<string, TeamMemberWatch>();
60
49
  teamMemberWatchTracker.set(teamId, watch);
@@ -85,7 +74,7 @@ function detectSilentMembers(
85
74
  if (getCrashReport(memberId) || hasTerminalEvent(memberId, entry.epoch)) continue;
86
75
  if (!coordinatorId) continue;
87
76
  const minutes = Math.floor(gapMs / 60_000);
88
- notifyTarget(
77
+ await notifyTarget(
89
78
  "team.member_silent",
90
79
  { teamId, agentId: memberId },
91
80
  coordinatorId,
@@ -179,7 +168,7 @@ async function detectGoneCoordinator(
179
168
  watch.escalated = true; // the committed no-target audit is the complete no-silent-dissolve action
180
169
  return;
181
170
  }
182
- const sent = notifyTarget(
171
+ const sent = await notifyTarget(
183
172
  "team.coordinator_gone",
184
173
  { teamId, agentId: coordinatorId, parent: resolveCoordinatorAgentId(coordinatorId) ?? undefined },
185
174
  escalationTarget,
@@ -222,10 +211,10 @@ function teamIdlePayload(teamId: string, coordinatorId: string, thresholdMinutes
222
211
  };
223
212
  }
224
213
 
225
- function notifyTeamIdle(teamId: string, coordinatorId: string, thresholdMinutes: number, idleForMs: number, firstNoBusyAt: number): string | null {
214
+ async function notifyTeamIdle(teamId: string, coordinatorId: string, thresholdMinutes: number, idleForMs: number, firstNoBusyAt: number): Promise<string | null> {
226
215
  const roundedIdleMinutes = Math.max(thresholdMinutes, Math.floor(idleForMs / 60_000));
227
216
  const payload = teamIdlePayload(teamId, coordinatorId, thresholdMinutes, idleForMs, firstNoBusyAt);
228
- return notifyTarget(
217
+ return await notifyTarget(
229
218
  "team.idle",
230
219
  { teamId, agentId: coordinatorId },
231
220
  coordinatorId,
@@ -270,7 +259,7 @@ export async function runTeamIdleWatchdog(input: { now?: number; signal?: AbortS
270
259
  seen.add(team.id);
271
260
  // #634 — runs every cycle, independent of the team-level idle gate below: a single silent
272
261
  // member must surface even while OTHER members keep the team "busy".
273
- detectSilentMembers(team.id, team.coordinatorId, now, thresholdMs, memberSilence);
262
+ await detectSilentMembers(team.id, team.coordinatorId, now, thresholdMs, memberSilence);
274
263
  // #412/#468 — coordinator-gone escalation, also every cycle and independent of the idle gate: a
275
264
  // dead coordinator must surface even if the team isn't (yet) idle, and the idle-ping path can't
276
265
  // reach it (it would just ping the void).
@@ -299,7 +288,7 @@ export async function runTeamIdleWatchdog(input: { now?: number; signal?: AbortS
299
288
  ? busy.busyMemberIds.filter((id) => id !== team.coordinatorId)
300
289
  : busy.busyMemberIds;
301
290
  if (busyMemberIds.length > 0) {
302
- if (existingEntry) clearTeamIdleEntry(team.id);
291
+ if (existingEntry) (await clearTeamIdleEntryAsync(team.id));
303
292
  teamIdleTracker.delete(team.id);
304
293
  busyTeamIds.push(team.id);
305
294
  continue;
@@ -311,7 +300,7 @@ export async function runTeamIdleWatchdog(input: { now?: number; signal?: AbortS
311
300
  }
312
301
 
313
302
  const entry = existingEntry ?? { firstNoBusyAt: now, pinged: false };
314
- if (!existingEntry) setTeamIdleEntry(team.id, entry);
303
+ if (!existingEntry) (await setTeamIdleEntryAsync(team.id, entry));
315
304
  teamIdleTracker.set(team.id, entry);
316
305
  const idleForMs = now - entry.firstNoBusyAt;
317
306
  if (idleForMs < thresholdMs) {
@@ -328,10 +317,10 @@ export async function runTeamIdleWatchdog(input: { now?: number; signal?: AbortS
328
317
  continue;
329
318
  }
330
319
 
331
- const sent = notifyTeamIdle(team.id, team.coordinatorId, config.thresholdMinutes, idleForMs, entry.firstNoBusyAt);
320
+ const sent = await notifyTeamIdle(team.id, team.coordinatorId, config.thresholdMinutes, idleForMs, entry.firstNoBusyAt);
332
321
  if (!sent) continue;
333
322
  entry.pinged = true;
334
- setTeamIdleEntry(team.id, entry);
323
+ (await setTeamIdleEntryAsync(team.id, entry));
335
324
  pingedTeamIds.push(team.id);
336
325
  }
337
326
 
@@ -341,7 +330,7 @@ export async function runTeamIdleWatchdog(input: { now?: number; signal?: AbortS
341
330
  // coordinator that was already told. Skip the sweep instead; the next full pass reclaims them.
342
331
  if (!signal?.aborted) {
343
332
  for (const key of teamIdleTracker.keys()) if (!seen.has(key)) {
344
- clearTeamIdleEntry(key);
333
+ (await clearTeamIdleEntryAsync(key));
345
334
  teamIdleTracker.delete(key);
346
335
  }
347
336
  for (const key of teamMemberWatchTracker.keys()) if (!seen.has(key)) teamMemberWatchTracker.delete(key);
@@ -385,7 +374,7 @@ export async function reapZeroMemberTeams(context: { signal?: AbortSignal } = {}
385
374
  const live = countLiveTeamMembers(team.id, cutoff);
386
375
  if (live > 0) {
387
376
  if (team.zeroMembersSince !== undefined) {
388
- clearTeamZeroMembersSince(team.id);
377
+ (await clearTeamZeroMembersSinceAsync(team.id));
389
378
  clearedTeamIds.push(team.id);
390
379
  }
391
380
  continue;
@@ -393,7 +382,7 @@ export async function reapZeroMemberTeams(context: { signal?: AbortSignal } = {}
393
382
 
394
383
  zeroMemberTeams++;
395
384
  if (team.zeroMembersSince === undefined) {
396
- setTeamZeroMembersSince(team.id, now);
385
+ (await setTeamZeroMembersSinceAsync(team.id, now));
397
386
  trackedTeamIds.push(team.id);
398
387
  continue;
399
388
  }
@@ -401,7 +390,7 @@ export async function reapZeroMemberTeams(context: { signal?: AbortSignal } = {}
401
390
 
402
391
  const outcomeSummary = `${TEAM_AUTO_REAP_SUMMARY_PREFIX} zero live members for ${grace}ms`;
403
392
  // Leave outcomeStatus null (unknown): an abandoned team is NOT a failed one.
404
- const dissolved = dissolveTeamById(team.id, { outcomeSummary });
393
+ const dissolved = await dissolveTeamById(team.id, { outcomeSummary });
405
394
  await createActivityEventAsync({
406
395
  clientId: `team-reap-${team.id}-${now}`,
407
396
  kind: "state",
@@ -1,19 +1,9 @@
1
+ import { releaseExpiredMergeLeasesAsync, reelectRepoStewardAsync } from "../db/runtime-tail-async";
2
+ import { deleteWorkspaceAsync } from "../db/lifecycle-tail-async";
3
+ import { createCommandAsync } from "../commands-write";
1
4
  import { releaseExpiredStewardHandbacks } from "./steward-handback";
2
- import { createCommand } from "../commands-db";
3
- import {
4
- agentsWithRunningCommandTimers,
5
- createActivityEventAsync,
6
- deleteWorkspace,
7
- getAgent,
8
- getRepoSteward,
9
- getWorkspace,
10
- listOrchestrators,
11
- listWorkspaces,
12
- patchWorkspaceMetadata,
13
- reelectRepoSteward,
14
- releaseExpiredMergeLeases,
15
- updateWorkspaceStatusAsync,
16
- setWorkspaceBranchAsync, patchWorkspaceMetadataAsync} from "../db";
5
+
6
+ import { agentsWithRunningCommandTimers, createActivityEventAsync, getAgent, getRepoSteward, getWorkspace, listOrchestrators, listWorkspaces, patchWorkspaceMetadata, updateWorkspaceStatusAsync, setWorkspaceBranchAsync, patchWorkspaceMetadataAsync } from "../db";
17
7
  import type { WorkspaceMergePreview, WorkspaceRecord, WorkspaceStatus } from "../types";
18
8
  import { reconcileLandedWorkspace } from "../branch-landed";
19
9
  import { workspaceStewardEligible } from "../steward-queue";
@@ -187,7 +177,7 @@ export async function scanWorkspaceConflicts(context: { signal?: AbortSignal } =
187
177
  // a landing steward would spawn, find nothing to resolve, and re-strand the row. Route it to
188
178
  // the branch agent's COORDINATOR (owner/fallback) via the custody path instead — they own the
189
179
  // decision to rebase or abandon. (The event-driven auto-merge hook escalates the same way.)
190
- const targets = routeWorkspaceCustodyEscalation({
180
+ const targets = await routeWorkspaceCustodyEscalation({
191
181
  workspace: ws,
192
182
  subject: "Workspace land keeps reverting (moved base)",
193
183
  body: `Workspace \`${ws.branch ?? ws.id}\` in ${ws.repoRoot} keeps getting its tip reverted as ${p.baseRef ?? "base"} moves under it (#1242); it can't auto-land. Please coordinate a rebase or clean-up.`,
@@ -360,7 +350,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
360
350
  const now = Date.now();
361
351
  const cutoff = now - WORKSPACE_RETENTION_MS;
362
352
  const reviewCutoff = now - WORKSPACE_REVIEW_TTL_MS;
363
- const releasedLeaseRepos = releaseExpiredMergeLeases(now);
353
+ const releasedLeaseRepos = (await releaseExpiredMergeLeasesAsync(now));
364
354
 
365
355
  const all = listWorkspaces();
366
356
  // #1726 — reclaim expired-terminal rows in a BOUNDED batch. GC can be paused for long stretches
@@ -376,7 +366,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
376
366
  const terminalIds: string[] = [];
377
367
  for (const ws of terminalBatch) {
378
368
  if (signal?.aborted) break;
379
- deleteWorkspace(ws.id);
369
+ (await deleteWorkspaceAsync(ws.id));
380
370
  terminalIds.push(ws.id);
381
371
  }
382
372
  // Rows the abort left undeleted are still expired and terminal, so they stay in the backlog the
@@ -394,7 +384,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
394
384
  for (const ws of all) {
395
385
  if (signal?.aborted) break;
396
386
  if (!STRANDABLE_STATUSES.has(ws.status) || ws.mode !== "isolated" || !ws.worktreePath) continue;
397
- reelectRepoSteward(ws.repoRoot);
387
+ (await reelectRepoStewardAsync(ws.repoRoot));
398
388
  const fresh = getWorkspace(ws.id);
399
389
  if (!fresh || !STRANDABLE_STATUSES.has(fresh.status)) continue;
400
390
  const ownerAlive = isOwnerAlive(fresh.ownerAgentId);
@@ -487,7 +477,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
487
477
  const proof = landedElsewhere === "confirmed" ? "ancestor" : landedElsewhere;
488
478
  await reconcileLandedWorkspace(fresh, zeroCommitCloseOut
489
479
  ? { strategy: preview && !("available" in preview) ? preview.strategy : "rebase-ff", baseRef, ahead: 0, unmergedAhead: 0, dirtyCount: 0 }
490
- : { strategy: preview && !("available" in preview) ? preview.strategy : "rebase-ff", baseRef, headSha: currentTip, landed: true, landedSha: currentTip });
480
+ : { strategy: preview && !("available" in preview) ? preview.strategy : "rebase-ff", baseRef, headSha: currentTip, landed: true, landedSha: currentTip }, landedElsewhere === "confirmed" ? currentTip : undefined);
491
481
  await patchWorkspaceMetadataAsync(fresh.id, {
492
482
  landedElsewhere: true,
493
483
  landedElsewhereAt: now,
@@ -518,7 +508,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
518
508
  // resolve. (A stranded row that is genuinely in `conflict` status is already handed to a steward
519
509
  // by the conflict-scan path; the GC backstop's job here is custody, not conflict resolution.)
520
510
  const strandedHours = Math.round((now - strandedAt) / (60 * 60 * 1000));
521
- const targets = routeWorkspaceCustodyEscalation({
511
+ const targets = await routeWorkspaceCustodyEscalation({
522
512
  workspace: fresh,
523
513
  subject: "Stranded workspace needs an owner",
524
514
  body: `Workspace \`${fresh.branch ?? fresh.id}\` in ${fresh.repoRoot} is ${fresh.status} and has been stranded for ${strandedHours}h. Please coordinate ${fresh.status === "conflict" ? "conflict resolution" : "review/merge"} or clean up the worktree.`,
@@ -530,13 +520,13 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
530
520
  // fallback configured). Marking this "escalated" would silently swallow the strand and
531
521
  // repeat every sweep forever. Instead leave it UNescalated (don't stamp escalatedAt, so
532
522
  // the next sweep retries once recipients exist) and raise a louder operator-visible alarm.
533
- raiseOperatorAlarm({
523
+ (await raiseOperatorAlarm({
534
524
  clientId: `workspace-gc-unescalatable-${fresh.id}:${strandedAt}:${Math.floor(now / escalationMs)}`,
535
525
  source: "workspace-gc",
536
526
  subject: "Stranded workspace has no one to escalate to",
537
527
  detail: `${fresh.branch ?? fresh.id} in ${fresh.repoRoot} has been ${fresh.status} for ${strandedHours}h but has no owner, coordinator, or fallback configured to escalate to. Configure AGENT_RELAY_WORKSPACE_STEWARD_FALLBACK or reclaim the worktree manually.`,
538
528
  metadata: { maintenanceJobId: "workspace-gc", workspaceId: fresh.id, repoRoot: fresh.repoRoot, branch: fresh.branch, status: fresh.status, strandedAt },
539
- });
529
+ }));
540
530
  continue;
541
531
  }
542
532
  escalationTargets.push(...targets);
@@ -589,7 +579,7 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
589
579
  // operator alarm when it resolves to nobody) instead of `stewardAgentId ?? fallback`.
590
580
  // Most strandable workspaces have no steward, so the old notice silently dropped while
591
581
  // the state change still happened.
592
- const targets = routeWorkspaceCustodyEscalationOrAlarm({
582
+ const targets = await routeWorkspaceCustodyEscalationOrAlarm({
593
583
  source: "workspace-gc",
594
584
  workspace: fresh,
595
585
  type: "workspace.auto_abandoned",
@@ -620,12 +610,12 @@ export async function workspaceGC(context: { signal?: AbortSignal } = {}): Promi
620
610
  if (signal?.aborted) break;
621
611
  const orch = orchestrators.find((candidate) => workspacePathWithinBase(repoRoot, candidate.baseDir));
622
612
  if (!orch?.agentId) continue;
623
- const command = createCommand({
613
+ const command = (await createCommandAsync({
624
614
  type: "workspace.prune",
625
615
  source: "system",
626
616
  target: orch.agentId,
627
617
  params: { repoRoot, requestedBy: "workspace-gc", requestedAt: now },
628
- });
618
+ }));
629
619
  emitCommand(command);
630
620
  pruneCommands.push(command.id);
631
621
  }
@@ -696,7 +686,7 @@ export async function refreshIdleWorkspaces(context: { signal?: AbortSignal } =
696
686
  if (gitAhead !== undefined && gitAhead > 0) { skipped.push(`${ws.id}:ahead`); continue; }
697
687
  if (gitDirtyCount !== undefined && gitDirtyCount > 0) { skipped.push(`${ws.id}:dirty`); continue; }
698
688
 
699
- const command = createCommand({
689
+ const command = (await createCommandAsync({
700
690
  type: "workspace.idle-refresh",
701
691
  source: "system",
702
692
  target: orch.agentId,
@@ -711,7 +701,7 @@ export async function refreshIdleWorkspaces(context: { signal?: AbortSignal } =
711
701
  requestedBy: "workspace-idle-refresh",
712
702
  requestedAt: now,
713
703
  },
714
- });
704
+ }));
715
705
  emitCommand(command);
716
706
  dispatched.push(ws.id);
717
707
  }
@@ -28,11 +28,11 @@ function managedPolicyEscalationRecipients(policy: SpawnPolicy, state: ManagedAg
28
28
  // agent — often the repo steward that lands branches — is down. Route those to the same
29
29
  // recipients as the offline branch, and when there is no reachable recipient raise an
30
30
  // operator-visible alarm instead of silently dropping the signal.
31
- export function escalateManagedSpawnFailure(
31
+ export async function escalateManagedSpawnFailure(
32
32
  policy: SpawnPolicy,
33
33
  state: ManagedAgentState,
34
34
  opts: { phase: "failed" | "register-timeout" | "spawn-backoff"; error: string },
35
- ): void {
35
+ ): Promise<void> {
36
36
  const recipients = managedPolicyEscalationRecipients(policy, state);
37
37
  const queuedMessages = queuedPolicyMessageCount(policy.name);
38
38
  const subject = opts.phase === "failed"
@@ -55,17 +55,17 @@ export function escalateManagedSpawnFailure(
55
55
  error: opts.error,
56
56
  };
57
57
  if (!recipients.length) {
58
- raiseOperatorAlarm({
58
+ (await raiseOperatorAlarm({
59
59
  clientId: `managed-policy-alarm-${opts.phase}-${policy.name}-${policy.orchestratorId}`,
60
60
  source: "lifecycle-manager",
61
61
  subject,
62
62
  detail: `${body}\nNo owner, coordinator, or fallback is reachable to page.`,
63
63
  view: "managed-agents",
64
64
  metadata: payload,
65
- });
65
+ }));
66
66
  return;
67
67
  }
68
- routeNotification({
68
+ await routeNotification({
69
69
  type: "agent.spawn_failed",
70
70
  scope: { target: `policy:${policy.name}` },
71
71
  recipients,
@@ -85,14 +85,14 @@ export function escalateManagedSpawnFailure(
85
85
  });
86
86
  }
87
87
 
88
- export function escalateOfflineOrchestrator(policy: SpawnPolicy, state: ManagedAgentState, orch: Orchestrator | null | undefined): void {
88
+ export async function escalateOfflineOrchestrator(policy: SpawnPolicy, state: ManagedAgentState, orch: Orchestrator | null | undefined): Promise<void> {
89
89
  if (state.consecutiveFailures < ORCHESTRATOR_OFFLINE_ESCALATION_FAILURES) return;
90
90
  const recipients = managedPolicyEscalationRecipients(policy, state);
91
91
  if (!recipients.length) return;
92
92
  const host = orch?.hostname ? `${orch.hostname} (${policy.orchestratorId})` : policy.orchestratorId;
93
93
  const queuedMessages = queuedPolicyMessageCount(policy.name);
94
94
  const nextRetry = state.backoffUntil ? new Date(state.backoffUntil).toISOString() : "not scheduled";
95
- routeNotification({
95
+ await routeNotification({
96
96
  type: "agent.spawn_failed",
97
97
  scope: { target: `policy:${policy.name}` },
98
98
  recipients,
@@ -1,3 +1,4 @@
1
+ import { runnerRuntimeTokenEnvAsync, type RunnerLaunchAuthority, type RunnerRuntimeTokenInput } from "./runtime-tokens";
1
2
  import { getManifest } from "@humwick/providers";
2
3
  import { getAgentProfile, resolveAgentProfileKey } from "./config-store";
3
4
  import { effectiveProviderCatalogListAsync, ValidationError, withResolvedProvisioning, withResolvedProvisioningAsync } from "./db";
@@ -7,14 +8,12 @@ import { getAgent } from "./db/agents";
7
8
  import { getOrchestratorAsync } from "./db/orchestrators-async";
8
9
  import { composeProfileSpawnInstructions, composeProfileSpawnInstructionsAsync } from "./project-instructions";
9
10
  import { getSelfEffortCeiling } from "./db/self-effort-permissions";
10
- import { runnerRuntimeTokenEnv, type RunnerLaunchAuthority } from "./runtime-tokens";
11
- import { gatewayBackend } from "./db/gateway";
12
11
  import { recordedLaunchMode, resolveHostLaunchMode } from "./launch-mode";
13
12
  import { buildSpawnCommand, generateSpawnAgentId, resolveSpawnModelParams, resolveSpawnModelParamsAsync } from "./spawn-command";
14
13
  import { applyDefaultSharedMcp } from "./shared-mcp";
15
14
  import { AGENT_SYSTEM_TAGS, systemTagsForSpawn } from "./agent-system-tags";
16
15
  import { buildWhoamiDefaultForAgent } from "./mcp/identity-projection";
17
- import { isStewardPolicy, isGenuineStewardPolicy, stewardWorktreeCwdPrefixes } from "./steward-spawn-guard";
16
+ import { isGenuineStewardPolicy, stewardWorktreeCwdPrefixes } from "./steward-spawn-guard";
18
17
  // #2033 — from isolated-workspace-placement.ts, NOT ./services/spawn-identity: that module also
19
18
  // exports buildProspectiveSpawnIdentity, which imports mcp/identity.ts → self-resume.ts →
20
19
  // restart-spawn.ts → managed-policy.ts, and importing it here would close that into a cycle.
@@ -66,7 +65,7 @@ function systemTagsForManagedPolicy(policy: SpawnPolicy): string[] {
66
65
  return tags;
67
66
  }
68
67
 
69
- export function buildManagedSpawnParams(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext): Record<string, unknown> {
68
+ export async function buildManagedSpawnParams(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext): Promise<Record<string, unknown>> {
70
69
  if (policy.profile) policy = { ...policy, profile: resolveAgentProfileKey(policy.profile) ?? policy.profile };
71
70
  assertManagedProviderEnabled(managedPolicyProviderDisabledMessage(policy));
72
71
  const agentId = ctx.identityAgentId ?? generateSpawnAgentId();
@@ -97,7 +96,8 @@ export function buildManagedSpawnParams(policy: SpawnPolicy, requestId: string,
97
96
  const composed = composeProfileSpawnInstructions(managedInstructionInput(policy, agentProfile, agentRelayIdentity, orchestratorHost, alwaysOnAppend));
98
97
 
99
98
  return buildManagedCommand({ policy, requestId, ctx, agentId, prompt, agentProfile, orchestrator, extraCwdPrefixes, composed,
100
- modelParams: resolveSpawnModelParams(policy.provider, policy.model, policy.effort, { skipDefaultWhenEmpty: !isStewardPolicy(policy) }),
99
+ modelParams: resolveSpawnModelParams(policy.provider, policy.model, policy.effort),
100
+ env: (await runnerRuntimeTokenEnvAsync(managedTokenInput(policy, requestId, ctx, agentId, extraCwdPrefixes))),
101
101
  });
102
102
  }
103
103
 
@@ -147,6 +147,7 @@ function buildManagedCommand(input: {
147
147
  extraCwdPrefixes: string[];
148
148
  composed: ReturnType<typeof composeProfileSpawnInstructions>;
149
149
  modelParams: ReturnType<typeof resolveSpawnModelParams>;
150
+ env: Record<string, string>;
150
151
  }): Record<string, unknown> {
151
152
  const { policy, requestId, ctx, agentId, prompt, agentProfile, orchestrator, extraCwdPrefixes, composed, modelParams } = input;
152
153
  return buildSpawnCommand({
@@ -177,26 +178,31 @@ function buildManagedCommand(input: {
177
178
  headless: true,
178
179
  policyName: policy.name,
179
180
  spawnRequestId: requestId,
180
- env: runnerRuntimeTokenEnv({
181
- agentId,
182
- orchestratorId: policy.orchestratorId,
183
- cwd: policy.cwd,
184
- provider: policy.provider,
185
- label: policy.label,
186
- policyName: policy.name,
187
- spawnRequestId: requestId,
188
- createdBy: ctx.createdBy,
189
- authority: ctx.authority,
190
- profile: policy.profile || undefined,
191
- // #2245 — the same posture this launch is given above; stamped into the signed constraints.
192
- approvalMode: policy.permissionMode,
193
- ...(extraCwdPrefixes.length ? { extraCwdPrefixes } : {}),
194
- }),
181
+ env: input.env,
195
182
  requestedBy: ctx.createdBy,
196
183
  requestedAt: ctx.requestedAt ?? Date.now(),
197
184
  });
198
185
  }
199
186
 
187
+ /** The runner token a managed launch carries; the sync builder and the writer-op builder mint the same input. */
188
+ function managedTokenInput(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext, agentId: string, extraCwdPrefixes: string[]): RunnerRuntimeTokenInput {
189
+ return {
190
+ agentId,
191
+ orchestratorId: policy.orchestratorId,
192
+ cwd: policy.cwd,
193
+ provider: policy.provider,
194
+ label: policy.label,
195
+ policyName: policy.name,
196
+ spawnRequestId: requestId,
197
+ createdBy: ctx.createdBy,
198
+ authority: ctx.authority,
199
+ profile: policy.profile || undefined,
200
+ // #2245 — the same posture this launch is given above; stamped into the signed constraints.
201
+ approvalMode: policy.permissionMode,
202
+ ...(extraCwdPrefixes.length ? { extraCwdPrefixes } : {}),
203
+ };
204
+ }
205
+
200
206
  // #2656 — backstop for every managed launch path (policy start/restart routes, agent restart): no
201
207
  // new process starts on a disabled provider. The lifecycle manager parks the policy before this.
202
208
  function assertManagedProviderEnabled(message: string | undefined): void {
@@ -205,15 +211,12 @@ function assertManagedProviderEnabled(message: string | undefined): void {
205
211
 
206
212
  /** Worker-safe counterpart used by every runtime managed launch path. The synchronous builder
207
213
  * remains for in-process unit fixtures; production must never borrow its main-thread connection. */
208
- export function buildManagedSpawnParamsAsync(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext): Record<string, unknown> | Promise<Record<string, unknown>> {
214
+ export async function buildManagedSpawnParamsAsync(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext): Promise<Record<string, unknown>> {
209
215
  if (effectiveManagedPolicyWorkspaceMode(policy) === "isolated" && ctx.gitRepoRoot === undefined) {
210
- return getOrchestratorAsync(policy.orchestratorId).then(async (host) => buildManagedSpawnParamsAsync(policy, requestId, {
211
- ...ctx, gitRepoRoot: host ? await resolveSpawnRepoRoot(host, policy.cwd) : null,
212
- }));
216
+ const host = await getOrchestratorAsync(policy.orchestratorId);
217
+ ctx = { ...ctx, gitRepoRoot: host ? await resolveSpawnRepoRoot(host, policy.cwd) : null };
213
218
  }
214
- // Preserve immediate in-process command construction for durable policy wake callers. The worker
215
- // backend never enters this synchronous branch, so it cannot reopen the closed-main DB path.
216
- return gatewayBackend() === "in-process" ? buildManagedSpawnParams(policy, requestId, ctx) : buildManagedSpawnParamsWorkerAsync(policy, requestId, ctx);
219
+ return buildManagedSpawnParamsWorkerAsync(policy, requestId, ctx);
217
220
  }
218
221
 
219
222
  async function buildManagedSpawnParamsWorkerAsync(policy: SpawnPolicy, requestId: string, ctx: ManagedSpawnContext): Promise<Record<string, unknown>> {
@@ -231,6 +234,7 @@ async function buildManagedSpawnParamsWorkerAsync(policy: SpawnPolicy, requestId
231
234
  const extraCwdPrefixes = managedCwdPrefixes(policy, requestId, ctx, orchestrator);
232
235
  const composed = await composeProfileSpawnInstructionsAsync(managedInstructionInput(policy, agentProfile, agentRelayIdentity, orchestratorHost, alwaysOnAppend));
233
236
  return buildManagedCommand({ policy, requestId, ctx, agentId, prompt, agentProfile, orchestrator, extraCwdPrefixes, composed,
234
- modelParams: await resolveSpawnModelParamsAsync(policy.provider, policy.model, policy.effort, { skipDefaultWhenEmpty: !isStewardPolicy(policy) }),
237
+ modelParams: await resolveSpawnModelParamsAsync(policy.provider, policy.model, policy.effort),
238
+ env: await runnerRuntimeTokenEnvAsync(managedTokenInput(policy, requestId, ctx, agentId, extraCwdPrefixes)),
235
239
  });
236
240
  }
@@ -1,9 +1,10 @@
1
+ import { upsertManagedAgentStateAsync, updateManagedAgentStateAsync } from "./db/lifecycle-tail-async";
1
2
  // #2656 — "off means nothing new starts on it": a managed policy whose provider is disabled (operator
2
3
  // switch or all models disabled) must not launch. The lifecycle manager parks the policy with a
3
4
  // visible reason instead of spawning — no backoff churn, no crash loop — and its normal reconcile
4
5
  // tick resumes the policy on its own once the provider is re-enabled.
5
6
  import { findProviderCatalog, providerDisabledMessage, type ProviderCatalogEntry } from "@humwick/sdk/provider-catalog";
6
- import { getManagedAgentState, updateManagedAgentState, upsertManagedAgentState } from "./config-store";
7
+ import { getManagedAgentState } from "./config-store";
7
8
  import { effectiveProviderCatalogList } from "./provider-catalog-store";
8
9
  import type { ManagedAgentState, SpawnPolicy } from "./types";
9
10
 
@@ -17,11 +18,11 @@ export function managedPolicyProviderDisabledMessage(policy: Pick<SpawnPolicy, "
17
18
  * Record the skipped launch on the policy's state (`stopped` + lastError) so the dashboard shows why.
18
19
  * Returns the new state only when it changed, so a caller emits once rather than every tick.
19
20
  */
20
- export function parkManagedPolicyForDisabledProvider(policy: SpawnPolicy, message: string): ManagedAgentState | undefined {
21
+ export async function parkManagedPolicyForDisabledProvider(policy: SpawnPolicy, message: string): Promise<ManagedAgentState | undefined> {
21
22
  const state = getManagedAgentState(policy.name);
22
23
  if (state?.status === "stopped" && state.lastError === message) return undefined;
23
24
  const next = state
24
- ? updateManagedAgentState(policy.name, { status: "stopped", spawnRequestId: undefined, lastError: message })
25
- : upsertManagedAgentState({ policyName: policy.name, status: "stopped", orchestratorId: policy.orchestratorId, provider: policy.provider, restartCount: 0, consecutiveFailures: 0, lastError: message });
25
+ ? (await updateManagedAgentStateAsync(policy.name, { status: "stopped", spawnRequestId: undefined, lastError: message }))
26
+ : (await upsertManagedAgentStateAsync({ policyName: policy.name, status: "stopped", orchestratorId: policy.orchestratorId, provider: policy.provider, restartCount: 0, consecutiveFailures: 0, lastError: message }));
26
27
  return next ?? undefined;
27
28
  }
@@ -1,4 +1,5 @@
1
- import { getManagedAgentState, getSpawnPolicy, upsertManagedAgentState } from "./config-store";
1
+ import { upsertManagedAgentStateAsync } from "./db/lifecycle-tail-async";
2
+ import { getManagedAgentState, getSpawnPolicy } from "./config-store";
2
3
  import type { ManagedAgentState, SpawnPolicy } from "./types";
3
4
 
4
5
  /** True only while an async preparation still owns the policy's starting reservation. */
@@ -15,9 +16,9 @@ export function managedSpawnReservationCurrent(policy: SpawnPolicy, policySnapsh
15
16
  }
16
17
 
17
18
  /** Return a preparation's own reservation to its pre-spawn state when the host drains. */
18
- export function restoreDrainedSpawnReservation(policy: SpawnPolicy, requestId: string, prior: ManagedAgentState | null): void {
19
+ export async function restoreDrainedSpawnReservation(policy: SpawnPolicy, requestId: string, prior: ManagedAgentState | null): Promise<void> {
19
20
  const current = getManagedAgentState(policy.name);
20
21
  if (current?.status !== "starting" || current.spawnRequestId !== requestId) return;
21
- upsertManagedAgentState(prior ?? { policyName: policy.name, status: "stopped", orchestratorId: policy.orchestratorId,
22
- provider: policy.provider, spawnRequestId: undefined, restartCount: 0, consecutiveFailures: 0 });
22
+ (await upsertManagedAgentStateAsync(prior ?? { policyName: policy.name, status: "stopped", orchestratorId: policy.orchestratorId,
23
+ provider: policy.provider, spawnRequestId: undefined, restartCount: 0, consecutiveFailures: 0 }));
23
24
  }
package/src/mcp/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { normalizeOutputArgs, outputToolDefinition, presentToolOutput } from "./output-levels";
2
2
  import { PROMPT_TOOLS, relayPrompt } from "./prompts";
3
+ import { PROJECT_PROFILE_INSTRUCTION_TOOLS, relayProjectProfileInstructions } from "./project-profile-instructions";
3
4
  import { PromptVersionConflictError } from "../prompt-version-errors";
4
5
  import { memoryRetirementMessage } from "../memory-retirement";
5
6
  import { GUIDE_TOOLS, relayGuide } from "./guides";
@@ -60,6 +61,7 @@ const MCP_PROTOCOL_VERSION = "2024-11-05";
60
61
  const MCP_BODY_OVERHEAD_BYTES = ARTIFACT_BODY_OVERHEAD_BYTES;
61
62
  const TOOLS: ToolDefinition[] = [
62
63
  ...PROMPT_TOOLS,
64
+ ...PROJECT_PROFILE_INSTRUCTION_TOOLS,
63
65
  ...WEB_TOOL_CALL_TOOLS,
64
66
  ...MESSAGING_TOOLS,
65
67
  ...ARTIFACT_TOOLS,
@@ -215,6 +217,7 @@ async function callTool(auth: VerifiedMcpAuthContext, params: unknown, signal?:
215
217
  else if (name === "relay_hosts") result = await relayHosts(auth, args);
216
218
  else if (name === "relay_host_gate_budget") result = await relayHostGateBudget(auth, args);
217
219
  else if (name === "relay_prompt") result = await relayPrompt(auth, args);
220
+ else if (name === "relay_project_profile_instructions") result = await relayProjectProfileInstructions(auth, args);
218
221
  else if (name === "relay_service_access") result = await relayServiceAccess(auth, args);
219
222
  else if (name.startsWith("relay_secret_")) result = await relaySecretTool(auth, name, args);
220
223
  else if (name === "relay_my_agents") result = await relayMyAgents(auth, args);
@@ -223,7 +226,7 @@ async function callTool(auth: VerifiedMcpAuthContext, params: unknown, signal?:
223
226
  else if (name === "relay_agent_keep") result = await relayAgentKeep(auth, args);
224
227
  else if (name === "relay_codex_reset_consume") result = await relayCodexResetConsume(args);
225
228
  else if (name === "relay_claude_api_budget") result = await relayClaudeApiBudget(args);
226
- else if (name === "relay_profile_trust") result = relayProfileTrust(auth, args);
229
+ else if (name === "relay_profile_trust") result = await relayProfileTrust(auth, args);
227
230
  else if (name.startsWith("relay_routing_policy_")) result = await relayRoutingPolicyTool(auth, name, args);
228
231
  else if (name === "relay_agent_action") result = await relayAgentAction(auth, args);
229
232
  else if (name === "relay_set_effort") result = await relaySetEffort(auth, args);
@@ -236,7 +239,7 @@ async function callTool(auth: VerifiedMcpAuthContext, params: unknown, signal?:
236
239
  else if (name === "relay_workspace_merge_resume") result = await relayWorkspaceMutation(auth, "resume-merge", args);
237
240
  else if (name === "relay_red_main_recover") result = await relayRedMainRecover(auth, args);
238
241
  else if (name === "relay_workspace_release") result = await relayWorkspaceMutation(auth, "release-claim", args);
239
- else if (name.startsWith("relay_merge_")) result = relayMergeTool(auth, name, args); else if (name.startsWith("relay_maintenance_")) result = await relayMaintenanceTool(auth, name, args); else if (name.startsWith("relay_team_")) result = await relayTeamTool(auth, name, args); else if (name === "relay_decision") result = relayDecisionTool(auth, args);
242
+ else if (name.startsWith("relay_merge_")) result = (await relayMergeTool(auth, name, args)); else if (name.startsWith("relay_maintenance_")) result = await relayMaintenanceTool(auth, name, args); else if (name.startsWith("relay_team_")) result = await relayTeamTool(auth, name, args); else if (name === "relay_decision") result = (await relayDecisionTool(auth, args));
240
243
  else if (name.startsWith("relay_plan_")) result = await relayPlanTool(auth, name, args);
241
244
  else if (name === "relay_task_deliver") result = await relayTaskDeliverTool(auth, name, args);
242
245
  else if (TASK_VALIDATION_TOOLS.some((tool) => tool.name === name)) result = await relayTaskValidationTool(auth, name, args);
@@ -249,16 +252,16 @@ async function callTool(auth: VerifiedMcpAuthContext, params: unknown, signal?:
249
252
  else if (name === "relay_task_comment" || name === "relay_task_close_bridge") result = await relayTaskWeaveTool(auth, name, args);
250
253
  else if (name === "relay_release_readiness") result = await relayReleaseTool(name, args);
251
254
  else if (name.startsWith("relay_task_")) result = await relayTaskTool(auth, name, args);
252
- else if (name.startsWith("relay_blackboard_")) result = relayBlackboardTool(auth, name, args);
255
+ else if (name.startsWith("relay_blackboard_")) result = (await relayBlackboardTool(auth, name, args));
253
256
  // #2591 — the journal tools must claim their prefix BEFORE the generic relay_project_
254
257
  // dispatcher, or they would fall through to relayProjectTool as "unknown tool".
255
- else if (name.startsWith("relay_project_journal_")) result = relayProjectJournalTool(auth, name, args);
256
- else if (name === "relay_project_ingest_claudemd") result = await relayProjectIngestClaudeMd(auth, args); else if (name.startsWith("relay_project_")) result = await relayProjectTool(auth, name, args); else if (name.startsWith("relay_issue_ref_")) result = relayIssueRefTool(auth, name, args); else if (name.startsWith("relay_issue_association_")) result = relayIssueAssociationTool(auth, name, args); else if (name.startsWith("relay_issue_activity_")) result = await relayIssueActivityTool(auth, name, args); else if (name.startsWith("relay_issue_lifecycle_")) result = await relayIssueLifecycleTool(auth, name, args);
258
+ else if (name.startsWith("relay_project_journal_")) result = (await relayProjectJournalTool(auth, name, args));
259
+ else if (name === "relay_project_ingest_claudemd") result = await relayProjectIngestClaudeMd(auth, args); else if (name.startsWith("relay_project_")) result = await relayProjectTool(auth, name, args); else if (name.startsWith("relay_issue_ref_")) result = await relayIssueRefTool(auth, name, args); else if (name.startsWith("relay_issue_association_")) result = (await relayIssueAssociationTool(auth, name, args)); else if (name.startsWith("relay_issue_activity_")) result = await relayIssueActivityTool(auth, name, args); else if (name.startsWith("relay_issue_lifecycle_")) result = await relayIssueLifecycleTool(auth, name, args);
257
260
  else if (name === "relay_subscribe" || name === "relay_unsubscribe" || name === "relay_list_subscriptions" || name === "relay_why_notified" || name === "relay_notification_preview") result = await relayNotificationSubscriptionTool(auth, name, args);
258
- else if (name === "relay_notify_ntfy") result = relayNotifyNtfy(args);
261
+ else if (name === "relay_notify_ntfy") result = (await relayNotifyNtfy(args));
259
262
  else if (name === "relay_delete_channel_binding") result = await relayDeleteChannelBinding(args, auth);
260
263
  else if (name === "relay_channel_output") result = await relayChannelOutput(args, auth);
261
- else if (name === "relay_send_to_channel") result = relayEgressToChannel(args, auth);
264
+ else if (name === "relay_send_to_channel") result = (await relayEgressToChannel(args, auth));
262
265
  else throw new ValidationError(`unknown tool: ${wireName}`);
263
266
 
264
267
  return toolResult(presentToolOutput(name, result, verbosity, args));
@@ -292,9 +295,9 @@ async function visibleTools(auth: McpAuthContext, generation: ToolGeneration): P
292
295
  alwaysOn: auth.component?.role === "provider" && Boolean(constraints.profile || auth.component.sub.startsWith("runner:")),
293
296
  allowUnknownGroups: true,
294
297
  })
295
- : null;
298
+ : auth.component?.role === "provider" ? resolveRelayTools({}, { alwaysOn: false }) : null;
296
299
  if (auth.component?.role === "provider") {
297
- for (const name of RELAY_TOOL_GROUPS[SELF_CARE_TOOL_GROUP]!) allowedNames?.add(name);
300
+ for (const name of resolveRelayTools({ groups: [SELF_CARE_TOOL_GROUP] }, { alwaysOn: false })) allowedNames?.add(name);
298
301
  }
299
302
  // #1570 — an explicit per-tool allowlist narrows the surface further (still ∩ scopes ∩ groups). This
300
303
  // is the Codex-worker provider-split: it trims the always-loaded MCP set the client eager-loads every
@@ -27,14 +27,14 @@ export const OUTPUT_DESCRIPTIONS: Record<string, string> = {
27
27
  relay_kernel_listEntities: "List entities.",
28
28
  relay_kernel_listEvents: "List events.",
29
29
  relay_kernel_listInstances: "List workflow instances.",
30
- relay_list_artifacts: "List artifacts; relay_read_artifact reads bodies.",
30
+ relay_list_artifacts: "List artifacts (metadata only).",
31
31
  relay_list_subscriptions: "Your subscriptions",
32
32
  relay_list_timers: "List your scheduled timers.",
33
33
  relay_maintenance_jobs: "Job health; jobId reads runbook.",
34
34
  relay_maintenance_pauses: "Maintenance pauses.",
35
35
  relay_merge_pauses: "Merge holds",
36
36
  relay_notification_preview: "Preview notification routing.",
37
- relay_plan_get: "Read plan; mode:resume selects the frontier view.",
37
+ relay_plan_get: "Read plan; mode:resume reads the frontier.",
38
38
  relay_plan_list: "List team plans.",
39
39
  relay_project_checkout: "Inspect, bind, unbind (keeps files) or remove (deletes files) a checkout.",
40
40
  relay_project_get: "Read project and roots.",
@@ -44,7 +44,7 @@ export const OUTPUT_DESCRIPTIONS: Record<string, string> = {
44
44
  relay_project_search: "Search memory; read full bodies by returned ids.",
45
45
  relay_prompt: "Read/edit prompts; writes need expectedVersion; restore/adopt append.",
46
46
  relay_read_artifact: "Page artifact text; binary returns download command.",
47
- relay_recall: "Search history; read a returned ref for the segment.",
47
+ relay_recall: "Search history; read a returned ref.",
48
48
  relay_release_readiness: "Read release readiness.",
49
49
  relay_routing_policy_get: "Read policy",
50
50
  relay_run: "Run shell work. Long work: waitMs:0, END YOUR TURN and await completion; never poll.",
@@ -53,17 +53,17 @@ export const OUTPUT_DESCRIPTIONS: Record<string, string> = {
53
53
  relay_task_close_bridge: "Read Task close-bridge state.",
54
54
  relay_task_get: "Read Task hydration.",
55
55
  relay_task_history: "Read Task history.",
56
- relay_task_list: "List your Tasks; mine:false lists all.",
56
+ relay_task_list: "Tasks.",
57
57
  relay_task_memory_read: "Read Task continuation.",
58
58
  relay_task_needs_validation: "List Tasks awaiting validation.",
59
59
  relay_team_get: "Read team and roster summary.",
60
60
  relay_team_template_get: "Read saved",
61
61
  relay_team_template_list: "Saved",
62
- relay_web_tool_calls: "Page web calls newest first; times are epoch milliseconds.",
62
+ relay_web_tool_calls: "Page web calls, newest first; epoch ms.",
63
63
  relay_why_notified: "Explain delivery.",
64
- relay_workflow_cancel: "Cancel run and reap agents.",
65
- relay_workflow_get: "Read run status; history and result pages are opt-in.",
66
- relay_workflow_resume: "Resume or answer/escalate a decision.",
64
+ relay_workflow_cancel: "Cancel run; reap agents.",
65
+ relay_workflow_get: "Read run status; history opt-in.",
66
+ relay_workflow_resume: "Resume, pause/unpause, re-pin, or answer decisions.",
67
67
  relay_workflow_start: "Start Task workflow.",
68
68
  relay_workspace_deps: "Check or refresh workspace dependencies.",
69
69
  relay_workspace_list: "List workspaces.",