@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,7 +1,8 @@
1
+ import { sendMessageWithResultAsync, sendMessageAsync } from "../db/message-send";
1
2
  import { authorityDenied } from "../authority-audit";
2
3
  // Auto-split from routes.ts (#299). Domain: messages.
3
4
  import { MAX_BODY_BYTES } from "../config";
4
- import { ValidationError, applyMessageDeliveryActionAsync, claimMessageAsync, deleteMessageAsync, getAgent, getLatestMessageIdAsync, getMessage, getMessageAsync, getMessageDeliveryStatusAsync, getThreadAsync, listQueuedMessagesAsync, listRecentMessagesAsync, markReadAsync, pollMessagesAsync, recordMessageDeliveryAttemptAsync, renewMessageClaimAsync, sendMessage, sendMessageWithResult, setMessageReactionAsync } from "../db";
5
+ import { ValidationError, applyMessageDeliveryActionAsync, claimMessageAsync, deleteMessageAsync, getAgent, getLatestMessageIdAsync, getMessage, getMessageAsync, getMessageDeliveryStatusAsync, getThreadAsync, listQueuedMessagesAsync, listRecentMessagesAsync, markReadAsync, pollMessagesAsync, recordMessageDeliveryAttemptAsync, renewMessageClaimAsync, setMessageReactionAsync, isChannelEgressTarget } from "../db";
5
6
  import { requestUserAddress, resolveActingUser, auditEvent, cleanAttachmentRefs, dispatchTaskCallbacksInBackground, emitCommand, error, json, normalizeAgentSessionGuard, parseBody, parseId, parseQueryInt, reactionEmoji, sendReactionNotificationToAuthor, withPayloadAttachments, type Handler } from "./_shared";
6
7
  import { cleanMeta, cleanParams, cleanPositiveId, cleanString, optionalEnum } from "../validation";
7
8
  import { emitMessageClaimed, emitMessageDeleted, emitMessageDeliveryUpdated, emitMessageQueued, emitMessageReactionUpdated, emitNewMessage, emitTaskChanged } from "../sse";
@@ -12,12 +13,11 @@ import { authContextFromRequest } from "../services/auth-context";
12
13
  import { sendMessagesBatchService, sendMessageServiceAsync } from "../services/send-message";
13
14
  import { recordFanoutSuppression } from "../services/channel-suppression-receipt";
14
15
  import { fanOutToAgent } from "../services/agent-message-fanout";
15
- import { isChannelEgressTarget } from "../db";
16
16
  import { CHANNEL_SUPPRESSION_REASON, isDisallowedChannelContent } from "../db/channel-egress-allowlist.ts";
17
17
  import { settleParkedSelfResumeContinuation } from "../self-resume";
18
18
  import { AmbiguousTargetError, ServiceAuthError } from "../services/errors";
19
19
  import { reEvaluateChannelDelivery } from "../services/message-delivery-actions";
20
- import { isOtherHumanSink, messageVisibleTo } from "../message-visibility";
20
+ import { isOtherHumanSink, messageVisibleTo, type MessageViewer } from "../message-visibility";
21
21
  import { messageViewerForRequest, visibleMessages } from "./message-viewer";
22
22
  import { type AgentSessionGuard, type Message, type PollQuery, type SendMessageInput } from "../types";
23
23
 
@@ -136,7 +136,7 @@ export const postMessageDeliveryAttempt: Handler = async (req, params) => {
136
136
  }, idempotencyKey);
137
137
  if (!result.ok) return error(result.error ?? "message not found", result.error === "message not found" ? 404 : 409);
138
138
  emitMessageDeliveryUpdated(result.message!);
139
- if (status === "delivered") settleParkedSelfResumeContinuation(result.message!);
139
+ if (status === "delivered") (await settleParkedSelfResumeContinuation(result.message!));
140
140
  return json(await getMessageDeliveryStatusAsync(id), 201);
141
141
  } catch (e) {
142
142
  if (e instanceof ValidationError) return error(e.message, 400);
@@ -222,13 +222,13 @@ export const postSystemBroadcast: Handler = async (req) => {
222
222
  const body = parsed.body;
223
223
  if (!body?.body) return error("body required");
224
224
  try {
225
- const msg = sendMessage({
225
+ const msg = (await sendMessageAsync({
226
226
  from: "system",
227
227
  to: "broadcast",
228
228
  kind: "system",
229
229
  subject: body.subject ?? undefined,
230
230
  body: body.body,
231
- });
231
+ }));
232
232
  emitNewMessage(msg);
233
233
  return json(msg, 201);
234
234
  } catch (e) {
@@ -351,7 +351,7 @@ export const getMessages: Handler = async (req) => {
351
351
  const channel = url.searchParams.get("channel") ?? undefined;
352
352
  // #3567 D6 — a non-admin reads only their own human sink; another human's inbox is a 403.
353
353
  const viewer = messageViewerForRequest(req);
354
- if (forAgent && isOtherHumanSink(viewer, forAgent)) return authorityDenied(req, "you can only read your own messages", 403, forAgent, "read sink");
354
+ if (forAgent && isOtherHumanSink(viewer, forAgent)) return (await authorityDenied(req, "you can only read your own messages", 403, forAgent, "read sink"));
355
355
 
356
356
  // No agent filter — return all recent messages
357
357
  if (!forAgent) {
@@ -367,6 +367,12 @@ export const getMessages: Handler = async (req) => {
367
367
  channel,
368
368
  limit,
369
369
  };
370
+ return json(await pollAgentMessages(viewer, pollQuery));
371
+ };
372
+
373
+ /** Shared display/turn-delivery polling for GET messages and the liveness exchange (#3608). */
374
+ export async function pollAgentMessages(viewer: MessageViewer | null, pollQuery: PollQuery): Promise<Message[]> {
375
+ const forAgent = pollQuery.for;
370
376
  //
371
377
  // #2335 (P1 privacy) — a poll whose `for` resolves to a channel-egress bridge is a DELIVERY poll by
372
378
  // construction: the only thing on the other end is a bridge about to forward what it receives into a
@@ -394,18 +400,18 @@ export const getMessages: Handler = async (req) => {
394
400
  // gets the COMPLETE set: `history` is still dashboard/thread-visible by definition, and this endpoint is
395
401
  // where the dashboard reads it. Suppressing there would evict it from the view (dashboard merge REPLACEs),
396
402
  // breaking the "no data loss" invariant — so the seam gates delivery, never display.
397
- if (url.searchParams.get("delivery") !== "turn") return json(polled);
403
+ if (!pollQuery.turnDelivery) return polled;
398
404
  const delivered: Message[] = [];
399
405
  for (const msg of polled) fanOutToAgent(forAgent, msg, () => delivered.push(msg));
400
- return json(delivered);
401
- };
406
+ return delivered;
407
+ }
402
408
 
403
409
  export const getMessageById: Handler = async (req, params) => {
404
410
  const id = parseId(params.id);
405
411
  if (id === null) return error("invalid message id");
406
412
  const msg = await getMessageAsync(id);
407
413
  if (!msg) return error("message not found", 404);
408
- return messageVisibleTo(messageViewerForRequest(req), msg) ? json(msg) : authorityDenied(req, "you can only read your own messages", 403, String(id), "read message");
414
+ return messageVisibleTo(messageViewerForRequest(req), msg) ? json(msg) : (await authorityDenied(req, "you can only read your own messages", 403, String(id), "read message"));
409
415
  };
410
416
 
411
417
  export const getMessageThread: Handler = async (req, params) => {
@@ -415,7 +421,7 @@ export const getMessageThread: Handler = async (req, params) => {
415
421
  if (!thread.length) return error("message not found", 404);
416
422
  const viewer = messageViewerForRequest(req);
417
423
  const root = thread.find((message) => message.id === id);
418
- if (root && !messageVisibleTo(viewer, root)) return authorityDenied(req, "you can only read your own messages", 403, String(id), "read thread");
424
+ if (root && !messageVisibleTo(viewer, root)) return (await authorityDenied(req, "you can only read your own messages", 403, String(id), "read thread"));
419
425
  return json(visibleMessages(viewer, thread));
420
426
  };
421
427
 
@@ -537,7 +543,7 @@ function channelReactionActor(actorId: string): Record<string, unknown> {
537
543
  };
538
544
  }
539
545
 
540
- function sendOutboundChannelReaction(parent: Message, actorId: string, emoji: string): void {
546
+ async function sendOutboundChannelReaction(parent: Message, actorId: string, emoji: string): Promise<void> {
541
547
  if (!parent.channel) return;
542
548
  const target = telegramTargetFromMessage(parent);
543
549
  if (!target) return;
@@ -545,7 +551,7 @@ function sendOutboundChannelReaction(parent: Message, actorId: string, emoji: st
545
551
  const accountId = target.accountId ?? cleanString(payloadChannel.accountId, "payload.channel.accountId", { max: 200 }) ?? "default";
546
552
  const conversation = isRecord(parent.payload?.conversation) ? parent.payload.conversation : undefined;
547
553
  const now = Date.now();
548
- const result = sendMessageWithResult({
554
+ const result = (await sendMessageWithResultAsync({
549
555
  from: actorId,
550
556
  to: parent.channel,
551
557
  kind: "channel.event",
@@ -580,7 +586,7 @@ function sendOutboundChannelReaction(parent: Message, actorId: string, emoji: st
580
586
  },
581
587
  },
582
588
  },
583
- });
589
+ }));
584
590
  if (result.created) {
585
591
  if (result.message.deliveryStatus === "queued") emitMessageQueued(result.message);
586
592
  else emitNewMessage(result.message);
@@ -601,8 +607,8 @@ export const postMessageReaction: Handler = async (req, params) => {
601
607
  const result = await setMessageReactionAsync({ messageId: id, actorId, emoji, action });
602
608
  if (!result.ok) return error(result.error, result.error === "message not found" ? 404 : 400);
603
609
  emitMessageReactionUpdated(result.message);
604
- if (action === "add") sendOutboundChannelReaction(result.message, actorId, emoji);
605
- sendReactionNotificationToAuthor(result.message, actorId, emoji, action);
610
+ if (action === "add") (await sendOutboundChannelReaction(result.message, actorId, emoji));
611
+ (await sendReactionNotificationToAuthor(result.message, actorId, emoji, action));
606
612
  return json(result.message);
607
613
  } catch (e) {
608
614
  if (e instanceof ValidationError) return error(e.message, 400);
@@ -50,7 +50,7 @@ export const postOrchestratorBootstrap: Handler = async (req) => {
50
50
  "--yes",
51
51
  ];
52
52
  for (const entry of pathPrefix ?? []) args.push("--path-prefix", entry);
53
- const command = ["bunx", `agent-relay-server@${version}`, ...args].map(quoteInstallCommandArg).join(" ");
53
+ const command = ["bunx", `@humwick/server@${version}`, ...args].map(quoteInstallCommandArg).join(" ");
54
54
  return json({
55
55
  command,
56
56
  relayUrl,
@@ -76,7 +76,7 @@ export const postOrchestratorBootstrapExchange: Handler = async (req) => {
76
76
  if (!isRecord(parsed.body)) return error("body required");
77
77
  const id = cleanString(parsed.body.id, "id", { required: true, max: 120 })!;
78
78
  const baseDir = cleanString(parsed.body.baseDir, "baseDir", { required: true, max: 500 })!;
79
- const denied = authorizeRoute(req, { scope: "token:write", resource: { orchestratorId: id } });
79
+ const denied = (await authorizeRoute(req, { scope: "token:write", resource: { orchestratorId: id } }));
80
80
  if (denied) return denied;
81
81
  const auth = getComponentAuth(req);
82
82
  if (!auth || auth.role !== "orchestrator-bootstrap") return error("bootstrap token required", 403);
@@ -4,10 +4,11 @@
4
4
  // upsert, and fanning the operator-facing events out as activity events — lives here.
5
5
  import { isRecord } from "@humwick/sdk";
6
6
  import type { HostHardware } from "@humwick/sdk";
7
- import { upsertHostFromRegistrationAsync, type HostRegistrationEvent } from "../db";
7
+ import { conflictingHardwareFields, upsertHostFromRegistrationAsync, type HostRegistrationEvent } from "../db";
8
8
  import { auditEvent, cleanSafeNumber } from "./_shared";
9
9
  import { recordOrchestratorUtilization } from "./orchestrator-host-utilization";
10
10
  import { cleanString } from "../validation";
11
+ import { reportRuntimeDependencyFailure } from "../services/runtime-dependency-alert";
11
12
 
12
13
  // The machine fingerprint an orchestrator reports at registration (§3.5). Lenient/observability-grade
13
14
  // like `cleanQueuedSpawns`: a malformed blob yields `undefined` (treated as "no fingerprint", never a
@@ -55,7 +56,7 @@ async function emitHostRegistrationEvents(events: readonly HostRegistrationEvent
55
56
  clientId: `host-identity-conflict-${ev.hostId}-${ev.orchestratorId}-${Date.now()}`,
56
57
  kind: "state",
57
58
  title: "Host identity conflict",
58
- body: `${ev.hostname}: reported hardware differs from the stored fingerprint — bound anyway, kept first-seen (conflict:pending)`,
59
+ body: `${ev.hostname}: reported hardware differs from the stored fingerprint (${conflictingHardwareFields(ev.stored, ev.reported).join(", ")} changed) — bound anyway, kept first-seen (conflict:pending)`,
59
60
  meta: ev.hostId,
60
61
  icon: "ti-alert-triangle",
61
62
  view: "orchestrators",
@@ -118,6 +119,7 @@ export async function linkOrchestratorHost(orchestratorId: string, hostname: str
118
119
  const result = await upsertHostFromRegistrationAsync({ orchestratorId, hostname, hardware });
119
120
  await emitHostRegistrationEvents(result.events);
120
121
  await recordOrchestratorUtilization(orchestratorId, result.host.id, body);
122
+ await reportRuntimeDependencyFailure(result.host.id, hostname, body);
121
123
  } catch (err) {
122
124
  // Additive over the orchestrator row; log so it is visible, then let the heartbeat path retry.
123
125
  console.warn(`[relay] host registration for orchestrator ${orchestratorId} (${hostname}) failed; will self-heal on next heartbeat:`, err);
@@ -141,6 +141,7 @@ export function cleanHostUtilizationSample(value: unknown, now: number): HostUti
141
141
  const swapUsedMb = nonNegative(value.swapUsedMb);
142
142
  const diskTotalMb = nonNegative(value.diskTotalMb);
143
143
  const diskFreeMb = nonNegative(value.diskFreeMb);
144
+ const diskPath = optionalString(value.diskPath, "utilization.diskPath", 200);
144
145
 
145
146
  return {
146
147
  at,
@@ -162,7 +163,7 @@ export function cleanHostUtilizationSample(value: unknown, now: number): HostUti
162
163
  ...(swapTotalMb !== undefined && swapUsedMb !== undefined && swapUsedMb <= swapTotalMb
163
164
  ? { swapTotalMb, swapUsedMb } : {}),
164
165
  ...(diskTotalMb !== undefined && diskFreeMb !== undefined && diskFreeMb <= diskTotalMb
165
- ? { diskTotalMb, diskFreeMb } : {}),
166
+ ? { diskTotalMb, diskFreeMb, ...(diskPath ? { diskPath } : {}) } : {}),
166
167
  memPressure,
167
168
  agentCountThisDaemon,
168
169
  queuedSpawnsThisDaemon,
@@ -207,6 +208,7 @@ export function toMachineSample(sample: HostUtilizationSample): HostMachineSampl
207
208
  ...(sample.swapTotalMb !== undefined ? { swapTotalMb: sample.swapTotalMb } : {}),
208
209
  ...(sample.diskFreeMb !== undefined ? { diskFreeMb: sample.diskFreeMb } : {}),
209
210
  ...(sample.diskTotalMb !== undefined ? { diskTotalMb: sample.diskTotalMb } : {}),
211
+ ...(sample.diskPath ? { diskPath: sample.diskPath } : {}),
210
212
  memPressure: sample.memPressure,
211
213
  };
212
214
  }
@@ -245,11 +247,11 @@ export async function recordOrchestratorUtilization(
245
247
  const sample = cleanHostUtilizationSample(raw, now);
246
248
  if (!sample) return false;
247
249
  const gateArming = cleanGateArming(isRecord(body) ? body.gateArming : undefined, now);
248
- return recordHostUtilization({
250
+ return (await recordHostUtilization({
249
251
  hostId,
250
252
  orchestratorId,
251
253
  machine: { ...toMachineSample(sample), ...(gateArming ? { gateArming } : {}) },
252
254
  daemon: toDaemonSample(sample),
253
255
  now,
254
- });
256
+ }));
255
257
  }
@@ -1,6 +1,6 @@
1
1
  // Auto-split from routes.ts (#299). Domain: orchestrator-proxy.
2
2
  import { RELAY_TOKEN_HEADER, SPAWN_PROVIDERS, isRecord } from "@humwick/sdk";
3
- import { ValidationError, getOrchestrator, orchestratorHeartbeat } from "../db";
3
+ import { ValidationError, getOrchestrator, orchestratorHeartbeatAsync } from "../db";
4
4
  import { authorizeRoute, cleanJsonArray, error, json, type Handler } from "./_shared";
5
5
  import { cleanStringArray } from "../validation";
6
6
  import { emitOrchestratorStatus } from "../sse";
@@ -136,7 +136,7 @@ export const getOrchestratorProviders: Handler = async (req, params) => {
136
136
  }
137
137
  }
138
138
  }
139
- const updated = orchestratorHeartbeat(params.id!, {
139
+ const updated = await orchestratorHeartbeatAsync(params.id!, {
140
140
  providers,
141
141
  providerStatus: cleanJsonArray(payload.providerStatus, "providerStatus") as OrchestratorRuntimeInput["providerStatus"],
142
142
  providerCatalog: cleanJsonArray(payload.providerCatalog, "providerCatalog") as OrchestratorRuntimeInput["providerCatalog"],
@@ -153,8 +153,8 @@ export const getOrchestratorSessions: Handler = (req, params) => proxyOrchestrat
153
153
 
154
154
  export const getOrchestratorVersion: Handler = (req, params) => proxyOrchestratorGet(req, params.id!, "/api/version");
155
155
 
156
- export const getOrchestratorLogs: Handler = (req, params) => {
157
- const denied = authorizeRoute(req, { scope: "logs:read", resource: { orchestratorId: params.id!, logsRead: true } });
156
+ export const getOrchestratorLogs: Handler = async (req, params) => {
157
+ const denied = (await authorizeRoute(req, { scope: "logs:read", resource: { orchestratorId: params.id!, logsRead: true } }));
158
158
  return denied ?? proxyOrchestratorGet(req, params.id!, `/api/logs/${encodeURIComponent(params.session!)}`);
159
159
  };
160
160
 
@@ -1,3 +1,4 @@
1
+ import { deleteOrchestratorAsync } from "../db/runtime-tail-async";
1
2
  import { cleanBrowserInventory, reconcileBrowserInventory } from "../services/browser-inventory";
2
3
  // Auto-split from routes.ts (#299). Domain: orchestrator.
3
4
  import { APPROVAL_MODES, SPAWN_PROVIDERS, VALID_WORKSPACE_MODES, fireAndForget, isRecord } from "@humwick/sdk";
@@ -6,7 +7,7 @@ import { CONTRACT_VERSIONS, parseRuntimeCapabilities, parseRuntimeContracts, par
6
7
  import { notifyAgentOffline, notifyAgentSpawnQueued } from "../agent-lifecycle-events";
7
8
  import { diagnoseReportedExit } from "../services/reported-exit-death";
8
9
  import { VERSION } from "../config";
9
- import { ValidationError, deleteOrchestrator, effectiveProviderCatalogListAsync, getAgent, getOrchestrator, getOrchestratorAsync, listOrchestrators, listOrchestratorsAsync, orchestratorHeartbeat, orchestratorHeartbeatAsync, recordAgentExitDiagnosticsAsync, reportOrchestratorRosterAsync, setOrchestratorUpgradeState, upsertOrchestratorAsync } from "../db";
10
+ import { ValidationError, effectiveProviderCatalogListAsync, getAgent, getOrchestrator, getOrchestratorAsync, listOrchestrators, listOrchestratorsAsync, orchestratorHeartbeatAsync, recordAgentExitDiagnosticsAsync, reportOrchestratorRosterAsync, setOrchestratorUpgradeStateAsync, upsertOrchestratorAsync } from "../db";
10
11
  import { reconcileOrchestratorSchedulerCommands } from "../services/scheduler-recovery.ts";
11
12
  import { recoverRegisteredOrchestrator } from "../services/orchestrator-registration-recovery";
12
13
  import { recoverOrchestratorLegacyLandings } from "../services/orchestrator-landing-recovery";
@@ -24,10 +25,9 @@ import { serializeCommandForRead } from "../services/dispatch-command";
24
25
  import { isOrchestratorRegistrationAuthorized } from "../security";
25
26
  import { isOrchestratorSelfReportAuthorized } from "../orchestrator-self-report-authz";
26
27
  import { getHostProviderSetting } from "../host-provider-store";
27
- import { hostDisabledFromValue } from "../host-provider-enablement";
28
+ import { hostDisabledFromValue, isHostSwitchableProvider } from "../host-provider-enablement";
28
29
  import { seedHostProviders } from "../services/host-providers";
29
- import { isHostSwitchableProvider } from "../host-provider-enablement";
30
- import { type ManagedAgent, type ManagedSessionExitDiagnostics, type OrchestratorRuntimeInput, type QueuedSpawn, type RegisterOrchestratorInput, type SpawnApprovalMode, type SpawnProvider } from "../types";
30
+ import { type ManagedAgent, type ManagedSessionExitDiagnostics, type Orchestrator, type OrchestratorRuntimeInput, type QueuedSpawn, type RegisterOrchestratorInput, type SpawnApprovalMode, type SpawnProvider } from "../types";
31
31
  import { restartSpawnParamsForAgentAsync } from "../services/restart-spawn";
32
32
  import { cleanProjectToolchain } from "../project-toolchain";
33
33
  import { cleanHostTools } from "../host-tools";
@@ -215,8 +215,17 @@ function orchestratorSelfReportDenied(req: Request, orchestratorId: string): Res
215
215
  return error("forbidden: only the orchestrator itself may report its host state", 403);
216
216
  }
217
217
 
218
+ // #2410 — the list is polled by every open dashboard and the per-host `providerCatalog` (a
219
+ // deprecated host snapshot, stored in the row and again in `meta`) was ~85% of a 515 KB response
220
+ // nothing reads: the hub owns the model catalog. It stays on the row (`GET /:id`) and in the DB.
221
+ function withoutHostCatalog(orch: Orchestrator): Orchestrator {
222
+ const { providerCatalog: _snapshot, ...row } = orch;
223
+ const { providerCatalog: _metaSnapshot, ...meta } = orch.meta;
224
+ return { ...row, meta };
225
+ }
226
+
218
227
  export const getOrchestrators: Handler = async () => {
219
- return json(await listOrchestratorsAsync());
228
+ return json((await listOrchestratorsAsync()).map(withoutHostCatalog));
220
229
  };
221
230
 
222
231
  export const getOrchestratorById: Handler = async (_req, params) => {
@@ -239,7 +248,7 @@ export const postOrchestratorHeartbeat: Handler = async (req, params) => {
239
248
  const parsed = await parseBody<unknown>(req);
240
249
  if (!parsed.ok) return error(parsed.error, parsed.status);
241
250
  try {
242
- const denied = authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: params.id! } });
251
+ const denied = (await authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: params.id! } }));
243
252
  if (denied) return denied;
244
253
  // #1797 round 2 (F1) — same self-report claim as the roster PATCH: this writes the host's
245
254
  // reported version/providers/capabilities, which the upgrade reconcile then acts on.
@@ -292,7 +301,7 @@ export const patchOrchestratorAgents: Handler = async (req, params) => {
292
301
  try {
293
302
  const orch = getOrchestrator(params.id!);
294
303
  if (!orch) return error("orchestrator not found", 404);
295
- const denied = authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: orch.id } });
304
+ const denied = (await authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: orch.id } }));
296
305
  if (denied) return denied;
297
306
  // #1797 round 2 (F1) — this roster IS the input to the managed-state reconcile; the scope +
298
307
  // resource check above cannot establish that the caller IS this orchestrator. See the helper.
@@ -344,7 +353,7 @@ export const patchOrchestratorAgents: Handler = async (req, params) => {
344
353
  if (queuedSpawns) {
345
354
  for (const queued of queuedSpawns) {
346
355
  if (!queued.spawnedBy) continue;
347
- notifyAgentSpawnQueued({
356
+ await notifyAgentSpawnQueued({
348
357
  parent: queued.spawnedBy,
349
358
  spawnRequestId: queued.spawnRequestId,
350
359
  provider: queued.provider,
@@ -357,7 +366,7 @@ export const patchOrchestratorAgents: Handler = async (req, params) => {
357
366
  // between the ack and this call, so reconciles still run in request order. Running it after
358
367
  // the exit-audit loop below (which awaits the async gateway per exited agent) let a stale,
359
368
  // superseded roster from a slow request land AFTER a newer report's reconcile and overwrite it.
360
- getLifecycleManager().onOrchestratorManagedAgentsReported(params.id!, cleaned, exitedAgents);
369
+ (await getLifecycleManager().onOrchestratorManagedAgentsReported(params.id!, cleaned, exitedAgents));
361
370
  for (const exited of exitedAgents) {
362
371
  const agent = await recordAgentExitDiagnosticsAsync(exited.agentId, exited);
363
372
  if (agent) {
@@ -370,7 +379,7 @@ export const patchOrchestratorAgents: Handler = async (req, params) => {
370
379
  // #636 — classify the death from the captured exit diagnostics + agent state and ride the
371
380
  // verdict on the terminal event (also persisted as a crash report inside notifyAgentOffline).
372
381
  // Exit diagnostics remain on replay; the shared generation ledger dedups the parent notice.
373
- notifyAgentOffline(exited.agentId, exitReason(exited), diagnoseReportedExit(agent, exitReason(exited), exited));
382
+ (await notifyAgentOffline(exited.agentId, exitReason(exited), diagnoseReportedExit(agent, exitReason(exited), exited)));
374
383
  }
375
384
  await auditEvent({
376
385
  clientId: [
@@ -550,9 +559,9 @@ export const postOrchestratorAction: Handler = async (req, params) => {
550
559
  if (action === "migrate-provider-config") {
551
560
  // #1259 — fleet-wide host action: a command:fleet-scoped token may cross its own
552
561
  // cwd/orchestrator sandbox pin for this action only.
553
- const denied = authorizeFleetRoute(req, { orchestratorId: orch.id });
562
+ const denied = (await authorizeFleetRoute(req, { orchestratorId: orch.id }));
554
563
  if (denied) return denied;
555
- const command = dispatchProviderConfigMigration(orch, "dashboard");
564
+ const command = (await dispatchProviderConfigMigration(orch, "dashboard"));
556
565
  if (!command) return error(`orchestrator ${orch.id} does not support provider-config migration; upgrade it first`, 409);
557
566
  await auditEvent({
558
567
  clientId: `server-orchestrator-migrate-provider-config-${orch.id}-${command.id}`,
@@ -570,7 +579,7 @@ export const postOrchestratorAction: Handler = async (req, params) => {
570
579
  if (action === "upgrade") {
571
580
  // #1259 — fleet-wide host action: a command:fleet-scoped token may cross its own
572
581
  // cwd/orchestrator sandbox pin for this action only.
573
- const denied = authorizeFleetRoute(req, { orchestratorId: orch.id });
582
+ const denied = (await authorizeFleetRoute(req, { orchestratorId: orch.id }));
574
583
  if (denied) return denied;
575
584
  const targetVersion = cleanString(parsed.body.targetVersion, "targetVersion", { max: 80 }) ?? VERSION;
576
585
  if (!ORCH_UPGRADE_SEMVER_RE.test(targetVersion)) return error("targetVersion must be a semver like 0.10.20");
@@ -624,7 +633,7 @@ export const postOrchestratorAction: Handler = async (req, params) => {
624
633
  ...(mode === "git-checkout" ? { mode, commitSha, repoUrl } : (npmReuseRepoUrl ? { repoUrl: npmReuseRepoUrl } : {})),
625
634
  },
626
635
  });
627
- setOrchestratorUpgradeState(orch.id, {
636
+ await setOrchestratorUpgradeStateAsync(orch.id, {
628
637
  desiredVersion: targetVersion, ...(mode === "git-checkout" && commitSha ? { targetGitSha: commitSha } : {}),
629
638
  status: "pending",
630
639
  commandId: command.id,
@@ -657,8 +666,8 @@ export const postOrchestratorAction: Handler = async (req, params) => {
657
666
  // command:fleet; "shutdown" is NOT in that enumeration and stays on the constrained path.
658
667
  const resource = { orchestratorId: orch.id, agentId, policyName, spawnRequestId };
659
668
  const denied = action === "restart"
660
- ? authorizeFleetRoute(req, resource)
661
- : authorizeRoute(req, { scope: "command:write", resource });
669
+ ? (await authorizeFleetRoute(req, resource))
670
+ : (await authorizeRoute(req, { scope: "command:write", resource }));
662
671
  if (denied) return denied;
663
672
  const agent = action === "restart" && agentId ? getAgent(agentId) : undefined;
664
673
  const restartSpawn = agent ? await restartSpawnParamsForAgentAsync(agent, orch, policyName, spawnRequestId) : undefined;
@@ -690,10 +699,10 @@ export const postOrchestratorAction: Handler = async (req, params) => {
690
699
  }
691
700
  };
692
701
 
693
- export const deleteOrchestratorById: Handler = (req, params) => {
694
- const denied = authorizeRoute(req, { scope: "system:admin", resource: { orchestratorId: params.id! } });
702
+ export const deleteOrchestratorById: Handler = async (req, params) => {
703
+ const denied = (await authorizeRoute(req, { scope: "system:admin", resource: { orchestratorId: params.id! } }));
695
704
  if (denied) return denied;
696
- const deleted = deleteOrchestrator(params.id!);
705
+ const deleted = (await deleteOrchestratorAsync(params.id!));
697
706
  if (!deleted) return error("orchestrator not found", 404);
698
707
  return json({ ok: true });
699
708
  };
@@ -1,6 +1,7 @@
1
+ import { sendPairMessageAsync, rejectPairAsync, endPairAsync, createPairAsync, acceptPairAsync, getPairAsync, listPairsAsync } from "../db/pairs-async";
1
2
  // Auto-split from routes.ts (#299). Domain: pairs.
2
3
  import { MAX_BODY_BYTES } from "../config";
3
- import { ValidationError, acceptPair, createPair, endPair, getPair, listAgents, listPairs, rejectPair, sendPairMessage } from "../db";
4
+ import { ValidationError, getPair, listAgents, listPairs } from "../db";
4
5
  import { resolveCallerAgentId } from "../agent-ref";
5
6
  import { getComponentAuth, hasComponentScope } from "../security";
6
7
  import { auditEvent, authorizeRoute, error, json, parseBody, type Handler } from "./_shared";
@@ -59,7 +60,7 @@ export const postPair: Handler = async (req) => {
59
60
  const parsed = await parseBody<unknown>(req);
60
61
  if (!parsed.ok) return error(parsed.error, parsed.status);
61
62
  try {
62
- const result = createPair(normalizeCreatePairInput(parsed.body));
63
+ const result = (await createPairAsync(normalizeCreatePairInput(parsed.body)));
63
64
  if (!result.ok) return pairError(result);
64
65
  emitNewMessage(result.invite);
65
66
  await auditEvent({
@@ -96,7 +97,7 @@ export const getPairs: Handler = async (req) => {
96
97
  ? resolveCallerAgentId(component.constraints, listAgents)
97
98
  : undefined;
98
99
  if (!(agentId && callerAgentId === agentId && component && hasComponentScope(component, "agent:read"))) {
99
- const denied = authorizeRoute(req, { scope: "pairs:read" });
100
+ const denied = (await authorizeRoute(req, { scope: "pairs:read" }));
100
101
  if (denied) return denied;
101
102
  }
102
103
 
@@ -115,7 +116,7 @@ export const postAcceptPair: Handler = async (req, params) => {
115
116
  const parsed = await parseBody<unknown>(req);
116
117
  if (!parsed.ok) return error(parsed.error, parsed.status);
117
118
  try {
118
- const result = acceptPair(params.id!, normalizePairActionInput(parsed.body));
119
+ const result = (await acceptPairAsync(params.id!, normalizePairActionInput(parsed.body)));
119
120
  if (!result.ok) return pairError(result);
120
121
  for (const notice of result.notices) emitNewMessage(notice);
121
122
  await auditEvent({
@@ -140,7 +141,7 @@ export const postRejectPair: Handler = async (req, params) => {
140
141
  const parsed = await parseBody<unknown>(req);
141
142
  if (!parsed.ok) return error(parsed.error, parsed.status);
142
143
  try {
143
- const result = rejectPair(params.id!, normalizePairActionInput(parsed.body));
144
+ const result = (await rejectPairAsync(params.id!, normalizePairActionInput(parsed.body)));
144
145
  if (!result.ok) return pairError(result);
145
146
  emitNewMessage(result.notice);
146
147
  await auditEvent({
@@ -165,7 +166,7 @@ export const postHangupPair: Handler = async (req, params) => {
165
166
  const parsed = await parseBody<unknown>(req);
166
167
  if (!parsed.ok) return error(parsed.error, parsed.status);
167
168
  try {
168
- const result = endPair(params.id!, normalizePairActionInput(parsed.body));
169
+ const result = (await endPairAsync(params.id!, normalizePairActionInput(parsed.body)));
169
170
  if (!result.ok) return pairError(result);
170
171
  if (result.notice) emitNewMessage(result.notice);
171
172
  await auditEvent({
@@ -190,7 +191,7 @@ export const postPairMessage: Handler = async (req, params) => {
190
191
  const parsed = await parseBody<unknown>(req);
191
192
  if (!parsed.ok) return error(parsed.error, parsed.status);
192
193
  try {
193
- const result = sendPairMessage(params.id!, normalizePairMessageInput(parsed.body));
194
+ const result = (await sendPairMessageAsync(params.id!, normalizePairMessageInput(parsed.body)));
194
195
  if (!result.ok) return pairError(result);
195
196
  emitNewMessage(result.message);
196
197
  await auditEvent({
@@ -211,4 +212,3 @@ export const postPairMessage: Handler = async (req, params) => {
211
212
  throw e;
212
213
  }
213
214
  };
214
- import { getPairAsync, listPairsAsync } from "../db/pairs-async";
@@ -0,0 +1,27 @@
1
+ import { cleanString } from "../validation";
2
+ import { ValidationError } from "../db/connection";
3
+ import { authorizeRoute, error, json, parseBody, type Handler } from "./_shared";
4
+ import { authContextFromRequest } from "../services/auth-context";
5
+ import { PromptVersionConflictError } from "../prompt-version-errors";
6
+ import { listProjectProfileInstructions, mutateProjectProfileInstructions, projectProfileInstructionHistory, readProjectProfileInstructions } from "../services/project-profile-instructions";
7
+
8
+ export const projectProfileInstructionsRoute: Handler = async (req, params) => {
9
+ const denied = (await authorizeRoute(req, { scope: req.method === "GET" ? "agent:read" : "agent:write" }));
10
+ if (denied) return denied;
11
+ try {
12
+ const projectId = cleanString(params.id, "projectId", { max: 200 });
13
+ const profile = cleanString(params.profile ?? params.name, "profile", { max: 200 });
14
+ if (!projectId || !profile) return json(await listProjectProfileInstructions({ projectId, profile }));
15
+ const path = new URL(req.url).pathname;
16
+ if (req.method === "GET") return json(path.endsWith("/history")
17
+ ? await projectProfileInstructionHistory(projectId, profile)
18
+ : await readProjectProfileInstructions(projectId, profile));
19
+ const body = await parseBody<unknown>(req);
20
+ if (!body.ok) return error(body.error, body.status);
21
+ return json(await mutateProjectProfileInstructions(authContextFromRequest(req), projectId, profile, body.body, path.endsWith("/restore")));
22
+ } catch (err) {
23
+ if (err instanceof PromptVersionConflictError) return json({ error: err.message, current: err.current }, 409);
24
+ if (err instanceof ValidationError) return error(err.message, /not found/.test(err.message) ? 404 : 400);
25
+ throw err;
26
+ }
27
+ };
@@ -5,7 +5,7 @@
5
5
  // code runs, and built-in profiles are admin-edited anyway.
6
6
  import { isRecord } from "@humwick/sdk";
7
7
  import { ValidationError } from "../db";
8
- import { approveProfileProjectTrust, PROJECT_REVIEW_MODES, PROJECT_TRUST_CAPABILITIES, updateProfileProjectTrust } from "../services/profile-trust";
8
+ import { approveProfileProjectTrust, PROJECT_REVIEW_MODES, PROJECT_TRUST_CAPABILITIES, updateProfileProjectTrustAsync } from "../services/profile-trust";
9
9
  import { cleanString, optionalEnum } from "../validation";
10
10
  import { auditEvent, error, isAdminRequest, json, normalizeConfigPathParam, parseBody, requestUserAddress, type Handler } from "./_shared";
11
11
  import { getAgentProfile } from "../config-store";
@@ -32,7 +32,7 @@ export const postProjectTrustApproveRoute: Handler = async (req, params) => {
32
32
  const mode = optionalEnum(body.mode, "mode", ["fingerprint", "commit"] as const);
33
33
  if (mode && !approvedValue.startsWith(mode === "commit" ? "commit:" : "sha256:")) return error(`approved value must be prefixed "${mode === "commit" ? "commit:" : "sha256:"}" for ${mode} review`, 400);
34
34
 
35
- const approval = approveProfileProjectTrust({ name, capability, repoKey, value: approvedValue, by: requestUserAddress(req) });
35
+ const approval = (await approveProfileProjectTrust({ name, capability, repoKey, value: approvedValue, by: requestUserAddress(req) }));
36
36
  await auditEvent({
37
37
  kind: "state",
38
38
  title: `Project trust approved: ${name} / ${capability}`,
@@ -57,7 +57,7 @@ export const patchProjectTrustRoute: Handler = async (req, params) => {
57
57
  if (body.ack !== undefined && !Array.isArray(body.ack)) return error("ack must be an array of hooks|mcp", 400);
58
58
  const ack = (body.ack as unknown[] | undefined)?.map((capability) => optionalEnum(capability, "ack", PROJECT_TRUST_CAPABILITIES)!);
59
59
  const by = requestUserAddress(req);
60
- const saved = updateProfileProjectTrust(name, { ...(review ? { review } : {}), ...(ack ? { ack } : {}) }, by);
60
+ const saved = await updateProfileProjectTrustAsync(name, { ...(review ? { review } : {}), ...(ack ? { ack } : {}) }, by);
61
61
  await auditEvent({
62
62
  kind: "state",
63
63
  title: `Project trust updated: ${saved.value.name}`,