@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,7 @@
1
1
  // Auto-split from routes.ts (#299). Domain: continuation archives.
2
2
  import { isRecord } from "@humwick/sdk";
3
3
  import { resolveCallerAgentId } from "../agent-ref";
4
- import { archiveContinuationSegmentAsync, appendContinuationArchiveRefs, getAgent, listAgents, ValidationError } from "../db";
4
+ import { archiveContinuationSegmentAsync, appendContinuationArchiveRefsAsync, getAgent, listAgents, ValidationError } from "../db";
5
5
  import { getComponentAuth } from "../security";
6
6
  import { cleanEpoch, cleanPositiveId, cleanString } from "../validation";
7
7
  import { error, json, parseBody, type Handler } from "./_shared";
@@ -21,7 +21,7 @@ export const postContinuationArchiveRoute: Handler = async (req) => {
21
21
  generation: cleanPositiveId(parsed.body.generation, "generation"),
22
22
  now: cleanEpoch(parsed.body.occurredAt, "occurredAt"),
23
23
  });
24
- const envelope = appendContinuationArchiveRefs(agentId, [archive.ref]);
24
+ const envelope = await appendContinuationArchiveRefsAsync(agentId, [archive.ref]);
25
25
  return json({ archive, envelope }, 201);
26
26
  } catch (e) {
27
27
  if (e instanceof ValidationError) return error(e.message, 400);
@@ -4,7 +4,7 @@ import type { CoordinatorTeamSummary } from "../types";
4
4
 
5
5
  /** Connector discovery: no roster, plan, or per-team runtime queries. */
6
6
  export const getCoordinatorTeams: Handler = async req => {
7
- const denied = authorizeRoute(req, { scope: "channel:read" });
7
+ const denied = (await authorizeRoute(req, { scope: "channel:read" }));
8
8
  if (denied) return denied;
9
9
  const teams: CoordinatorTeamSummary[] = (await listCoordinatorTeamsAsync()).filter(team => team.coordinatorId).map(team => ({
10
10
  id: team.id, coordinatorId: team.coordinatorId!, title: team.title ?? null, projectId: team.projectId, projectName: team.projectName,
@@ -48,7 +48,7 @@ export const postDecisionAnswerRoute: Handler = async (req, params) => {
48
48
  if (!parsed.ok) return error(parsed.error, parsed.status);
49
49
  const body = isRecord(parsed.body) ? parsed.body : {};
50
50
  try {
51
- return json(answerDecision(authContextFromRequest(req), id, { answers: body.answers, note: body.note }));
51
+ return json((await answerDecision(authContextFromRequest(req), id, { answers: body.answers, note: body.note })));
52
52
  } catch (err) {
53
53
  return routeError(err);
54
54
  }
@@ -59,7 +59,7 @@ export const postDecisionRoute: Handler = async (req) => {
59
59
  if (!parsed.ok) return error(parsed.error, parsed.status);
60
60
  try {
61
61
  const ctx = authContextFromRequest(req);
62
- return json(fileDecision(ctx, isRecord(parsed.body) ? parsed.body : {}, callerProjectId(ctx)), 201);
62
+ return json((await fileDecision(ctx, isRecord(parsed.body) ? parsed.body : {}, callerProjectId(ctx))), 201);
63
63
  } catch (err) {
64
64
  return routeError(err);
65
65
  }
@@ -10,7 +10,7 @@ import { authorizeRoute, error, parseBody, type Handler } from "./_shared";
10
10
  export const postHostSecretFilesResolve: Handler = async (req, params) => {
11
11
  const orch = getOrchestrator(params.id!);
12
12
  if (!orch) return error("orchestrator not found", 404);
13
- const denied = authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: orch.id } });
13
+ const denied = (await authorizeRoute(req, { scope: "command:write", resource: { orchestratorId: orch.id } }));
14
14
  if (denied) return denied;
15
15
  const component = getComponentAuth(req);
16
16
  if (!isFullReachRequest(req) && !(component?.role === "orchestrator" && component.constraints?.orchestrators?.includes(orch.id))) return error("forbidden", 403);
@@ -14,7 +14,7 @@ function queryTags(value: string | null, field: string): string[] | undefined {
14
14
  }
15
15
 
16
16
  export const getHostsRoute: Handler = async (req) => {
17
- const denied = authorizeRoute(req, { scope: "hosts:read" });
17
+ const denied = (await authorizeRoute(req, { scope: "hosts:read" }));
18
18
  if (denied) return denied;
19
19
  const query = new URL(req.url).searchParams;
20
20
  try {
@@ -44,7 +44,7 @@ export const getHostsRoute: Handler = async (req) => {
44
44
  * relay shows a rebuilding chart, not a stale one).
45
45
  */
46
46
  export const getHostUtilizationSeries: Handler = async (req, params) => {
47
- const denied = authorizeRoute(req, { scope: "hosts:read" });
47
+ const denied = (await authorizeRoute(req, { scope: "hosts:read" }));
48
48
  if (denied) return denied;
49
49
  const samples = readHostUtilizationSeries(params.id!);
50
50
  return json({ host: params.id!, window_ms: HOST_UTILIZATION_BUFFER_MS, samples });
@@ -54,7 +54,7 @@ export const getHostUtilizationSeries: Handler = async (req, params) => {
54
54
  // gateway write ops the MCP host tools already use (hosts.setLabel / hosts.setTags); this route is
55
55
  // just the HTTP door onto them, same shape as patchAgentLabel/patchAgentTags in agents.ts.
56
56
  export const patchHostLabel: Handler = async (req, params) => {
57
- const denied = authorizeRoute(req, { scope: "hosts:write" });
57
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
58
58
  if (denied) return denied;
59
59
  const parsed = await parseBody<unknown>(req);
60
60
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -81,7 +81,7 @@ export const patchHostLabel: Handler = async (req, params) => {
81
81
  };
82
82
 
83
83
  export const patchHostTags: Handler = async (req, params) => {
84
- const denied = authorizeRoute(req, { scope: "hosts:write" });
84
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
85
85
  if (denied) return denied;
86
86
  const parsed = await parseBody<unknown>(req);
87
87
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -111,7 +111,7 @@ export const patchHostTags: Handler = async (req, params) => {
111
111
  // write is idempotent: an already-accepted host remains accepted and a later identity change still
112
112
  // traverses the registration tripwire.
113
113
  export const postAcceptHostHardware: Handler = async (req, params) => {
114
- const denied = authorizeRoute(req, { scope: "hosts:write" });
114
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
115
115
  if (denied) return denied;
116
116
  const host = await acceptHostHardwareAsync(params.id!);
117
117
  if (!host) return error("host not found", 404);
@@ -129,7 +129,7 @@ export const postAcceptHostHardware: Handler = async (req, params) => {
129
129
  };
130
130
 
131
131
  export const patchHostLandingPlacement: Handler = async (req, params) => {
132
- const denied = authorizeRoute(req, { scope: "hosts:write" });
132
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
133
133
  if (denied) return denied;
134
134
  const parsed = await parseBody<unknown>(req);
135
135
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -153,7 +153,7 @@ export const patchHostLandingPlacement: Handler = async (req, params) => {
153
153
  };
154
154
 
155
155
  export const patchHostAgentCap: Handler = async (req, params) => {
156
- const denied = authorizeRoute(req, { scope: "hosts:write" });
156
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
157
157
  if (denied) return denied;
158
158
  const parsed = await parseBody<unknown>(req);
159
159
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -177,7 +177,7 @@ export const patchHostAgentCap: Handler = async (req, params) => {
177
177
  };
178
178
 
179
179
  export const patchHostLandingCap: Handler = async (req, params) => {
180
- const denied = authorizeRoute(req, { scope: "hosts:write" });
180
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
181
181
  if (denied) return denied;
182
182
  const parsed = await parseBody<unknown>(req);
183
183
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -201,7 +201,7 @@ export const patchHostLandingCap: Handler = async (req, params) => {
201
201
  };
202
202
 
203
203
  export const patchHostGateBudget: Handler = async (req, params) => {
204
- const denied = authorizeRoute(req, { scope: "hosts:write" });
204
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
205
205
  if (denied) return denied;
206
206
  const parsed = await parseBody<unknown>(req);
207
207
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -217,7 +217,7 @@ export const patchHostGateBudget: Handler = async (req, params) => {
217
217
  };
218
218
 
219
219
  export const patchHostAdmission: Handler = async (req, params) => {
220
- const denied = authorizeRoute(req, { scope: "hosts:write" });
220
+ const denied = (await authorizeRoute(req, { scope: "hosts:write" }));
221
221
  if (denied) return denied;
222
222
  const parsed = await parseBody<unknown>(req);
223
223
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -232,7 +232,7 @@ export const patchHostAdmission: Handler = async (req, params) => {
232
232
  };
233
233
 
234
234
  export const getHostAdmission: Handler = async (req, params) => {
235
- const denied = getComponentAuth(req) ? null : authorizeRoute(req, { scope: "hosts:read" });
235
+ const denied = getComponentAuth(req) ? null : (await authorizeRoute(req, { scope: "hosts:read" }));
236
236
  if (denied) return denied;
237
237
  const host = await getHostAsync(resolveHostId(params.id!) ?? params.id!);
238
238
  if (!host) return error("host not found", 404);
@@ -78,7 +78,8 @@ function normalizeChatHistoryImportInput(body: unknown): {
78
78
  export const getInboxStateRoute: Handler = async (req) => {
79
79
  const url = new URL(req.url);
80
80
  const operatorId = inboxOperatorId(req, url.searchParams.get("operatorId") ?? undefined);
81
- return json(await getInboxStateAsync(operatorId));
81
+ const raw = url.searchParams.get("excludeOffline");
82
+ return json(await getInboxStateAsync(operatorId, { excludeOffline: raw === "1" || raw === "true" }));
82
83
  };
83
84
 
84
85
  export const patchInboxThreadState: Handler = async (req) => {
@@ -140,7 +141,7 @@ export const postChatHistoryImportRoute: Handler = async (req) => {
140
141
  try {
141
142
  const input = normalizeChatHistoryImportInput(parsed.body);
142
143
  if (resolveActingUser(req)?.source === "session") input.importedBy = requestUserAddress(req);
143
- const denied = authorizeRoute(req, { scope: "agent:write", resource: { agentId: input.targetAgentId, spawnRequestId: input.targetSpawnRequestId } });
144
+ const denied = (await authorizeRoute(req, { scope: "agent:write", resource: { agentId: input.targetAgentId, spawnRequestId: input.targetSpawnRequestId } }));
144
145
  if (denied) return denied;
145
146
  const imported = await createChatHistoryImportAsync(input);
146
147
  return json(imported, 201);
@@ -70,6 +70,7 @@ import { postIssueLifecycleReopenRoute } from "./issue-lifecycle";
70
70
  import { deleteIssueRefRoute, getIssueRefRoute, listIssueRefsRoute, patchIssueRefRoute, postIssueRefRoute, resolveIssueRefRoute } from "./issue-refs";
71
71
  import { deleteProjectEntryRoute, getProjectEntriesRoute, getProjectEntryRoute, getProjectInjectionPreviewRoute, getProjectResolveRoute, getProjectRoute, getProjectsRoute, patchProjectEntryRoute, postProjectEntryRoute } from "./projects";
72
72
  import { getPromptHistoryRoute, postPromptRevisionRoute, getPromptTemplateRoute, getPromptTemplatesRoute, postPromptTemplateResetRoute, putPromptTemplateRoute } from "./prompt-templates";
73
+ import { projectProfileInstructionsRoute } from "./project-profile-instructions";
73
74
  import { getRecipeByName, getRecipeInstanceArtifacts, getRecipeInstanceById, getRecipeInstances, getRecipes, postRecipeInstanceArtifacts, postRecipeStart, postRecipeStop } from "./recipes";
74
75
  import { getSettingRoute, getSettingsNamespaceRoute, getSettingsRoute, putSettingRoute, putSettingsDefaultRoute } from "./settings";
75
76
  import { postNotificationPreviewRoute } from "./notifications";
@@ -84,8 +85,8 @@ import { getMergeDrain, getMergePauseById, getMergePauses, postMergePause, postM
84
85
  import { postMcp } from "../mcp";
85
86
  import { postOrchestratorBootstrap, postOrchestratorBootstrapExchange } from "./orchestrator-bootstrap";
86
87
  import { getDeploysRoute } from "./deploys";
87
- import { getGateStatsRoute, getShippingBoardRoute, getShippingStatsRoute, postRedMainAbandonRoute } from "./shipping";
88
- import { getWorkflowCatalogRoute, getWorkflowDefinitionsRoute, getWorkflowRunBudgetRoute, getWorkflowRunRoute, getWorkflowRunsRoute, getWorkflowStatsRoute, patchWorkflowRunBudgetRoute, postWorkflowRunCancelRoute, postWorkflowRunResumeRoute, postWorkflowRunStartRoute } from "./workflows";
88
+ import { getGateStatsRoute, getKnownFailuresRoute, getShippingBoardRoute, getShippingStatsRoute, postRedMainAbandonRoute } from "./shipping";
89
+ import { getWorkflowCatalogRoute, getWorkflowDefinitionsRoute, getWorkflowRunBudgetRoute, getWorkflowRunRoute, getWorkflowRunsRoute, getWorkflowStatsRoute, patchWorkflowRunBudgetRoute, postWorkflowRunCancelRoute, postWorkflowRunPauseRoute, postWorkflowRunResumeRoute, postWorkflowRunStartRoute, postWorkflowRunUnpauseRoute } from "./workflows";
89
90
  import { getRestartEpochRoute, postRestartEpochAbandonRoute } from "./restart-epochs";
90
91
  import { getFleetConvergenceRoute } from "./fleet-convergence";
91
92
  import { postTimerMessageOperator } from "./kernel-timers-operator";
@@ -318,6 +319,7 @@ const routes: Route[] = [
318
319
  route("DELETE", "/api/commands/:id", deleteCommandById),
319
320
  route("POST", "/api/system/timer-message-cutover/:verb", postTimerMessageOperator),
320
321
  route("GET", "/api/agent-profiles", getAgentProfilesRoute),
322
+ route("GET", "/api/agent-profiles/:name/project-instructions", projectProfileInstructionsRoute),
321
323
  route("GET", "/api/agent-profiles/tool-groups", getAgentProfileToolGroupsRoute),
322
324
  route("POST", "/api/agent-profiles/preview", postAgentProfilePreviewRoute),
323
325
  route("GET", "/api/agent-profiles/:name/resolved", getResolvedAgentProfileRoute),
@@ -546,6 +548,11 @@ const routes: Route[] = [
546
548
  route("PATCH", "/api/issue-refs/:id", patchIssueRefRoute),
547
549
  route("DELETE", "/api/issue-refs/:id", deleteIssueRefRoute),
548
550
  route("GET", "/api/projects", getProjectsRoute),
551
+ route("GET", "/api/projects/:id/profile-instructions", projectProfileInstructionsRoute),
552
+ route("GET", "/api/projects/:id/profile-instructions/:profile", projectProfileInstructionsRoute),
553
+ route("PUT", "/api/projects/:id/profile-instructions/:profile", projectProfileInstructionsRoute),
554
+ route("GET", "/api/projects/:id/profile-instructions/:profile/history", projectProfileInstructionsRoute),
555
+ route("POST", "/api/projects/:id/profile-instructions/:profile/restore", projectProfileInstructionsRoute),
549
556
  route("POST", "/api/projects", postProjectOnboardRoute),
550
557
  route("POST", "/api/projects/:id/checkouts/bind", postProjectBindCheckoutRoute),
551
558
  route("POST", "/api/projects/:id/checkouts/unbind", postProjectUnbindCheckoutRoute),
@@ -592,6 +599,7 @@ const routes: Route[] = [
592
599
  route("POST", "/api/shipping/incidents/:id/abandon", postRedMainAbandonRoute),
593
600
  route("GET", "/api/shipping/board", getShippingBoardRoute),
594
601
  route("GET", "/api/shipping/stats", getShippingStatsRoute),
602
+ route("GET", "/api/shipping/known-failures", getKnownFailuresRoute),
595
603
  route("GET", "/api/gates/stats", getGateStatsRoute),
596
604
  route("GET", "/api/workflows/catalog", getWorkflowCatalogRoute),
597
605
  route("POST", "/api/workflows/runs", postWorkflowRunStartRoute),
@@ -600,6 +608,8 @@ const routes: Route[] = [
600
608
  route("GET", "/api/workflows/runs/:runId/budget", getWorkflowRunBudgetRoute),
601
609
  route("PATCH", "/api/workflows/runs/:runId/budget", patchWorkflowRunBudgetRoute),
602
610
  route("POST", "/api/workflows/runs/:runId/cancel", postWorkflowRunCancelRoute),
611
+ route("POST", "/api/workflows/runs/:runId/pause", postWorkflowRunPauseRoute),
612
+ route("POST", "/api/workflows/runs/:runId/unpause", postWorkflowRunUnpauseRoute),
603
613
  route("POST", "/api/workflows/runs/:runId/resume", postWorkflowRunResumeRoute),
604
614
  route("GET", "/api/workflows/stats", getWorkflowStatsRoute),
605
615
  route("GET", "/api/workflows/definitions", getWorkflowDefinitionsRoute),
@@ -1,7 +1,10 @@
1
+ import { upsertIntegrationRegistryAsync, ingestIntegrationEventAsync } from "../db/runtime-tail-async";
2
+ import { sendMessageWithResultAsync } from "../db/message-send";
3
+ import type { IntegrationRegistryInput } from "../db/integrations";
1
4
  // Auto-split from routes.ts (#299). Domain: integrations.
2
5
  import { INTEGRATION_RATE_LIMIT_PER_MINUTE, MAX_BODY_BYTES, getIntegrationTokens, type IntegrationTokenConfig } from "../config";
3
6
  import { VALID_ARTIFACT_KINDS, VALID_ARTIFACT_ROLES, VALID_TASK_STATUSES, agentSessionStatus, authorizeRoute, cleanAttachmentRefs, dispatchTaskCallbacksInBackground, error, json, normalizeAgentSessionGuard, parseBody, reactionEmoji, sendReactionNotificationToAuthor, validateChannelAttachmentSourceRef, withPayloadAttachments, type Handler } from "./_shared";
4
- import { ValidationError, evaluatePoolBindingsAsync, findMessageByTelegramSourceAsync, getAgent, getChannelAsync, getMessage, ingestIntegrationEvent, isIntegrationRegistryEnabled, listChannelBindingsAsync, listChannelsAsync, listIntegrationRegistry, listIntegrationTaskStats, resolveChannelRoutesAsync, sendMessageWithResult, setMessageReactionAsync, upsertChannelBindingAsync, upsertIntegrationRegistry, validateAgentSession } from "../db";
7
+ import { ValidationError, evaluatePoolBindingsAsync, findMessageByTelegramSourceAsync, getAgent, getChannelAsync, getMessage, isIntegrationRegistryEnabled, listChannelBindingsAsync, listChannelsAsync, listIntegrationTaskStatsAsync, reconcileIntegrationRegistryAsync, resolveChannelRoutesAsync, setMessageReactionAsync, upsertChannelBindingAsync, validateAgentSession } from "../db";
5
8
  import { cleanMeta, cleanString, cleanStringArray, optionalEnum } from "../validation";
6
9
  import { emitChannelActivity, emitMessageQueued, emitMessageReactionUpdated, emitNewMessage, emitTaskChanged } from "../sse";
7
10
  import { getComponentAuth, getIntegrationAuth, hasIntegrationScope, isRequestAuthorizedFor } from "../security";
@@ -256,24 +259,7 @@ function normalizeIntegrationEvent(body: unknown): IntegrationEventInput {
256
259
  };
257
260
  }
258
261
 
259
- function normalizeIntegrationRegistryInput(name: string, body: unknown): {
260
- name: string;
261
- displayName?: string;
262
- description?: string;
263
- enabled?: boolean;
264
- scopes?: string[];
265
- targets?: string[];
266
- channels?: string[];
267
- type?: string;
268
- icon?: string;
269
- accentColor?: string;
270
- tags?: string[];
271
- homepageUrl?: string;
272
- repositoryUrl?: string;
273
- docsUrl?: string;
274
- manifest?: Record<string, unknown>;
275
- source: "api";
276
- } {
262
+ function normalizeIntegrationRegistryInput(name: string, body: unknown): IntegrationRegistryInput & { source: "api" } {
277
263
  if (!isRecord(body)) throw new ValidationError("body must be an object");
278
264
  if (body.enabled !== undefined && typeof body.enabled !== "boolean") throw new ValidationError("enabled must be a boolean");
279
265
  return {
@@ -364,40 +350,30 @@ function safeCallbackHost(url: string | undefined): string | undefined {
364
350
  }
365
351
  }
366
352
 
367
- function reconcileIntegrationRegistry(configured: Map<string, IntegrationTokenConfig>, observedStats: Map<string, ReturnType<typeof listIntegrationTaskStats>[number]>): Map<string, ReturnType<typeof listIntegrationRegistry>[number]> {
368
- for (const config of configured.values()) {
369
- upsertIntegrationRegistry({
370
- name: config.name,
371
- displayName: config.displayName,
372
- description: config.description,
373
- scopes: config.scopes,
374
- targets: config.targets,
375
- channels: config.channels,
376
- type: config.type,
377
- icon: config.icon,
378
- accentColor: config.accentColor,
379
- tags: config.tags,
380
- homepageUrl: config.homepageUrl,
381
- repositoryUrl: config.repositoryUrl,
382
- docsUrl: config.docsUrl,
383
- manifest: config.manifest,
384
- source: "env",
385
- });
386
- }
387
- for (const stats of observedStats.values()) {
388
- upsertIntegrationRegistry({
389
- name: stats.source,
390
- enabled: true,
391
- source: "observed",
392
- });
393
- }
394
- return new Map(listIntegrationRegistry().map((integration) => [integration.name, integration]));
353
+ async function reconcileRegistry(configured: Map<string, IntegrationTokenConfig>, observedSources: string[]) {
354
+ const registry = await reconcileIntegrationRegistryAsync([...configured.values()].map((config) => ({
355
+ name: config.name,
356
+ displayName: config.displayName,
357
+ description: config.description,
358
+ scopes: config.scopes,
359
+ targets: config.targets,
360
+ channels: config.channels,
361
+ type: config.type,
362
+ icon: config.icon,
363
+ accentColor: config.accentColor,
364
+ tags: config.tags,
365
+ homepageUrl: config.homepageUrl,
366
+ repositoryUrl: config.repositoryUrl,
367
+ docsUrl: config.docsUrl,
368
+ manifest: config.manifest,
369
+ })), observedSources);
370
+ return new Map(registry.map((integration) => [integration.name, integration]));
395
371
  }
396
372
 
397
- export const getIntegrations: Handler = () => {
373
+ export const getIntegrations: Handler = async () => {
398
374
  const configured = new Map(getIntegrationTokens().map((integration) => [integration.name, integration]));
399
- const observedStats = new Map(listIntegrationTaskStats().map((stats) => [stats.source, stats]));
400
- const registry = reconcileIntegrationRegistry(configured, observedStats);
375
+ const observedStats = new Map((await listIntegrationTaskStatsAsync()).map((stats) => [stats.source, stats]));
376
+ const registry = await reconcileRegistry(configured, [...observedStats.keys()]);
401
377
  const names = [...new Set([...configured.keys(), ...observedStats.keys(), ...registry.keys()])].sort((a, b) => a.localeCompare(b));
402
378
  const now = Date.now();
403
379
 
@@ -451,7 +427,7 @@ export const putIntegrationRegistryRoute: Handler = async (req, params) => {
451
427
  const parsed = await parseBody<unknown>(req);
452
428
  if (!parsed.ok) return error(parsed.error, parsed.status);
453
429
  try {
454
- return json(upsertIntegrationRegistry(normalizeIntegrationRegistryInput(name, parsed.body)));
430
+ return json((await upsertIntegrationRegistryAsync(normalizeIntegrationRegistryInput(name, parsed.body))));
455
431
  } catch (e) {
456
432
  if (e instanceof ValidationError) return error(e.message, 400);
457
433
  throw e;
@@ -523,7 +499,7 @@ async function applyInboundChannelReaction(payload: Record<string, unknown>): Pr
523
499
  const result = await setMessageReactionAsync({ messageId: parent.id, actorId, emoji, action });
524
500
  if (result.ok) {
525
501
  emitMessageReactionUpdated(result.message);
526
- sendReactionNotificationToAuthor(result.message, actorId, emoji, action);
502
+ (await sendReactionNotificationToAuthor(result.message, actorId, emoji, action));
527
503
  }
528
504
  }
529
505
 
@@ -535,7 +511,7 @@ export const postChannelEvent: Handler = async (req, params) => {
535
511
  if (!channel) return error("channel not found", 404);
536
512
  const sessionError = requireChannelSession(req, parsed.body, channel);
537
513
  if (sessionError) return sessionError;
538
- const denied = authorizeRoute(req, { scope: "channel:write", resource: { channel: channel.id } });
514
+ const denied = (await authorizeRoute(req, { scope: "channel:write", resource: { channel: channel.id } }));
539
515
  if (denied) return denied;
540
516
  const input = normalizeChannelEventBody(parsed.body);
541
517
  validateChannelEnvelope(input.payload, channel);
@@ -547,7 +523,7 @@ export const postChannelEvent: Handler = async (req, params) => {
547
523
  await applyInboundChannelReaction(input.payload);
548
524
  const bindings = await resolveChannelRoutesAsync(channel.id, input.conversationId);
549
525
  if (!bindings.length) return error("channel has no binding", 409);
550
- const results = bindings.map((binding) => sendMessageWithResult({
526
+ const results = await Promise.all(bindings.map(async (binding) => (await sendMessageWithResultAsync({
551
527
  from: channel.agentId,
552
528
  to: messageTargetForChannelTarget(binding.target, binding),
553
529
  kind: "channel.event",
@@ -556,7 +532,7 @@ export const postChannelEvent: Handler = async (req, params) => {
556
532
  payload: input.payload,
557
533
  idempotencyKey: scopedChannelIdempotencyKey(input.idempotencyKey, binding),
558
534
  claimable: false,
559
- }));
535
+ }))));
560
536
  for (const result of results) {
561
537
  if (!result.created) continue;
562
538
  if (result.message.deliveryStatus === "queued") emitMessageQueued(result.message);
@@ -624,7 +600,7 @@ export const postIntegrationEvent: Handler = async (req) => {
624
600
  return error("integration token cannot target this task", 403);
625
601
  }
626
602
  const input = await resolveIntegrationEventTarget({ ...normalized, source: normalized.source ?? integrationName });
627
- const result = ingestIntegrationEvent(input, integrationName);
603
+ const result = (await ingestIntegrationEventAsync(input, integrationName));
628
604
  if (result.message) emitNewMessage(result.message);
629
605
  emitTaskChanged(result.task, result.created ? "task.created" : "task.updated");
630
606
  dispatchTaskCallbacksInBackground(result.task.id, result.created ? "task.created" : "task.updated");
@@ -31,7 +31,7 @@ export const postIssueActivityRoute: Handler = async (req) => {
31
31
  if (!parsed.ok) return error(parsed.error, parsed.status);
32
32
  try {
33
33
  if (!isRecord(parsed.body)) throw new ValidationError("issue activity body required");
34
- const event = recordAndEmitIssueActivity({
34
+ const event = (await recordAndEmitIssueActivity({
35
35
  agentId: cleanString(parsed.body.agentId, "agentId", { required: true, max: 200 })!,
36
36
  action: cleanAction(parsed.body.action),
37
37
  issueRefId: cleanString(parsed.body.issueRefId, "issueRefId", { max: 120 }),
@@ -42,7 +42,7 @@ export const postIssueActivityRoute: Handler = async (req) => {
42
42
  title: cleanString(parsed.body.title, "title", { max: 200 }),
43
43
  body: cleanString(parsed.body.body, "body", { max: 1000 }),
44
44
  metadata: cleanMeta(parsed.body.metadata),
45
- });
45
+ }));
46
46
  return json({ event }, 201);
47
47
  } catch (err) {
48
48
  if (err instanceof ValidationError) return error(err.message, 400);
@@ -37,7 +37,7 @@ export const postIssueAssociationRoute: Handler = async (req) => {
37
37
  const parsed = await parseBody<unknown>(req);
38
38
  if (!parsed.ok) return error(parsed.error, parsed.status);
39
39
  try {
40
- return json(associateIssueRef(cleanAssociationBody(parsed.body)));
40
+ return json((await associateIssueRef(cleanAssociationBody(parsed.body))));
41
41
  } catch (err) {
42
42
  return routeError(err);
43
43
  }
@@ -56,9 +56,9 @@ export const getIssueAssociationEntityIssuesRoute: Handler = (_req, params) => {
56
56
  }
57
57
  };
58
58
 
59
- export const getIssueAssociationIssueEntitiesRoute: Handler = (_req, params) => {
59
+ export const getIssueAssociationIssueEntitiesRoute: Handler = async (_req, params) => {
60
60
  try {
61
- const issueRef = resolveAssociationIssueRef({ issueRefId: cleanString(params.issueRefId, "issueRefId", { required: true, max: 120 })! });
61
+ const issueRef = (await resolveAssociationIssueRef({ issueRefId: cleanString(params.issueRefId, "issueRefId", { required: true, max: 120 })! }));
62
62
  return json({ issueRef, entities: listIssueEntities(issueRef.id) });
63
63
  } catch (err) {
64
64
  return routeError(err);
@@ -69,7 +69,7 @@ export const deleteIssueAssociationRoute: Handler = async (req) => {
69
69
  const parsed = await parseBody<unknown>(req);
70
70
  if (!parsed.ok) return error(parsed.error, parsed.status);
71
71
  try {
72
- return json(removeIssueAssociation(cleanAssociationBody(parsed.body)));
72
+ return json((await removeIssueAssociation(cleanAssociationBody(parsed.body))));
73
73
  } catch (err) {
74
74
  return routeError(err);
75
75
  }
@@ -1,4 +1,4 @@
1
- import { deleteIssueRefMapping, getIssueRef, listIssueRefs, patchIssueRefMapping, resolveIssueRefMapping, upsertIssueRefMapping, type ListIssueRefsOptions } from "../services/issue-refs";
1
+ import { deleteIssueRefMappingAsync, getIssueRef, listIssueRefsAsync, patchIssueRefMappingAsync, resolveIssueRefMappingAsync, upsertIssueRefMappingAsync, type ListIssueRefsOptions } from "../services/issue-refs";
2
2
  import { getIssueRefByExternalKey, issueRefClosedCompleted, issueRefForRefString } from "../db/issue-refs";
3
3
  import { advanceTerminalPlanRefsAsync } from "../services/plan-terminal-refs";
4
4
  import { cleanEnum, cleanString, optionalEnum } from "../validation";
@@ -53,7 +53,7 @@ function cleanResolveBody(body: unknown) {
53
53
  return body;
54
54
  }
55
55
 
56
- export const listIssueRefsRoute: Handler = (req) => {
56
+ export const listIssueRefsRoute: Handler = async (req) => {
57
57
  try {
58
58
  const url = new URL(req.url);
59
59
  const rawLimit = parseQueryInt(url.searchParams.get("limit"), { min: 1, max: 500, clamp: true });
@@ -64,7 +64,7 @@ export const listIssueRefsRoute: Handler = (req) => {
64
64
  status: optionalEnum(url.searchParams.get("status") ?? undefined, "status", ISSUE_REF_STATUSES) as IssueRefStatus | undefined,
65
65
  limit: rawLimit ?? undefined,
66
66
  };
67
- return json({ issueRefs: listIssueRefs(opts) });
67
+ return json({ issueRefs: await listIssueRefsAsync(opts) });
68
68
  } catch (err) {
69
69
  return error(err instanceof Error ? err.message : "issue refs route failed");
70
70
  }
@@ -76,7 +76,7 @@ export const postIssueRefRoute: Handler = async (req) => {
76
76
  try {
77
77
  const body = cleanUpsertBody(parsed.body);
78
78
  const before = getIssueRefByExternalKey(body.provider, body.repo, body.externalKey);
79
- const issueRef = upsertIssueRefMapping(body);
79
+ const issueRef = await upsertIssueRefMappingAsync(body);
80
80
  // #2520 — a completed close cached here propagates to the plan nodes bound to this ref.
81
81
  if (issueRefClosedCompleted(before, issueRef)) await advanceTerminalPlanRefsAsync({ issueRefId: issueRef.id });
82
82
  return json({ issueRef });
@@ -98,7 +98,7 @@ export const resolveIssueRefRoute: Handler = async (req) => {
98
98
  ? issueRefForRefString(ref, cleanString(value.defaultRepo ?? value.repo, "defaultRepo", { max: 500 }))
99
99
  : getIssueRefByExternalKey(cleanProvider(value.provider), cleanString(value.repo, "repo", { required: true, max: 500 })!, cleanString(value.externalKey, "externalKey", { required: true, max: 240 })!);
100
100
  const issueRef = ref
101
- ? resolveIssueRefMapping({
101
+ ? await resolveIssueRefMappingAsync({
102
102
  ref,
103
103
  defaultRepo: cleanString(value.defaultRepo ?? value.repo, "defaultRepo", { max: 500 }),
104
104
  provider: optionalEnum(value.provider, "provider", ISSUE_PROVIDERS, "github") as IssueProvider,
@@ -107,7 +107,7 @@ export const resolveIssueRefRoute: Handler = async (req) => {
107
107
  closeReason: cleanCloseReason(value.closeReason),
108
108
  statusSyncedAt: cleanTimestamp(value.statusSyncedAt),
109
109
  })
110
- : resolveIssueRefMapping({
110
+ : await resolveIssueRefMappingAsync({
111
111
  provider: cleanProvider(value.provider),
112
112
  repo: cleanString(value.repo, "repo", { required: true, max: 500 })!,
113
113
  externalKey: cleanString(value.externalKey, "externalKey", { required: true, max: 240 })!,
@@ -142,7 +142,7 @@ export const patchIssueRefRoute: Handler = async (req, params) => {
142
142
  try {
143
143
  const id = cleanString(params.id, "id", { required: true, max: 120 })!;
144
144
  const before = getIssueRef(id);
145
- const issueRef = patchIssueRefMapping(id, cleanPatchBody(parsed.body));
145
+ const issueRef = await patchIssueRefMappingAsync(id, cleanPatchBody(parsed.body));
146
146
  if (!issueRef) return error("issue ref not found", 404);
147
147
  // #2520 — a completed close cached here propagates to the plan nodes bound to this ref.
148
148
  if (issueRefClosedCompleted(before, issueRef)) await advanceTerminalPlanRefsAsync({ issueRefId: issueRef.id });
@@ -152,9 +152,9 @@ export const patchIssueRefRoute: Handler = async (req, params) => {
152
152
  }
153
153
  };
154
154
 
155
- export const deleteIssueRefRoute: Handler = (_req, params) => {
155
+ export const deleteIssueRefRoute: Handler = async (_req, params) => {
156
156
  try {
157
- const deleted = deleteIssueRefMapping(cleanString(params.id, "id", { required: true, max: 120 })!);
157
+ const deleted = await deleteIssueRefMappingAsync(cleanString(params.id, "id", { required: true, max: 120 })!);
158
158
  if (!deleted) return error("issue ref not found", 404);
159
159
  return json({ deleted });
160
160
  } catch (err) {
@@ -22,7 +22,7 @@ export const postTimerMessageOperator: Handler = async (req, params) => {
22
22
  // Unlike routine routes in allow-unauth development mode, the migration trigger always requires
23
23
  // an actual credential. This keeps "authenticated" a property of the action, not deployment mode.
24
24
  if (!hasPresentedCredential(req)) return error("authentication required", 401);
25
- const denied = authorizeRoute(req, { scope: "system:admin" });
25
+ const denied = (await authorizeRoute(req, { scope: "system:admin" }));
26
26
  if (denied) return denied;
27
27
  const actor = resolveActorLabel(req);
28
28
  if (!actor) return error("authenticated operator identity required", 403);
@@ -7,7 +7,7 @@ import { authorizeRoute, error, json, parseBody, type Handler } from "./_shared"
7
7
  // that area's memories (src/memory-area-injection.ts).
8
8
  export const postAgentAreaEntered: Handler = async (req, params) => {
9
9
  const agentId = params.id!;
10
- const denied = authorizeRoute(req, { scope: "agent:write", resource: { agentId } });
10
+ const denied = (await authorizeRoute(req, { scope: "agent:write", resource: { agentId } }));
11
11
  if (denied) return denied;
12
12
  const ctx = authContextFromRequest(req);
13
13
  if (ctx.actor.kind !== "system" && ctx.callerAgentId !== agentId) return error("forbidden: only the agent's own runner may report its area touches", 403);
@@ -22,8 +22,8 @@ function actorFromRequest(req: Request): string {
22
22
  : "root";
23
23
  }
24
24
 
25
- export const getMergePauses: Handler = (req) => {
26
- const denied = authorizeRoute(req, { scope: "command:read" });
25
+ export const getMergePauses: Handler = async (req) => {
26
+ const denied = (await authorizeRoute(req, { scope: "command:read" }));
27
27
  if (denied) return denied;
28
28
  return json({ pauses: listAutoMergePauses() });
29
29
  };
@@ -37,13 +37,13 @@ export const getMergePauses: Handler = (req) => {
37
37
  * indefinitely, and #2094's fast reclaim covers whatever the interlock misses.
38
38
  */
39
39
  export const getMergeDrain: Handler = async (req) => {
40
- const denied = authorizeRoute(req, { scope: "command:read" });
40
+ const denied = (await authorizeRoute(req, { scope: "command:read" }));
41
41
  if (denied) return denied;
42
42
  return json(await workspaceMergeDrainStatusAsync());
43
43
  };
44
44
 
45
45
  export const postMergePause: Handler = async (req) => {
46
- const denied = authorizeRoute(req, { scope: "command:write" });
46
+ const denied = (await authorizeRoute(req, { scope: "command:write" }));
47
47
  if (denied) return denied;
48
48
  const parsed = await parseBody<unknown>(req);
49
49
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -54,7 +54,7 @@ export const postMergePause: Handler = async (req) => {
54
54
  const holder = cleanString(parsed.body.holder, "holder", { max: 240 }) ?? actorFromRequest(req);
55
55
  const reason = cleanString(parsed.body.reason, "reason", { max: 500 });
56
56
  const ttlMs = cleanTtlMs(parsed.body.ttlMs);
57
- const result = pauseAutoMerge({ repoRoot, baseRef, holder, reason, ttlMs });
57
+ const result = (await pauseAutoMerge({ repoRoot, baseRef, holder, reason, ttlMs }));
58
58
  if (!result.ok) {
59
59
  return json({ error: "merge target already paused", pause: result.pause }, 409);
60
60
  }
@@ -66,7 +66,7 @@ export const postMergePause: Handler = async (req) => {
66
66
  };
67
67
 
68
68
  export const postMergePauseRenew: Handler = async (req) => {
69
- const denied = authorizeRoute(req, { scope: "command:write" });
69
+ const denied = (await authorizeRoute(req, { scope: "command:write" }));
70
70
  if (denied) return denied;
71
71
  const parsed = await parseBody<unknown>(req);
72
72
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -74,7 +74,7 @@ export const postMergePauseRenew: Handler = async (req) => {
74
74
  if (!isRecord(parsed.body)) return error("body required");
75
75
  const id = cleanString(parsed.body.id, "id", { required: true, max: 120 })!;
76
76
  const ttlMs = cleanTtlMs(parsed.body.ttlMs);
77
- const pause = renewAutoMergePause(id, ttlMs);
77
+ const pause = (await renewAutoMergePause(id, ttlMs));
78
78
  return pause ? json({ pause }) : error("merge pause not found or expired", 404);
79
79
  } catch (e) {
80
80
  if (e instanceof ValidationError) return error(e.message, 400);
@@ -83,7 +83,7 @@ export const postMergePauseRenew: Handler = async (req) => {
83
83
  };
84
84
 
85
85
  export const postMergePauseResume: Handler = async (req) => {
86
- const denied = authorizeRoute(req, { scope: "command:write" });
86
+ const denied = (await authorizeRoute(req, { scope: "command:write" }));
87
87
  if (denied) return denied;
88
88
  const parsed = await parseBody<unknown>(req);
89
89
  if (!parsed.ok) return error(parsed.error, parsed.status);
@@ -93,7 +93,7 @@ export const postMergePauseResume: Handler = async (req) => {
93
93
  const repoRoot = cleanString(parsed.body.repoRoot, "repoRoot", { max: 1000 });
94
94
  const baseRef = cleanString(parsed.body.baseRef, "baseRef", { max: 240 });
95
95
  if (!id && !repoRoot) return error("id or repoRoot required", 400);
96
- const released = resumeAutoMerge(id ? { id } : { repoRoot: repoRoot!, baseRef: baseRef ?? "main" });
96
+ const released = (await resumeAutoMerge(id ? { id } : { repoRoot: repoRoot!, baseRef: baseRef ?? "main" }));
97
97
  return json({ released });
98
98
  } catch (e) {
99
99
  if (e instanceof ValidationError) return error(e.message, 400);
@@ -101,8 +101,8 @@ export const postMergePauseResume: Handler = async (req) => {
101
101
  }
102
102
  };
103
103
 
104
- export const getMergePauseById: Handler = (req, params) => {
105
- const denied = authorizeRoute(req, { scope: "command:read" });
104
+ export const getMergePauseById: Handler = async (req, params) => {
105
+ const denied = (await authorizeRoute(req, { scope: "command:read" }));
106
106
  if (denied) return denied;
107
107
  const pause = getAutoMergePause(params.id!);
108
108
  return pause ? json(pause) : error("merge pause not found", 404);