@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.
- package/README.md +5 -0
- package/bundled/prompts/manifest.json +1 -0
- package/bundled/prompts/task.hydration.md +1 -1
- package/bundled/roles/builder.md +1 -1
- package/docs/guides/sub-coordinators.md +12 -5
- package/docs/guides/tools-administration.md +4 -0
- package/docs/guides/tools-coordination.md +2 -0
- package/docs/guides/tools-tasks.md +8 -0
- package/docs/guides/workflows.md +74 -0
- package/docs/openapi.json +486 -4
- package/package.json +10 -18
- package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
- package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
- package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
- package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
- package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
- package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
- package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
- package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
- package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
- package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
- package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
- package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
- package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
- package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
- package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
- package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
- package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
- package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
- package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
- package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
- package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
- package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
- package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
- package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
- package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
- package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
- package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
- package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
- package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
- package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
- package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
- package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
- package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
- package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
- package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
- package/public/assets/index-CqqgOI5R.js +15 -0
- package/public/assets/index-MYAIwYTX.css +2 -0
- package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
- package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
- package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
- package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
- package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
- package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
- package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
- package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
- package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
- package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
- package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
- package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
- package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
- package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
- package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
- package/public/assets/projects-M_m6AHws.js +2 -0
- package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
- package/public/assets/provider-display-BEeLXC_D.js +2 -0
- package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
- package/public/assets/run-card-Dt4I4jaP.js +2 -0
- package/public/assets/scroll-text-BKXS1ahr.js +2 -0
- package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
- package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
- package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
- package/public/assets/shipping-H6gzEeZB.js +2 -0
- package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
- package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
- package/public/assets/store-DKPDIZBe.js +9 -0
- package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
- package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
- package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
- package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
- package/public/assets/token-estimate-Co-Jdphh.js +2 -0
- package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
- package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
- package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
- package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
- package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
- package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
- package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
- package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
- package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
- package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
- package/public/cosmos.html +4 -4
- package/public/index.html +31 -29
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
- package/runner/src/adapters/claude-effort.ts +2 -4
- package/runner/src/adapters/claude-headless.ts +1 -1
- package/runner/src/adapters/claude-launch-exit.ts +26 -0
- package/runner/src/adapters/claude-session-probe.ts +1 -1
- package/runner/src/adapters/claude-tmux.ts +38 -10
- package/runner/src/adapters/claude.ts +28 -75
- package/runner/src/adapters/codex-launch-config.ts +4 -5
- package/runner/src/adapters/codex.ts +1 -1
- package/runner/src/adapters/opencode-provider.ts +7 -22
- package/runner/src/adapters/opencode.ts +4 -4
- package/runner/src/adapters/provider-quota-harvest.ts +20 -71
- package/runner/src/agent-runner/credentials.ts +42 -12
- package/runner/src/agent-runner/inbox.ts +27 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
- package/runner/src/agent-runner/liveness-exchange.ts +104 -0
- package/runner/src/bin/claude.ts +4 -0
- package/runner/src/bin/codex.ts +4 -0
- package/runner/src/bin/opencode.ts +4 -0
- package/runner/src/claude-system-prompt.ts +49 -0
- package/runner/src/index.ts +5 -2
- package/runner/src/launch-assembly.ts +14 -10
- package/runner/src/profile-home.ts +1 -1
- package/runner/src/project-instructions.ts +2 -2
- package/runner/src/provider-command.ts +18 -0
- package/runner/src/provider-setup.ts +35 -0
- package/runner/src/providers.ts +2 -1
- package/runner/src/runner-core.ts +32 -38
- package/runner/src/runner-helpers.ts +0 -8
- package/runner/src/session-scratch.ts +6 -2
- package/runner/src/spawn-input.ts +2 -1
- package/runner/src/test-run-dedup.ts +59 -56
- package/runner/test-support/provisioning-context.ts +4 -2
- package/runner/test-support/runner-harness.ts +2 -1
- package/scripts/cd-config.ts +8 -0
- package/scripts/gate-run-lease.ts +10 -7
- package/scripts/gate.sh +5 -1
- package/scripts/steward-policy-cleanup.ts +2 -2
- package/src/agent-authz.ts +2 -2
- package/src/agent-drive-arbiter.ts +3 -8
- package/src/agent-exit-cleanup-async.ts +2 -2
- package/src/agent-exit-cleanup.ts +23 -19
- package/src/agent-lifecycle-events.ts +112 -85
- package/src/agent-ref.ts +3 -2
- package/src/agent-status-events.ts +43 -14
- package/src/auth/password.ts +4 -3
- package/src/auth/session-refresh.ts +1 -1
- package/src/auth/session.test-fixture.ts +2 -2
- package/src/auth/session.ts +7 -7
- package/src/automations/crud.ts +8 -81
- package/src/automations/dispatch.ts +33 -58
- package/src/automations/index.ts +1 -1
- package/src/automations/persistence.ts +65 -0
- package/src/automations/precheck.ts +18 -16
- package/src/automations/read-async.ts +11 -0
- package/src/automations/reconcile.ts +30 -39
- package/src/automations/storage.ts +33 -10
- package/src/automations/write-async.ts +33 -0
- package/src/branch-land-notice.ts +93 -0
- package/src/branch-landed.ts +31 -98
- package/src/bus.ts +40 -39
- package/src/cd-deploy-notify.ts +32 -4
- package/src/cd-host-lag-notify.ts +7 -6
- package/src/ci/incidents.ts +2 -2
- package/src/ci/monitor.ts +5 -8
- package/src/ci/notifications.ts +4 -4
- package/src/ci/root-missing.ts +4 -9
- package/src/ci/transition-notify.ts +12 -44
- package/src/claude-app/oauth-http.ts +3 -3
- package/src/cli/cd-pauses.ts +19 -0
- package/src/cli/orchestrator.ts +1 -1
- package/src/cli/state.ts +2 -19
- package/src/cli/task-edit.ts +22 -0
- package/src/cli/task.ts +3 -1
- package/src/cli/workflow.ts +19 -4
- package/src/commands-db.ts +7 -7
- package/src/commands-write.ts +8 -0
- package/src/compaction-watch.ts +10 -8
- package/src/config-store-write.ts +13 -1
- package/src/config-store.ts +25 -14
- package/src/config.ts +4 -11
- package/src/connectors.ts +10 -8
- package/src/context-advisory.ts +22 -21
- package/src/db/activity-async.ts +6 -1
- package/src/db/activity-write-ops.ts +12 -1
- package/src/db/activity.ts +1 -14
- package/src/db/agent-action-write.ts +36 -0
- package/src/db/agent-control-async.ts +9 -0
- package/src/db/agent-control-write.ts +49 -0
- package/src/db/agent-effort-observe.ts +22 -0
- package/src/db/agent-meta.ts +14 -3
- package/src/db/agent-search.ts +1 -15
- package/src/db/agents-async.ts +59 -9
- package/src/db/agents-write-ops.ts +12 -3
- package/src/db/agents.ts +95 -65
- package/src/db/auth-identities.ts +2 -2
- package/src/db/automation-read-ops.ts +11 -0
- package/src/db/automation-write-ops.ts +46 -0
- package/src/db/blackboard.ts +2 -2
- package/src/db/browser-session-write.ts +32 -0
- package/src/db/bus-outbox-write-ops.ts +3 -1
- package/src/db/checkout-refresh-schema.ts +47 -0
- package/src/db/checkout-refresh.ts +5 -5
- package/src/db/ci-incidents-async.ts +5 -5
- package/src/db/ci-incidents-write-ops.ts +2 -2
- package/src/db/command-agent-profile-backfill.ts +39 -0
- package/src/db/command-agent-profiles.ts +5 -1
- package/src/db/command-retention.ts +126 -0
- package/src/db/command-row.ts +10 -2
- package/src/db/commands-list-query.ts +2 -0
- package/src/db/commands-planner-stats.test-fixture.ts +8 -0
- package/src/db/commands-read-ops.ts +16 -0
- package/src/db/commands-spawn-read.ts +1 -1
- package/src/db/config-store-write-ops.ts +7 -2
- package/src/db/connection.ts +1 -182
- package/src/db/context-carry-write.ts +74 -0
- package/src/db/continuation-archives-async.ts +5 -0
- package/src/db/continuation-archives-write-ops.ts +7 -0
- package/src/db/continuations.ts +6 -6
- package/src/db/db-error-registry.ts +12 -0
- package/src/db/db-writer-worker.ts +8 -1
- package/src/db/deploy-events-async.ts +1 -0
- package/src/db/deploy-events-read-ops.ts +2 -1
- package/src/db/deploy-events.ts +35 -4
- package/src/db/gateway.ts +26 -133
- package/src/db/history-retention-ops.ts +13 -0
- package/src/db/hosts-registration.ts +10 -2
- package/src/db/hosts.ts +9 -6
- package/src/db/inbox-async.ts +2 -2
- package/src/db/inbox-read-ops.ts +1 -1
- package/src/db/inbox.ts +9 -17
- package/src/db/index.ts +2 -0
- package/src/db/integrations-async.ts +8 -0
- package/src/db/integrations-ops.ts +15 -0
- package/src/db/integrations.ts +15 -21
- package/src/db/issue-associations.ts +2 -2
- package/src/db/issue-lifecycle.ts +3 -4
- package/src/db/issue-refs-async.ts +23 -0
- package/src/db/issue-refs-read-ops.ts +6 -0
- package/src/db/issue-refs-write-ops.ts +29 -0
- package/src/db/issue-refs.ts +15 -16
- package/src/db/kernel-event-log-schema.ts +2 -0
- package/src/db/land-boundaries.ts +51 -5
- package/src/db/land-gate-attestations.ts +2 -2
- package/src/db/landing-receipts.ts +2 -2
- package/src/db/lifecycle-context-write.ts +5 -0
- package/src/db/lifecycle-tail-async.ts +76 -0
- package/src/db/lifecycle-tail-write-ops.ts +62 -0
- package/src/db/lifecycle-write-window.ts +2 -1
- package/src/db/lineage-pair-dedupe-sql.ts +3 -3
- package/src/db/long-running-work.ts +2 -2
- package/src/db/main-connection-mode.ts +11 -0
- package/src/db/main-connection-writes.ts +41 -2
- package/src/db/maintenance-job-reconcile.ts +61 -0
- package/src/db/maintenance-job-runs-async.ts +14 -0
- package/src/db/maintenance-job-write-ops.ts +9 -0
- package/src/db/maintenance-pauses.ts +2 -2
- package/src/db/mappers.ts +2 -14
- package/src/db/merge-lease.ts +1 -15
- package/src/db/message-send.ts +4 -0
- package/src/db/messages.ts +31 -25
- package/src/db/migrations.ts +25 -16
- package/src/db/notification-write-ops.ts +19 -0
- package/src/db/operator-answer-write.ts +19 -0
- package/src/db/orchestrators.ts +14 -76
- package/src/db/pairs-async.ts +22 -1
- package/src/db/pairs-write-ops.ts +8 -3
- package/src/db/pairs.ts +42 -61
- package/src/db/plan-dispatch-schema.ts +5 -1
- package/src/db/plan-ready-notices.ts +43 -0
- package/src/db/plan-tools-include-migration.ts +36 -0
- package/src/db/plans-write-ops.ts +2 -0
- package/src/db/presence-buffer.ts +5 -0
- package/src/db/presence-loop.ts +18 -23
- package/src/db/presence-write.ts +0 -6
- package/src/db/project-entries-async.ts +14 -0
- package/src/db/project-entries-read-ops.ts +5 -1
- package/src/db/project-entries-write-ops.ts +8 -0
- package/src/db/project-entries.ts +15 -12
- package/src/db/project-journal.ts +2 -2
- package/src/db/project-profile-instructions.ts +50 -0
- package/src/db/project-trust-approvals.ts +2 -2
- package/src/db/prompt-templates.ts +4 -4
- package/src/db/prompt-versions.ts +9 -2
- package/src/db/provider-config-history.ts +8 -3
- package/src/db/provider-model-seed.ts +34 -0
- package/src/db/read-op-marshaling-fixtures.ts +23 -0
- package/src/db/read-ops.ts +8 -0
- package/src/db/retention.ts +13 -2
- package/src/db/review-publish-write.ts +8 -0
- package/src/db/routing-policy.ts +2 -3
- package/src/db/runtime-admin-async.ts +19 -0
- package/src/db/runtime-admin-write-ops.ts +36 -0
- package/src/db/runtime-tail-async.ts +288 -0
- package/src/db/runtime-tail-write-ops.ts +97 -0
- package/src/db/schema.ts +13 -4
- package/src/db/spawn-budget.ts +5 -0
- package/src/db/spawn-delegation-state.ts +11 -4
- package/src/db/spawn-delegation.ts +1 -11
- package/src/db/sql-audit-indexes.ts +3 -0
- package/src/db/stats-async.ts +9 -6
- package/src/db/task-entity.ts +28 -6
- package/src/db/task-list.ts +3 -1
- package/src/db/tasks.ts +1 -17
- package/src/db/team-claim-policy.ts +60 -0
- package/src/db/teams-async.ts +4 -0
- package/src/db/teams-write-ops.ts +4 -0
- package/src/db/terminal-events.ts +15 -0
- package/src/db/timer-cutover-bodies.ts +292 -0
- package/src/db/timer-cutover-core.ts +37 -278
- package/src/db/timer-cutover-state.ts +40 -0
- package/src/db/timer-cutover-write-ops.ts +1 -40
- package/src/db/timer-ingress.ts +7 -1
- package/src/db/token-db-write-ops.ts +19 -0
- package/src/db/token-standing-async.ts +12 -0
- package/src/db/token-standing.ts +21 -20
- package/src/db/token-usage-retention.ts +33 -0
- package/src/db/token-usage-write-ops.ts +1 -1
- package/src/db/token-usage.ts +4 -1
- package/src/db/user-invites-async.ts +13 -0
- package/src/db/user-invites.ts +3 -3
- package/src/db/users.ts +14 -6
- package/src/db/workflow-contact.ts +1 -1
- package/src/db/workflow-task-read-ops.ts +30 -0
- package/src/db/workspaces.ts +8 -5
- package/src/db/write-ops.ts +37 -12
- package/src/db/writer-fault-seam.ts +2 -9
- package/src/db/writer-fault-test-ops.ts +18 -0
- package/src/db/writer-gateway.ts +58 -56
- package/src/dev.ts +8 -3
- package/src/dispatch-availability.ts +10 -6
- package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
- package/src/event-loop-lag.ts +4 -2
- package/src/event-loop-yield.ts +2 -2
- package/src/events.ts +10 -8
- package/src/host/disk-alert.ts +121 -0
- package/src/host-provider-store.ts +5 -4
- package/src/hub-metrics-report.ts +5 -1
- package/src/hub-metrics.ts +38 -18
- package/src/injection-sweep-pacing.ts +6 -8
- package/src/land-gate-notifications.ts +11 -10
- package/src/land-gate-queue-progress.ts +3 -3
- package/src/land-settle-dispatch.ts +52 -92
- package/src/lifecycle-context-pressure.ts +11 -10
- package/src/lifecycle-manager.ts +107 -100
- package/src/maintenance/breaker.ts +18 -16
- package/src/maintenance/cd-watcher.ts +3 -3
- package/src/maintenance/checkout-refresh.ts +18 -1
- package/src/maintenance/critical-job-watchdog.ts +19 -20
- package/src/maintenance/events.ts +3 -3
- package/src/maintenance/history-retention-job.ts +30 -0
- package/src/maintenance/index.ts +1 -0
- package/src/maintenance/jobs.ts +32 -69
- package/src/maintenance/long-running-work.ts +3 -1
- package/src/maintenance/offline-agent-prune-job.ts +28 -0
- package/src/maintenance/orphaned-sessions.ts +5 -4
- package/src/maintenance/pauses.ts +4 -10
- package/src/maintenance/plan-ready-notice-job.ts +71 -0
- package/src/maintenance/scheduler.ts +98 -137
- package/src/maintenance/stalled-delivery-pager.ts +10 -9
- package/src/maintenance/teams.ts +19 -30
- package/src/maintenance/workspaces.ts +18 -28
- package/src/managed-policy-escalation.ts +7 -7
- package/src/managed-policy.ts +32 -28
- package/src/managed-provider-gate.ts +5 -4
- package/src/managed-spawn-reservation.ts +5 -4
- package/src/mcp/index.ts +12 -9
- package/src/mcp/output-descriptions.ts +8 -8
- package/src/mcp/presentation.ts +6 -5
- package/src/mcp/project-profile-instructions.ts +32 -0
- package/src/mcp/runtime-output.ts +6 -1
- package/src/mcp/self-care-visibility.ts +2 -2
- package/src/mcp/spawn-targets-matrix.ts +10 -1
- package/src/mcp/tool-groups.ts +4 -3
- package/src/mcp/tool-roles.ts +81 -0
- package/src/mcp/tools-spawn.ts +4 -3
- package/src/mcp/tools-workspace.ts +1 -1
- package/src/mcp-agent-action.ts +1 -2
- package/src/mcp-blackboard-tools.ts +6 -5
- package/src/mcp-decision-tools.ts +7 -7
- package/src/mcp-egress-tools.ts +10 -9
- package/src/mcp-issue-activity-tools.ts +2 -2
- package/src/mcp-issue-association-tools.ts +4 -4
- package/src/mcp-issue-ref-tools.ts +13 -12
- package/src/mcp-maintenance-tools.ts +2 -2
- package/src/mcp-merge-tools.ts +5 -5
- package/src/mcp-notification-subscription-tools.ts +14 -15
- package/src/mcp-output-levels.test-fixture.ts +1 -1
- package/src/mcp-profile-trust-tools.ts +5 -5
- package/src/mcp-project-journal-tools.ts +4 -12
- package/src/mcp-project-tools.ts +17 -18
- package/src/mcp-provider-catalog.ts +2 -2
- package/src/mcp-routing-policy-tools.ts +3 -2
- package/src/mcp-task-tools.ts +11 -5
- package/src/mcp-team-template-tools.ts +3 -3
- package/src/mcp-team-tools.ts +6 -6
- package/src/mcp-workflow-tools.ts +13 -4
- package/src/memory-area-injection.ts +13 -12
- package/src/memory-boundary-capture.ts +6 -6
- package/src/memory-injection.ts +45 -43
- package/src/merge-pause-maintenance.ts +5 -4
- package/src/notification-router.ts +44 -17
- package/src/notification-types.ts +2 -1
- package/src/notify.ts +5 -5
- package/src/observed-reset-refresh.ts +4 -4
- package/src/operator-alarm.ts +23 -11
- package/src/project-ingest.ts +6 -6
- package/src/project-instructions.ts +12 -1
- package/src/project-profile-instruction-text.ts +6 -0
- package/src/project-profile-instructions.ts +20 -0
- package/src/project-trust.ts +12 -11
- package/src/prompt-resolver.ts +3 -3
- package/src/provider-catalog-store.ts +3 -49
- package/src/provider-config-store.ts +12 -11
- package/src/provider-model-seed.ts +1 -18
- package/src/provider-quota-async.ts +5 -7
- package/src/provider-quota-config-store.ts +5 -4
- package/src/provider-secrets.test-fixture.ts +3 -3
- package/src/provider-timeline-event.ts +4 -7
- package/src/quota-band-delivery.ts +2 -2
- package/src/recipe-runner.ts +6 -5
- package/src/repo-config-source.ts +10 -4
- package/src/retention-config-store.ts +4 -3
- package/src/reviewer-pipeline.ts +11 -10
- package/src/routes/_route.ts +4 -4
- package/src/routes/_shared.ts +13 -12
- package/src/routes/agent-effort.ts +5 -5
- package/src/routes/agent-heartbeat-quota.ts +23 -0
- package/src/routes/agent-keep.ts +1 -1
- package/src/routes/agent-profiles.ts +6 -6
- package/src/routes/agent-reporting.ts +1 -1
- package/src/routes/agent-self-effort.ts +5 -5
- package/src/routes/agent-sessions.ts +24 -24
- package/src/routes/agents-spawn.ts +2 -2
- package/src/routes/agents.ts +19 -121
- package/src/routes/auth.ts +14 -15
- package/src/routes/authority-audit.ts +2 -2
- package/src/routes/automations.ts +6 -5
- package/src/routes/channel-binding-delete.ts +1 -1
- package/src/routes/channel-output.ts +3 -3
- package/src/routes/claude-api-budget.ts +5 -5
- package/src/routes/commands-listing.ts +5 -1
- package/src/routes/commands.ts +31 -29
- package/src/routes/context-resets.ts +2 -2
- package/src/routes/continuation-archives.ts +2 -2
- package/src/routes/coordinator-teams.ts +1 -1
- package/src/routes/decisions.ts +2 -2
- package/src/routes/host-secret-files.ts +1 -1
- package/src/routes/hosts.ts +11 -11
- package/src/routes/inbox.ts +3 -2
- package/src/routes/index.ts +12 -2
- package/src/routes/integrations.ts +32 -56
- package/src/routes/issue-activity.ts +2 -2
- package/src/routes/issue-associations.ts +4 -4
- package/src/routes/issue-refs.ts +9 -9
- package/src/routes/kernel-timers-operator.ts +1 -1
- package/src/routes/memory.ts +1 -1
- package/src/routes/merges.ts +11 -11
- package/src/routes/messages.ts +23 -17
- package/src/routes/orchestrator-bootstrap.ts +2 -2
- package/src/routes/orchestrator-host-registration.ts +4 -2
- package/src/routes/orchestrator-host-utilization.ts +5 -3
- package/src/routes/orchestrator-proxy.ts +4 -4
- package/src/routes/orchestrator.ts +28 -19
- package/src/routes/pairs.ts +8 -8
- package/src/routes/project-profile-instructions.ts +27 -0
- package/src/routes/project-trust.ts +3 -3
- package/src/routes/projects.ts +16 -16
- package/src/routes/prompt-templates.ts +12 -12
- package/src/routes/provider-config.ts +6 -6
- package/src/routes/provider-quota-config.ts +2 -2
- package/src/routes/provider-quotas.ts +10 -10
- package/src/routes/run-command.ts +1 -1
- package/src/routes/secrets-backup.ts +2 -2
- package/src/routes/secrets-import.ts +1 -1
- package/src/routes/secrets-vault.ts +7 -7
- package/src/routes/settings.ts +6 -6
- package/src/routes/shipping.ts +9 -1
- package/src/routes/spawn-policy.ts +8 -7
- package/src/routes/sse.ts +2 -2
- package/src/routes/stats.ts +6 -6
- package/src/routes/task-http.ts +15 -1
- package/src/routes/task-issues.ts +11 -26
- package/src/routes/tasks.ts +22 -53
- package/src/routes/team-templates.ts +12 -12
- package/src/routes/teams-config.ts +2 -2
- package/src/routes/teams.ts +10 -10
- package/src/routes/tokens.ts +30 -22
- package/src/routes/users.ts +24 -24
- package/src/routes/viewer-read.ts +3 -3
- package/src/routes/web-tool-calls.ts +4 -4
- package/src/routes/workflows.ts +22 -7
- package/src/routes/workspaces.ts +17 -16
- package/src/routing-policy-normalize.ts +1 -2
- package/src/routing-policy-push.ts +6 -6
- package/src/routing-step-defaults.ts +0 -2
- package/src/runner-token-mint-limit.ts +63 -0
- package/src/runtime-grant.ts +21 -13
- package/src/runtime-tokens.ts +59 -35
- package/src/secrets-broker/config.ts +1 -1
- package/src/secrets-broker/service.ts +2 -2
- package/src/security.ts +16 -21
- package/src/self-resume-carry.ts +21 -110
- package/src/self-resume-supersede.ts +4 -3
- package/src/self-resume.ts +54 -66
- package/src/server-background.ts +2 -2
- package/src/server.ts +26 -24
- package/src/services/agent-action.ts +12 -31
- package/src/services/agent-effort.ts +7 -32
- package/src/services/agent-hang-watchdog-job.ts +2 -2
- package/src/services/agent-heartbeat.ts +166 -0
- package/src/services/agent-reporting.ts +1 -1
- package/src/services/browser-inventory.ts +3 -3
- package/src/services/browser-session-state.ts +3 -2
- package/src/services/browser-session.ts +21 -27
- package/src/services/bus-command-update.ts +9 -9
- package/src/services/checkout-refresh-state.ts +1 -0
- package/src/services/checkout-refresh.test-fixture.ts +3 -2
- package/src/services/command-host.ts +7 -2
- package/src/services/coordinator-digest.ts +3 -2
- package/src/services/dispatch-command.ts +12 -13
- package/src/services/effective-launch-driver.ts +14 -9
- package/src/services/host-changed-paths.test-fixture.ts +5 -6
- package/src/services/host-project-readiness.ts +2 -2
- package/src/services/host-providers.ts +1 -1
- package/src/services/host-utilization.ts +27 -4
- package/src/services/idle-agent-digest.ts +17 -12
- package/src/services/idle-epics.ts +9 -10
- package/src/services/interrupt-agent.ts +12 -9
- package/src/services/issue-activity.ts +3 -3
- package/src/services/issue-associations.ts +15 -18
- package/src/services/issue-lifecycle-comments.ts +3 -2
- package/src/services/issue-lifecycle.ts +69 -72
- package/src/services/issue-refs.ts +10 -15
- package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
- package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
- package/src/services/kernel-timers-ingress.ts +4 -4
- package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
- package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
- package/src/services/kernel-timers-outbox.ts +1 -1
- package/src/services/kernel-timers-stage10-operator.ts +1 -1
- package/src/services/kernel-timers.ts +4 -3
- package/src/services/land-gate-placement.ts +11 -2
- package/src/services/land-issue-relations.ts +5 -4
- package/src/services/land-restart-retry.ts +7 -6
- package/src/services/landed-ancestry.ts +25 -8
- package/src/services/legacy-landing-host.ts +4 -1
- package/src/services/legacy-landing-recovery.ts +8 -6
- package/src/services/managed-running.ts +17 -17
- package/src/services/memory-areas.ts +17 -53
- package/src/services/merge-pause.ts +9 -15
- package/src/services/operator-decisions.ts +37 -41
- package/src/services/orchestrator-registration-recovery.ts +6 -2
- package/src/services/orchestrator-upgrade.ts +14 -12
- package/src/services/permission-decision.ts +4 -3
- package/src/services/plan-ci-notice.ts +57 -0
- package/src/services/plan-ci-recovery.ts +2 -55
- package/src/services/plan-conformance.ts +4 -4
- package/src/services/plan-dispatch-policy.ts +10 -3
- package/src/services/plan-dispatch.ts +35 -14
- package/src/services/plan-graph.ts +39 -261
- package/src/services/plan-import.ts +1 -1
- package/src/services/plan-live-bindings.ts +8 -37
- package/src/services/plan-task-create.ts +1 -1
- package/src/services/plan-terminal-refs.ts +2 -12
- package/src/services/plan-wake-digest.ts +9 -3
- package/src/services/profile-trust.ts +6 -5
- package/src/services/project-config-read.ts +70 -0
- package/src/services/project-profile-instructions.ts +54 -0
- package/src/services/project.ts +11 -10
- package/src/services/prompt-templates.ts +6 -5
- package/src/services/provider-hold-nudge.ts +9 -9
- package/src/services/provider-hold-record.ts +13 -12
- package/src/services/provider-state-audit.ts +19 -18
- package/src/services/provisioning-harness/budget-baseline.json +4 -4
- package/src/services/provisioning-harness/driver.ts +1 -1
- package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
- package/src/services/provisioning-harness/lifecycle.ts +24 -22
- package/src/services/provisioning-harness/prepare.ts +16 -17
- package/src/services/rate-limit-resume.ts +10 -9
- package/src/services/red-main-auto-revert.ts +7 -5
- package/src/services/red-main-controller-deps.ts +20 -3
- package/src/services/red-main-incident.ts +3 -1
- package/src/services/red-main-quarantine.ts +2 -3
- package/src/services/register-agent.ts +22 -22
- package/src/services/restart-project-role.ts +1 -1
- package/src/services/restart-spawn.ts +74 -61
- package/src/services/review-publish.ts +7 -24
- package/src/services/review-ref-reconcile.ts +29 -38
- package/src/services/runtime-dependency-alert.ts +27 -0
- package/src/services/scheduler-command.ts +11 -9
- package/src/services/scheduler.ts +5 -5
- package/src/services/self-care-state.ts +2 -1
- package/src/services/self-effort-grant.ts +5 -25
- package/src/services/self-effort.ts +5 -5
- package/src/services/send-message.ts +21 -34
- package/src/services/shutdown-agent.ts +17 -14
- package/src/services/spawn-agent.ts +25 -43
- package/src/services/spawn-chain-inspector.ts +7 -14
- package/src/services/spawn-cwd-placement.ts +21 -5
- package/src/services/spawn-issue-activity.ts +8 -6
- package/src/services/spawn-launch.ts +17 -1
- package/src/services/spawn-loss-escalation.ts +1 -1
- package/src/services/spawn-policy.ts +68 -0
- package/src/services/spawn-registration-watchdog.ts +2 -2
- package/src/services/spawn-repo-probe.ts +7 -5
- package/src/services/spawn-tree-cleanup.ts +8 -9
- package/src/services/steward-reaper.ts +4 -4
- package/src/services/task-context-hydration.ts +25 -1
- package/src/services/task-delivery.ts +20 -34
- package/src/services/task-dispatch.ts +3 -0
- package/src/services/task-entity.ts +40 -203
- package/src/services/task-issue-link.ts +13 -20
- package/src/services/task-issue-weave.ts +12 -11
- package/src/services/task-lifecycle.ts +27 -31
- package/src/services/task-repo-cwd.ts +37 -0
- package/src/services/task-review-hold.ts +4 -17
- package/src/services/task-semantic-events.ts +13 -11
- package/src/services/task-state-reconcile.ts +8 -17
- package/src/services/task-validation.ts +2 -2
- package/src/services/team-templates.ts +12 -11
- package/src/services/team.ts +31 -98
- package/src/services/terminal-provider-exit.ts +6 -5
- package/src/services/timer-message-fire-chaos-worker.ts +7 -3
- package/src/services/timer-message-fire-outbox.ts +1 -1
- package/src/services/transient-agent-reaper.ts +25 -20
- package/src/services/turn-reconcile-audit.ts +9 -9
- package/src/services/user-onboarding.ts +8 -6
- package/src/services/user-profile.ts +6 -9
- package/src/services/work-finality.ts +16 -4
- package/src/services/workflow-auto-start.ts +26 -13
- package/src/services/workflow-caller.ts +61 -4
- package/src/services/workflow-child-proof-worker.ts +1 -1
- package/src/services/workflow-ci-main.ts +1 -1
- package/src/services/workflow-control-proof-worker.ts +1 -1
- package/src/services/workflow-coordinator.ts +8 -2
- package/src/services/workflow-decisions.ts +5 -5
- package/src/services/workflow-deferred-cleanup.ts +5 -3
- package/src/services/workflow-effect-driver.ts +42 -17
- package/src/services/workflow-effects.ts +58 -37
- package/src/services/workflow-land-notice.ts +10 -0
- package/src/services/workflow-pause-text.ts +43 -0
- package/src/services/workflow-pins.ts +7 -4
- package/src/services/workflow-reconcile.ts +14 -11
- package/src/services/workflow-resume-pins.ts +3 -3
- package/src/services/workflow-routing-defaults.ts +18 -0
- package/src/services/workflow-run-view.ts +6 -3
- package/src/services/workflow-run.test-fixture.ts +1 -1
- package/src/services/workflow-runs.ts +61 -33
- package/src/services/workflow-supervisor-state.ts +26 -1
- package/src/services/workflow-supervisor.ts +11 -6
- package/src/services/workspace-recovery.ts +4 -3
- package/src/settings/registry.ts +1 -2
- package/src/spawn-admission.ts +10 -2
- package/src/spawn-command.ts +4 -4
- package/src/spawn-models.ts +10 -12
- package/src/spawn-placement.ts +28 -10
- package/src/spawn-targets.ts +9 -9
- package/src/sse-agent-status.ts +15 -6
- package/src/sse.ts +49 -24
- package/src/startup-context-injection.ts +62 -57
- package/src/state-adoption/cd-cutover.ts +53 -7
- package/src/state-adoption/fleet-cutover.ts +35 -0
- package/src/state-adoption/fleet-plan.ts +36 -0
- package/src/state-adoption/index.ts +2 -2
- package/src/state-adoption/linux-plan.ts +2 -2
- package/src/state-adoption/linux.ts +2 -2
- package/src/state-adoption/macos-plan.ts +2 -2
- package/src/state-adoption/macos.ts +1 -1
- package/src/steward-handoff.ts +4 -3
- package/src/steward-policy-cleanup.ts +9 -8
- package/src/steward.ts +9 -8
- package/src/task-dispatch-live.ts +6 -3
- package/src/task-dispatcher.ts +3 -3
- package/src/teams-config-store.ts +4 -3
- package/src/token-db-write.ts +10 -0
- package/src/token-db.ts +2 -2
- package/src/token-usage-async.ts +2 -4
- package/src/user-awaiting-reply.ts +5 -5
- package/src/workspace-actions.ts +24 -29
- package/src/workspace-auto-merge.ts +14 -12
- package/src/workspace-changed-paths-client.ts +16 -5
- package/src/workspace-cleanup-stale.ts +30 -7
- package/src/workspace-command-settle.ts +26 -17
- package/src/workspace-config.ts +1 -1
- package/src/workspace-conflict-resolver.ts +9 -7
- package/src/workspace-dead-owner-recovery.ts +5 -4
- package/src/workspace-escalation.ts +12 -11
- package/src/workspace-human-escalation.ts +3 -3
- package/src/workspace-land-gate-watchdog.ts +3 -3
- package/src/workspace-land-refusal.ts +20 -0
- package/src/workspace-land-stopped.ts +1 -0
- package/src/workspace-merge.ts +10 -26
- package/src/workspace-nothing-to-land-notice.ts +2 -2
- package/src/workspace-orphans.ts +18 -37
- package/src/workspace-pr-completion.ts +10 -8
- package/src/workspace-rekey.ts +3 -3
- package/src/workspace-steward-failure.ts +2 -2
- package/src/workspace-steward-wake.ts +4 -4
- package/node_modules/@humwick/kernel/LICENSE +0 -167
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
- package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
- package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
- package/node_modules/@humwick/kernel/config.ts +0 -111
- package/node_modules/@humwick/kernel/contract.ts +0 -572
- package/node_modules/@humwick/kernel/control-authz.ts +0 -281
- package/node_modules/@humwick/kernel/control.ts +0 -645
- package/node_modules/@humwick/kernel/effects.ts +0 -493
- package/node_modules/@humwick/kernel/event-log.ts +0 -319
- package/node_modules/@humwick/kernel/http-transport.ts +0 -384
- package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
- package/node_modules/@humwick/kernel/identity.ts +0 -248
- package/node_modules/@humwick/kernel/index.ts +0 -28
- package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
- package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
- package/node_modules/@humwick/kernel/landing.ts +0 -953
- package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
- package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
- package/node_modules/@humwick/kernel/message-authority.ts +0 -281
- package/node_modules/@humwick/kernel/module-host.ts +0 -722
- package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
- package/node_modules/@humwick/kernel/package.json +0 -39
- package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
- package/node_modules/@humwick/kernel/persistence.ts +0 -510
- package/node_modules/@humwick/kernel/registry.ts +0 -60
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
- package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
- package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
- package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
- package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
- package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
- package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
- package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
- package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
- package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
- package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
- package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
- package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
- package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
- package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
- package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
- package/node_modules/@humwick/offload/LICENSE +0 -167
- package/node_modules/@humwick/offload/README.md +0 -57
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
- package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.js +0 -80
- package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
- package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/index.js +0 -5
- package/node_modules/@humwick/offload/dist/index.js.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
- package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/types.js +0 -176
- package/node_modules/@humwick/offload/dist/types.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.js +0 -1
- package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
- package/node_modules/@humwick/offload/package.json +0 -42
- package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
- package/node_modules/@humwick/offload/src/envelope.ts +0 -92
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
- package/node_modules/@humwick/offload/src/index.ts +0 -4
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
- package/node_modules/@humwick/offload/src/types.ts +0 -235
- package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
- package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
- package/node_modules/@humwick/offload/src/worker.ts +0 -5
- package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
- package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
- package/public/assets/index-B7ZerHLY.css +0 -2
- package/public/assets/index-BU3uWo2t.js +0 -15
- package/public/assets/projects-B_lmcqfO.js +0 -2
- package/public/assets/provider-display-DbLWpP3j.js +0 -2
- package/public/assets/run-card-CO_bguQf.js +0 -2
- package/public/assets/shipping-Bu8p1gEw.js +0 -2
- package/public/assets/store-BvtFdlGX.js +0 -9
- package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
- package/runner/src/agent-runner/http-liveness.ts +0 -85
- package/runner/src/gate-run-lease-probe.ts +0 -38
- package/src/db/claude-catalog-reconcile.ts +0 -27
- package/src/db/on-loop-write-transaction.ts +0 -34
- package/src/routing-model-aliases.ts +0 -21
|
@@ -1,572 +0,0 @@
|
|
|
1
|
-
// #2666: direct module imports must initialize schema extensions before defineModule callers run.
|
|
2
|
-
import "./openapi-init";
|
|
3
|
-
import type * as z from "zod";
|
|
4
|
-
import { assertValidManifest } from "./manifest-validation";
|
|
5
|
-
import type { MessageAuthorityParticipant } from "./message-authority";
|
|
6
|
-
|
|
7
|
-
declare const ScopeBrand: unique symbol;
|
|
8
|
-
declare const ModuleDefinitionBrand: unique symbol;
|
|
9
|
-
|
|
10
|
-
/** Kernel-minted owning scope. Modules may carry it but cannot construct one. */
|
|
11
|
-
export type Scope = string & { readonly [ScopeBrand]: true };
|
|
12
|
-
|
|
13
|
-
/** Flat, transport-independent authorization vocabulary. */
|
|
14
|
-
export type Grant = `${string}:${"read" | "write" | "admin"}` | `command:${string}`;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Server-resolved creator attributes the host attaches to a principal so a module can FREEZE a
|
|
18
|
-
* durable effect's create-time identity snapshot (P2-7, #1409) under the authenticated creator's
|
|
19
|
-
* REAL reach — never a client-named one. The kernel treats every field as OPAQUE: `scopes` are the
|
|
20
|
-
* creator's transport-layer scopes (e.g. `message:send`, which the flat {@link Grant} grammar cannot
|
|
21
|
-
* spell) and `constraints` is an untyped blob (cwdPrefixes etc.) the host later reconstructs into a
|
|
22
|
-
* token. Because this rides the {@link InvocationIdentity} the TRUSTED host binding builds — not the
|
|
23
|
-
* client-facing op input — a client cannot supply or widen it. Absent for callers that mint no
|
|
24
|
-
* durable effects (the common case); modules must fall back to `grants`/defaults when it is missing.
|
|
25
|
-
*/
|
|
26
|
-
export interface ResolvedIdentity {
|
|
27
|
-
/** The creator's actor kind (e.g. `component`, `provider`, `system`) — cosmetic identity metadata. */
|
|
28
|
-
readonly kind?: string;
|
|
29
|
-
/** The creator's REAL transport scopes, carried verbatim so a durable send authorizes under
|
|
30
|
-
* `message:send` (which is not a {@link Grant}). Frozen into `createdByScopes`. */
|
|
31
|
-
readonly scopes?: readonly string[];
|
|
32
|
-
/** The creator token's opaque constraint blob (cwd/agent axes). SERVER-resolved; frozen into
|
|
33
|
-
* `createdByConstraints` so the fire-time authz gate binds to the creator's real constraint. */
|
|
34
|
-
readonly constraints?: Readonly<Record<string, unknown>>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** The sole identity shape visible to modules. */
|
|
38
|
-
export interface Principal {
|
|
39
|
-
readonly actor: string;
|
|
40
|
-
readonly scope: Scope;
|
|
41
|
-
readonly grants: ReadonlySet<Grant>;
|
|
42
|
-
/** Opaque server-resolved creator attributes for durable-effect identity freezing (P2-7). The
|
|
43
|
-
* host attaches it from the authenticated token via the trusted invocation identity; absent for
|
|
44
|
-
* ordinary callers. See {@link ResolvedIdentity}. */
|
|
45
|
-
readonly resolvedIdentity?: ResolvedIdentity;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type EventName = `${string}.${string}`;
|
|
49
|
-
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
|
|
50
|
-
export type ConfigLayer = "defaults" | "instance" | "host" | "tenant" | "user";
|
|
51
|
-
export type StepName = string;
|
|
52
|
-
export type JsonPrimitive = string | number | boolean | null;
|
|
53
|
-
export type JsonValue = JsonPrimitive | readonly JsonValue[] | { readonly [key: string]: JsonValue };
|
|
54
|
-
|
|
55
|
-
type Schema = z.ZodType;
|
|
56
|
-
type ObjectSchema = z.ZodObject<any>;
|
|
57
|
-
type SchemaInput<S> = S extends z.ZodType ? z.input<S> : never;
|
|
58
|
-
type SchemaOutput<S> = S extends z.ZodType ? z.output<S> : never;
|
|
59
|
-
type RecordValue<R, K> = R extends Record<PropertyKey, unknown> ? R[K & keyof R] : never;
|
|
60
|
-
|
|
61
|
-
export interface TraceContext {
|
|
62
|
-
readonly traceId: string;
|
|
63
|
-
readonly spanId: string;
|
|
64
|
-
child(name: string): TraceContext;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export interface Disposable {
|
|
68
|
-
dispose(): void;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface Clock {
|
|
72
|
-
now(): number;
|
|
73
|
-
sleep(ms: number): Promise<void>;
|
|
74
|
-
every(ms: number, fn: () => void): Disposable;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export interface Rng {
|
|
78
|
-
uuid(): string;
|
|
79
|
-
random(): number;
|
|
80
|
-
jitter(baseMs: number, spread: number): number;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/** Outbound HTTP is the only module-visible transport. */
|
|
84
|
-
export interface Transport {
|
|
85
|
-
fetch(url: string, init?: RequestInit): Promise<Response>;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export interface Logger {
|
|
89
|
-
debug(message: string, fields?: Readonly<Record<string, unknown>>): void;
|
|
90
|
-
info(message: string, fields?: Readonly<Record<string, unknown>>): void;
|
|
91
|
-
warn(message: string, fields?: Readonly<Record<string, unknown>>): void;
|
|
92
|
-
error(message: string, fields?: Readonly<Record<string, unknown>>): void;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export interface ConfigDecl<S extends ObjectSchema = ObjectSchema> {
|
|
96
|
-
schema: S;
|
|
97
|
-
env?: Partial<Record<keyof z.output<S>, string>>;
|
|
98
|
-
overridableAt?: Partial<Record<keyof z.output<S>, readonly ConfigLayer[]>>;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export type ResolvedConfig<D> = D extends ConfigDecl<infer S>
|
|
102
|
-
? Readonly<z.output<S>>
|
|
103
|
-
: Readonly<Record<never, never>>;
|
|
104
|
-
|
|
105
|
-
export interface EntityRef {
|
|
106
|
-
module: string;
|
|
107
|
-
entity: string;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export interface EntityDecl<S extends ObjectSchema = ObjectSchema> {
|
|
111
|
-
schema: S;
|
|
112
|
-
key?: keyof z.output<S>;
|
|
113
|
-
indexes?: ReadonlyArray<keyof z.output<S> | readonly (keyof z.output<S>)[]>;
|
|
114
|
-
references?: Partial<Record<keyof z.output<S>, EntityRef>>;
|
|
115
|
-
retention?: { ttlDays?: number; ttlField?: keyof z.output<S> };
|
|
116
|
-
audit?: boolean;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
type EntityValue<D> = D extends EntityDecl<infer S> ? z.output<S> : never;
|
|
120
|
-
type EntityInput<D> = D extends EntityDecl<infer S> ? z.input<S> : never;
|
|
121
|
-
type EntityKey<D> = D extends EntityDecl<infer S>
|
|
122
|
-
? D["key"] extends keyof z.output<S>
|
|
123
|
-
? z.output<S>[D["key"]]
|
|
124
|
-
: "id" extends keyof z.output<S>
|
|
125
|
-
? z.output<S>["id"]
|
|
126
|
-
: unknown
|
|
127
|
-
: never;
|
|
128
|
-
|
|
129
|
-
export interface EntityListOptions<V> {
|
|
130
|
-
limit?: number;
|
|
131
|
-
cursor?: string;
|
|
132
|
-
where?: Partial<V>;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export interface EntityPage<V> {
|
|
136
|
-
items: readonly V[];
|
|
137
|
-
/** Opaque continuation token for the next page. Absent when this is the final page. */
|
|
138
|
-
cursor?: string;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface EntityStore<D extends EntityDecl = EntityDecl> {
|
|
142
|
-
get(key: EntityKey<D>): Promise<EntityValue<D> | undefined>;
|
|
143
|
-
list(options?: EntityListOptions<EntityValue<D>>): Promise<EntityPage<EntityValue<D>>>;
|
|
144
|
-
create(value: EntityInput<D>): Promise<EntityValue<D>>;
|
|
145
|
-
update(key: EntityKey<D>, patch: Partial<EntityInput<D>>): Promise<EntityValue<D>>;
|
|
146
|
-
delete(key: EntityKey<D>): Promise<boolean>;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export type EntityStores<E> = E extends Record<string, EntityDecl>
|
|
150
|
-
? { readonly [K in keyof E]: EntityStore<E[K]> }
|
|
151
|
-
: Readonly<Record<never, never>>;
|
|
152
|
-
|
|
153
|
-
export interface EventWriter<E> {
|
|
154
|
-
emit<N extends keyof E & EventName>(name: N, payload: SchemaInput<RecordValue<E, N>>): Promise<void>;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export interface WorkflowStartOptions {
|
|
158
|
-
idempotencyKey: string;
|
|
159
|
-
/** How the instance SEED commits, relative to the caller's own commit scope.
|
|
160
|
-
*
|
|
161
|
-
* Omitted (the ratified default): the seed commits in its OWN transaction immediately and the
|
|
162
|
-
* drive runs inline — `start` returns the driven run. A crash after `start` returns leaves a
|
|
163
|
-
* durable instance regardless of what the caller does next.
|
|
164
|
-
*
|
|
165
|
-
* `"op-commit"` (T-0 hardening, #1409 finding 1): ONLY valid inside an op handler. The seed is
|
|
166
|
-
* BUFFERED and executes INSIDE the op's atomic entity+event commit — after the entity flush, in
|
|
167
|
-
* the same SQLite transaction — so an op that fails its optimistic-version CAS (or throws, or
|
|
168
|
-
* fails output validation) rolls the instance seed back WITH its entities and events: no orphaned
|
|
169
|
-
* workflow can survive an op that did not commit. The drive runs after the op commits (a drive
|
|
170
|
-
* failure leaves a durable `pending` instance the recovery pass converges — the op itself has
|
|
171
|
-
* already succeeded). The returned {@link WorkflowRun} is a PROVISIONAL projection: the live run
|
|
172
|
-
* when the idempotency key already names an instance, else a `pending` stub whose id is the id
|
|
173
|
-
* the commit will seed (a concurrent same-key seed between handler and commit may supersede it).
|
|
174
|
-
* Outside an op invocation (a step body, a standalone client) this mode fails closed. */
|
|
175
|
-
enlist?: "op-commit";
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
export type WorkflowStatusName = "pending" | "running" | "sleeping" | "waiting" | "done" | "failed" | "canceled";
|
|
179
|
-
|
|
180
|
-
export interface WorkflowRun<Output = unknown> {
|
|
181
|
-
readonly id: string;
|
|
182
|
-
readonly status: WorkflowStatusName | `step:${string}`;
|
|
183
|
-
readonly attempts: number;
|
|
184
|
-
readonly createdAt: number;
|
|
185
|
-
readonly updatedAt: number;
|
|
186
|
-
readonly output?: Output;
|
|
187
|
-
readonly error?: string;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
type WorkflowInput<D> = D extends { input: infer In extends Schema } ? SchemaInput<In> : never;
|
|
191
|
-
|
|
192
|
-
export interface WorkflowClient<W> {
|
|
193
|
-
start<N extends keyof W & string>(name: N, input: WorkflowInput<RecordValue<W, N>>, options: WorkflowStartOptions): Promise<WorkflowRun>;
|
|
194
|
-
status(id: string): Promise<WorkflowRun | undefined>;
|
|
195
|
-
cancel(id: string): Promise<boolean>;
|
|
196
|
-
/** Inside an op invocation this is enlisted in the op commit; elsewhere it commits immediately. */
|
|
197
|
-
control?(operation: "cancel" | "fail" | "reopen", id: string, failure?: JsonValue): Promise<boolean>;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export type HostCommandStatus = "queued" | "sent" | "executing" | "done" | "failed";
|
|
201
|
-
|
|
202
|
-
export interface HostCommandRun<Out = unknown> {
|
|
203
|
-
readonly id: string;
|
|
204
|
-
readonly status: HostCommandStatus;
|
|
205
|
-
readonly result?: Out;
|
|
206
|
-
readonly error?: string;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
type CommandInput<D> = D extends { input: infer In extends Schema } ? SchemaInput<In> : never;
|
|
210
|
-
type CommandOutput<D> = D extends { result: infer Out extends Schema } ? SchemaOutput<Out> : never;
|
|
211
|
-
|
|
212
|
-
export interface CommandTarget {
|
|
213
|
-
host: string;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
export interface CommandClient<C> {
|
|
217
|
-
issue<N extends keyof C & string>(
|
|
218
|
-
name: N,
|
|
219
|
-
input: CommandInput<RecordValue<C, N>>,
|
|
220
|
-
target: CommandTarget,
|
|
221
|
-
): Promise<HostCommandRun<CommandOutput<RecordValue<C, N>>>>;
|
|
222
|
-
status(id: string): Promise<HostCommandRun | undefined>;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
export type ProbeResult =
|
|
226
|
-
| { status: "ready" }
|
|
227
|
-
| { status: "degraded"; reasons: Array<{ code: string; message: string }> };
|
|
228
|
-
|
|
229
|
-
export type Capability = "spawn" | "execute-commands" | "land" | (string & {});
|
|
230
|
-
|
|
231
|
-
export interface HealthReporter {
|
|
232
|
-
report(probe: string, result: ProbeResult): void;
|
|
233
|
-
capability(capability: Capability, host?: string): Promise<boolean>;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
type SecretName<S> = S extends readonly (infer Name extends string)[] ? Name : never;
|
|
237
|
-
|
|
238
|
-
export interface SecretsReader<S> {
|
|
239
|
-
get(name: SecretName<S>): Promise<string>;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* An OPAQUE per-{@link ModuleHost} identity. It carries no capability and no data — a module can only
|
|
244
|
-
* compare it or use it as a `WeakMap` key, to bind module-private state to the exact host instance that
|
|
245
|
-
* is executing (#1506: the inbox binds its admission capability to the host whose gateway claimed it, so
|
|
246
|
-
* a token minted against any other object is inert here). A look-alike literal is a DIFFERENT object and
|
|
247
|
-
* therefore a different key, which is the whole point: identity is by reference, never by shape.
|
|
248
|
-
*/
|
|
249
|
-
export interface HostIdentity {
|
|
250
|
-
readonly hostIdentity: true;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
export interface ModuleCtx<M extends AnyManifest = AnyManifest> {
|
|
254
|
-
/** The opaque identity of the host executing this op — see {@link HostIdentity}. */
|
|
255
|
-
readonly hostIdentity: HostIdentity;
|
|
256
|
-
readonly principal: Principal;
|
|
257
|
-
readonly trace: TraceContext;
|
|
258
|
-
readonly config: ResolvedConfig<M["config"]>;
|
|
259
|
-
readonly entities: EntityStores<M["entities"]>;
|
|
260
|
-
readonly events: EventWriter<NonNullable<M["events"]>>;
|
|
261
|
-
readonly workflows: WorkflowClient<NonNullable<M["workflows"]>>;
|
|
262
|
-
readonly commands: CommandClient<NonNullable<M["commands"]>>;
|
|
263
|
-
/** Dormant Stage-0 bridge for MESSAGE timer authority mutations. The participant is scoped to
|
|
264
|
-
* this op/step attempt and commits only with its entity/event/journal transaction. */
|
|
265
|
-
readonly messageAuthority: MessageAuthorityParticipant;
|
|
266
|
-
readonly health: HealthReporter;
|
|
267
|
-
readonly secrets: SecretsReader<NonNullable<M["secrets"]>>;
|
|
268
|
-
readonly clock: Clock;
|
|
269
|
-
readonly rng: Rng;
|
|
270
|
-
readonly net: Transport;
|
|
271
|
-
readonly log: Logger;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export interface OpExposure {
|
|
275
|
-
http?: boolean;
|
|
276
|
-
mcp?: boolean;
|
|
277
|
-
cli?: boolean;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
export interface OpDecl<In extends Schema = z.ZodType<any>, Out extends Schema = z.ZodType<any>> {
|
|
281
|
-
kind: "query" | "mutation";
|
|
282
|
-
input: In;
|
|
283
|
-
output: Out;
|
|
284
|
-
grant: Grant;
|
|
285
|
-
/**
|
|
286
|
-
* The scope requirement a transport ADVERTISES for this op (MCP `tools/list.requiredScopes`, the
|
|
287
|
-
* OpenAPI security surface). Defaults to `[grant]`. Set this ONLY when the handler enforces a
|
|
288
|
-
* STRICTER requirement than the entry `grant` — e.g. an op that declares `control:read` to gate
|
|
289
|
-
* entry but is admin-only in-handler because it reads an owner-less table. Advertising `[grant]`
|
|
290
|
-
* there would name a scope that ALWAYS 403s; advertising the real requirement keeps the published
|
|
291
|
-
* surface honest. Purely advisory: the invoker still gates on `grant`, so this changes no
|
|
292
|
-
* authorization decision — it only fixes what the derived tool/OpenAPI surface CLAIMS is required.
|
|
293
|
-
*/
|
|
294
|
-
advertiseScopes?: readonly Grant[];
|
|
295
|
-
summary: string;
|
|
296
|
-
emits?: readonly EventName[];
|
|
297
|
-
idempotent?: boolean;
|
|
298
|
-
expose?: OpExposure;
|
|
299
|
-
http?: { method: HttpMethod; path: string };
|
|
300
|
-
handler(ctx: ModuleCtx, input: z.input<In>): Promise<z.output<Out>>;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export class OpError extends Error {
|
|
304
|
-
constructor(
|
|
305
|
-
readonly code: string,
|
|
306
|
-
readonly status: number,
|
|
307
|
-
message: string,
|
|
308
|
-
readonly fields?: Readonly<Record<string, readonly string[]>>,
|
|
309
|
-
) {
|
|
310
|
-
super(message);
|
|
311
|
-
this.name = "OpError";
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
export type RetryBackoff =
|
|
316
|
-
| { kind: "fixed"; delayMs: number }
|
|
317
|
-
| { kind: "exponential"; initialMs: number; maxMs: number; multiplier?: number };
|
|
318
|
-
|
|
319
|
-
export interface RetryPolicy {
|
|
320
|
-
maxAttempts: number;
|
|
321
|
-
backoff: RetryBackoff;
|
|
322
|
-
jitter?: number;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
export type WaitCondition =
|
|
326
|
-
| { kind: "event"; topic: EventName; correlationId?: string }
|
|
327
|
-
| { kind: "command"; commandId: string };
|
|
328
|
-
|
|
329
|
-
export interface WorkflowDecl<In = any, State extends JsonValue = any> {
|
|
330
|
-
input: z.ZodType<In>;
|
|
331
|
-
state: z.ZodType<State>;
|
|
332
|
-
init(input: In): State;
|
|
333
|
-
start: StepName;
|
|
334
|
-
steps: Record<StepName, StepDecl<State>>;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
export interface StepDecl<State extends JsonValue> {
|
|
338
|
-
run(ctx: ModuleCtx, state: State): Promise<StepResult<State>>;
|
|
339
|
-
retry?: RetryPolicy;
|
|
340
|
-
timeoutMs?: number;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
export type StepResult<State extends JsonValue> =
|
|
344
|
-
| { state: State; next: StepName }
|
|
345
|
-
| { state: State; next: "done"; output?: unknown }
|
|
346
|
-
| { state: State; next: StepName; sleepUntil: number }
|
|
347
|
-
| { state: State; next: StepName; waitFor: WaitCondition };
|
|
348
|
-
|
|
349
|
-
export interface HostCommandDecl<In = any, Out = any> {
|
|
350
|
-
input: z.ZodType<In>;
|
|
351
|
-
result: z.ZodType<Out>;
|
|
352
|
-
target: "host-agent" | "runner";
|
|
353
|
-
grant: Grant;
|
|
354
|
-
idempotencyKey(input: In): string;
|
|
355
|
-
timeoutMs: number;
|
|
356
|
-
retry?: RetryPolicy;
|
|
357
|
-
whenDegraded?: "queue" | "reject";
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
export interface ProbeDecl {
|
|
361
|
-
intervalMs?: number;
|
|
362
|
-
check?(ctx: ModuleCtx): Promise<ProbeResult>;
|
|
363
|
-
degrades: Capability[];
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
export interface HealthDecl {
|
|
367
|
-
probes: Record<string, ProbeDecl>;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
export interface EventTopicSelector {
|
|
371
|
-
topics: readonly EventName[];
|
|
372
|
-
cursor?: string;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
export interface WsHandlerSlot {
|
|
376
|
-
onMessage(data: string | Uint8Array): void | Promise<void>;
|
|
377
|
-
onClose?(code: number, reason: string): void | Promise<void>;
|
|
378
|
-
onError?(error: unknown): void | Promise<void>;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
export type RawRouteDecl =
|
|
382
|
-
| {
|
|
383
|
-
method: HttpMethod;
|
|
384
|
-
path: string;
|
|
385
|
-
grant: Grant;
|
|
386
|
-
handler(ctx: ModuleCtx, req: Request): Promise<Response>;
|
|
387
|
-
}
|
|
388
|
-
| {
|
|
389
|
-
streaming: "sse";
|
|
390
|
-
path: string;
|
|
391
|
-
grant: Grant;
|
|
392
|
-
subscribe(ctx: ModuleCtx, req: Request): EventTopicSelector;
|
|
393
|
-
}
|
|
394
|
-
| {
|
|
395
|
-
streaming: "websocket";
|
|
396
|
-
path: string;
|
|
397
|
-
grant: Grant;
|
|
398
|
-
accept(ctx: ModuleCtx, req: Request): WsHandlerSlot;
|
|
399
|
-
};
|
|
400
|
-
|
|
401
|
-
export type CellRenderer = unknown;
|
|
402
|
-
|
|
403
|
-
export type UiSurface =
|
|
404
|
-
| { kind: "table"; entity: string; columns?: string[]; rowActions?: string[]; customCells?: Record<string, CellRenderer> }
|
|
405
|
-
| { kind: "detail"; entity: string; customCells?: Record<string, CellRenderer> }
|
|
406
|
-
| { kind: "form"; op: string }
|
|
407
|
-
| { kind: "settings" }
|
|
408
|
-
| { kind: "runs"; entity: string; statusField: string }
|
|
409
|
-
| { kind: "healthMatrix" };
|
|
410
|
-
|
|
411
|
-
export interface UiDecl {
|
|
412
|
-
nav?: { section: string; icon: string; order?: number };
|
|
413
|
-
surfaces?: UiSurface[];
|
|
414
|
-
custom?: () => Promise<{ default: unknown }>;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
export interface AgentContextDecl {
|
|
418
|
-
summary: string;
|
|
419
|
-
examples?: Array<{ intent: string; call: string }>;
|
|
420
|
-
caveats?: string[];
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
export interface MigrationHandle {
|
|
424
|
-
select<T extends JsonValue = JsonValue>(sql: string, params?: readonly JsonValue[]): Promise<readonly T[]>;
|
|
425
|
-
execute(sql: string, params?: readonly JsonValue[]): Promise<{ changes: number }>;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
export interface DataMigration {
|
|
429
|
-
id: string;
|
|
430
|
-
run(handle: MigrationHandle): Promise<void>;
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
export interface ModuleManifest {
|
|
434
|
-
id: string;
|
|
435
|
-
title: string;
|
|
436
|
-
description: string;
|
|
437
|
-
config?: ConfigDecl;
|
|
438
|
-
entities?: Record<string, EntityDecl>;
|
|
439
|
-
events?: Record<EventName, Schema>;
|
|
440
|
-
ops?: Record<string, OpDecl<any, any>>;
|
|
441
|
-
routes?: readonly RawRouteDecl[];
|
|
442
|
-
workflows?: Record<string, WorkflowDecl<any, any>>;
|
|
443
|
-
commands?: Record<string, HostCommandDecl<any, any>>;
|
|
444
|
-
health?: HealthDecl;
|
|
445
|
-
secrets?: readonly string[];
|
|
446
|
-
ui?: UiDecl;
|
|
447
|
-
agentContext?: AgentContextDecl;
|
|
448
|
-
data?: readonly DataMigration[];
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
export type AnyManifest = ModuleManifest;
|
|
452
|
-
|
|
453
|
-
type InvalidEventNames<M extends ModuleManifest> = M["events"] extends Record<string, unknown>
|
|
454
|
-
? Exclude<keyof M["events"], `${M["id"]}.${string}`>
|
|
455
|
-
: never;
|
|
456
|
-
|
|
457
|
-
type InvalidEmittedNames<M extends ModuleManifest> = M["ops"] extends Record<string, OpDecl<any, any>>
|
|
458
|
-
? {
|
|
459
|
-
// An op that omits the optional `emits` has nothing to check; only a concretely declared
|
|
460
|
-
// list (no `undefined` in its type) is verified against the manifest's events. Without this
|
|
461
|
-
// guard, an absent `emits` widens to `EventName[]` and every emit-less op false-positives.
|
|
462
|
-
[K in keyof M["ops"]]: undefined extends M["ops"][K]["emits"]
|
|
463
|
-
? never
|
|
464
|
-
: Exclude<NonNullable<M["ops"][K]["emits"]>[number], keyof NonNullable<M["events"]>>;
|
|
465
|
-
}[keyof M["ops"]]
|
|
466
|
-
: never;
|
|
467
|
-
|
|
468
|
-
type InvalidWorkflowState<M extends ModuleManifest> = M["workflows"] extends Record<string, WorkflowDecl<any, any>>
|
|
469
|
-
? {
|
|
470
|
-
[K in keyof M["workflows"]]: SchemaOutput<M["workflows"][K]["state"]> extends JsonValue ? never : K;
|
|
471
|
-
}[keyof M["workflows"]]
|
|
472
|
-
: never;
|
|
473
|
-
|
|
474
|
-
type LowerAlpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
|
|
475
|
-
| "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
|
|
476
|
-
type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
|
|
477
|
-
|
|
478
|
-
type IsKebabSegment<S extends string> = S extends `${infer First}${infer Rest}`
|
|
479
|
-
? First extends LowerAlpha
|
|
480
|
-
? Rest extends ""
|
|
481
|
-
? true
|
|
482
|
-
: Rest extends `${LowerAlpha | Digit}${infer Tail}`
|
|
483
|
-
? IsKebabRemainder<Tail>
|
|
484
|
-
: false
|
|
485
|
-
: false
|
|
486
|
-
: false;
|
|
487
|
-
|
|
488
|
-
type IsKebabRemainder<S extends string> = S extends ""
|
|
489
|
-
? true
|
|
490
|
-
: S extends `${LowerAlpha | Digit}${infer Rest}`
|
|
491
|
-
? IsKebabRemainder<Rest>
|
|
492
|
-
: false;
|
|
493
|
-
|
|
494
|
-
type IsKebabId<S extends string> = S extends `${infer Head}-${infer Tail}`
|
|
495
|
-
? IsKebabSegment<Head> extends true
|
|
496
|
-
? IsKebabId<Tail>
|
|
497
|
-
: false
|
|
498
|
-
: IsKebabSegment<S>;
|
|
499
|
-
|
|
500
|
-
type InvalidModuleId<M extends ModuleManifest> = string extends M["id"]
|
|
501
|
-
? never
|
|
502
|
-
: IsKebabId<M["id"]> extends true ? never : M["id"];
|
|
503
|
-
|
|
504
|
-
type ReservedModuleId<M extends ModuleManifest> = string extends M["id"]
|
|
505
|
-
? never
|
|
506
|
-
: Extract<M["id"], "command">;
|
|
507
|
-
|
|
508
|
-
type InvalidEntityFields<M extends ModuleManifest> = M["entities"] extends Record<string, EntityDecl>
|
|
509
|
-
? {
|
|
510
|
-
[K in keyof M["entities"]]: Extract<
|
|
511
|
-
keyof SchemaOutput<M["entities"][K]["schema"]>,
|
|
512
|
-
"scope" | "version" | "created_at" | "updated_at"
|
|
513
|
-
>;
|
|
514
|
-
}[keyof M["entities"]]
|
|
515
|
-
: never;
|
|
516
|
-
|
|
517
|
-
type InvalidWorkflowStart<M extends ModuleManifest> = M["workflows"] extends Record<string, WorkflowDecl<any, any>>
|
|
518
|
-
? {
|
|
519
|
-
[K in keyof M["workflows"]]: Exclude<M["workflows"][K]["start"], keyof M["workflows"][K]["steps"]>;
|
|
520
|
-
}[keyof M["workflows"]]
|
|
521
|
-
: never;
|
|
522
|
-
|
|
523
|
-
type MissingMutationIdempotency<M extends ModuleManifest> = M["ops"] extends Record<string, OpDecl<any, any>>
|
|
524
|
-
? {
|
|
525
|
-
[K in keyof M["ops"]]: M["ops"][K] extends { kind: "mutation" }
|
|
526
|
-
? M["ops"][K] extends { idempotent: boolean } ? never : K
|
|
527
|
-
: never;
|
|
528
|
-
}[keyof M["ops"]]
|
|
529
|
-
: never;
|
|
530
|
-
|
|
531
|
-
type ValidationFailure<Message extends string, Detail> = {
|
|
532
|
-
readonly __manifestError__: Message;
|
|
533
|
-
readonly __manifestErrorDetail__: Detail;
|
|
534
|
-
};
|
|
535
|
-
|
|
536
|
-
/** Compile-time cross-field checks that the individual declaration types cannot express. */
|
|
537
|
-
export type ValidateManifest<M extends ModuleManifest> = M
|
|
538
|
-
& ([InvalidModuleId<M>] extends [never]
|
|
539
|
-
? unknown
|
|
540
|
-
: ValidationFailure<"module id must be kebab-case", InvalidModuleId<M>>)
|
|
541
|
-
& ([ReservedModuleId<M>] extends [never]
|
|
542
|
-
? unknown
|
|
543
|
-
: ValidationFailure<"module id is reserved", ReservedModuleId<M>>)
|
|
544
|
-
& ([InvalidEventNames<M>] extends [never]
|
|
545
|
-
? unknown
|
|
546
|
-
: ValidationFailure<"event names must begin with '<module-id>.'", InvalidEventNames<M>>)
|
|
547
|
-
& ([InvalidEmittedNames<M>] extends [never]
|
|
548
|
-
? unknown
|
|
549
|
-
: ValidationFailure<"ops may only emit events declared by this module", InvalidEmittedNames<M>>)
|
|
550
|
-
& ([InvalidWorkflowState<M>] extends [never]
|
|
551
|
-
? unknown
|
|
552
|
-
: ValidationFailure<"workflow state must be JSON-safe", InvalidWorkflowState<M>>)
|
|
553
|
-
& ([InvalidEntityFields<M>] extends [never]
|
|
554
|
-
? unknown
|
|
555
|
-
: ValidationFailure<"entity schemas may not declare kernel-owned fields", InvalidEntityFields<M>>)
|
|
556
|
-
& ([InvalidWorkflowStart<M>] extends [never]
|
|
557
|
-
? unknown
|
|
558
|
-
: ValidationFailure<"workflow start must name a declared step", InvalidWorkflowStart<M>>)
|
|
559
|
-
& ([MissingMutationIdempotency<M>] extends [never]
|
|
560
|
-
? unknown
|
|
561
|
-
: ValidationFailure<"mutations must declare idempotent", MissingMutationIdempotency<M>>);
|
|
562
|
-
|
|
563
|
-
/** A validated manifest, preserving all literal and schema inference from its declaration. */
|
|
564
|
-
export type ModuleDefinition<M extends ModuleManifest = ModuleManifest> = Readonly<M> & {
|
|
565
|
-
readonly [ModuleDefinitionBrand]: true;
|
|
566
|
-
};
|
|
567
|
-
|
|
568
|
-
/** Validate once at the declaration boundary; no module runtime is started here. */
|
|
569
|
-
export function defineModule<const M extends ModuleManifest>(manifest: ValidateManifest<M>): ModuleDefinition<M> {
|
|
570
|
-
assertValidManifest(manifest);
|
|
571
|
-
return manifest as unknown as ModuleDefinition<M>;
|
|
572
|
-
}
|