@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,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { setAgentProfile } from "../../config-store";
|
|
1
|
+
import { setAgentProfileAsync } from "../../config-store-write";
|
|
2
|
+
import { writeProjectEntryAsync } from "../../db/project-entries-async";
|
|
3
|
+
import { ensureProjectAsync, addProjectRootAsync } from "../../db/projects-async";
|
|
4
|
+
import { upsertOrchestratorAsync } from "../../db/orchestrators-async";
|
|
5
|
+
|
|
6
|
+
|
|
8
7
|
import { upsertHostFromRegistrationInternal } from "../../db/hosts-registration";
|
|
9
8
|
import { parseMemorySeam } from "../../memory-seam";
|
|
10
9
|
import type { AgentProfile, Command } from "../../types";
|
|
@@ -17,8 +16,8 @@ import type { MemoryFixture, ProvisioningDriverRequest } from "./types";
|
|
|
17
16
|
export const HARNESS_ORCHESTRATOR_ID = "provisioning-harness";
|
|
18
17
|
export const HARNESS_HOST = "harness-host";
|
|
19
18
|
|
|
20
|
-
export function seedHarnessHost(cwd: string): void {
|
|
21
|
-
|
|
19
|
+
export async function seedHarnessHost(cwd: string): Promise<void> {
|
|
20
|
+
(await upsertOrchestratorAsync({ id: HARNESS_ORCHESTRATOR_ID, hostname: HARNESS_HOST, providers: ["claude", "codex"], baseDir: cwd }));
|
|
22
21
|
upsertHostFromRegistrationInternal({ orchestratorId: HARNESS_ORCHESTRATOR_ID, hostname: HARNESS_HOST,
|
|
23
22
|
hardware: { platform: "linux", arch: "x64", cpuThreads: 8, totalMemMb: 16384 } }, 1_700_000_000_000);
|
|
24
23
|
}
|
|
@@ -33,13 +32,13 @@ function defaults(profile: string): MemoryFixture[] {
|
|
|
33
32
|
];
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
export function seedMemory(cwd: string, request: ProvisioningDriverRequest): void {
|
|
35
|
+
export async function seedMemory(cwd: string, request: ProvisioningDriverRequest): Promise<void> {
|
|
37
36
|
const { profile } = request.scenario;
|
|
38
|
-
const project =
|
|
39
|
-
|
|
37
|
+
const project = (await ensureProjectAsync({ slug: "provisioning-harness", title: "Provisioning harness" }));
|
|
38
|
+
(await addProjectRootAsync(project.id, cwd));
|
|
40
39
|
for (const fixture of request.scenario.fixtures?.memory ?? defaults(profile)) {
|
|
41
40
|
if (fixture.cell !== "project") throw new Error("Only project knowledge fixtures are supported");
|
|
42
|
-
|
|
41
|
+
(await writeProjectEntryAsync({
|
|
43
42
|
projectId: project.id,
|
|
44
43
|
kind: "rule",
|
|
45
44
|
title: fixture.title,
|
|
@@ -49,7 +48,7 @@ export function seedMemory(cwd: string, request: ProvisioningDriverRequest): voi
|
|
|
49
48
|
originRef: fixture.originRef ?? `harness:${fixture.id}`,
|
|
50
49
|
audience: fixture.audience ?? "all",
|
|
51
50
|
inject: fixture.inject ?? "pinned",
|
|
52
|
-
});
|
|
51
|
+
}));
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
|
|
@@ -69,10 +68,10 @@ export async function prepareProvisioningSpawn(request: ProvisioningDriverReques
|
|
|
69
68
|
(error as Error & { code: string }).code = "PROVISIONING_SPAWN_INPUT_REJECTED";
|
|
70
69
|
throw error;
|
|
71
70
|
}
|
|
72
|
-
seedHarnessHost(scenario.cwd);
|
|
73
|
-
seedMemory(scenario.cwd, request);
|
|
71
|
+
(await seedHarnessHost(scenario.cwd));
|
|
72
|
+
(await seedMemory(scenario.cwd, request));
|
|
74
73
|
if (scenario.profileOverride) {
|
|
75
|
-
|
|
74
|
+
(await setAgentProfileAsync({ name: scenario.profile, ...scenario.profileOverride } as AgentProfile, "provisioning-harness", { overrideBuiltIn: true }));
|
|
76
75
|
}
|
|
77
76
|
const spawnRequestId = `sp_harness_${scenario.id.replace(/[^A-Za-z0-9._-]/g, "-").slice(0, 56)}`;
|
|
78
77
|
const result = await spawnAgent({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { mergeAgentMetaAsync } from "../db/agents-async";
|
|
1
2
|
import { relayEnv } from "@humwick/sdk/env";
|
|
2
3
|
import { PROXY_AUTH_HOLD_KIND } from "@humwick/sdk";
|
|
3
|
-
import { createActivityEventAsync, getAgent
|
|
4
|
+
import { createActivityEventAsync, getAgent } from "../db";
|
|
4
5
|
import { listRateLimitHoldCandidates } from "../db/agent-card-read";
|
|
5
6
|
import { withBufferedPresence } from "../db/presence-buffer";
|
|
6
7
|
import { rateLimitFallbackMs } from "../config";
|
|
@@ -72,10 +73,10 @@ function nextTransientState(state: ProviderState, now: number, attempts: number)
|
|
|
72
73
|
};
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
function notifyTransientExhausted(agent: { id: string; label?: string | null; spawnedBy?: string | null }, state: ProviderState, now: number): void {
|
|
76
|
-
|
|
76
|
+
async function notifyTransientExhausted(agent: { id: string; label?: string | null; spawnedBy?: string | null }, state: ProviderState, now: number): Promise<void> {
|
|
77
|
+
(await mergeAgentMetaAsync(agent.id, { providerState: { ...state, exhaustedAt: now, updatedAt: now } }));
|
|
77
78
|
if (!agent.spawnedBy) return;
|
|
78
|
-
routeNotification({
|
|
79
|
+
await routeNotification({
|
|
79
80
|
type: "agent.provider_blocked",
|
|
80
81
|
scope: { agentId: agent.id, parent: agent.spawnedBy },
|
|
81
82
|
recipients: [agent.spawnedBy],
|
|
@@ -126,7 +127,7 @@ export async function resumeRateLimitedAgents(context: { signal?: AbortSignal }
|
|
|
126
127
|
const persistedExhaustedAt = typeof state.exhaustedAt === "number" && Number.isFinite(state.exhaustedAt) ? state.exhaustedAt : undefined;
|
|
127
128
|
const justExhausted = exhausted && !tracked.exhaustedNotified && persistedExhaustedAt === undefined;
|
|
128
129
|
if (justExhausted) {
|
|
129
|
-
notifyTransientExhausted(agent, state, now);
|
|
130
|
+
await notifyTransientExhausted(agent, state, now);
|
|
130
131
|
resumeTracker.set(agent.id, { ...tracked, attempts, exhaustedNotified: true });
|
|
131
132
|
}
|
|
132
133
|
// #2619 — exhausting the fast backoff must never become a permanent, silent stop (an agent
|
|
@@ -141,7 +142,7 @@ export async function resumeRateLimitedAgents(context: { signal?: AbortSignal }
|
|
|
141
142
|
try {
|
|
142
143
|
// Short default TTL (per-type): a "limit reset, resume" push is pointless once stale — the
|
|
143
144
|
// window has moved on. One recipient per iteration keeps the per-agent rollback below intact.
|
|
144
|
-
routeNotification({
|
|
145
|
+
await routeNotification({
|
|
145
146
|
type: "agent.rate_limit_resume",
|
|
146
147
|
scope: { agentId: agent.id },
|
|
147
148
|
recipients: [agent.id],
|
|
@@ -166,17 +167,17 @@ export async function resumeRateLimitedAgents(context: { signal?: AbortSignal }
|
|
|
166
167
|
continue;
|
|
167
168
|
}
|
|
168
169
|
|
|
169
|
-
if (transient && !exhausted)
|
|
170
|
+
if (transient && !exhausted) (await mergeAgentMetaAsync(agent.id, { providerState: nextTransientState(state, now, attempts) }));
|
|
170
171
|
// #2619 — persist every exhausted-mode probe, so a relay restart after probe N keeps the
|
|
171
172
|
// clock (lastProbe reads state.lastResumeAt). Re-read: the exhaustion notice above may have
|
|
172
173
|
// just persisted exhaustedAt, which must survive (never re-stamped).
|
|
173
174
|
else if (exhausted) {
|
|
174
175
|
const current = agentProviderState(getAgent(agent.id)) ?? state;
|
|
175
|
-
|
|
176
|
+
(await mergeAgentMetaAsync(agent.id, { providerState: { ...current, lastResumeAt: now, updatedAt: now } }));
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
// #416 — flush messages queued while the agent was rate-limited.
|
|
179
|
-
flushQueuedDirectMessages(agent.id);
|
|
180
|
+
(await flushQueuedDirectMessages(agent.id));
|
|
180
181
|
// The held-agent card and provider state above are the accepted resume snapshot. Persist its
|
|
181
182
|
// audit before admitting the next agent, so concurrent provider updates cannot relabel it.
|
|
182
183
|
await beforeRateLimitResumeAuditForTests?.(agent.id);
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { upsertWorkspaceAsync } from "../db/runtime-admin-async";
|
|
1
2
|
import { relayEnv } from "@humwick/sdk/env";
|
|
2
3
|
import { createHash } from "node:crypto";
|
|
3
4
|
import type { LandBoundary, RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
4
5
|
import { errMessage, isRecord, stringValue, type Command } from "@humwick/sdk";
|
|
5
|
-
import { findCommandByCorrelationId
|
|
6
|
+
import { findCommandByCorrelationId } from "../commands-db";
|
|
7
|
+
import { findLatestCommandByCorrelationAsync } from "../commands-write";
|
|
6
8
|
import { getCommandAsync } from "../commands-write";
|
|
7
9
|
import { isTerminalCommandStatus } from "../db/command-terminal-status";
|
|
8
|
-
import { getWorkspace
|
|
10
|
+
import { getWorkspace } from "../db/workspaces";
|
|
9
11
|
import { landBoundaryById, landBoundaryForCommand, redMainIncidentById } from "../db/land-boundaries";
|
|
10
12
|
import { readFailedTestFiles } from "../ci/failed-test-files";
|
|
11
13
|
import type { GitHubApi } from "../issue-tracker/github";
|
|
@@ -70,13 +72,13 @@ async function advanceAutomaticRevert(incident: RedMainIncident, boundary: LandB
|
|
|
70
72
|
/** One direct, pinned, gated land per prepared red-main workspace: the revert's or the quarantine's. */
|
|
71
73
|
export async function landRedMainWorkspace(id: string, boundary: LandBoundary, prepared: Record<string, unknown>,
|
|
72
74
|
metadata: Record<string, unknown>, recoveryTestFiles?: string[]): Promise<Command> {
|
|
73
|
-
const existing =
|
|
75
|
+
const existing = await findLatestCommandByCorrelationAsync("workspace.merge", id);
|
|
74
76
|
if (existing) return existing;
|
|
75
77
|
const source = getWorkspace(boundary.workspaceId)!;
|
|
76
|
-
const workspace = getWorkspace(id) ??
|
|
78
|
+
const workspace = getWorkspace(id) ?? (await upsertWorkspaceAsync({ id, repoRoot: source.repoRoot, sourceCwd: source.repoRoot,
|
|
77
79
|
worktreePath: String(prepared.worktreePath), branch: String(prepared.branch), baseRef: boundary.baseRef,
|
|
78
80
|
baseSha: String(prepared.baseSha), mode: "isolated", status: "ready", orchestratorId: source.orchestratorId,
|
|
79
|
-
metadata: { ...metadata, landStrategy: "direct" } });
|
|
81
|
+
metadata: { ...metadata, landStrategy: "direct" } }));
|
|
80
82
|
const requested = await requestWorkspaceMerge(workspace, { requestedBy: "red-main-controller", strategy: "direct",
|
|
81
83
|
expectedHeadSha: String(prepared.headSha), deleteBranch: true, ...(recoveryTestFiles ? { recoveryTestFiles } : {}) });
|
|
82
84
|
if (!requested.ok) throw new Error(requested.error);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// #3363 — the red-main controller's production deps: GitHub for CI verdicts and reruns, Tasks and
|
|
2
2
|
// messages for escalation. Every CI observation uses the boundary's authoritative watch snapshot.
|
|
3
|
-
import type
|
|
3
|
+
import { MAX_INCIDENT_FAILING_TESTS, type LandBoundary, type RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
4
4
|
import { cleanLandGatesConfigFull } from "@humwick/sdk/land-gates";
|
|
5
|
-
import { isRecord } from "@humwick/sdk";
|
|
5
|
+
import { ciRunUrl, errMessage, isRecord } from "@humwick/sdk";
|
|
6
6
|
import { judgeExactSha, rerunBoundaryCi, type BoundaryCiObservation } from "../ci/land-boundary-ci.ts";
|
|
7
7
|
import { type GitHubRepository } from "../ci/monitor.ts";
|
|
8
8
|
import { getTaskDetailAsync } from "../db/task-entity-async.ts";
|
|
@@ -12,6 +12,8 @@ import { sendMessageServiceAsync } from "./send-message.ts";
|
|
|
12
12
|
import { setTaskEntityStatusAsync } from "./task-entity.ts";
|
|
13
13
|
import { automaticRedMainQuarantine } from "./red-main-quarantine";
|
|
14
14
|
import { automaticRedMainRevert, automaticRevertOutcome } from "./red-main-auto-revert";
|
|
15
|
+
import { readFailedTestCases } from "../ci/failed-test-files.ts";
|
|
16
|
+
import { recordRedMainIncidentFailures } from "./red-main-incident.ts";
|
|
15
17
|
|
|
16
18
|
/** Twice a typical main CI run: a run missing or cancelled past this leaves its boundary unverified. */
|
|
17
19
|
export const RED_MAIN_GRACE_MS = 60 * 60_000;
|
|
@@ -31,6 +33,20 @@ function describe(incident: RedMainIncident, observation: BoundaryCiObservation)
|
|
|
31
33
|
return `Red main confirmed on lane ${incident.laneKey} (incident ${incident.id}): the re-run did not produce a successful verdict.${jobs}${observation.runUrl ? ` Run: ${observation.runUrl}` : ""}`;
|
|
32
34
|
}
|
|
33
35
|
|
|
36
|
+
/** #3362 §11: the confirmed attempt's failing cases; a rerun that never produced logs falls back to the first failure.
|
|
37
|
+
* Best effort, read once: unreadable logs record nothing, so delivery gates hold nothing and every failure blocks. */
|
|
38
|
+
export async function recordIncidentFailingTests(incident: RedMainIncident, boundary: LandBoundary, attempt: number, api: GitHubApi): Promise<void> {
|
|
39
|
+
let cases;
|
|
40
|
+
try {
|
|
41
|
+
cases = await readFailedTestCases(boundary, incident.ciRunId, attempt, api);
|
|
42
|
+
if (!cases.length && attempt > 1) cases = await readFailedTestCases(boundary, incident.ciRunId, attempt - 1, api);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.warn(`[red-main] ${incident.id}: failing cases unreadable; none recorded: ${errMessage(error)}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
await recordRedMainIncidentFailures(incident.id, cases.slice(0, MAX_INCIDENT_FAILING_TESTS).map(({ file, name }) => ({ file, name })));
|
|
48
|
+
}
|
|
49
|
+
|
|
34
50
|
export function createRedMainControllerDeps(api: GitHubApi = ghApi, now: () => number = Date.now): RedMainControllerDeps {
|
|
35
51
|
return {
|
|
36
52
|
now,
|
|
@@ -62,10 +78,11 @@ export function createRedMainControllerDeps(api: GitHubApi = ghApi, now: () => n
|
|
|
62
78
|
if (!incident) throw new Error(`Effect ${effect.key} needs its incident`);
|
|
63
79
|
if (effect.kind === "auto-revert") return incident.mainFailurePolicy === "advisory" ? undefined : automaticRedMainRevert(incident, boundary, api);
|
|
64
80
|
if (effect.kind === "quarantine") return automaticRedMainQuarantine(incident, boundary, effect, api);
|
|
81
|
+
if (effect.kind === "record-failures") return recordIncidentFailingTests(incident, boundary, effect.attempt, api);
|
|
65
82
|
const task = await getTaskDetailAsync(effect.taskId);
|
|
66
83
|
if (!task) throw new Error(`Effect ${effect.key}: T${effect.taskId} is missing`);
|
|
67
84
|
const observation: BoundaryCiObservation = { status: "failure", runId: incident.ciRunId,
|
|
68
|
-
runUrl:
|
|
85
|
+
runUrl: ciRunUrl(boundary.remote, incident.ciRunId, incident.ciAttempt) };
|
|
69
86
|
const advisory = incident.mainFailurePolicy === "advisory";
|
|
70
87
|
const note = describe(incident, observation);
|
|
71
88
|
if (effect.kind === "reopen-task") {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// #3363 — server seam for the Kernel landing boundary and red-main incident ops
|
|
2
2
|
// (kernel/landing-incident.ts). Every write goes through the singleton landing module host.
|
|
3
3
|
import { landing } from "@humwick/kernel/landing";
|
|
4
|
-
import type { IncidentEffect, IncidentState, LandBoundary, RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
4
|
+
import type { IncidentEffect, IncidentFailingTest, IncidentState, LandBoundary, RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
5
5
|
import { activeLandCommandIdForWorkspace } from "../db/land-incident-eligibility.ts";
|
|
6
6
|
import { startKernelLandingIngress } from "./kernel-landing-ingress.ts";
|
|
7
7
|
|
|
@@ -26,6 +26,8 @@ export const transitionRedMainIncident = (input: { id: string; from: IncidentSta
|
|
|
26
26
|
export const settleRedMainIncidentEffect = (id: string, key: string) =>
|
|
27
27
|
invoke<RedMainIncident>("settleIncidentEffect", { id, key });
|
|
28
28
|
export const ensureRedMainIncidentEffects = (id: string) => invoke<RedMainIncident>("ensureIncidentEffects", { id });
|
|
29
|
+
export const recordRedMainIncidentFailures = (id: string, failingTests: IncidentFailingTest[]) =>
|
|
30
|
+
invoke<RedMainIncident>("recordIncidentFailures", { id, failingTests });
|
|
29
31
|
export const failAutomaticRedMainRevert = (id: string, reason: string) => invoke<RedMainIncident>("failAutomaticRevert", { id, reason });
|
|
30
32
|
export const queueBoundaryRerun = (id: string, effect: IncidentEffect) => invoke<LandBoundary>("queueBoundaryRerun", { id, effect });
|
|
31
33
|
export const settleBoundaryEffect = (id: string, key: string) => invoke<LandBoundary>("settleBoundaryEffect", { id, key });
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// like any change, and the list's issue gets the audit record. Anything short of that becomes a Task.
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import type { IncidentEffect, LandBoundary, RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
7
|
-
import { isRecord, stringValue } from "@humwick/sdk";
|
|
7
|
+
import { ciRunUrl, isRecord, stringValue } from "@humwick/sdk";
|
|
8
8
|
import { readFailedTestCases } from "../ci/failed-test-files";
|
|
9
9
|
import { findCommandByCorrelationId } from "../commands-db";
|
|
10
10
|
import { isTerminalCommandStatus } from "../db/command-terminal-status";
|
|
@@ -19,8 +19,7 @@ type Case = { id?: string; file: string; name: string; why?: string };
|
|
|
19
19
|
|
|
20
20
|
export const automaticQuarantineWorkspaceId = (id: string) => `red-main-q-${createHash("sha256").update(id).digest("hex").slice(0, 24)}`;
|
|
21
21
|
const prepareKey = (id: string) => `kcmd:red-main:${id}:prepare-quarantine`;
|
|
22
|
-
const runUrl = (boundary: LandBoundary, incident: RedMainIncident, attempt?: number) =>
|
|
23
|
-
`https://github.com/${boundary.remote}/actions/runs/${incident.ciRunId}${attempt ? `/attempts/${attempt}` : ""}`;
|
|
22
|
+
const runUrl = (boundary: LandBoundary, incident: RedMainIncident, attempt?: number) => ciRunUrl(boundary.remote, incident.ciRunId, attempt);
|
|
24
23
|
|
|
25
24
|
function evidence(incident: RedMainIncident, boundary: LandBoundary, attempt: number): string {
|
|
26
25
|
const failed = `main ${boundary.landedTipSha.slice(0, 12)} run ${incident.ciRunId} attempt ${attempt} failed`;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stampSpawnPrincipalAsync, markSpawnRegistrationConfirmedAsync, seedSpawnPromptMirrorAsync } from "../db/lifecycle-tail-async";
|
|
1
2
|
// Transport convergence (epic #342, slice #345) — the agent-registration service.
|
|
2
3
|
//
|
|
3
4
|
// ONE home for "an agent registered" — previously inlined in HTTP `postAgent` and
|
|
@@ -11,14 +12,13 @@
|
|
|
11
12
|
// the first-registration audit row.
|
|
12
13
|
import { errMessage, fireAndForget, isReservedAgentId } from "@humwick/sdk";
|
|
13
14
|
import { normalizeAgentSystemTags } from "../agent-system-tags";
|
|
14
|
-
import { ValidationError, agentPrincipalUserId,
|
|
15
|
+
import { ValidationError, agentPrincipalUserId, createActivityEventAsync, deliverableTaskIdsBySpawnRequestId, getAgent, getTaskDetail, readSpawnRegistrationMeta, seedSpawnReplyObligation, spawnRegistrationMeta, upsertAgentAsync } from "../db";
|
|
15
16
|
import { readSpawnSystemTags } from "../commands-db";
|
|
16
17
|
import { channelProviderForInput, expectedChannelAgentId } from "../db/channel-identity";
|
|
17
18
|
import { emitAgentStatus, emitNewMessage } from "../sse";
|
|
18
19
|
import { noteAgentTimelineEvent } from "../compaction-watch";
|
|
19
20
|
import { agentProviderTimelineEvent } from "../provider-timeline-event";
|
|
20
21
|
import { notifyAgentReady, notifyAgentRegistered } from "../agent-lifecycle-events";
|
|
21
|
-
import { markSpawnRegistrationConfirmed } from "../commands-db";
|
|
22
22
|
import { resolveSpawnLineage, resolveTeamLineage } from "../security";
|
|
23
23
|
import { flushQueuedDirectMessages, markManagedAgentRunning } from "./managed-running";
|
|
24
24
|
import { acquireTeamOnReady } from "./team";
|
|
@@ -56,7 +56,7 @@ function taskIdsForReadyAgent(agent: AgentCard): number[] {
|
|
|
56
56
|
return [...ids].sort((a, b) => a - b);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
export function bindSpawnedTaskToReadyAgent(agentId: string, actor = "agent-relay"): void {
|
|
59
|
+
export async function bindSpawnedTaskToReadyAgent(agentId: string, actor = "agent-relay"): Promise<void> {
|
|
60
60
|
const agent = getAgent(agentId);
|
|
61
61
|
if (!agent?.ready || isSpawnIntentCanceled(agent.meta?.spawnRequestId)) return;
|
|
62
62
|
const taskIds = taskIdsForReadyAgent(agent);
|
|
@@ -67,9 +67,9 @@ export function bindSpawnedTaskToReadyAgent(agentId: string, actor = "agent-rela
|
|
|
67
67
|
if (before.ownerAgentId && before.ownerAgentId !== agent.id && getAgent(before.ownerAgentId)?.status !== "offline") continue;
|
|
68
68
|
const assigned = before.ownerAgentId === agent.id
|
|
69
69
|
? before
|
|
70
|
-
: assignTaskEntityAgent(taskId, agent.id, "worker", agent.spawnedBy ?? actor);
|
|
70
|
+
: (await assignTaskEntityAgent(taskId, agent.id, "worker", agent.spawnedBy ?? actor));
|
|
71
71
|
if (assigned.status === "open" || assigned.status === "claimed" || assigned.status === "orphaned") {
|
|
72
|
-
setTaskEntityStatus(taskId, {
|
|
72
|
+
await setTaskEntityStatus(taskId, {
|
|
73
73
|
status: "in_progress",
|
|
74
74
|
note: `worker ${agent.id} ready`,
|
|
75
75
|
actor: agent.spawnedBy ?? actor,
|
|
@@ -90,9 +90,9 @@ export function bindSpawnedTaskToReadyAgent(agentId: string, actor = "agent-rela
|
|
|
90
90
|
* regardless of which transport carried it — a child readied only over the bus used to die
|
|
91
91
|
* unstamped and get reaped as `agent.spawn_failed`.
|
|
92
92
|
*/
|
|
93
|
-
export function announceSpawnedAgentReady(agentId: string, actor = "agent-relay"): void {
|
|
94
|
-
notifyAgentReady(agentId);
|
|
95
|
-
bindSpawnedTaskToReadyAgent(agentId, actor);
|
|
93
|
+
export async function announceSpawnedAgentReady(agentId: string, actor = "agent-relay"): Promise<void> {
|
|
94
|
+
await notifyAgentReady(agentId);
|
|
95
|
+
await bindSpawnedTaskToReadyAgent(agentId, actor);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/** The PRIVILEGED principals that bypass the registration gates — an explicit allowlist, so a
|
|
@@ -238,7 +238,7 @@ function serverRecordedApprovalMode(agentId: string, ctx: AuthContext): SpawnApp
|
|
|
238
238
|
return undefined;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
export function registerAgent(input: RegisterAgentInput, ctx: AuthContext, options: { emitStatus?: boolean } = {}): AgentCard {
|
|
241
|
+
export async function registerAgent(input: RegisterAgentInput, ctx: AuthContext, options: { emitStatus?: boolean } = {}): Promise<AgentCard> {
|
|
242
242
|
// Reserved built-in identities — the `system` lifecycle sender and the whole `user:` human
|
|
243
243
|
// namespace (legacy bare `'user'`, `user:default`, every `user:<id>`) — are mechanical sinks,
|
|
244
244
|
// never registrable agents. THIS is the one external-registration boundary (HTTP `postAgent`
|
|
@@ -358,7 +358,7 @@ export function registerAgent(input: RegisterAgentInput, ctx: AuthContext, optio
|
|
|
358
358
|
if (Object.keys(spawnMeta).length) registrationInput.meta = { ...registrationInput.meta, ...spawnMeta };
|
|
359
359
|
const rawSpawnSystemTags = readSpawnSystemTags(registeringSpawnRequestId, registrationInput.id);
|
|
360
360
|
const spawnSystemTags = rawSpawnSystemTags === undefined ? undefined : normalizeAgentSystemTags(rawSpawnSystemTags);
|
|
361
|
-
const agent =
|
|
361
|
+
const agent = await upsertAgentAsync(registrationInput, {
|
|
362
362
|
verifiedSpawnRequestId: ctx.constraints?.spawnRequestIds?.length === 1 ? ctx.constraints.spawnRequestIds[0] : undefined,
|
|
363
363
|
...(verifiedKeepJti ? { verifiedKeepJtis: [verifiedKeepJti] } : {}),
|
|
364
364
|
...(spawnSystemTags !== undefined ? { systemTags: spawnSystemTags } : {}),
|
|
@@ -366,20 +366,20 @@ export function registerAgent(input: RegisterAgentInput, ctx: AuthContext, optio
|
|
|
366
366
|
// #3567 — a first registration or a new generation records its principal (a reconnect has
|
|
367
367
|
// nothing new to stamp): the spawn's principal, else the registering caller's.
|
|
368
368
|
if (!existing || metaStr(existing.meta, "spawnRequestId") !== registeringSpawnRequestId) {
|
|
369
|
-
|
|
369
|
+
await stampSpawnPrincipalAsync(agent.id, registeringSpawnRequestId, registeringPrincipal(ctx, agent.id));
|
|
370
370
|
}
|
|
371
371
|
// #3398 — a new instance under this id replaced the provider process: that is a context reset.
|
|
372
372
|
if (existing?.instanceId && agent.instanceId && agent.instanceId !== existing.instanceId) {
|
|
373
|
-
recordContextReset({ agentId: agent.id, resetId: `restart:${agent.instanceId}`, kind: "restart", observedAt: Date.now(), evidence: { previousInstanceId: existing.instanceId } });
|
|
373
|
+
(await recordContextReset({ agentId: agent.id, resetId: `restart:${agent.instanceId}`, kind: "restart", observedAt: Date.now(), evidence: { previousInstanceId: existing.instanceId } }));
|
|
374
374
|
}
|
|
375
375
|
// A parked continuation is durable across runner process loss. Registration is the earliest
|
|
376
376
|
// point a replacement can receive it, so replay here rather than waiting for maintenance.
|
|
377
|
-
if (agent.ready && agent.status !== "offline") replayParkedContinuationInjections(agent.id, `registration:${agent.epoch}`);
|
|
377
|
+
if (agent.ready && agent.status !== "offline") (await replayParkedContinuationInjections(agent.id, `registration:${agent.epoch}`));
|
|
378
378
|
|
|
379
379
|
// Managed came-up-running reconcile — no-op for non-managed agents (the guard lives
|
|
380
380
|
// in markManagedAgentRunning). Clears backoff, flushes the policy queue, transitions
|
|
381
381
|
// managed state to running.
|
|
382
|
-
markManagedAgentRunning(
|
|
382
|
+
(await markManagedAgentRunning(
|
|
383
383
|
{
|
|
384
384
|
policyName: metaStr(agent.meta, "policyName"),
|
|
385
385
|
spawnRequestId: metaStr(agent.meta, "spawnRequestId"),
|
|
@@ -387,7 +387,7 @@ export function registerAgent(input: RegisterAgentInput, ctx: AuthContext, optio
|
|
|
387
387
|
tmuxSession: metaStr(agent.meta, "tmuxSession"),
|
|
388
388
|
},
|
|
389
389
|
ctx,
|
|
390
|
-
);
|
|
390
|
+
));
|
|
391
391
|
|
|
392
392
|
// ONE status broadcast (branch-state-enriched, #236), ONE timeline note. A real
|
|
393
393
|
// PreCompact/SessionStart hook arrives as a latched meta.timelineEvent — clears any
|
|
@@ -407,25 +407,25 @@ export function registerAgent(input: RegisterAgentInput, ctx: AuthContext, optio
|
|
|
407
407
|
const generation = metaStr(agent.meta, "spawnRequestId");
|
|
408
408
|
const newGeneration = generation !== undefined && generation !== metaStr(existing?.meta, "spawnRequestId");
|
|
409
409
|
if (newGeneration) notifyAgentRegistered(agent);
|
|
410
|
-
if (agent.ready && (!existing?.ready || newGeneration)) announceSpawnedAgentReady(agent.id, ctx.actor.id);
|
|
410
|
+
if (agent.ready && (!existing?.ready || newGeneration)) await announceSpawnedAgentReady(agent.id, ctx.actor.id);
|
|
411
411
|
|
|
412
412
|
// #416 — flush queued direct messages when a re-registering agent was previously unavailable
|
|
413
413
|
// (offline, stale, compacting, blocked) or a new agent becomes ready. No-op for brand-new agents
|
|
414
414
|
// (no queued messages yet) and when no queued messages exist.
|
|
415
|
-
if (agent.ready) acquireTeamOnReady(agent.id); // #3107 — a coordinator takes its project's seat before the flush
|
|
416
|
-
if (existing && (existing.status === "offline" || isAgentUnavailable(existing)) && agent.ready) flushQueuedDirectMessages(agent.id);
|
|
415
|
+
if (agent.ready) await acquireTeamOnReady(agent.id); // #3107 — a coordinator takes its project's seat before the flush
|
|
416
|
+
if (existing && (existing.status === "offline" || isAgentUnavailable(existing)) && agent.ready) (await flushQueuedDirectMessages(agent.id));
|
|
417
417
|
|
|
418
418
|
if (!existing) {
|
|
419
419
|
// #413 — a spawned worker with a report-back contract gets a pending reply obligation to its
|
|
420
420
|
// spawner so it can't idle with its verdict undelivered (vent #121). First-registration only.
|
|
421
421
|
const spawnRequestId = metaStr(agent.meta, "spawnRequestId");
|
|
422
|
-
if (spawnRequestId)
|
|
422
|
+
if (spawnRequestId) await markSpawnRegistrationConfirmedAsync(spawnRequestId);
|
|
423
423
|
const provider = metaStr(agent.meta, "provider");
|
|
424
|
-
const promptMirror =
|
|
424
|
+
const promptMirror = await seedSpawnPromptMirrorAsync(agent.id, spawnRequestId);
|
|
425
425
|
if (promptMirror?.created || promptMirror?.updated) emitNewMessage(promptMirror.message);
|
|
426
426
|
seedSpawnReplyObligation(agent.id, agent.spawnedBy, spawnRequestId);
|
|
427
|
-
void fireAndForget(`[register] spawn prompt issue activity for ${agent.id}`, () => recordSpawnPromptIssueActivity(agent, spawnRequestId));
|
|
428
|
-
|
|
427
|
+
void fireAndForget(`[register] spawn prompt issue activity for ${agent.id}`, async () => (await recordSpawnPromptIssueActivity(agent, spawnRequestId)));
|
|
428
|
+
await createActivityEventAsync({
|
|
429
429
|
clientId: `server-agent-${agent.id}-registered`,
|
|
430
430
|
kind: "state",
|
|
431
431
|
title: "Agent registered",
|
|
@@ -54,7 +54,7 @@ export async function restartProjectRole(input: {
|
|
|
54
54
|
if (!base) throw new Error(`it extends unknown profile "${role.extends}"`);
|
|
55
55
|
resolveProjectRoleForProvider(role, input.provider, { providerArgs: input.providerArgs }, {});
|
|
56
56
|
let profile = projectRoleProfile((await withResolvedProvisioningAsync(base, input.provider))!, role);
|
|
57
|
-
if (profile.sources?.project) profile = applyProjectCapabilityGates(profile, input.sourceCwd, undefined, { orchestratorLocal: isOrchestratorLocalToRelay(input.host), pinnedMcpCommit: role.source.sha });
|
|
57
|
+
if (profile.sources?.project) profile = (await applyProjectCapabilityGates(profile, input.sourceCwd, undefined, { orchestratorLocal: isOrchestratorLocalToRelay(input.host), pinnedMcpCommit: role.source.sha }));
|
|
58
58
|
assertProjectRoleMcpTrusted(role, profile);
|
|
59
59
|
assertProjectRoleMcpCwd(role, input.runtimeCwd);
|
|
60
60
|
const defaults = projectRoleSpawnDefaults(builtInProfileSpawnDefaults(base.name), role);
|