@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,384 +0,0 @@
1
- import { RELAY_TOKEN_HEADER, HUMWICK_TOKEN_HEADER } from "@humwick/sdk";
2
- import { OpenAPIHono } from "@hono/zod-openapi";
3
- import type { Context } from "hono";
4
- import type { ContentfulStatusCode } from "hono/utils/http-status";
5
- import { z } from "zod";
6
- import {
7
- type Grant,
8
- type HttpMethod,
9
- type ModuleDefinition,
10
- type ModuleManifest,
11
- type OpDecl,
12
- OpError,
13
- } from "./contract";
14
- import { httpRouteCollisionKey } from "./manifest-validation";
15
- import { advertisedScopesOf } from "./mcp-transport";
16
- import type { InvocationIdentity, ModuleHost } from "./module-host";
17
-
18
- /**
19
- * K6b-1 — the HTTP transport, *derived* from a `defineModule` manifest.
20
- *
21
- * There is no hand-written per-op route code here. {@link deriveHttpRoutes} reads each op's
22
- * manifest `http: { method, path }` declaration (K6-contract §OpDecl) and produces the route
23
- * list; both the Hono router and the OpenAPI document are built from that single list, so the
24
- * served surface and the generated spec cannot drift.
25
- *
26
- * The transport is deliberately thin. It does NOT re-implement any kernel gate: every request is
27
- * (a) parsed into the op's raw input, (b) handed to {@link ModuleHost.invoke}, which owns
28
- * authorization (default-deny), input/output validation, and the atomic entity+event commit, and
29
- * (c) mapped from the typed result / {@link OpError} back to an HTTP response. No request
30
- * validation middleware runs at the edge — the invoker is the single validation/authz authority,
31
- * so there is no path that reaches a handler without passing through it.
32
- */
33
-
34
- /** How the edge resolves the caller identity for one request. The owning scope is kernel-injected
35
- * by the invoker (always `local` today); the edge supplies only actor + grants, exactly as K6a. */
36
- export type IdentityResolver = (c: Context) => InvocationIdentity;
37
-
38
- /** Default-deny at the edge: absent an explicit resolver, every request carries no grants, so the
39
- * invoker denies every op with a 403 before any handler or session runs. */
40
- const DEFAULT_DENY_IDENTITY: InvocationIdentity = Object.freeze({ actor: "anonymous", grants: [] });
41
-
42
- export interface HttpTransportOptions {
43
- /** Resolve the request Principal. Defaults to a no-grant identity (default-deny end-to-end). */
44
- readonly identify?: IdentityResolver;
45
- /** Where the generated OpenAPI document is served. Defaults to `/openapi.json`. */
46
- readonly docPath?: string;
47
- /** Whether to serve the generated OpenAPI document at all. Defaults to `true` (unchanged behavior).
48
- * A future `/api/kernel` mount can set this `false` to withhold the public doc route and gate the
49
- * spec itself behind its own auth — this option only omits the built-in unauthenticated doc route;
50
- * it is NOT wired to any mount here. */
51
- readonly serveOpenApiDoc?: boolean;
52
- /** OpenAPI `info` block. Title/version default from the manifest. */
53
- readonly info?: { readonly title?: string; readonly version?: string };
54
- }
55
-
56
- /** One HTTP endpoint derived from an op's `http` declaration. The router and the OpenAPI doc are
57
- * both generated from these — the sole source of the served surface. */
58
- export interface DerivedHttpRoute {
59
- readonly opName: string;
60
- readonly op: OpDecl;
61
- readonly method: HttpMethod;
62
- /** OpenAPI-style path with `{param}` placeholders (as declared in the manifest). */
63
- readonly openapiPath: string;
64
- /** Hono-style path with `:param` placeholders (what the router mounts). */
65
- readonly honoPath: string;
66
- readonly paramNames: readonly string[];
67
- /** True for methods that carry a request body (POST/PUT/PATCH); false for GET/DELETE/HEAD. */
68
- readonly hasBody: boolean;
69
- /** The success status the router returns and the OpenAPI doc declares (POST → 201, else 200). */
70
- readonly successStatus: number;
71
- readonly grant: Grant;
72
- readonly kind: "query" | "mutation";
73
- }
74
-
75
- /** Faithful `OpError.code` → HTTP status map (matches the codes the invoker mints). Falls back to
76
- * the error's own status, then 500, so an unmapped code can never masquerade as success. */
77
- const CODE_TO_STATUS: Readonly<Record<string, number>> = {
78
- unknown_op: 404,
79
- not_found: 404,
80
- unauthorized: 403,
81
- invalid_input: 400,
82
- conflict: 409,
83
- invalid_output: 500,
84
- };
85
-
86
- function statusForOpError(error: OpError): number {
87
- return CODE_TO_STATUS[error.code] ?? error.status ?? 500;
88
- }
89
-
90
- const BODY_METHODS: ReadonlySet<HttpMethod> = new Set(["POST", "PUT", "PATCH"]);
91
- const PARAM_PATTERN = /\{([^}]+)\}/g;
92
-
93
- function paramNamesOf(openapiPath: string): string[] {
94
- return [...openapiPath.matchAll(PARAM_PATTERN)].map((m) => m[1]!);
95
- }
96
-
97
- function toHonoPath(openapiPath: string): string {
98
- return openapiPath.replace(PARAM_PATTERN, ":$1");
99
- }
100
-
101
- /** The declared key set of a Zod object schema, or null when the schema is not a plain object. */
102
- function objectKeys(schema: unknown): string[] | null {
103
- const shape = (schema as { shape?: Record<string, unknown> } | undefined)?.shape;
104
- return shape && typeof shape === "object" ? Object.keys(shape) : null;
105
- }
106
-
107
- /** Drop the path-param fields from an object input, leaving the query/body portion. */
108
- function omitParams(schema: z.ZodType, paramNames: readonly string[]): z.ZodType {
109
- if (paramNames.length === 0) return schema;
110
- const omittable = schema as unknown as { omit?: (mask: Record<string, true>) => z.ZodType };
111
- if (typeof omittable.omit !== "function") return schema;
112
- try {
113
- return omittable.omit(Object.fromEntries(paramNames.map((n) => [n, true as const])));
114
- } catch {
115
- return schema;
116
- }
117
- }
118
-
119
- /**
120
- * Derive the HTTP route list from a manifest: one {@link DerivedHttpRoute} per op that declares an
121
- * `http: { method, path }`. This is the single derivation both the router and the OpenAPI document
122
- * consume — there is no second, hand-written list to fall out of sync with.
123
- */
124
- export function deriveHttpRoutes(module: ModuleDefinition): DerivedHttpRoute[] {
125
- const routes: DerivedHttpRoute[] = [];
126
- // Defense-in-depth: `assertValidManifest` already rejects a method+path collision at
127
- // `defineModule` time. Guard again here so a route collision can never silently reach the router
128
- // (first-registered wins) and the OpenAPI doc (last-registered wins) in different directions.
129
- const seenBy = new Map<string, string>();
130
- const ops = module.ops ?? {};
131
- for (const [opName, op] of Object.entries(ops)) {
132
- const http = op.http;
133
- if (!http) continue;
134
- // An explicit `expose.http === false` opts an op out of the HTTP surface even if it carries a
135
- // route declaration; anything else with an `http` decl is served.
136
- if (op.expose && op.expose.http === false) continue;
137
- const openapiPath = http.path;
138
- const routeKey = httpRouteCollisionKey(http.method, openapiPath);
139
- const collidesWith = seenBy.get(routeKey);
140
- if (collidesWith !== undefined) {
141
- throw new Error(`duplicate HTTP route '${http.method} ${openapiPath}': declared by both '${collidesWith}' and '${opName}' (path params are matched by position, not name)`);
142
- }
143
- seenBy.set(routeKey, opName);
144
- routes.push({
145
- opName,
146
- op,
147
- method: http.method,
148
- openapiPath,
149
- honoPath: toHonoPath(openapiPath),
150
- paramNames: paramNamesOf(openapiPath),
151
- hasBody: BODY_METHODS.has(http.method),
152
- successStatus: http.method === "POST" ? 201 : 200,
153
- grant: op.grant,
154
- kind: op.kind,
155
- });
156
- }
157
- return routes;
158
- }
159
-
160
- /** The shared error-body schema (the invoker's typed failure, incl. the invalid_input field map). */
161
- const errorSchema = z.object({
162
- error: z.object({
163
- code: z.string(),
164
- message: z.string(),
165
- fields: z.record(z.string(), z.array(z.string())).optional(),
166
- }),
167
- });
168
-
169
- function componentName(moduleId: string, opName: string, suffix: "Input" | "Output"): string {
170
- const pascal = (s: string) => s.replace(/(^|[-_.])(\w)/g, (_, __, c: string) => c.toUpperCase());
171
- return `${pascal(moduleId)}_${pascal(opName)}_${suffix}`;
172
- }
173
-
174
- /** The REAL transport auth schemes the Kernel accepts, matching how the rest of humwick
175
- * authenticates (`docs/openapi.json` + the Dashboard `dashboard/src/lib/api.ts`): a component token
176
- * presented as an HTTP bearer, or in the `X-Agent-Relay-Token` header. There is NO OAuth deployment
177
- * behind `/api/kernel` — the previous `oauth2` + `urn:kernel:control` scheme was fake metadata (sol
178
- * finding 2). Per OpenAPI §4.8.5 an `http`/`apiKey` scheme's SecurityRequirement scope array MUST be
179
- * empty, so the per-op grant requirement is advertised out-of-band in the {@link RELAY_SCOPES_EXTENSION}
180
- * operation extension instead — advisory only; the invoker's default-deny is the actual gate. */
181
- const BEARER_SCHEME = "bearerAuth";
182
- const TOKEN_HEADER_SCHEME = "tokenHeader";
183
- const TOKEN_HEADER_NAME = RELAY_TOKEN_HEADER;
184
- const HUMWICK_TOKEN_SCHEME = "humwickTokenHeader";
185
-
186
- /** The vendor extension each operation carries its advisory grant requirement under (O3). It mirrors
187
- * the derived MCP tool's `requiredScopes` — the SAME {@link advertisedScopesOf} derivation — so the
188
- * HTTP surface names the honest requirement (e.g. `control:admin` for an admin-only read) without
189
- * abusing the security scope array, which must stay empty for token schemes. */
190
- const RELAY_SCOPES_EXTENSION = "x-relay-scopes";
191
-
192
- /** The security requirement one op advertises: the caller may authenticate with EITHER real scheme
193
- * (bearer OR the token header — an OR list of single-scheme requirements), each with an empty scope
194
- * array as the spec requires. The advisory grant requirement rides {@link RELAY_SCOPES_EXTENSION}. */
195
- function securityFor(): Array<Record<string, string[]>> {
196
- return [{ [BEARER_SCHEME]: [] }, { [TOKEN_HEADER_SCHEME]: [] }, { [HUMWICK_TOKEN_SCHEME]: [] }];
197
- }
198
-
199
- /** Register bearer and both component-token header spellings (#3470). Registered
200
- * only when at least one route exists (an empty module advertises nothing). */
201
- function registerSecurityScheme(registry: OpenAPIHono["openAPIRegistry"], routes: readonly DerivedHttpRoute[]): void {
202
- if (routes.length === 0) return;
203
- registry.registerComponent("securitySchemes", BEARER_SCHEME, {
204
- type: "http",
205
- scheme: "bearer",
206
- bearerFormat: "JWT",
207
- description: "Humwick component token (JWT) presented as `Authorization: Bearer <token>`. The Kernel derives the caller's identity and scopes solely from this verified token.",
208
- });
209
- registry.registerComponent("securitySchemes", HUMWICK_TOKEN_SCHEME, {
210
- type: "apiKey", in: "header", name: HUMWICK_TOKEN_HEADER,
211
- description: "Humwick component token. Equivalent to bearer authentication.",
212
- });
213
- registry.registerComponent("securitySchemes", TOKEN_HEADER_SCHEME, {
214
- type: "apiKey",
215
- in: "header",
216
- name: TOKEN_HEADER_NAME,
217
- description: `Humwick component token presented in the \`${TOKEN_HEADER_NAME}\` header (the Dashboard path). Equivalent to the bearer scheme.`,
218
- });
219
- }
220
-
221
- /**
222
- * Register every derived route on an {@link OpenAPIHono}: its OpenAPI path + I/O component schemas,
223
- * and — when a host is supplied — its serving handler. Doc-only registration (no host) and full
224
- * serving registration walk the identical route list, so `app.getOpenAPIDocument()` always
225
- * describes exactly what the router serves.
226
- */
227
- function registerModule<M extends ModuleManifest>(
228
- app: OpenAPIHono,
229
- module: ModuleDefinition<M>,
230
- host: ModuleHost | undefined,
231
- identify: IdentityResolver,
232
- ): void {
233
- const registry = app.openAPIRegistry;
234
- const errorRef = registry.register("Error", errorSchema);
235
- const errorContent = { content: { "application/json": { schema: errorRef } } };
236
-
237
- const routes = deriveHttpRoutes(module);
238
- if (routes.length > 0) registerSecurityScheme(registry, routes);
239
-
240
- for (const route of routes) {
241
- const { op, opName } = route;
242
- const inputRef = registry.register(componentName(module.id, opName, "Input"), op.input as z.ZodType);
243
- const outputRef = registry.register(componentName(module.id, opName, "Output"), op.output as z.ZodType);
244
-
245
- // Request shape: path params are always strings on the wire; the remaining input fields are the
246
- // JSON body (body methods) or the query string (GET/DELETE/HEAD).
247
- const request: Record<string, unknown> = {};
248
- if (route.paramNames.length > 0) {
249
- request.params = z.object(Object.fromEntries(route.paramNames.map((n) => [n, z.string()])));
250
- }
251
- const nonParamKeys = objectKeys(op.input);
252
- const hasNonParamFields = nonParamKeys === null || nonParamKeys.some((k) => !route.paramNames.includes(k));
253
- if (route.hasBody) {
254
- request.body = { content: { "application/json": { schema: inputRef } }, required: hasNonParamFields };
255
- } else if (hasNonParamFields) {
256
- request.query = omitParams(op.input as z.ZodType, route.paramNames);
257
- }
258
-
259
- // The success response plus the transport's faithful error surface — 404/403 apply to every op,
260
- // 400 to every op (input is always validated), 409 to mutations, 500 always (invalid_output).
261
- const responses: Record<string, unknown> = {
262
- [route.successStatus]: {
263
- description: op.summary,
264
- content: { "application/json": { schema: outputRef } },
265
- },
266
- 400: { description: "invalid input", ...errorContent },
267
- 403: { description: "unauthorized", ...errorContent },
268
- 404: { description: "not found", ...errorContent },
269
- 500: { description: "internal error", ...errorContent },
270
- };
271
- if (route.kind === "mutation") responses[409] = { description: "conflict", ...errorContent };
272
-
273
- registry.registerPath({
274
- method: route.method.toLowerCase() as Lowercase<HttpMethod>,
275
- path: route.openapiPath,
276
- summary: op.summary,
277
- operationId: `${module.id}.${opName}`,
278
- // The caller authenticates with a real component token (bearer OR X-Agent-Relay-Token). The
279
- // security scope arrays stay empty (spec §4.8.5); the op's REAL grant requirement — derived
280
- // identically to the MCP side (O3) — is advertised in the `x-relay-scopes` extension so the
281
- // published surface never names a scope that always 403s. Advisory only — never the gate.
282
- security: securityFor(),
283
- [RELAY_SCOPES_EXTENSION]: [...advertisedScopesOf(op)],
284
- request,
285
- responses,
286
- } as unknown as Parameters<typeof registry.registerPath>[0]);
287
-
288
- if (host) mountHandler(app, module, route, host, identify);
289
- }
290
- }
291
-
292
- /** Mount one op's serving handler: resolve identity → assemble raw op input → delegate to the
293
- * invoker → map the result / typed OpError back to HTTP. No gate is duplicated here. */
294
- function mountHandler<M extends ModuleManifest>(
295
- app: OpenAPIHono,
296
- module: ModuleDefinition<M>,
297
- route: DerivedHttpRoute,
298
- host: ModuleHost,
299
- identify: IdentityResolver,
300
- ): void {
301
- app.on(route.method, route.honoPath, async (c) => {
302
- const identity = identify(c);
303
- const rawInput = await assembleInput(c, route);
304
- try {
305
- const result = await host.invoke(module, route.opName, identity, rawInput);
306
- return c.json(result as never, route.successStatus as ContentfulStatusCode);
307
- } catch (error) {
308
- if (error instanceof OpError) {
309
- // `invalid_output` means the op handler itself returned data that violates its own
310
- // declared schema — a server-side bug, not caller-facing feedback like `invalid_input`.
311
- // Report it generically so its Zod field map / schema-shaped message never reaches the
312
- // client, mirroring the non-OpError catch below.
313
- const body = error.code === "invalid_output"
314
- ? { error: { code: error.code, message: "internal error" } }
315
- : {
316
- error: {
317
- code: error.code,
318
- message: error.message,
319
- ...(error.fields ? { fields: error.fields } : {}),
320
- },
321
- };
322
- return c.json(body, statusForOpError(error) as ContentfulStatusCode);
323
- }
324
- // A handler that throws a non-OpError has already been rolled back by the invoker; surface a
325
- // generic 500 without leaking internal detail.
326
- return c.json({ error: { code: "internal_error", message: "internal error" } }, 500);
327
- }
328
- });
329
- }
330
-
331
- /** Assemble the op's raw input from the request: path params (authoritative) layered over the JSON
332
- * body (body methods) or the query string (otherwise). All validation/coercion is the op schema's
333
- * job, applied by the invoker — the transport never inspects or reshapes field types. */
334
- async function assembleInput(c: Context, route: DerivedHttpRoute): Promise<unknown> {
335
- let base: Record<string, unknown> = {};
336
- if (route.hasBody) {
337
- try {
338
- const parsed = await c.req.json();
339
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) base = parsed as Record<string, unknown>;
340
- } catch {
341
- // Missing/invalid JSON body → empty object; the invoker's input validation reports the 400.
342
- }
343
- } else {
344
- base = { ...c.req.query() };
345
- }
346
- return { ...base, ...c.req.param() };
347
- }
348
-
349
- /** Build a standalone OpenAPI document from the manifest (no serving). Uses the identical route
350
- * registration as {@link createHttpApp}, so it matches the served surface byte-for-byte. */
351
- export function buildOpenApiDocument<M extends ModuleManifest>(
352
- module: ModuleDefinition<M>,
353
- options: HttpTransportOptions = {},
354
- ) {
355
- const app = new OpenAPIHono();
356
- registerModule(app, module, undefined, options.identify ?? (() => DEFAULT_DENY_IDENTITY));
357
- return app.getOpenAPIDocument({
358
- openapi: "3.0.0",
359
- info: { title: options.info?.title ?? module.title, version: options.info?.version ?? "0.0.0" },
360
- });
361
- }
362
-
363
- /**
364
- * Derive a fully served HTTP surface from a manifest: mount every `http`-declared op through the
365
- * K6a invoker and serve the matching OpenAPI document. Exercise it in-process with
366
- * `app.request(...)` — no network bind required.
367
- */
368
- export function createHttpApp<M extends ModuleManifest>(
369
- host: ModuleHost,
370
- module: ModuleDefinition<M>,
371
- options: HttpTransportOptions = {},
372
- ): OpenAPIHono {
373
- const app = new OpenAPIHono();
374
- const identify = options.identify ?? (() => DEFAULT_DENY_IDENTITY);
375
- registerModule(app, module, host, identify);
376
- if (options.serveOpenApiDoc !== false) {
377
- app.doc(options.docPath ?? "/openapi.json", {
378
- openapi: "3.0.0",
379
- info: { title: options.info?.title ?? module.title, version: options.info?.version ?? "0.0.0" },
380
- });
381
- }
382
- app.notFound((c) => c.json({ error: { code: "not_found", message: "no route for this request" } }, 404));
383
- return app;
384
- }
@@ -1,20 +0,0 @@
1
- const MODULE_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
2
- const RESOURCE_GRANT = /^([a-z][a-z0-9]*(?:-[a-z0-9]+)*):(read|write|admin)$/;
3
- const COMMAND_GRANT = /^command:([a-z][a-z0-9]*(?:-[a-z0-9]+)*|\*)$/;
4
- const RESERVED_MODULE_IDS = new Set(["command"]);
5
-
6
- export function matchesModuleId(value: unknown): value is string {
7
- return typeof value === "string" && MODULE_ID.test(value) && !RESERVED_MODULE_IDS.has(value);
8
- }
9
-
10
- export function matchesGrant(value: unknown): value is string {
11
- return typeof value === "string" && (RESOURCE_GRANT.test(value) || COMMAND_GRANT.test(value));
12
- }
13
-
14
- export function matchResourceGrant(value: string): RegExpExecArray | null {
15
- return RESOURCE_GRANT.exec(value);
16
- }
17
-
18
- export function matchesCommandGrant(value: string): boolean {
19
- return COMMAND_GRANT.test(value);
20
- }
@@ -1,248 +0,0 @@
1
- import type { Grant, Principal, ResolvedIdentity, Scope } from "./contract";
2
- import { matchResourceGrant, matchesCommandGrant, matchesGrant, matchesModuleId } from "./identity-grammar";
3
-
4
- const CONTROL_CHARACTER = /[\u0000-\u001f\u007f]/;
5
-
6
- /** Compatibility aliases are intentionally kept out of the module-facing Grant type. */
7
- export const LEGACY_SCOPE_GRANTS = Object.freeze({
8
- "message:send": "message:write",
9
- "mcp:use": "mcp:admin",
10
- } as const satisfies Readonly<Record<string, Grant>>);
11
-
12
- export type LegacyScope = keyof typeof LEGACY_SCOPE_GRANTS;
13
-
14
- export interface IdentityClaims {
15
- readonly actor: string;
16
- readonly scope: string;
17
- readonly grants: readonly string[];
18
- /** Opaque server-resolved creator attributes carried through to the {@link Principal} verbatim
19
- * (P2-7 durable-effect identity freezing). Never validated against the grant grammar. */
20
- readonly resolvedIdentity?: ResolvedIdentity;
21
- }
22
-
23
- export interface LegacyIdentityClaims {
24
- readonly actor: string;
25
- readonly scope: string;
26
- readonly scopes: readonly string[];
27
- }
28
-
29
- export interface AuthorizationRequirement {
30
- /** The manifest that owns the operation being invoked. */
31
- readonly moduleId: string;
32
- /** The operation's declared grant. */
33
- readonly grant: Grant;
34
- }
35
-
36
- export class IdentityResolutionError extends Error {
37
- constructor(
38
- readonly field: "actor" | "scope" | "grants" | "scopes",
39
- message: string,
40
- ) {
41
- super(`invalid identity ${field}: ${message}`);
42
- this.name = "IdentityResolutionError";
43
- }
44
- }
45
-
46
- export class AuthorizationError extends Error {
47
- constructor(
48
- readonly actor: string,
49
- readonly moduleId: string,
50
- readonly requiredGrant: Grant,
51
- ) {
52
- super(`actor '${actor}' is not authorized for '${moduleId}' (requires '${requiredGrant}')`);
53
- this.name = "AuthorizationError";
54
- }
55
- }
56
-
57
- class ImmutableGrantSet implements ReadonlySet<Grant> {
58
- readonly #values: Set<Grant>;
59
-
60
- constructor(values: Iterable<Grant>) {
61
- this.#values = new Set(values);
62
- Object.freeze(this);
63
- }
64
-
65
- get size(): number {
66
- return this.#values.size;
67
- }
68
-
69
- has(value: Grant): boolean {
70
- return this.#values.has(value);
71
- }
72
-
73
- entries(): SetIterator<[Grant, Grant]> {
74
- return this.#values.entries();
75
- }
76
-
77
- keys(): SetIterator<Grant> {
78
- return this.#values.keys();
79
- }
80
-
81
- values(): SetIterator<Grant> {
82
- return this.#values.values();
83
- }
84
-
85
- forEach(callbackfn: (value: Grant, value2: Grant, set: ReadonlySet<Grant>) => void, thisArg?: unknown): void {
86
- for (const value of this.#values) callbackfn.call(thisArg, value, value, this);
87
- }
88
-
89
- union<U>(other: ReadonlySetLike<U>): Set<Grant | U> {
90
- const result = new Set<Grant | U>(this.#values);
91
- forEachSetLike(other, (value) => result.add(value));
92
- return result;
93
- }
94
-
95
- intersection<U>(other: ReadonlySetLike<U>): Set<Grant & U> {
96
- const result = new Set<Grant & U>();
97
- for (const value of this.#values) {
98
- if ((other as ReadonlySetLike<unknown>).has(value)) result.add(value as Grant & U);
99
- }
100
- return result;
101
- }
102
-
103
- difference<U>(other: ReadonlySetLike<U>): Set<Grant> {
104
- const result = new Set<Grant>();
105
- for (const value of this.#values) {
106
- if (!(other as ReadonlySetLike<unknown>).has(value)) result.add(value);
107
- }
108
- return result;
109
- }
110
-
111
- symmetricDifference<U>(other: ReadonlySetLike<U>): Set<Grant | U> {
112
- const result = this.union(other);
113
- for (const value of this.#values) {
114
- if ((other as ReadonlySetLike<unknown>).has(value)) result.delete(value);
115
- }
116
- return result;
117
- }
118
-
119
- isSubsetOf(other: ReadonlySetLike<unknown>): boolean {
120
- for (const value of this.#values) {
121
- if (!other.has(value)) return false;
122
- }
123
- return true;
124
- }
125
-
126
- isSupersetOf(other: ReadonlySetLike<unknown>): boolean {
127
- let isSuperset = true;
128
- forEachSetLike(other, (value) => {
129
- if (!this.#values.has(value as Grant)) isSuperset = false;
130
- });
131
- return isSuperset;
132
- }
133
-
134
- isDisjointFrom(other: ReadonlySetLike<unknown>): boolean {
135
- for (const value of this.#values) {
136
- if (other.has(value)) return false;
137
- }
138
- return true;
139
- }
140
-
141
- [Symbol.iterator](): SetIterator<Grant> {
142
- return this.values();
143
- }
144
-
145
- get [Symbol.toStringTag](): string {
146
- return "ImmutableGrantSet";
147
- }
148
- }
149
-
150
- /** True only for the ratified flat runtime grammar; malformed/multi-colon grants fail closed. */
151
- export function isGrant(value: unknown): value is Grant {
152
- return matchesGrant(value);
153
- }
154
-
155
- /**
156
- * Convert old token scopes at the transport boundary. Strict grants pass through unchanged;
157
- * only the two enumerated legacy spellings are translated, and every other malformed scope
158
- * rejects the identity rather than being ignored or widened.
159
- */
160
- export function adaptLegacyScopes(scopes: readonly string[]): readonly Grant[] {
161
- const grants = new Set<Grant>();
162
- for (const scope of scopes) {
163
- const adapted = Object.hasOwn(LEGACY_SCOPE_GRANTS, scope)
164
- ? LEGACY_SCOPE_GRANTS[scope as LegacyScope]
165
- : scope;
166
- if (!isGrant(adapted)) {
167
- throw new IdentityResolutionError("scopes", `unsupported or malformed scope '${scope}'`);
168
- }
169
- grants.add(adapted);
170
- }
171
- return Object.freeze([...grants]);
172
- }
173
-
174
- /** Mint the module-visible principal from already-resolved, strict identity claims. */
175
- export function resolveIdentity(claims: IdentityClaims): Principal {
176
- validateIdentityLabel(claims.actor, "actor");
177
- validateIdentityLabel(claims.scope, "scope");
178
-
179
- const grants = new Set<Grant>();
180
- for (const grant of claims.grants) {
181
- if (!isGrant(grant)) {
182
- throw new IdentityResolutionError("grants", `unsupported or malformed grant '${grant}'`);
183
- }
184
- grants.add(grant);
185
- }
186
-
187
- return Object.freeze({
188
- actor: claims.actor,
189
- scope: claims.scope as Scope,
190
- grants: new ImmutableGrantSet(grants),
191
- // Opaque passthrough — the kernel never interprets these; a module freezes them into a durable
192
- // effect's create-time identity. Frozen shallow so the principal stays immutable.
193
- ...(claims.resolvedIdentity ? { resolvedIdentity: Object.freeze({ ...claims.resolvedIdentity }) } : {}),
194
- });
195
- }
196
-
197
- /** Explicit compatibility entry point for legacy token scope arrays. */
198
- export function resolveLegacyIdentity(claims: LegacyIdentityClaims): Principal {
199
- return resolveIdentity({
200
- actor: claims.actor,
201
- scope: claims.scope,
202
- grants: adaptLegacyScopes(claims.scopes),
203
- });
204
- }
205
-
206
- /**
207
- * Default-deny authorization for an operation declaration.
208
- *
209
- * Resource grants must name the invoked module exactly. The global `command:` namespace is the
210
- * deliberate exception, including command names that happen to be `read`, `write`, or `admin`.
211
- * Grants are independent capabilities: `admin` does not imply `read` or `write`. `command:*` is
212
- * the sole wildcard and applies only to well-formed `command:<name>` requirements.
213
- */
214
- export function isAuthorized(principal: Principal, requirement: AuthorizationRequirement): boolean {
215
- if (!matchesModuleId(requirement.moduleId) || !isGrant(requirement.grant)) return false;
216
-
217
- if (matchesCommandGrant(requirement.grant)) {
218
- return principal.grants.has(requirement.grant)
219
- || (requirement.grant !== "command:*" && principal.grants.has("command:*"));
220
- }
221
-
222
- const resource = matchResourceGrant(requirement.grant);
223
- if (resource) {
224
- const [, grantModule] = resource;
225
- if (grantModule !== requirement.moduleId) return false;
226
- return principal.grants.has(requirement.grant);
227
- }
228
-
229
- return false;
230
- }
231
-
232
- /** Throwing counterpart for kernel wrappers that must stop before invoking a handler. */
233
- export function assertAuthorized(principal: Principal, requirement: AuthorizationRequirement): void {
234
- if (!isAuthorized(principal, requirement)) {
235
- throw new AuthorizationError(principal.actor, requirement.moduleId, requirement.grant);
236
- }
237
- }
238
-
239
- function validateIdentityLabel(value: string, field: "actor" | "scope"): void {
240
- if (typeof value !== "string" || value.length === 0 || value.trim() !== value || CONTROL_CHARACTER.test(value)) {
241
- throw new IdentityResolutionError(field, "must be a non-empty, trimmed string without control characters");
242
- }
243
- }
244
-
245
- function forEachSetLike<T>(set: ReadonlySetLike<T>, fn: (value: T) => void): void {
246
- const iterator = set.keys();
247
- for (let next = iterator.next(); !next.done; next = iterator.next()) fn(next.value);
248
- }
@@ -1,28 +0,0 @@
1
- // MUST be first: extends zod with `.openapi()` before any module below builds its schemas, so every
2
- // module's derived HTTP/OpenAPI surface (createHttpApp) works irrespective of export order. See file.
3
- import "./openapi-init";
4
-
5
- export * from "./config";
6
- export * from "./contract";
7
- export * from "./control";
8
- export * from "./control-authz";
9
- export * from "./effects";
10
- export * from "./event-log";
11
- export * from "./http-transport";
12
- export * from "./identity";
13
- export * from "./kernel-persistence";
14
- export * from "./manifest-validation";
15
- export * from "./message-authority";
16
- export * from "./mcp-transport";
17
- export * from "./module-host";
18
- // Named re-export (NOT `export *`): the test/chaos-only `commitAtomically` in sqlite-module-host takes a
19
- // raw `Database` and runs a synchronous transaction, so it is deliberately kept OFF the public
20
- // `@humwick/kernel` root surface (#1910 K3 review). Only `createSqliteModuleHost` (the sanctioned
21
- // raw-handle test host) is public; kernel unit tests import `commitAtomically` via the relative path.
22
- export { createSqliteModuleHost, type SqliteModuleHostOptions } from "./sqlite-module-host";
23
- export * from "./persistence";
24
- export * from "./registry";
25
- export * from "./workflow-journal";
26
- export * from "./workflow-journal-codec";
27
- export * from "./workflow-runtime";
28
- export * from "./workflow-step-commit";