@humwick/server 0.0.0-stage → 0.130.1
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/CLA.md +66 -0
- package/CONTRIBUTING.md +144 -0
- package/LICENSE +167 -0
- package/README.md +511 -2
- package/SECURITY.md +67 -0
- package/THIRD_PARTY_NOTICES.md +144 -0
- package/bundled/prompts/README.md +10 -0
- package/bundled/prompts/context.advisory.compact.md +1 -0
- package/bundled/prompts/context.advisory.warn.md +1 -0
- package/bundled/prompts/continuation.envelope.md +18 -0
- package/bundled/prompts/manifest.json +838 -0
- package/bundled/prompts/memory.capture.boundary.post.md +1 -0
- package/bundled/prompts/memory.capture.boundary.pre.md +1 -0
- package/bundled/prompts/memory.charter.md +3 -0
- package/bundled/prompts/memory.native-off.md +0 -0
- package/bundled/prompts/notify.agent.exited.md +1 -0
- package/bundled/prompts/notify.agent.never-ready.md +1 -0
- package/bundled/prompts/notify.agent.ready.md +1 -0
- package/bundled/prompts/notify.automation.budget-warning.md +1 -0
- package/bundled/prompts/notify.land.failure.md +1 -0
- package/bundled/prompts/notify.land.steward-taken.coordinator.md +1 -0
- package/bundled/prompts/notify.land.steward-taken.md +1 -0
- package/bundled/prompts/notify.land.success.md +1 -0
- package/bundled/prompts/notify.routing.policy-changed.md +2 -0
- package/bundled/prompts/notify.spawn.failed.md +1 -0
- package/bundled/prompts/notify.spawn.queued.md +1 -0
- package/bundled/prompts/notify.spawn.recovered.md +1 -0
- package/bundled/prompts/notify.spawn.unconfirmed.md +1 -0
- package/bundled/prompts/profile.coordinator.charter.md +17 -0
- package/bundled/prompts/profile.debugger.system.md +12 -0
- package/bundled/prompts/profile.device-qa.system.md +10 -0
- package/bundled/prompts/profile.image-gen.append.0.md +2 -0
- package/bundled/prompts/profile.image-gen.system.md +4 -0
- package/bundled/prompts/profile.ops-assistant.brief.md +4 -0
- package/bundled/prompts/profile.probe.system.md +5 -0
- package/bundled/prompts/profile.qa.system.md +10 -0
- package/bundled/prompts/profile.sec-ops.system.md +14 -0
- package/bundled/prompts/profile.social-media.system.md +7 -0
- package/bundled/prompts/profile.software-design.system.md +26 -0
- package/bundled/prompts/profile.sub-coordinator.charter.md +2 -0
- package/bundled/prompts/profile.worker-gui.system.md +7 -0
- package/bundled/prompts/profile.worker.system.md +2 -0
- package/bundled/prompts/relay.agent-core.delivery.md +13 -0
- package/bundled/prompts/relay.agent-core.engineering.md +13 -0
- package/bundled/prompts/relay.agent-core.md +22 -0
- package/bundled/prompts/relay.context.claude.md +1 -0
- package/bundled/prompts/relay.context.claude.readonly.md +3 -0
- package/bundled/prompts/relay.context.codex.md +1 -0
- package/bundled/prompts/relay.context.opencode.md +1 -0
- package/bundled/prompts/relay.manual.claude.md +8 -0
- package/bundled/prompts/relay.search.fff.md +1 -0
- package/bundled/prompts/relay.temp-dir.md +1 -0
- package/bundled/prompts/relay.web.brave.md +1 -0
- package/bundled/prompts/relay.web.fetch.md +1 -0
- package/bundled/prompts/skill.device-lane.md +20 -0
- package/bundled/prompts/skill.security-code-review.md +10 -0
- package/bundled/prompts/skill.security-hardening.md +10 -0
- package/bundled/prompts/skill.security-host-audit.md +11 -0
- package/bundled/prompts/spawn.primer.md +6 -0
- package/bundled/prompts/spawn.reportup.child.md +3 -0
- package/bundled/prompts/spawn.reportup.coordinator.md +2 -0
- package/bundled/prompts/spawn.reportup.workflow-step.md +4 -0
- package/bundled/prompts/spawn.validation.delivery.md +1 -0
- package/bundled/prompts/spawn.validation.iterate.generic.md +1 -0
- package/bundled/prompts/spawn.validation.iterate.imperative.md +1 -0
- package/bundled/prompts/spawn.validation.landgates.header.md +1 -0
- package/bundled/prompts/steward.merge-stall.md +1 -0
- package/bundled/prompts/steward.prompt.md +20 -0
- package/bundled/prompts/steward.wake.md +1 -0
- package/bundled/prompts/task.claim.instruction.md +1 -0
- package/bundled/prompts/task.hydration.md +23 -0
- package/bundled/prompts/user.response.brief.md +1 -0
- package/bundled/prompts/user.response.normal.md +1 -0
- package/bundled/prompts/user.style.neutral.md +1 -0
- package/bundled/prompts/user.style.warm.md +1 -0
- package/bundled/prompts/workspace.deps.command.md +1 -0
- package/bundled/prompts/workspace.deps.none.md +1 -0
- package/bundled/prompts/workspace.deps.symlink.md +1 -0
- package/bundled/prompts/workspace.lifecycle.md +4 -0
- package/bundled/prompts/workspace.mcp.instructions.md +7 -0
- package/bundled/prompts/workspace.phase.abandoned.headline.md +1 -0
- package/bundled/prompts/workspace.phase.abandoned.hint.md +1 -0
- package/bundled/prompts/workspace.phase.active.headline.md +1 -0
- package/bundled/prompts/workspace.phase.active.hint.md +1 -0
- package/bundled/prompts/workspace.phase.conflict.headline.md +1 -0
- package/bundled/prompts/workspace.phase.conflict.hint.md +1 -0
- package/bundled/prompts/workspace.phase.merge-planned.headline.md +1 -0
- package/bundled/prompts/workspace.phase.merge-planned.hint.md +1 -0
- package/bundled/prompts/workspace.phase.merged.headline.md +1 -0
- package/bundled/prompts/workspace.phase.merged.hint.md +1 -0
- package/bundled/prompts/workspace.phase.ready.headline.md +1 -0
- package/bundled/prompts/workspace.phase.ready.hint.md +1 -0
- package/bundled/prompts/workspace.ready.contract.md +6 -0
- package/bundled/prompts/workspace.symlinks.md +1 -0
- package/bundled/roles/builder.md +18 -0
- package/bundled/roles/design-reviewer.md +13 -0
- package/bundled/roles/designer.md +11 -0
- package/bundled/roles/plan-auditor.md +29 -0
- package/bundled/roles/reviewer.md +36 -0
- package/bundled/roles/slice-qa.md +13 -0
- package/bundled/roles/verifier.md +13 -0
- package/bundled/skills/agent-browser/SKILL.md +72 -0
- package/bundled/skills/test-audit/SKILL.md +75 -0
- package/bundled/workflows/build-review.yaml +8 -0
- package/bundled/workflows/design-review.yaml +60 -0
- package/bundled/workflows/plan-conformance.yaml +5 -0
- package/bundled/workflows/slice-proof.yaml +85 -0
- package/bundled/workflows/verify-deployed.yaml +140 -0
- package/docs/guides/sub-coordinators.md +114 -0
- package/docs/guides/tools-administration.md +84 -0
- package/docs/guides/tools-agents.md +137 -0
- package/docs/guides/tools-coordination.md +228 -0
- package/docs/guides/tools-execution.md +48 -0
- package/docs/guides/tools-issues.md +69 -0
- package/docs/guides/tools-memory.md +150 -0
- package/docs/guides/tools-messages.md +192 -0
- package/docs/guides/tools-operations.md +133 -0
- package/docs/guides/tools-tasks.md +235 -0
- package/docs/guides/workflows.md +324 -0
- package/docs/license-faq.md +37 -0
- package/docs/openapi.json +18531 -0
- package/examples/integrations/github-issue.ts +48 -0
- package/examples/integrations/ops-alert.sh +27 -0
- package/examples/integrations/prometheus-alertmanager.ts +55 -0
- package/examples/integrations/support-ticket.sh +28 -0
- package/node_modules/@humwick/kernel/LICENSE +167 -0
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +344 -0
- package/node_modules/@humwick/kernel/async-event-log.ts +107 -0
- package/node_modules/@humwick/kernel/automations.pilot.ts +147 -0
- package/node_modules/@humwick/kernel/config.ts +111 -0
- package/node_modules/@humwick/kernel/contract.ts +572 -0
- package/node_modules/@humwick/kernel/control-authz.ts +281 -0
- package/node_modules/@humwick/kernel/control.ts +645 -0
- package/node_modules/@humwick/kernel/effects.ts +493 -0
- package/node_modules/@humwick/kernel/event-log.ts +319 -0
- package/node_modules/@humwick/kernel/http-transport.ts +384 -0
- package/node_modules/@humwick/kernel/identity-grammar.ts +20 -0
- package/node_modules/@humwick/kernel/identity.ts +248 -0
- package/node_modules/@humwick/kernel/index.ts +28 -0
- package/node_modules/@humwick/kernel/kernel-persistence.ts +181 -0
- package/node_modules/@humwick/kernel/landing-incident.ts +306 -0
- package/node_modules/@humwick/kernel/landing.ts +953 -0
- package/node_modules/@humwick/kernel/manifest-validation.ts +460 -0
- package/node_modules/@humwick/kernel/mcp-transport.ts +109 -0
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +200 -0
- package/node_modules/@humwick/kernel/message-authority.ts +281 -0
- package/node_modules/@humwick/kernel/module-host.ts +722 -0
- package/node_modules/@humwick/kernel/openapi-init.ts +14 -0
- package/node_modules/@humwick/kernel/package.json +39 -0
- package/node_modules/@humwick/kernel/persistence-schema.ts +248 -0
- package/node_modules/@humwick/kernel/persistence.ts +510 -0
- package/node_modules/@humwick/kernel/registry.ts +60 -0
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +499 -0
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +87 -0
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +186 -0
- package/node_modules/@humwick/kernel/timers.pilot.ts +1411 -0
- package/node_modules/@humwick/kernel/workflow-activation.ts +25 -0
- package/node_modules/@humwick/kernel/workflow-backstop.ts +40 -0
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +20 -0
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +213 -0
- package/node_modules/@humwick/kernel/workflow-composition.ts +231 -0
- package/node_modules/@humwick/kernel/workflow-container.ts +72 -0
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +42 -0
- package/node_modules/@humwick/kernel/workflow-control.ts +178 -0
- package/node_modules/@humwick/kernel/workflow-definition.ts +507 -0
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +60 -0
- package/node_modules/@humwick/kernel/workflow-foreach.ts +167 -0
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +339 -0
- package/node_modules/@humwick/kernel/workflow-journal.ts +922 -0
- package/node_modules/@humwick/kernel/workflow-lane.ts +48 -0
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +60 -0
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +19 -0
- package/node_modules/@humwick/kernel/workflow-runtime.ts +938 -0
- package/node_modules/@humwick/kernel/workflow-script.ts +11 -0
- package/node_modules/@humwick/kernel/workflow-state.ts +299 -0
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +195 -0
- package/node_modules/@humwick/kernel/workflow-transitions.ts +317 -0
- package/node_modules/@humwick/kernel/workflow-values.ts +153 -0
- package/node_modules/@humwick/kernel/workflow.pilot.ts +376 -0
- package/node_modules/@humwick/offload/LICENSE +167 -0
- package/node_modules/@humwick/offload/README.md +57 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +18 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/async-runner.js +158 -0
- package/node_modules/@humwick/offload/dist/async-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts +25 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.js +80 -0
- package/node_modules/@humwick/offload/dist/envelope.js.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +10 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +59 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +1 -0
- package/node_modules/@humwick/offload/dist/index.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/index.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/index.js +5 -0
- package/node_modules/@humwick/offload/dist/index.js.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +62 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +295 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/types.d.ts +111 -0
- package/node_modules/@humwick/offload/dist/types.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/types.js +176 -0
- package/node_modules/@humwick/offload/dist/types.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +23 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js +435 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +2 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js +27 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.js +1 -0
- package/node_modules/@humwick/offload/dist/worker.js.map +1 -0
- package/node_modules/@humwick/offload/package.json +42 -0
- package/node_modules/@humwick/offload/src/async-runner.ts +170 -0
- package/node_modules/@humwick/offload/src/envelope.ts +92 -0
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +49 -0
- package/node_modules/@humwick/offload/src/index.ts +4 -0
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +334 -0
- package/node_modules/@humwick/offload/src/types.ts +235 -0
- package/node_modules/@humwick/offload/src/worker-pool.ts +463 -0
- package/node_modules/@humwick/offload/src/worker-runtime.ts +32 -0
- package/node_modules/@humwick/offload/src/worker.ts +5 -0
- package/package.json +229 -4
- package/public/assets/MessageBubble-BWpoBjl4.js +4 -0
- package/public/assets/PlanGraphPanel-C0auck3n.js +2 -0
- package/public/assets/TraceView-DBnOx7AQ.js +5 -0
- package/public/assets/VaultDecisionCard-0kp2oNBC.js +2 -0
- package/public/assets/activity-TMzFOdh2.js +2 -0
- package/public/assets/activity-yLztXEBt.js +2 -0
- package/public/assets/agent-lineage-BbJDR1dW.js +2 -0
- package/public/assets/agent-liveness-DyqxfB-t.js +2 -0
- package/public/assets/agent-name-CTZBrSD9.js +2 -0
- package/public/assets/agent-profiles-BpI_jTxq.js +2 -0
- package/public/assets/agent-project-badge-9TqzUUYE.js +2 -0
- package/public/assets/agent-tools-D4n40pn8.js +2 -0
- package/public/assets/agent-type-icon-D6FUarOf.js +2 -0
- package/public/assets/agents-BYDslkJc.js +2 -0
- package/public/assets/analytics-B-XSbEMC.js +910 -0
- package/public/assets/andromeeda-vGVdxbeo.js +2 -0
- package/public/assets/angular-html-BVBpGdXr.js +2 -0
- package/public/assets/angular-ts-BfdufMKP.js +2 -0
- package/public/assets/api-CIIVBtAV.js +10 -0
- package/public/assets/archive-CIuPSvmx.js +2 -0
- package/public/assets/arrow-right-vFsRqG8V.js +2 -0
- package/public/assets/arrow-up-a-z-CKC2RCjD.js +2 -0
- package/public/assets/artifact-viewer-DdWIfV6M.js +2 -0
- package/public/assets/artifacts-DPN1q4pA.js +2 -0
- package/public/assets/artifacts-oBOqks-2.js +2 -0
- package/public/assets/astro-JKRPP03v.js +2 -0
- package/public/assets/aurora-x-CDeNXAV0.js +2 -0
- package/public/assets/automation-4KcRFXEu.js +2 -0
- package/public/assets/ayu-dark-DluEY0Gj.js +2 -0
- package/public/assets/ayu-light-C3h-C4tm.js +2 -0
- package/public/assets/ayu-mirage-Bqwy1Gya.js +2 -0
- package/public/assets/backlog-Cw9xPTCF.js +2 -0
- package/public/assets/badge-DqJRtj_p.js +2 -0
- package/public/assets/bell-_Yzbxxrt.js +2 -0
- package/public/assets/blade-DA8yMPsw.js +2 -0
- package/public/assets/bot-B0NpDNhr.js +2 -0
- package/public/assets/boxes-Cv7Wq3h4.js +2 -0
- package/public/assets/braces-BOks9SsY.js +2 -0
- package/public/assets/brain-CagXMEKE.js +2 -0
- package/public/assets/brain-circuit-CpQeSmp3.js +2 -0
- package/public/assets/bundle-web-ifbJd0t-.js +14 -0
- package/public/assets/busy-health-CTu32MZt.js +2 -0
- package/public/assets/button-Do6Z3vvn.js +2 -0
- package/public/assets/c-Wt1voDr2.js +2 -0
- package/public/assets/calendar-QJjoZ1JU.js +2 -0
- package/public/assets/calendar-clock-CDG_KBhx.js +2 -0
- package/public/assets/card-C4QJ4hCW.js +2 -0
- package/public/assets/catppuccin-frappe-3VR1Za6u.js +2 -0
- package/public/assets/catppuccin-latte-DwIHMF0Q.js +2 -0
- package/public/assets/catppuccin-macchiato-DYnBP6_5.js +2 -0
- package/public/assets/catppuccin-mocha-DYhrFGRu.js +2 -0
- package/public/assets/channels-BiXzg1G9.js +2 -0
- package/public/assets/chart-column-S02ZGfTR.js +2 -0
- package/public/assets/chat-Ctk2qwvA.js +6 -0
- package/public/assets/check-B3M9Ug1P.js +2 -0
- package/public/assets/chevron-down-BoG3JCZn.js +2 -0
- package/public/assets/chevron-right-iljytE0x.js +2 -0
- package/public/assets/chevron-up-Bv3yC5ma.js +2 -0
- package/public/assets/circle-UESLMi2-.js +2 -0
- package/public/assets/circle-alert-CryagaZd.js +2 -0
- package/public/assets/circle-arrow-up-B432r0Kk.js +2 -0
- package/public/assets/circle-check-CkUkN96J.js +2 -0
- package/public/assets/circle-x-CZ0erS7Q.js +2 -0
- package/public/assets/clipboard-list-W2YeUsxT.js +2 -0
- package/public/assets/clock-3-BH47318N.js +2 -0
- package/public/assets/clock-BWPPBh1_.js +2 -0
- package/public/assets/code-preview-Bm1wWqAp.js +3 -0
- package/public/assets/coffee-CThvmt4R.js +2 -0
- package/public/assets/connectors-C36ax4Vw.js +2 -0
- package/public/assets/copy-DFxhHRtV.js +2 -0
- package/public/assets/copy-button-CjOj4HEf.js +2 -0
- package/public/assets/cosmos-Dn8XrlnS.css +1 -0
- package/public/assets/cosmos-Jj9LK2Wf.js +3993 -0
- package/public/assets/cpp-C5WNSHb9.js +2 -0
- package/public/assets/cpu-Dndy84IU.js +2 -0
- package/public/assets/crate-agent-H6S7-B9T.js +2 -0
- package/public/assets/css-DJp_X0uY.js +2 -0
- package/public/assets/csv-Dx-8-gkx.js +2 -0
- package/public/assets/dark-plus-Cs2F2srj.js +2 -0
- package/public/assets/dependency-graph-Cd1E23wa.js +2 -0
- package/public/assets/deploys-Bwfq146q.js +2 -0
- package/public/assets/dialog-uuJ9_geR.js +6 -0
- package/public/assets/display-CfO7rTuF.js +3 -0
- package/public/assets/dist-B2h2GeWt.js +2 -0
- package/public/assets/dist-BeVYU67E.js +2 -0
- package/public/assets/dist-Bmm-RKub.js +2 -0
- package/public/assets/dist-C1xmD7qJ.js +2 -0
- package/public/assets/dist-C2J943E6.js +2 -0
- package/public/assets/dist-C6lpJDoA.js +2 -0
- package/public/assets/dist-CoWL6B0c.js +2 -0
- package/public/assets/dist-D93SmTNC.js +2 -0
- package/public/assets/dist-Da7HrHNA.js +2 -0
- package/public/assets/dist-DeW2Y1R5.js +2 -0
- package/public/assets/dist-DwBdqQ6H.js +2 -0
- package/public/assets/dist-Dz182zaW.js +2 -0
- package/public/assets/dist-H3DLHJ0C.js +2 -0
- package/public/assets/dist-RrY9C4SI.js +2 -0
- package/public/assets/download-KgtpDbt5.js +2 -0
- package/public/assets/dracula-BHWKrbxM.js +2 -0
- package/public/assets/dracula-soft-5eyTD99u.js +2 -0
- package/public/assets/dropdown-menu-BXiNephE.js +2 -0
- package/public/assets/es2015-DMmZ8vbD.js +42 -0
- package/public/assets/esm-ZSuD7QuY.js +2 -0
- package/public/assets/everforest-dark-sB-x3p7T.js +2 -0
- package/public/assets/everforest-light-Df2xbC6M.js +2 -0
- package/public/assets/external-link-BRfu-fHG.js +2 -0
- package/public/assets/eye-BAP6fHrX.js +2 -0
- package/public/assets/file-code-corner-CXhIR1vB.js +2 -0
- package/public/assets/file-pen-Crunre5f.js +2 -0
- package/public/assets/file-text-CKuoMR2U.js +2 -0
- package/public/assets/files-DhhZI2Ih.js +3 -0
- package/public/assets/flag-CnEG9PH-.js +2 -0
- package/public/assets/flame-CxBuz46L.js +2 -0
- package/public/assets/fleet-B_rFEbnL.js +2 -0
- package/public/assets/fleet-metrics-BkHP-P3R.js +2 -0
- package/public/assets/folder-git-2-CJOmTT06.js +2 -0
- package/public/assets/folder-open-CBUCMSlu.js +2 -0
- package/public/assets/folder-tree-BG3Y9nqH.js +2 -0
- package/public/assets/formatted-body-Cm1RrzmN.js +3 -0
- package/public/assets/formatted-body-impl-DQiOuOD1.js +3 -0
- package/public/assets/gauge-BIODY-BQ.js +2 -0
- package/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/public/assets/git-branch-yxhV0m8E.js +2 -0
- package/public/assets/git-commit-horizontal-DS1pJ_SS.js +2 -0
- package/public/assets/git-merge-C7eIG425.js +2 -0
- package/public/assets/github-dark-C-LZuMrd.js +2 -0
- package/public/assets/github-dark-default-DXG-b-1a.js +2 -0
- package/public/assets/github-dark-dimmed-Bx1FflLF.js +2 -0
- package/public/assets/github-dark-high-contrast-B_tTalzw.js +2 -0
- package/public/assets/github-light-EUqPIrTm.js +2 -0
- package/public/assets/github-light-default-BXViO-2h.js +2 -0
- package/public/assets/github-light-high-contrast-B68TUdTA.js +2 -0
- package/public/assets/globe-Cl5fXtqs.js +2 -0
- package/public/assets/glsl-Dv5r7kPw.js +2 -0
- package/public/assets/graphql-CcFwQwm0.js +2 -0
- package/public/assets/gruvbox-dark-hard-C820rvS2.js +2 -0
- package/public/assets/gruvbox-dark-medium-BPjhmG05.js +2 -0
- package/public/assets/gruvbox-dark-soft-MrdJrrXF.js +2 -0
- package/public/assets/gruvbox-light-hard-BC_s9l72.js +2 -0
- package/public/assets/gruvbox-light-medium-BAWPOn9u.js +2 -0
- package/public/assets/gruvbox-light-soft-BSMLrYjP.js +2 -0
- package/public/assets/haml-Bg4I2hiD.js +2 -0
- package/public/assets/handlebars-DnwbnL5R.js +2 -0
- package/public/assets/hash-CbtKih3g.js +2 -0
- package/public/assets/horizon-CE9ld1lL.js +2 -0
- package/public/assets/horizon-bright-DSNQnXHK.js +2 -0
- package/public/assets/host-mTgRw7xh.js +2 -0
- package/public/assets/host-providers-dialog-CHqwXTov.js +2 -0
- package/public/assets/hourglass-txu4ax6n.js +2 -0
- package/public/assets/houston-CsvMBhTu.js +2 -0
- package/public/assets/html-C8UlPnhE.js +2 -0
- package/public/assets/html-derivative-CY6NRz-J.js +2 -0
- package/public/assets/http-CoW620Fi.js +2 -0
- package/public/assets/humwick-lockup-on-dark-Ds44Y7BK.svg +19 -0
- package/public/assets/humwick-lockup-on-light-ClALZAHt.svg +19 -0
- package/public/assets/hurl-CSSETujw.js +2 -0
- package/public/assets/imba-DsUTQ-LC.js +2 -0
- package/public/assets/inbox-Dfwk3Gt8.js +2 -0
- package/public/assets/index-B7ZerHLY.css +2 -0
- package/public/assets/index-BU3uWo2t.js +15 -0
- package/public/assets/input-CsTB6jIx.js +2 -0
- package/public/assets/insights-fH1EL-qZ.js +2 -0
- package/public/assets/integrations-C5Oix6ng.js +2 -0
- package/public/assets/issue-ref-chip-ODyondIa.js +3 -0
- package/public/assets/java-CGc3VwQr.js +2 -0
- package/public/assets/javascript-CUt1pgmJ.js +2 -0
- package/public/assets/jinja-CD-Z-FLd.js +2 -0
- package/public/assets/jison-imPNup1l.js +2 -0
- package/public/assets/json-qhed-kSA.js +2 -0
- package/public/assets/json5-BR5RXkoi.js +2 -0
- package/public/assets/jsonc-CYpm1nAK.js +2 -0
- package/public/assets/jsonl-CmCQp5Yx.js +2 -0
- package/public/assets/jsx-CY6oMTks.js +2 -0
- package/public/assets/julia-CjffhBEM.js +2 -0
- package/public/assets/kanagawa-dragon-CXtmUGW6.js +2 -0
- package/public/assets/kanagawa-lotus-BN08jTvb.js +2 -0
- package/public/assets/kanagawa-wave-CTweb8Dz.js +2 -0
- package/public/assets/kernel-Bqr0CZGv.js +2 -0
- package/public/assets/key-round-CcSxl5qr.js +2 -0
- package/public/assets/keyboard-DcmEulph.js +2 -0
- package/public/assets/label-BPBzm9FJ.js +2 -0
- package/public/assets/laserwave-C_8bwKvT.js +2 -0
- package/public/assets/layers-DEfClY-v.js +2 -0
- package/public/assets/legacy-storage-carry-C-tBSxRA.js +2 -0
- package/public/assets/less-DVTAwKKz.js +2 -0
- package/public/assets/lib-D7DTGM1F.js +2 -0
- package/public/assets/lib-G-25QXXf.js +30 -0
- package/public/assets/light-plus-DVQuIRkW.js +2 -0
- package/public/assets/lightbulb-RDhZ4p-D.js +2 -0
- package/public/assets/link-2-off-DfRF9Hwb.js +2 -0
- package/public/assets/link-6RR7Hy3-.js +2 -0
- package/public/assets/list-checks-CwnS3hly.js +2 -0
- package/public/assets/list-ordered-D8nCM7rT.js +2 -0
- package/public/assets/list-todo-9qT0fgxZ.js +2 -0
- package/public/assets/loader-circle-BfPd4kOD.js +2 -0
- package/public/assets/lock-BW8MPKw_.js +2 -0
- package/public/assets/log-viewer-Cvfy6PW7.js +4 -0
- package/public/assets/mail-DyaDmwfY.js +2 -0
- package/public/assets/maintenance-D8CDH5wZ.js +2 -0
- package/public/assets/managed-agents-egllbpij.js +4 -0
- package/public/assets/markdown-BYOwaDjH.js +2 -0
- package/public/assets/markdown-preview-CYSFgVgK.js +3 -0
- package/public/assets/markdown-preview-impl-BteVIjX4.js +2 -0
- package/public/assets/marko-DvhNOisQ.js +2 -0
- package/public/assets/material-theme-Bm3Qr25_.js +2 -0
- package/public/assets/material-theme-darker-2IIEA8gg.js +2 -0
- package/public/assets/material-theme-lighter-uhdI0v04.js +2 -0
- package/public/assets/material-theme-ocean-CHQ94UKr.js +2 -0
- package/public/assets/material-theme-palenight-B5W6OYN7.js +2 -0
- package/public/assets/mdc-CazklSAj.js +2 -0
- package/public/assets/mdx-DQZ5AkYe.js +2 -0
- package/public/assets/memory-C8WmXsyr.js +2 -0
- package/public/assets/message-circle-wjztgHBe.js +2 -0
- package/public/assets/message-square-C-1G8dMM.js +2 -0
- package/public/assets/message-square-reply-B9Z4cbQx.js +2 -0
- package/public/assets/messages-BzQdqlO6.js +2 -0
- package/public/assets/messages-square-DVM1ZtcI.js +2 -0
- package/public/assets/min-dark-BSWPekZh.js +2 -0
- package/public/assets/min-light-DDpmG2fV.js +2 -0
- package/public/assets/minimize-2-BkK6XoMP.js +2 -0
- package/public/assets/monokai-CdkpiU2Y.js +2 -0
- package/public/assets/night-owl-DhmEMT88.js +2 -0
- package/public/assets/night-owl-light-eJ-hLW7d.js +2 -0
- package/public/assets/nord-Cb4Vim4T.js +2 -0
- package/public/assets/octagon-x-B5lnUY-8.js +2 -0
- package/public/assets/one-dark-pro-CLwyXe_n.js +2 -0
- package/public/assets/one-light-D7Lr4KcI.js +2 -0
- package/public/assets/orchestrators-B1HxzkNw.js +2 -0
- package/public/assets/overview-DCUnI4Z7.js +2 -0
- package/public/assets/package-open-ckPgcjpv.js +2 -0
- package/public/assets/package-plus-C1AKMjsl.js +2 -0
- package/public/assets/pairs-ftCd2XcD.js +2 -0
- package/public/assets/paperclip-CNpKZKum.js +2 -0
- package/public/assets/pause-DttnHD4c.js +2 -0
- package/public/assets/pencil-B1Hf2V_J.js +2 -0
- package/public/assets/php-CBqsN0ai.js +2 -0
- package/public/assets/pin-DcsKeXxr.js +2 -0
- package/public/assets/plastic-DQwYfKfQ.js +2 -0
- package/public/assets/play-BbT8m7A0.js +2 -0
- package/public/assets/plug-vIyO9_P8.js +2 -0
- package/public/assets/plug-zap-V0wMDJ-G.js +2 -0
- package/public/assets/plus-D5Ek4e2S.js +2 -0
- package/public/assets/poimandres-DRFjx7u4.js +2 -0
- package/public/assets/popover-8w1TWKMG.js +2 -0
- package/public/assets/postcss-BXeXVLqQ.js +2 -0
- package/public/assets/power-6tZOhYPg.js +2 -0
- package/public/assets/preload-helper-HclGiUj8.js +1 -0
- package/public/assets/profile-icon-B2zH8DMH.js +2 -0
- package/public/assets/projects-B_lmcqfO.js +2 -0
- package/public/assets/prompt-settings-Bftq9czX.js +2 -0
- package/public/assets/provider-brand-icon-_67JR7Zh.js +2 -0
- package/public/assets/provider-display-DbLWpP3j.js +2 -0
- package/public/assets/pug-C5hz5LQ7.js +2 -0
- package/public/assets/python-gzcpVVnB.js +2 -0
- package/public/assets/r-Dzep-lPg.js +2 -0
- package/public/assets/radio-Bn0_qc0G.js +2 -0
- package/public/assets/react-dom-DSFxiC7T.js +2 -0
- package/public/assets/red-CJ3rzSJv.js +2 -0
- package/public/assets/refresh-cw-CfpvQcUn.js +2 -0
- package/public/assets/regexp-Omp9DhTb.js +2 -0
- package/public/assets/registry-DWCU5c8q.js +4 -0
- package/public/assets/repeat-hl4p_Klo.js +2 -0
- package/public/assets/rocket-BmO1qSu-.js +2 -0
- package/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/public/assets/rose-pine-BthvhNj6.js +2 -0
- package/public/assets/rose-pine-dawn-Dg85fqjY.js +2 -0
- package/public/assets/rose-pine-moon-hon4tzzS.js +2 -0
- package/public/assets/rotate-ccw-CtD77qkX.js +2 -0
- package/public/assets/rotate-cw-FPtkDewA.js +2 -0
- package/public/assets/run-card-CO_bguQf.js +2 -0
- package/public/assets/sass-DXrisJhu.js +2 -0
- package/public/assets/save-B_PGqSm4.js +2 -0
- package/public/assets/scroll-area-CIN4KQse.js +2 -0
- package/public/assets/scss-DdSxiZKl.js +2 -0
- package/public/assets/search-DjzbnTbf.js +2 -0
- package/public/assets/secrets-C7GIUATz.js +2 -0
- package/public/assets/security-BUFau5-N.js +3 -0
- package/public/assets/select-DTQMP4Dk.js +2 -0
- package/public/assets/separator-t1cLZErD.js +2 -0
- package/public/assets/server-CZIRjFyY.js +2 -0
- package/public/assets/service-access-settings-C3aujqTG.js +2 -0
- package/public/assets/settings-C6sZ9eBa.js +6 -0
- package/public/assets/shellscript-CLZ0U2zV.js +2 -0
- package/public/assets/shield-CtXNUA0i.js +2 -0
- package/public/assets/shield-alert-B9jCWcKW.js +2 -0
- package/public/assets/shipping-Bu8p1gEw.js +2 -0
- package/public/assets/shipping-stats-BiMTsA4A.js +2 -0
- package/public/assets/slack-dark-DnToyrRv.js +2 -0
- package/public/assets/slack-ochin-B2OO5cIa.js +2 -0
- package/public/assets/smile-plus-q6EQBXHZ.js +2 -0
- package/public/assets/snazzy-light-4G7pJPwS.js +2 -0
- package/public/assets/solarized-dark-DV17i1UV.js +2 -0
- package/public/assets/solarized-light-DSh2HLQt.js +2 -0
- package/public/assets/sparkles-CzwR10ZU.js +2 -0
- package/public/assets/sql-DNssxck8.js +2 -0
- package/public/assets/square-Bqly37YM.js +2 -0
- package/public/assets/stats-V9Z-GxUd.js +2 -0
- package/public/assets/status-dot-CVv0iGHL.js +2 -0
- package/public/assets/stethoscope-SCBrnQQ8.js +2 -0
- package/public/assets/store-BvtFdlGX.js +9 -0
- package/public/assets/stylus-B6D30XZt.js +2 -0
- package/public/assets/svelte-DOdLCIlh.js +2 -0
- package/public/assets/switch-DuCA7mrB.js +2 -0
- package/public/assets/synthwave-84-nFMaYfgc.js +2 -0
- package/public/assets/tabs-jZgNvNHr.js +2 -0
- package/public/assets/task-chip-CYj0mpoL.js +2 -0
- package/public/assets/tasks-BIyeAaPC.js +2 -0
- package/public/assets/tasks-CXU75HRF.js +11 -0
- package/public/assets/teams-BPf976zb.js +2 -0
- package/public/assets/terminal-Bl2u7KxT.js +2 -0
- package/public/assets/terminal-viewer-DE9BOe-8.js +3 -0
- package/public/assets/terminal-viewer-impl-BrP-ENHg.css +1 -0
- package/public/assets/terminal-viewer-impl-D04pjmGh.js +143 -0
- package/public/assets/textarea-hs6Mpyfl.js +2 -0
- package/public/assets/themes-G5j9m1Ji.js +2 -0
- package/public/assets/tokyo-night-oM2G3aXe.js +2 -0
- package/public/assets/trash-2-FbcSq927.js +2 -0
- package/public/assets/triangle-alert-BBNhfgMi.js +2 -0
- package/public/assets/ts-tags-Ca73dJJY.js +2 -0
- package/public/assets/tsx-5Eka4NBX.js +2 -0
- package/public/assets/typescript-DOu2WMV5.js +2 -0
- package/public/assets/use-agent-terminal-B1yR456R.js +2 -0
- package/public/assets/use-decisions-D-S4tpDf.js +2 -0
- package/public/assets/use-project-list-B-T2Bnnn.js +2 -0
- package/public/assets/use-selectors-CnrAk2YP.js +6 -0
- package/public/assets/user-avatar-nBFIcR4M.js +2 -0
- package/public/assets/user-cog-CKcouW1J.js +2 -0
- package/public/assets/user-plus-D9749q73.js +2 -0
- package/public/assets/users-C7B3u9jv.js +2 -0
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +8 -0
- package/public/assets/vesper-DdrHHSXu.js +2 -0
- package/public/assets/vitesse-black-fwtXNY1n.js +2 -0
- package/public/assets/vitesse-dark-BZCL-v6S.js +2 -0
- package/public/assets/vitesse-light-VbXTXTou.js +2 -0
- package/public/assets/volume-2-XrcRKD9Z.js +2 -0
- package/public/assets/vue-Bfx0ffIq.js +2 -0
- package/public/assets/vue-html-BeluIYX0.js +2 -0
- package/public/assets/vue-vine-DGUAbOCX.js +2 -0
- package/public/assets/warehouse-BanzOanY.js +2 -0
- package/public/assets/wasm-BnjxR4X6.js +2 -0
- package/public/assets/wasm-ByWQv1Qj.js +2 -0
- package/public/assets/waypoints-CIzINtLT.js +2 -0
- package/public/assets/wgsl-BsKzXJz4.js +2 -0
- package/public/assets/wit-DdvCle-K.js +2 -0
- package/public/assets/work-queue-TCjJxeT-.js +2 -0
- package/public/assets/workflow-marker-Cf3Hf2fN.js +2 -0
- package/public/assets/workflows-CXQX20Qj.js +6 -0
- package/public/assets/workspaces-qSYzKYMA.js +3 -0
- package/public/assets/wrench-C7-4CgnY.js +2 -0
- package/public/assets/x-Bge17hWJ.js +2 -0
- package/public/assets/xml-DIqSwXR3.js +2 -0
- package/public/assets/yaml-rwi0_p6S.js +2 -0
- package/public/assets/zap-DGuDTw4w.js +2 -0
- package/public/assets/zoom-in-Bs8Qv8VL.js +2 -0
- package/public/assets/zoomable-image-B3Og53nj.js +2 -0
- package/public/cosmos/audio/README.md +50 -0
- package/public/cosmos/audio/alert.mp3 +0 -0
- package/public/cosmos/audio/ambient-bed.mp3 +0 -0
- package/public/cosmos/audio/comet.mp3 +0 -0
- package/public/cosmos/audio/cross-galaxy.mp3 +0 -0
- package/public/cosmos/audio/deploy.mp3 +0 -0
- package/public/cosmos/audio/galaxy-dissipate.mp3 +0 -0
- package/public/cosmos/audio/galaxy-form.mp3 +0 -0
- package/public/cosmos/audio/land.mp3 +0 -0
- package/public/cosmos/audio/reap.mp3 +0 -0
- package/public/cosmos/audio/spawn.mp3 +0 -0
- package/public/cosmos.html +34 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.svg +10 -0
- package/public/icons/apple-touch-icon.png +0 -0
- package/public/icons/humwick-192.png +0 -0
- package/public/icons/humwick-512.png +0 -0
- package/public/icons/humwick.svg +19 -0
- package/public/index.html +188 -0
- package/public/manifest.webmanifest +45 -0
- package/public/sw.js +160 -0
- package/recipes/code-review.yaml +26 -0
- package/recipes/debug.yaml +20 -0
- package/recipes/feature.yaml +26 -0
- package/recipes/refactor.yaml +20 -0
- package/recipes/test.yaml +20 -0
- package/runner/LICENSE +167 -0
- package/runner/agent-bin/agent-relay-browser +10 -0
- package/runner/agent-bin/humwick +10 -0
- package/runner/hooks/fff-search-redirect/fff-search-redirect.cjs +161 -0
- package/runner/hooks/fff-search-redirect/hooks.json +13 -0
- package/runner/hooks/rg-r-guard/hooks.json +18 -0
- package/runner/hooks/rg-r-guard/rg-r-guard.cjs +144 -0
- package/runner/hooks/web-tools-redirect/hooks.json +13 -0
- package/runner/hooks/web-tools-redirect/web-tools-redirect.cjs +84 -0
- package/runner/plugins/browser/skills/playwright-cli/SKILL.md +53 -0
- package/runner/plugins/claude/.claude-plugin/plugin.json +8 -0
- package/runner/plugins/claude/claude-statusline-probe.cjs +144 -0
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +914 -0
- package/runner/plugins/claude/hooks/gate-run-guard.sh +9 -0
- package/runner/plugins/claude/hooks/gate-run-guard.ts +237 -0
- package/runner/plugins/claude/hooks/hooks.json +158 -0
- package/runner/plugins/claude/hooks/kill-guard.provisioned.mjs +7027 -0
- package/runner/plugins/claude/hooks/kill-guard.sh +341 -0
- package/runner/plugins/claude/hooks/kill-guard.ts +337 -0
- package/runner/plugins/claude/hooks/permission-request.sh +22 -0
- package/runner/plugins/claude/hooks/post-compact.sh +10 -0
- package/runner/plugins/claude/hooks/post-tool-use.sh +8 -0
- package/runner/plugins/claude/hooks/pre-compact.sh +12 -0
- package/runner/plugins/claude/hooks/read-only-bash-guard.sh +587 -0
- package/runner/plugins/claude/hooks/relay-status.sh +373 -0
- package/runner/plugins/claude/hooks/session-end.sh +26 -0
- package/runner/plugins/claude/hooks/session-start.sh +31 -0
- package/runner/plugins/claude/hooks/shell-trust.ts +28 -0
- package/runner/plugins/claude/hooks/stop-failure.sh +47 -0
- package/runner/plugins/claude/hooks/stop.sh +48 -0
- package/runner/plugins/claude/hooks/subagent-guard.cjs +26 -0
- package/runner/plugins/claude/hooks/subagent-skill-policy.cjs +160 -0
- package/runner/plugins/claude/hooks/subagent-start.sh +13 -0
- package/runner/plugins/claude/hooks/subagent-stop.sh +19 -0
- package/runner/plugins/claude/hooks/user-prompt-submit.sh +18 -0
- package/runner/plugins/claude/hooks/wait-loop-guard.ts +120 -0
- package/runner/plugins/claude/monitors/monitors.json +7 -0
- package/runner/plugins/claude/monitors/relay-monitor.provisioned.mjs +786 -0
- package/runner/plugins/claude/monitors/relay-monitor.ts +58 -0
- package/runner/plugins/claude/skills/disconnect/SKILL.md +16 -0
- package/runner/plugins/claude/skills/label/SKILL.md +23 -0
- package/runner/plugins/claude/skills/message/SKILL.md +40 -0
- package/runner/plugins/claude/skills/pair/SKILL.md +30 -0
- package/runner/plugins/claude/skills/react/SKILL.md +18 -0
- package/runner/plugins/claude/skills/read-message/SKILL.md +24 -0
- package/runner/plugins/claude/skills/reply/SKILL.md +44 -0
- package/runner/plugins/claude/skills/send-claimable/SKILL.md +39 -0
- package/runner/plugins/claude/skills/slice-first/SKILL.md +32 -0
- package/runner/plugins/claude/skills/slice-first/references/plan-recipe.md +46 -0
- package/runner/plugins/claude/skills/status/SKILL.md +16 -0
- package/runner/plugins/claude/skills/tags/SKILL.md +25 -0
- package/runner/plugins/claude/skills/task/SKILL.md +28 -0
- package/runner/plugins/claude-output-style/.claude-plugin/plugin.json +5 -0
- package/runner/plugins/claude-output-style/output-styles/agent-relay.md +5 -0
- package/runner/plugins/codex/skills/disconnect/SKILL.md +15 -0
- package/runner/plugins/codex/skills/guide/SKILL.md +15 -0
- package/runner/plugins/codex/skills/label/SKILL.md +22 -0
- package/runner/plugins/codex/skills/message/SKILL.md +40 -0
- package/runner/plugins/codex/skills/pair/SKILL.md +29 -0
- package/runner/plugins/codex/skills/react/SKILL.md +17 -0
- package/runner/plugins/codex/skills/read-message/SKILL.md +23 -0
- package/runner/plugins/codex/skills/reply/SKILL.md +44 -0
- package/runner/plugins/codex/skills/send-claimable/SKILL.md +39 -0
- package/runner/plugins/codex/skills/slice-first/SKILL.md +32 -0
- package/runner/plugins/codex/skills/slice-first/references/plan-recipe.md +46 -0
- package/runner/plugins/codex/skills/status/SKILL.md +15 -0
- package/runner/plugins/codex/skills/tags/SKILL.md +24 -0
- package/runner/plugins/codex/skills/task/SKILL.md +28 -0
- package/runner/src/adapter.ts +1061 -0
- package/runner/src/adapters/__fixtures__/codex-app-server.ts +47 -0
- package/runner/src/adapters/claude-api.ts +243 -0
- package/runner/src/adapters/claude-context-command.ts +16 -0
- package/runner/src/adapters/claude-credentials.ts +22 -0
- package/runner/src/adapters/claude-delivery-lanes.ts +28 -0
- package/runner/src/adapters/claude-delivery.ts +166 -0
- package/runner/src/adapters/claude-effort.ts +94 -0
- package/runner/src/adapters/claude-exit.ts +290 -0
- package/runner/src/adapters/claude-headless-mirror.ts +88 -0
- package/runner/src/adapters/claude-headless-refusal.ts +51 -0
- package/runner/src/adapters/claude-headless.ts +617 -0
- package/runner/src/adapters/claude-monitor-delivery-plan.ts +317 -0
- package/runner/src/adapters/claude-permission.ts +243 -0
- package/runner/src/adapters/claude-prompt-gates.ts +269 -0
- package/runner/src/adapters/claude-prompt-hook.ts +145 -0
- package/runner/src/adapters/claude-session-capture.ts +293 -0
- package/runner/src/adapters/claude-session-probe.ts +414 -0
- package/runner/src/adapters/claude-shutdown.ts +190 -0
- package/runner/src/adapters/claude-status-detectors.ts +426 -0
- package/runner/src/adapters/claude-subagents.ts +93 -0
- package/runner/src/adapters/claude-submit-confirmation.ts +287 -0
- package/runner/src/adapters/claude-tmux.ts +548 -0
- package/runner/src/adapters/claude-token-usage-capture.ts +253 -0
- package/runner/src/adapters/claude-tool-policy.ts +165 -0
- package/runner/src/adapters/claude-transcript-tail.ts +193 -0
- package/runner/src/adapters/claude-transcript.ts +812 -0
- package/runner/src/adapters/claude.ts +1097 -0
- package/runner/src/adapters/codex-agent-message-capture.ts +189 -0
- package/runner/src/adapters/codex-app-server.ts +70 -0
- package/runner/src/adapters/codex-client.ts +362 -0
- package/runner/src/adapters/codex-effective-config.ts +87 -0
- package/runner/src/adapters/codex-launch-config.ts +153 -0
- package/runner/src/adapters/codex-rollout-context.ts +272 -0
- package/runner/src/adapters/codex-skill-discovery.ts +18 -0
- package/runner/src/adapters/codex-token-usage-capture.ts +163 -0
- package/runner/src/adapters/codex-tool-output.ts +53 -0
- package/runner/src/adapters/codex-turn-outcome.ts +27 -0
- package/runner/src/adapters/codex-version.ts +64 -0
- package/runner/src/adapters/codex.ts +1442 -0
- package/runner/src/adapters/incremental-file.ts +110 -0
- package/runner/src/adapters/opencode-api.ts +71 -0
- package/runner/src/adapters/opencode-context.ts +277 -0
- package/runner/src/adapters/opencode-model-registry.ts +126 -0
- package/runner/src/adapters/opencode-provider.ts +169 -0
- package/runner/src/adapters/opencode-server-retry.ts +50 -0
- package/runner/src/adapters/opencode-soft-steer.ts +302 -0
- package/runner/src/adapters/opencode-spawn.ts +145 -0
- package/runner/src/adapters/opencode-subscribe.ts +62 -0
- package/runner/src/adapters/opencode-token-usage-capture.ts +187 -0
- package/runner/src/adapters/opencode-tool-events.ts +302 -0
- package/runner/src/adapters/opencode-tools-config.ts +17 -0
- package/runner/src/adapters/opencode.ts +2264 -0
- package/runner/src/adapters/project-shell.ts +80 -0
- package/runner/src/adapters/provider-launch-config.ts +21 -0
- package/runner/src/adapters/provider-quota-harvest.ts +127 -0
- package/runner/src/adapters/service-access.ts +153 -0
- package/runner/src/adapters/tmux-offload.ts +207 -0
- package/runner/src/adapters/tool-summary.ts +214 -0
- package/runner/src/agent-redact.ts +75 -0
- package/runner/src/agent-runner/commands/dispatch.ts +185 -0
- package/runner/src/agent-runner/commands/lifecycle.ts +84 -0
- package/runner/src/agent-runner/commands/prompt.ts +284 -0
- package/runner/src/agent-runner/credentials.ts +208 -0
- package/runner/src/agent-runner/http-liveness.ts +85 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +207 -0
- package/runner/src/agent-runner/lifecycle-phase.ts +80 -0
- package/runner/src/agent-runner/registration.ts +163 -0
- package/runner/src/agent-runner/runner-context.ts +158 -0
- package/runner/src/agent-runner/session-mirror.ts +278 -0
- package/runner/src/agent-runner/task-claims.ts +116 -0
- package/runner/src/agent-runner/token-usage-coverage.ts +54 -0
- package/runner/src/agent-runner/turn-report.ts +269 -0
- package/runner/src/api-budget-accounting.ts +91 -0
- package/runner/src/area-memory.ts +255 -0
- package/runner/src/artifact-path-materialize.ts +52 -0
- package/runner/src/async-guard.ts +35 -0
- package/runner/src/attachment-cache-sweep.ts +31 -0
- package/runner/src/attachment-cache.ts +195 -0
- package/runner/src/background-script-reconcile.ts +106 -0
- package/runner/src/bounded-log.ts +59 -0
- package/runner/src/bounded-spawn-sync.ts +18 -0
- package/runner/src/busy-reconciler.ts +282 -0
- package/runner/src/claim-tracker.ts +140 -0
- package/runner/src/claude-settings.ts +167 -0
- package/runner/src/claude-workspace-trust.ts +289 -0
- package/runner/src/config.ts +547 -0
- package/runner/src/context-boundary.ts +101 -0
- package/runner/src/context-command.ts +151 -0
- package/runner/src/context-probe-state.ts +6 -0
- package/runner/src/continuation-archive.ts +179 -0
- package/runner/src/control-server.ts +730 -0
- package/runner/src/delivery-policy.ts +9 -0
- package/runner/src/delivery-result.ts +24 -0
- package/runner/src/effort-command.ts +125 -0
- package/runner/src/empty-turn.ts +816 -0
- package/runner/src/free-port.ts +25 -0
- package/runner/src/fs-offload.ts +26 -0
- package/runner/src/gate-run-config.ts +35 -0
- package/runner/src/gate-run-lease-probe.ts +38 -0
- package/runner/src/host-asset-plan.ts +450 -0
- package/runner/src/host-claude-config-worker.ts +34 -0
- package/runner/src/host-sources.ts +40 -0
- package/runner/src/inbox-carrier.ts +7 -0
- package/runner/src/index.ts +386 -0
- package/runner/src/launch-assembly.ts +955 -0
- package/runner/src/liveness.ts +105 -0
- package/runner/src/logger.ts +108 -0
- package/runner/src/mcp-outbox.ts +204 -0
- package/runner/src/mcp-preflight.ts +86 -0
- package/runner/src/mcp-source-selection.ts +54 -0
- package/runner/src/mcp-tool-deferral.ts +35 -0
- package/runner/src/mcp-vault-env.ts +25 -0
- package/runner/src/message-body-config/config.ts +16 -0
- package/runner/src/message-body-config.ts +1 -0
- package/runner/src/mid-turn-delivery.ts +43 -0
- package/runner/src/native-memory-lever.ts +329 -0
- package/runner/src/native-self-resume.ts +244 -0
- package/runner/src/outbox.ts +453 -0
- package/runner/src/park-post.ts +17 -0
- package/runner/src/pending-permission-store.ts +148 -0
- package/runner/src/process-meta.ts +9 -0
- package/runner/src/profile-home.ts +419 -0
- package/runner/src/profile-projection.ts +411 -0
- package/runner/src/project-hooks.ts +65 -0
- package/runner/src/project-instructions.ts +119 -0
- package/runner/src/provider-double.ts +59 -0
- package/runner/src/provider-hold.ts +228 -0
- package/runner/src/provider-home-marker.ts +3 -0
- package/runner/src/provider-home-tombstone.ts +4 -0
- package/runner/src/provider-input-queue.ts +134 -0
- package/runner/src/provider-integration.ts +93 -0
- package/runner/src/provider-processes.ts +17 -0
- package/runner/src/provider-submit-failure.ts +15 -0
- package/runner/src/providers.ts +35 -0
- package/runner/src/provisioning.ts +703 -0
- package/runner/src/question-decision.ts +18 -0
- package/runner/src/quota.ts +22 -0
- package/runner/src/rate-limit.ts +351 -0
- package/runner/src/refused-prompt-store.ts +36 -0
- package/runner/src/relay-injection-events.ts +161 -0
- package/runner/src/relay-instructions.ts +107 -0
- package/runner/src/relay-mcp-proxy.long-turn-e2e.ts +183 -0
- package/runner/src/relay-mcp-proxy.ts +704 -0
- package/runner/src/relay-mcp.ts +583 -0
- package/runner/src/reply-obligation-cache.ts +211 -0
- package/runner/src/response-capture-report.ts +111 -0
- package/runner/src/response-routing.ts +6 -0
- package/runner/src/runner-core.ts +2955 -0
- package/runner/src/runner-exit.ts +12 -0
- package/runner/src/runner-helpers.ts +582 -0
- package/runner/src/runner-insights.ts +105 -0
- package/runner/src/runner-mcp-proxy.ts +46 -0
- package/runner/src/runner-spawn-config.ts +68 -0
- package/runner/src/runner-stale-scratch-sweep.ts +21 -0
- package/runner/src/runner.ts +9 -0
- package/runner/src/runtime-token-file.ts +45 -0
- package/runner/src/runtime-token-remint.ts +56 -0
- package/runner/src/service-access.ts +88 -0
- package/runner/src/session-destroy.ts +27 -0
- package/runner/src/session-insights.ts +118 -0
- package/runner/src/session-scratch.ts +296 -0
- package/runner/src/spawn-input.ts +147 -0
- package/runner/src/startup-config-fetch.ts +48 -0
- package/runner/src/subreaper.ts +113 -0
- package/runner/src/template-resolver.ts +29 -0
- package/runner/src/test-run-dedup.ts +435 -0
- package/runner/src/transcript-context.ts +99 -0
- package/runner/src/transport-errors.ts +48 -0
- package/runner/src/turn-opener.ts +55 -0
- package/runner/src/turn-reconcile-event.ts +88 -0
- package/runner/src/vault-proxy-hop.ts +99 -0
- package/runner/src/version.ts +44 -0
- package/runner/src/web-tool-call-proxy.ts +128 -0
- package/runner/src/web-tools.ts +59 -0
- package/runner/test-support/codex-web-config-proof.ts +149 -0
- package/runner/test-support/effective-launch.ts +189 -0
- package/runner/test-support/native-context-sources.ts +77 -0
- package/runner/test-support/provisioning-context.ts +55 -0
- package/runner/test-support/recorder-double.ts +130 -0
- package/runner/test-support/recording-provider.ts +242 -0
- package/runner/test-support/runner-harness.ts +249 -0
- package/runner/test-support/service-access-fixture.ts +12 -0
- package/scripts/agent-vault/bootstrap.py +87 -0
- package/scripts/agent-vault/install.py +200 -0
- package/scripts/agent-vault/install_refresh.py +98 -0
- package/scripts/agent-vault/refresh.py +116 -0
- package/scripts/agent-vault/refresh_provision.py +109 -0
- package/scripts/agent-vault/refresh_store.py +54 -0
- package/scripts/agent-vault/runtime.py +253 -0
- package/scripts/agent-vault/sec-ops-activation.json +23 -0
- package/scripts/artifact-checkout-gc.ts +51 -0
- package/scripts/cd-config.ts +237 -0
- package/scripts/cd-deploy-debounce.ts +94 -0
- package/scripts/cd-deploy-worktree-gc.ts +235 -0
- package/scripts/cd-fleet-membership.ts +48 -0
- package/scripts/cd-host-epochs.ts +101 -0
- package/scripts/cd-hub-wake.ts +40 -0
- package/scripts/cd-land-boundary.ts +49 -0
- package/scripts/cd-watcher.ts +985 -0
- package/scripts/dashboard-build-marker.ts +71 -0
- package/scripts/fleet-sha-coverage.ts +66 -0
- package/scripts/gate-run-lease.ts +329 -0
- package/scripts/gate-slot +9 -0
- package/scripts/gate-slot-fleet-health.ts +60 -0
- package/scripts/gate.sh +6 -0
- package/scripts/install-bin-shim.cjs +149 -0
- package/scripts/orchestrator-spawn-smoke.ts +398 -0
- package/scripts/provisioning-matrix.ts +72 -0
- package/scripts/release-cd-stamp.ts +146 -0
- package/scripts/release-health.ts +133 -0
- package/scripts/release-report.ts +102 -0
- package/scripts/release-upgrade.ts +1296 -0
- package/scripts/steward-policy-cleanup.ts +73 -0
- package/scripts/wait-for-deploy.ts +43 -0
- package/src/agent-authz.ts +219 -0
- package/src/agent-branch-state.ts +45 -0
- package/src/agent-busy-health.ts +158 -0
- package/src/agent-card-projection.ts +86 -0
- package/src/agent-channel-binding.ts +49 -0
- package/src/agent-command-activity.ts +39 -0
- package/src/agent-core.ts +29 -0
- package/src/agent-death-diagnosis.ts +314 -0
- package/src/agent-drive-arbiter.ts +112 -0
- package/src/agent-exit-alarm.ts +10 -0
- package/src/agent-exit-cleanup-async.ts +69 -0
- package/src/agent-exit-cleanup.ts +99 -0
- package/src/agent-exit-report.ts +28 -0
- package/src/agent-issue-repo.ts +53 -0
- package/src/agent-launch-shape-redaction.ts +72 -0
- package/src/agent-lifecycle-events.ts +428 -0
- package/src/agent-principal.ts +14 -0
- package/src/agent-profile-catalog.ts +188 -0
- package/src/agent-ref.ts +340 -0
- package/src/agent-spawn.ts +45 -0
- package/src/agent-status-events.ts +41 -0
- package/src/agent-system-tags.ts +38 -0
- package/src/artifact-media.ts +34 -0
- package/src/artifact-storage.ts +245 -0
- package/src/artifact-text.ts +31 -0
- package/src/async-deadline.ts +59 -0
- package/src/auth/admin-routes.ts +36 -0
- package/src/auth/index.ts +23 -0
- package/src/auth/login-rate-limiter.ts +153 -0
- package/src/auth/password.ts +142 -0
- package/src/auth/provider.ts +60 -0
- package/src/auth/role-scopes.ts +15 -0
- package/src/auth/session-cookie.ts +35 -0
- package/src/auth/session-refresh.ts +61 -0
- package/src/auth/session.test-fixture.ts +10 -0
- package/src/auth/session.ts +107 -0
- package/src/authority-audit.ts +56 -0
- package/src/authz-meta-keys.ts +64 -0
- package/src/auto-spawn-dispatch.ts +154 -0
- package/src/automations/constants.ts +14 -0
- package/src/automations/cron.ts +129 -0
- package/src/automations/crud.ts +129 -0
- package/src/automations/dispatch.ts +299 -0
- package/src/automations/index.ts +5 -0
- package/src/automations/precheck.ts +124 -0
- package/src/automations/reconcile.ts +314 -0
- package/src/automations/storage.ts +200 -0
- package/src/automations/types.ts +16 -0
- package/src/automations/validation.ts +216 -0
- package/src/automations.ts +1 -0
- package/src/branch-landed.ts +761 -0
- package/src/browser-authz.ts +18 -0
- package/src/browser-config.ts +31 -0
- package/src/bundled-workflows.ts +48 -0
- package/src/bus-outbox-async.ts +16 -0
- package/src/bus-outbox.ts +265 -0
- package/src/bus-resume-commands.ts +18 -0
- package/src/bus.ts +792 -0
- package/src/canonical-repo-root.ts +131 -0
- package/src/cd-deploy-notify.ts +59 -0
- package/src/cd-host-deferrals.ts +23 -0
- package/src/cd-host-lag-notify.ts +36 -0
- package/src/cd-repository.ts +49 -0
- package/src/channel-output-control.ts +43 -0
- package/src/channel-output-validation.ts +11 -0
- package/src/channel-policy-health.ts +20 -0
- package/src/channel-target.ts +40 -0
- package/src/channels-host-service.ts +219 -0
- package/src/ci/bun-test-log.ts +41 -0
- package/src/ci/failed-test-files.ts +52 -0
- package/src/ci/gate-history.ts +66 -0
- package/src/ci/github-actions.ts +145 -0
- package/src/ci/incidents.ts +175 -0
- package/src/ci/index.ts +6 -0
- package/src/ci/job-verdict.ts +27 -0
- package/src/ci/land-boundary-ci.ts +104 -0
- package/src/ci/monitor.ts +528 -0
- package/src/ci/not-triggered.ts +116 -0
- package/src/ci/notifications.ts +234 -0
- package/src/ci/provider.ts +87 -0
- package/src/ci/root-missing.ts +35 -0
- package/src/ci/transition-notify.ts +279 -0
- package/src/ci-monitor.ts +7 -0
- package/src/claude-api-budget-async.ts +11 -0
- package/src/claude-api-budget-config.ts +23 -0
- package/src/claude-api-expiry.ts +70 -0
- package/src/claude-api-overflow.ts +146 -0
- package/src/claude-app/config.ts +13 -0
- package/src/claude-app/oauth-http.ts +127 -0
- package/src/claude-app/oauth-provider.ts +136 -0
- package/src/claude-app/passphrase.ts +14 -0
- package/src/claude-app-auth.ts +65 -0
- package/src/claude-app-gateway.ts +68 -0
- package/src/cli/_shared.ts +136 -0
- package/src/cli/agent-detect.ts +175 -0
- package/src/cli/agent-guide.ts +152 -0
- package/src/cli/agent-keep.ts +37 -0
- package/src/cli/agent-meta.ts +111 -0
- package/src/cli/artifact.ts +154 -0
- package/src/cli/browser.ts +56 -0
- package/src/cli/channel-output.ts +17 -0
- package/src/cli/channels-host.ts +13 -0
- package/src/cli/channels.ts +16 -0
- package/src/cli/claude-api-budget.ts +41 -0
- package/src/cli/context-probe.ts +90 -0
- package/src/cli/credentials.ts +1 -0
- package/src/cli/daemon.ts +125 -0
- package/src/cli/dev.ts +185 -0
- package/src/cli/ephemeral.ts +159 -0
- package/src/cli/hosts.ts +41 -0
- package/src/cli/index.ts +442 -0
- package/src/cli/introspect.ts +74 -0
- package/src/cli/maintenance.ts +24 -0
- package/src/cli/merges.ts +78 -0
- package/src/cli/message.ts +229 -0
- package/src/cli/orchestrator.ts +384 -0
- package/src/cli/pair.ts +135 -0
- package/src/cli/profile.ts +35 -0
- package/src/cli/project.ts +52 -0
- package/src/cli/prompts.ts +23 -0
- package/src/cli/provider-enablement.ts +42 -0
- package/src/cli/provider.ts +230 -0
- package/src/cli/recipe.ts +110 -0
- package/src/cli/reply.ts +130 -0
- package/src/cli/roles.ts +60 -0
- package/src/cli/routing-policy.ts +20 -0
- package/src/cli/run.ts +96 -0
- package/src/cli/secrets-backup.ts +85 -0
- package/src/cli/secrets.ts +55 -0
- package/src/cli/service-access.ts +23 -0
- package/src/cli/setup.ts +57 -0
- package/src/cli/shutdown.ts +16 -0
- package/src/cli/spawn.ts +31 -0
- package/src/cli/state.ts +73 -0
- package/src/cli/steward.ts +58 -0
- package/src/cli/task.ts +151 -0
- package/src/cli/team.ts +18 -0
- package/src/cli/timers.ts +53 -0
- package/src/cli/token.ts +72 -0
- package/src/cli/upgrade.ts +200 -0
- package/src/cli/web-tool-calls.ts +17 -0
- package/src/cli/workflow.ts +46 -0
- package/src/cli/workspace.ts +544 -0
- package/src/cli.ts +4 -0
- package/src/codex-reset-consume.ts +274 -0
- package/src/codex-wham-quota.ts +177 -0
- package/src/command-events.ts +69 -0
- package/src/command-secrets.ts +198 -0
- package/src/command-ttl.ts +63 -0
- package/src/commands-db.ts +1200 -0
- package/src/commands-landing-async.ts +166 -0
- package/src/commands-write.ts +168 -0
- package/src/comment-blocks.ts +84 -0
- package/src/compaction-watch.ts +259 -0
- package/src/config-model-selection.ts +14 -0
- package/src/config-store-write.ts +39 -0
- package/src/config-store.ts +1253 -0
- package/src/config.ts +939 -0
- package/src/connector-boot-health.ts +27 -0
- package/src/connector-paths.ts +47 -0
- package/src/connectors.ts +547 -0
- package/src/content-security.ts +12 -0
- package/src/context-advisory.ts +279 -0
- package/src/context-block-rendered-at.ts +33 -0
- package/src/context-injection-channel.ts +49 -0
- package/src/context-router.ts +121 -0
- package/src/context-threshold-config.ts +52 -0
- package/src/continuation-replay-edge.ts +30 -0
- package/src/continuity-working-state.ts +107 -0
- package/src/contracts.ts +109 -0
- package/src/coordinator-authority.ts +100 -0
- package/src/coordinator-digest-config.ts +20 -0
- package/src/cosmos-events.ts +164 -0
- package/src/daemon.ts +570 -0
- package/src/dashboard-notifications.ts +169 -0
- package/src/dashboard-presence.ts +86 -0
- package/src/db/activity-async.ts +58 -0
- package/src/db/activity-read-ops.ts +42 -0
- package/src/db/activity-write-ops.ts +44 -0
- package/src/db/activity.ts +454 -0
- package/src/db/agent-card-read.ts +98 -0
- package/src/db/agent-effort-state.ts +146 -0
- package/src/db/agent-exit-cleanup.ts +94 -0
- package/src/db/agent-exit-report.ts +33 -0
- package/src/db/agent-gate-runs-write-ops.ts +7 -0
- package/src/db/agent-gate-runs.ts +96 -0
- package/src/db/agent-identity-archive.test-fixture.ts +12 -0
- package/src/db/agent-identity-archive.ts +75 -0
- package/src/db/agent-keep.ts +21 -0
- package/src/db/agent-lifecycle-write-ops.ts +93 -0
- package/src/db/agent-meta.ts +74 -0
- package/src/db/agent-outstanding-work.ts +154 -0
- package/src/db/agent-ownership-async.ts +45 -0
- package/src/db/agent-ownership-read-ops.ts +12 -0
- package/src/db/agent-ownership-write-ops.ts +54 -0
- package/src/db/agent-ownership.ts +200 -0
- package/src/db/agent-predicates.ts +64 -0
- package/src/db/agent-read.ts +39 -0
- package/src/db/agent-search-async.ts +21 -0
- package/src/db/agent-search-read-ops.ts +8 -0
- package/src/db/agent-search.ts +162 -0
- package/src/db/agent-shutdown-in-flight.ts +21 -0
- package/src/db/agents-async.ts +337 -0
- package/src/db/agents-prune-write-op.ts +37 -0
- package/src/db/agents-read-ops.ts +33 -0
- package/src/db/agents-write-ops.ts +188 -0
- package/src/db/agents.ts +1284 -0
- package/src/db/api-budget-schema.ts +144 -0
- package/src/db/api-budget-usage-migration.ts +31 -0
- package/src/db/api-budget-usage.ts +40 -0
- package/src/db/artifact-browse.ts +145 -0
- package/src/db/artifact-retention.ts +115 -0
- package/src/db/artifacts-async.ts +81 -0
- package/src/db/artifacts-read-ops.ts +24 -0
- package/src/db/artifacts-write-ops.ts +51 -0
- package/src/db/artifacts.ts +307 -0
- package/src/db/auth-identities.ts +128 -0
- package/src/db/backlog.ts +172 -0
- package/src/db/blackboard.ts +171 -0
- package/src/db/broadcast-scope.ts +63 -0
- package/src/db/broker-memory-migration.ts +71 -0
- package/src/db/browser-sessions.ts +89 -0
- package/src/db/budget-lineage.ts +26 -0
- package/src/db/bus-outbox-read-ops.ts +29 -0
- package/src/db/bus-outbox-write-ops.ts +58 -0
- package/src/db/bus-prune-async.ts +16 -0
- package/src/db/busy-regression.worker.ts +48 -0
- package/src/db/caller-lifecycle.ts +24 -0
- package/src/db/carry-pending-marker.ts +129 -0
- package/src/db/carry-pending.ts +145 -0
- package/src/db/channel-binding-delete.ts +15 -0
- package/src/db/channel-egress-allowlist.ts +200 -0
- package/src/db/channel-identity.ts +38 -0
- package/src/db/channel-runtime.ts +19 -0
- package/src/db/channels-async.ts +55 -0
- package/src/db/channels-read-ops.ts +13 -0
- package/src/db/channels-session-fence.ts +18 -0
- package/src/db/channels-write-ops.ts +46 -0
- package/src/db/channels.ts +654 -0
- package/src/db/checkout-refresh.ts +36 -0
- package/src/db/ci-gate-runs.ts +92 -0
- package/src/db/ci-incidents-async.ts +76 -0
- package/src/db/ci-incidents-read-ops.ts +15 -0
- package/src/db/ci-incidents-write-ops.ts +57 -0
- package/src/db/ci-incidents.ts +667 -0
- package/src/db/ci-sha-observations-schema.ts +33 -0
- package/src/db/claim-sql.ts +44 -0
- package/src/db/claude-api-budget-ops.ts +15 -0
- package/src/db/claude-api-budget-reconcile.ts +39 -0
- package/src/db/claude-api-budget.ts +198 -0
- package/src/db/claude-app-oauth.ts +74 -0
- package/src/db/claude-catalog-reconcile.ts +27 -0
- package/src/db/codex-reset-consumes-async.ts +9 -0
- package/src/db/codex-reset-consumes-read-ops.ts +5 -0
- package/src/db/codex-reset-consumes-write-ops.ts +22 -0
- package/src/db/codex-reset-consumes.ts +122 -0
- package/src/db/command-agent-profiles.ts +58 -0
- package/src/db/command-row.ts +88 -0
- package/src/db/command-terminal-status.ts +33 -0
- package/src/db/command-vault-pruning.ts +30 -0
- package/src/db/commands-cancel-write.ts +45 -0
- package/src/db/commands-claim-admission.ts +144 -0
- package/src/db/commands-effort-read.ts +58 -0
- package/src/db/commands-host-land-admission.ts +106 -0
- package/src/db/commands-kernel-landing.ts +268 -0
- package/src/db/commands-land-occupancy.ts +40 -0
- package/src/db/commands-land-wait.ts +38 -0
- package/src/db/commands-landing-completeness.ts +66 -0
- package/src/db/commands-landing-tuples.ts +22 -0
- package/src/db/commands-landing.ts +1046 -0
- package/src/db/commands-leaseless-sweep.ts +72 -0
- package/src/db/commands-list-query.ts +47 -0
- package/src/db/commands-planner-stats.test-fixture.ts +97 -0
- package/src/db/commands-read-ops.ts +49 -0
- package/src/db/commands-scheduler-recovery.ts +71 -0
- package/src/db/commands-spawn-read.ts +33 -0
- package/src/db/commands-write-ops.ts +307 -0
- package/src/db/config-store-write-ops.ts +60 -0
- package/src/db/connection-instrumentation.ts +76 -0
- package/src/db/connection.ts +532 -0
- package/src/db/context-reset-carry.ts +144 -0
- package/src/db/continuation-archive-purge.ts +48 -0
- package/src/db/continuation-archive-search.ts +249 -0
- package/src/db/continuation-archives-async.ts +59 -0
- package/src/db/continuation-archives-read-ops.ts +10 -0
- package/src/db/continuation-archives-write-ops.ts +17 -0
- package/src/db/continuation-archives.ts +158 -0
- package/src/db/continuations.ts +201 -0
- package/src/db/coordinator-delivery.ts +10 -0
- package/src/db/coordinator-digest-async.ts +13 -0
- package/src/db/coordinator-digest-flush.ts +6 -0
- package/src/db/coordinator-digest.ts +145 -0
- package/src/db/coordinator-seat.ts +130 -0
- package/src/db/crash-reports.ts +115 -0
- package/src/db/db-error-registry.ts +290 -0
- package/src/db/db-reader-worker.ts +91 -0
- package/src/db/db-writer-worker.ts +66 -0
- package/src/db/deferred-lineage-report-queries.ts +28 -0
- package/src/db/deferred-lineage-reports.ts +44 -0
- package/src/db/delivery-async.ts +102 -0
- package/src/db/delivery-expiration-health.ts +97 -0
- package/src/db/delivery-expiration.ts +52 -0
- package/src/db/delivery-quality-async.ts +23 -0
- package/src/db/delivery-quality.ts +116 -0
- package/src/db/delivery-read-ops.ts +26 -0
- package/src/db/delivery-report-echo.ts +53 -0
- package/src/db/delivery-write-ops.ts +77 -0
- package/src/db/delivery.ts +545 -0
- package/src/db/deploy-events-async.ts +66 -0
- package/src/db/deploy-events-read-ops.ts +25 -0
- package/src/db/deploy-events-write-ops.ts +81 -0
- package/src/db/deploy-events.ts +554 -0
- package/src/db/deploy-task-completion.ts +48 -0
- package/src/db/drive-leases.ts +165 -0
- package/src/db/durable-payloads.ts +92 -0
- package/src/db/fixtures/writer-shutdown.ts +28 -0
- package/src/db/fts-query.ts +8 -0
- package/src/db/gate-policy.ts +27 -0
- package/src/db/gate-runs.ts +181 -0
- package/src/db/gateway.ts +513 -0
- package/src/db/generation-launch.ts +82 -0
- package/src/db/guides-search.ts +18 -0
- package/src/db/history-delivery-settle.ts +57 -0
- package/src/db/hosts-async.ts +150 -0
- package/src/db/hosts-backfill.ts +91 -0
- package/src/db/hosts-read-ops.ts +21 -0
- package/src/db/hosts-registration.ts +452 -0
- package/src/db/hosts-views.ts +259 -0
- package/src/db/hosts-write-ops.ts +108 -0
- package/src/db/hosts.ts +251 -0
- package/src/db/human-address.ts +6 -0
- package/src/db/idle-digest.ts +54 -0
- package/src/db/idle-self-care.ts +100 -0
- package/src/db/inbox-async.ts +29 -0
- package/src/db/inbox-read-ops.ts +8 -0
- package/src/db/inbox-write-ops.ts +29 -0
- package/src/db/inbox.ts +197 -0
- package/src/db/index.ts +147 -0
- package/src/db/injection-attempts.ts +41 -0
- package/src/db/insights-read-ops.ts +12 -0
- package/src/db/insights-write-ops.ts +16 -0
- package/src/db/integrations.ts +297 -0
- package/src/db/issue-associations.ts +136 -0
- package/src/db/issue-lifecycle.ts +199 -0
- package/src/db/issue-refs.ts +312 -0
- package/src/db/kernel-event-log-schema.ts +14 -0
- package/src/db/kernel-landing-admission.ts +15 -0
- package/src/db/kernel-landing-command-authority.ts +222 -0
- package/src/db/kernel-persistence-async.ts +48 -0
- package/src/db/kernel-persistence-read-ops.ts +24 -0
- package/src/db/kernel-persistence-write-ops.ts +43 -0
- package/src/db/land-boundaries.ts +138 -0
- package/src/db/land-executing.ts +147 -0
- package/src/db/land-gate-attestations.ts +161 -0
- package/src/db/land-incident-eligibility.ts +44 -0
- package/src/db/land-queue-trace.ts +28 -0
- package/src/db/land-stack.ts +80 -0
- package/src/db/land-telemetry-schema.ts +50 -0
- package/src/db/land-telemetry-write-ops.ts +16 -0
- package/src/db/land-telemetry.ts +114 -0
- package/src/db/land-withdrawal-state.ts +26 -0
- package/src/db/landed-merge-evidence.ts +72 -0
- package/src/db/landed-task-attribution.ts +23 -0
- package/src/db/landing-audit.ts +18 -0
- package/src/db/landing-controllers.ts +67 -0
- package/src/db/landing-ingress-async.ts +102 -0
- package/src/db/landing-ingress-read-ops.ts +8 -0
- package/src/db/landing-ingress-write-ops.ts +42 -0
- package/src/db/landing-ingress.ts +380 -0
- package/src/db/landing-read-ops.ts +18 -0
- package/src/db/landing-receipts.ts +206 -0
- package/src/db/landing-schema.ts +479 -0
- package/src/db/launch-facts.ts +60 -0
- package/src/db/legacy-landing-publication.ts +103 -0
- package/src/db/legacy-message-backfill.ts +90 -0
- package/src/db/lifecycle-seq.ts +127 -0
- package/src/db/lifecycle-write-window.ts +216 -0
- package/src/db/lineage-pair-dedupe-sql.ts +80 -0
- package/src/db/lineage-startup-captures.ts +43 -0
- package/src/db/long-running-work-async.ts +12 -0
- package/src/db/long-running-work-write-ops.ts +8 -0
- package/src/db/long-running-work.ts +78 -0
- package/src/db/macos-privacy.ts +72 -0
- package/src/db/main-connection-writes.ts +44 -0
- package/src/db/main-thread-state.ts +38 -0
- package/src/db/maintenance-health.ts +560 -0
- package/src/db/maintenance-indexes.ts +37 -0
- package/src/db/maintenance-job-runs-async.ts +15 -0
- package/src/db/maintenance-job-runs.ts +62 -0
- package/src/db/maintenance-job-write-ops.ts +10 -0
- package/src/db/maintenance-pauses.ts +224 -0
- package/src/db/maintenance-worker.ts +111 -0
- package/src/db/mappers.ts +422 -0
- package/src/db/memory-preamble-read.ts +13 -0
- package/src/db/memory-resolve.ts +209 -0
- package/src/db/memory-retirement-plan.ts +31 -0
- package/src/db/memory-retirement.ts +15 -0
- package/src/db/merge-drain-async.ts +8 -0
- package/src/db/merge-lease.ts +225 -0
- package/src/db/message-claims.ts +16 -0
- package/src/db/message-queries.ts +16 -0
- package/src/db/message-read-mark.ts +32 -0
- package/src/db/message-reads-async.ts +46 -0
- package/src/db/message-reads-read-ops.ts +35 -0
- package/src/db/message-reads-write-ops.ts +27 -0
- package/src/db/message-reads.ts +553 -0
- package/src/db/message-send-suppression.ts +58 -0
- package/src/db/message-send.ts +76 -0
- package/src/db/message-thread.ts +15 -0
- package/src/db/message-write-ops.ts +100 -0
- package/src/db/messages-async.ts +31 -0
- package/src/db/messages-read-ops.ts +14 -0
- package/src/db/messages.ts +1201 -0
- package/src/db/migration-marker.ts +13 -0
- package/src/db/migrations.ts +1761 -0
- package/src/db/notification-subscriptions.ts +282 -0
- package/src/db/on-loop-write-transaction.ts +34 -0
- package/src/db/operator-actions-schema.ts +10 -0
- package/src/db/operator-decisions.ts +180 -0
- package/src/db/orchestrators-async.ts +61 -0
- package/src/db/orchestrators-read-ops.ts +7 -0
- package/src/db/orchestrators-write-ops.ts +58 -0
- package/src/db/orchestrators.ts +497 -0
- package/src/db/outbox-codec.ts +16 -0
- package/src/db/pair-maintenance.ts +9 -0
- package/src/db/pairs-async.ts +10 -0
- package/src/db/pairs-write-ops.ts +8 -0
- package/src/db/pairs.ts +264 -0
- package/src/db/pending-relay-runs.ts +73 -0
- package/src/db/plan-blurb-migration.ts +158 -0
- package/src/db/plan-ci-blocks.ts +28 -0
- package/src/db/plan-completion.ts +55 -0
- package/src/db/plan-conformance.ts +104 -0
- package/src/db/plan-dispatch-schema.ts +17 -0
- package/src/db/plan-dispatch-store.ts +112 -0
- package/src/db/plan-external.ts +79 -0
- package/src/db/plan-graph-async.ts +23 -0
- package/src/db/plan-graph-read-ops.ts +16 -0
- package/src/db/plan-graph-write-ops.ts +37 -0
- package/src/db/plan-graph.ts +403 -0
- package/src/db/plan-import-schema.ts +19 -0
- package/src/db/plan-import.ts +211 -0
- package/src/db/plan-task-create.ts +44 -0
- package/src/db/planner-stats.ts +123 -0
- package/src/db/plans-async.ts +22 -0
- package/src/db/plans-read-ops.ts +11 -0
- package/src/db/plans-write-ops.ts +9 -0
- package/src/db/plans.ts +385 -0
- package/src/db/policy-runtime.ts +14 -0
- package/src/db/presence-buffer.ts +111 -0
- package/src/db/presence-loop.ts +58 -0
- package/src/db/presence-write-ops.ts +28 -0
- package/src/db/presence-write.ts +38 -0
- package/src/db/profile-artifact-backfill-migration.ts +32 -0
- package/src/db/profile-host-sources-migration.ts +150 -0
- package/src/db/profile-legacy-project-instructions-migration.ts +41 -0
- package/src/db/profile-name-case-migration.ts +46 -0
- package/src/db/profile-override-migration.ts +200 -0
- package/src/db/profile-project-ack-migration.ts +55 -0
- package/src/db/profile-slim-migration.ts +125 -0
- package/src/db/profile-slim-plan.ts +190 -0
- package/src/db/project-entries-async.ts +18 -0
- package/src/db/project-entries-read-ops.ts +28 -0
- package/src/db/project-entries.ts +514 -0
- package/src/db/project-entry-search.ts +63 -0
- package/src/db/project-identity.ts +16 -0
- package/src/db/project-journal.ts +256 -0
- package/src/db/project-lifecycle.ts +80 -0
- package/src/db/project-memory-group-migration.ts +76 -0
- package/src/db/project-phantom-merge.ts +228 -0
- package/src/db/project-root-schema.ts +30 -0
- package/src/db/project-trust-approvals.ts +98 -0
- package/src/db/projects-async.ts +50 -0
- package/src/db/projects-read-ops.ts +59 -0
- package/src/db/projects-write-ops.ts +74 -0
- package/src/db/projects.ts +629 -0
- package/src/db/prompt-templates-schema.ts +23 -0
- package/src/db/prompt-templates.ts +138 -0
- package/src/db/prompt-version-migration.ts +115 -0
- package/src/db/prompt-versions-ops.ts +17 -0
- package/src/db/prompt-versions.ts +167 -0
- package/src/db/provider-catalog-async.ts +31 -0
- package/src/db/provider-catalog-read-ops.ts +8 -0
- package/src/db/provider-catalog-write-ops.ts +16 -0
- package/src/db/provider-config-history.ts +49 -0
- package/src/db/provider-config-secrets.ts +117 -0
- package/src/db/provider-flap-messages-async.ts +6 -0
- package/src/db/provider-flap-messages-write-ops.ts +13 -0
- package/src/db/provider-flap-messages.ts +19 -0
- package/src/db/provider-quota-advisory-types.ts +39 -0
- package/src/db/provider-quota-burn.ts +322 -0
- package/src/db/provider-quota-effect-occurrences.ts +13 -0
- package/src/db/provider-quota-lease-write-ops.ts +24 -0
- package/src/db/provider-quota-leases-async.ts +35 -0
- package/src/db/provider-quota-leases.ts +174 -0
- package/src/db/provider-quota-matrix-cache.ts +85 -0
- package/src/db/provider-quota-matrix-fetch.ts +85 -0
- package/src/db/provider-quota-merge.ts +90 -0
- package/src/db/provider-quota-notification-write.ts +98 -0
- package/src/db/provider-quota-prune.ts +35 -0
- package/src/db/provider-quota-read-async.ts +77 -0
- package/src/db/provider-quota-read-ops.ts +56 -0
- package/src/db/provider-quota-recipients.ts +38 -0
- package/src/db/provider-quota-state.ts +139 -0
- package/src/db/provider-quota-visibility.ts +22 -0
- package/src/db/provider-quota-write-ops.ts +71 -0
- package/src/db/provider-quotas.ts +726 -0
- package/src/db/provider-secret-scrub.ts +64 -0
- package/src/db/provisioning-assets-migration.ts +85 -0
- package/src/db/provisioning-async.ts +116 -0
- package/src/db/provisioning-callmux.ts +184 -0
- package/src/db/provisioning-github-api.ts +16 -0
- package/src/db/provisioning-github-import-target.ts +29 -0
- package/src/db/provisioning-mcp-validation.ts +103 -0
- package/src/db/provisioning-read-ops.ts +23 -0
- package/src/db/provisioning-registry.ts +1122 -0
- package/src/db/provisioning-resolve.ts +321 -0
- package/src/db/provisioning-write-ops.ts +44 -0
- package/src/db/qa-skill-seed.ts +27 -0
- package/src/db/quota-lease-busy.worker.ts +62 -0
- package/src/db/read-op-marshaling-fixtures.ts +724 -0
- package/src/db/read-ops.ts +266 -0
- package/src/db/reader-pool.ts +252 -0
- package/src/db/recipe-read-ops.ts +15 -0
- package/src/db/recipe-write-ops.ts +68 -0
- package/src/db/reply-obligations.ts +265 -0
- package/src/db/report-suppression.ts +126 -0
- package/src/db/restart-epoch-admin-async.ts +14 -0
- package/src/db/restart-epoch-admin.ts +67 -0
- package/src/db/restart-epoch-admission.ts +114 -0
- package/src/db/restart-epoch-async.ts +80 -0
- package/src/db/restart-epoch-begin.ts +177 -0
- package/src/db/restart-epoch-read-ops.ts +40 -0
- package/src/db/restart-epoch-release.ts +248 -0
- package/src/db/restart-epoch-write-ops.ts +117 -0
- package/src/db/restart-epoch.test-fixture.ts +37 -0
- package/src/db/restart-epoch.ts +623 -0
- package/src/db/restart-sensitive.ts +81 -0
- package/src/db/retention.ts +423 -0
- package/src/db/review-ref-cleanups.ts +306 -0
- package/src/db/routing-policy.ts +64 -0
- package/src/db/scheduled-timer-projection.ts +123 -0
- package/src/db/scheduled-timer-quota-chaos-worker.ts +84 -0
- package/src/db/scheduled-timers.ts +521 -0
- package/src/db/schema.ts +1472 -0
- package/src/db/scoped-message-reads.ts +31 -0
- package/src/db/secrets-broker-async.ts +31 -0
- package/src/db/secrets-broker-read-ops.ts +8 -0
- package/src/db/secrets-broker-write-ops.ts +23 -0
- package/src/db/secrets-broker.ts +221 -0
- package/src/db/secrets-vault-import.ts +37 -0
- package/src/db/secrets-vault-key-lifecycle.ts +64 -0
- package/src/db/secrets-vault-metadata.ts +37 -0
- package/src/db/secrets-vault-migration.ts +53 -0
- package/src/db/secrets-vault-write.ts +97 -0
- package/src/db/secrets-vault.ts +69 -0
- package/src/db/self-effort-permissions.ts +50 -0
- package/src/db/service-access-read-ops.ts +10 -0
- package/src/db/services-async.ts +29 -0
- package/src/db/services-read-ops.ts +134 -0
- package/src/db/services-write-ops.ts +74 -0
- package/src/db/shared.ts +7 -0
- package/src/db/shipping-board-async.ts +6 -0
- package/src/db/shipping-board.ts +319 -0
- package/src/db/shipping-stats-async.ts +24 -0
- package/src/db/shipping-stats-histogram.ts +45 -0
- package/src/db/shipping-stats-schema.ts +8 -0
- package/src/db/shipping-stats.ts +265 -0
- package/src/db/snapshot-ledger-prune.ts +53 -0
- package/src/db/spawn-budget.ts +145 -0
- package/src/db/spawn-command-busy.worker.ts +71 -0
- package/src/db/spawn-delegation-state.ts +124 -0
- package/src/db/spawn-delegation.ts +114 -0
- package/src/db/spawn-host-cap.ts +29 -0
- package/src/db/spawn-in-flight-count.ts +37 -0
- package/src/db/spawn-in-flight.ts +15 -0
- package/src/db/spawn-process-evidence.ts +68 -0
- package/src/db/spawn-project-target.ts +57 -0
- package/src/db/spawn-registration-confirmed-backfill.ts +71 -0
- package/src/db/spawn-request-id-migration.ts +36 -0
- package/src/db/spawn-request-id.ts +35 -0
- package/src/db/spawn-request-reuse.ts +28 -0
- package/src/db/spawn-tree-cleanup.ts +92 -0
- package/src/db/spawn-tree.ts +29 -0
- package/src/db/sql-audit-indexes.ts +77 -0
- package/src/db/stalled-message-delivery.ts +52 -0
- package/src/db/startup-write-lock.ts +36 -0
- package/src/db/stats-async.ts +235 -0
- package/src/db/stats-health-read-model.ts +225 -0
- package/src/db/stats-read-ops.ts +25 -0
- package/src/db/stats.ts +633 -0
- package/src/db/target-host.ts +25 -0
- package/src/db/task-async.ts +165 -0
- package/src/db/task-comment-through-async.ts +14 -0
- package/src/db/task-comment-through-read-ops.ts +4 -0
- package/src/db/task-comment-through-write-ops.ts +7 -0
- package/src/db/task-comment-through.ts +123 -0
- package/src/db/task-core.ts +44 -0
- package/src/db/task-deliverables-async.ts +60 -0
- package/src/db/task-deliverables-read-ops.ts +4 -0
- package/src/db/task-deliverables-write-ops.ts +37 -0
- package/src/db/task-deliverables.ts +387 -0
- package/src/db/task-dependency-cycle.worker.ts +43 -0
- package/src/db/task-detail-projection.ts +91 -0
- package/src/db/task-entity-async.ts +252 -0
- package/src/db/task-entity-read-ops.ts +51 -0
- package/src/db/task-entity-write-ops.ts +197 -0
- package/src/db/task-entity.ts +1143 -0
- package/src/db/task-execution.ts +20 -0
- package/src/db/task-issue-relation.ts +23 -0
- package/src/db/task-issue-source.ts +46 -0
- package/src/db/task-land-withdraw-async.ts +10 -0
- package/src/db/task-land-withdraw-read-ops.ts +13 -0
- package/src/db/task-land-withdraw-read.ts +47 -0
- package/src/db/task-land-withdraw-write-ops.ts +31 -0
- package/src/db/task-land-withdraw.ts +423 -0
- package/src/db/task-list.ts +113 -0
- package/src/db/task-maintenance.ts +25 -0
- package/src/db/task-memory-async.ts +19 -0
- package/src/db/task-memory-read-ops.ts +9 -0
- package/src/db/task-memory-write-ops.ts +23 -0
- package/src/db/task-memory.ts +170 -0
- package/src/db/task-owner.ts +126 -0
- package/src/db/task-read-ops.ts +44 -0
- package/src/db/task-review-hold-async.ts +20 -0
- package/src/db/task-review-hold-delivery.ts +58 -0
- package/src/db/task-review-hold-write-ops.ts +26 -0
- package/src/db/task-review-hold.ts +615 -0
- package/src/db/task-state-reconcile-async.ts +12 -0
- package/src/db/task-state-reconcile.ts +163 -0
- package/src/db/task-validation.ts +71 -0
- package/src/db/task-write-ops.ts +145 -0
- package/src/db/tasks.ts +528 -0
- package/src/db/team-epics.ts +37 -0
- package/src/db/team-idle.ts +35 -0
- package/src/db/team-project.ts +69 -0
- package/src/db/team-spawn-delegation-read.ts +36 -0
- package/src/db/team-spawn-delegation.ts +49 -0
- package/src/db/teams-async.ts +58 -0
- package/src/db/teams-read-ops.ts +27 -0
- package/src/db/teams-write-ops.ts +17 -0
- package/src/db/teams.ts +504 -0
- package/src/db/terminal-events.ts +113 -0
- package/src/db/timer-async.ts +523 -0
- package/src/db/timer-cutover-core.ts +545 -0
- package/src/db/timer-cutover-report-read-ops.ts +211 -0
- package/src/db/timer-cutover-write-ops.ts +282 -0
- package/src/db/timer-ingress-payload.ts +160 -0
- package/src/db/timer-ingress-read-ops.ts +39 -0
- package/src/db/timer-ingress-request-keys.ts +282 -0
- package/src/db/timer-ingress-write-ops.ts +154 -0
- package/src/db/timer-ingress.ts +515 -0
- package/src/db/timer-message-cutover.ts +322 -0
- package/src/db/timer-message-fire-deadletter.ts +136 -0
- package/src/db/timer-message-fire.ts +209 -0
- package/src/db/timer-message-flip-chaos-worker.ts +89 -0
- package/src/db/timer-message-flip-consistency.ts +147 -0
- package/src/db/timer-message-flip.ts +676 -0
- package/src/db/timer-message-participant.ts +138 -0
- package/src/db/timer-migrate-input.ts +92 -0
- package/src/db/timer-operator-async.ts +177 -0
- package/src/db/timer-operator-read-ops.ts +21 -0
- package/src/db/timer-operator-stage10.ts +119 -0
- package/src/db/timer-operator-write-ops.ts +116 -0
- package/src/db/timer-operator.ts +393 -0
- package/src/db/timer-read-ops.ts +147 -0
- package/src/db/timer-transfer-errors.ts +10 -0
- package/src/db/timer-transfer-write-ops.ts +43 -0
- package/src/db/timer-verifier-schema.ts +29 -0
- package/src/db/timer-verifier.ts +379 -0
- package/src/db/timer-write-ops.ts +291 -0
- package/src/db/token-db-write-ops.ts +96 -0
- package/src/db/token-standing.ts +84 -0
- package/src/db/token-usage-read-ops.ts +8 -0
- package/src/db/token-usage-write-ops.ts +35 -0
- package/src/db/token-usage.ts +338 -0
- package/src/db/tool-groups-empty-migration.ts +59 -0
- package/src/db/urgent-intake.ts +30 -0
- package/src/db/user-invites.ts +107 -0
- package/src/db/user-settings-read-ops.ts +19 -0
- package/src/db/user-settings-write-ops.ts +43 -0
- package/src/db/users.ts +173 -0
- package/src/db/vault-backup.ts +59 -0
- package/src/db/vault-expiry.ts +71 -0
- package/src/db/vault-health.ts +99 -0
- package/src/db/vault-token-launch.ts +77 -0
- package/src/db/vault-token-ops.ts +14 -0
- package/src/db/vault-tokens.ts +101 -0
- package/src/db/viewer-scope.ts +117 -0
- package/src/db/wal-checkpointer-worker.ts +48 -0
- package/src/db/wal-checkpointer.ts +107 -0
- package/src/db/wal-index.ts +53 -0
- package/src/db/wal-live-log.ts +68 -0
- package/src/db/wal-reclaim-async.ts +45 -0
- package/src/db/wal-reclaim.ts +140 -0
- package/src/db/web-tool-call-ops.ts +15 -0
- package/src/db/web-tool-calls.ts +87 -0
- package/src/db/withdraw-land-error.ts +18 -0
- package/src/db/work-evidence.ts +43 -0
- package/src/db/workflow-budget.ts +44 -0
- package/src/db/workflow-contact.ts +173 -0
- package/src/db/workflow-execution.ts +10 -0
- package/src/db/workflow-journal-async.ts +64 -0
- package/src/db/workflow-journal-prune.ts +71 -0
- package/src/db/workflow-journal-read-ops.ts +21 -0
- package/src/db/workflow-journal-schema.ts +9 -0
- package/src/db/workflow-journal-write-ops.ts +33 -0
- package/src/db/workflow-journal.ts +324 -0
- package/src/db/workflow-spawn-quota.ts +57 -0
- package/src/db/workflow-stats-read-ops.ts +177 -0
- package/src/db/workflow-step-tasks.ts +74 -0
- package/src/db/workflow-task-read-ops.ts +187 -0
- package/src/db/workspace-land-state.ts +65 -0
- package/src/db/workspace-merge-hold.ts +28 -0
- package/src/db/workspace-persistence.ts +77 -0
- package/src/db/workspace-rekey-write-ops.ts +11 -0
- package/src/db/workspace-rekey.ts +148 -0
- package/src/db/workspace-steward-cancel.ts +85 -0
- package/src/db/workspace-steward-fence.ts +30 -0
- package/src/db/workspace-write-ops.ts +26 -0
- package/src/db/workspace-writes-async.ts +46 -0
- package/src/db/workspace-writes.ts +196 -0
- package/src/db/workspaces.ts +617 -0
- package/src/db/write-ops.ts +602 -0
- package/src/db/writer-drain.ts +27 -0
- package/src/db/writer-fault-seam.ts +104 -0
- package/src/db/writer-gateway.ts +843 -0
- package/src/db/writer-ledger.ts +56 -0
- package/src/db.ts +4 -0
- package/src/deploy-executor.ts +139 -0
- package/src/dev.ts +541 -0
- package/src/dispatch-availability.ts +55 -0
- package/src/dispatch-match.ts +21 -0
- package/src/ephemeral/host-landing-slots-proof-worker.ts +45 -0
- package/src/ephemeral/index.ts +58 -0
- package/src/ephemeral/instance.ts +832 -0
- package/src/ephemeral/landing-ingress-proof-worker.ts +30 -0
- package/src/ephemeral/ports.ts +40 -0
- package/src/ephemeral/profile.ts +323 -0
- package/src/ephemeral/rehearsal-stamps.ts +149 -0
- package/src/ephemeral/rehearsal.ts +213 -0
- package/src/ephemeral/snapshot-kernel.ts +41 -0
- package/src/ephemeral/snapshot.ts +753 -0
- package/src/ephemeral/sweep.ts +40 -0
- package/src/event-loop-lag.ts +584 -0
- package/src/event-loop-yield.ts +27 -0
- package/src/events.ts +140 -0
- package/src/execution-mode.ts +63 -0
- package/src/fleet-convergence.ts +123 -0
- package/src/gate-resolver.ts +151 -0
- package/src/gate-run-capture.ts +71 -0
- package/src/git-sha.ts +58 -0
- package/src/guides.ts +73 -0
- package/src/host/capacity.ts +79 -0
- package/src/host/gate-capacity-alert.ts +90 -0
- package/src/host/identity.ts +128 -0
- package/src/host/presentation.ts +234 -0
- package/src/host/pressure-details.ts +89 -0
- package/src/host/pressure.ts +216 -0
- package/src/host/state.ts +132 -0
- package/src/host/utilization-buffer.ts +71 -0
- package/src/host-awareness.ts +57 -0
- package/src/host-identity.ts +39 -0
- package/src/host-provider-enablement.ts +75 -0
- package/src/host-provider-store.ts +102 -0
- package/src/host-tools.ts +39 -0
- package/src/http-body.ts +49 -0
- package/src/http-compression.ts +16 -0
- package/src/hub-metrics-report.ts +67 -0
- package/src/hub-metrics.ts +166 -0
- package/src/idle-digest-config.ts +40 -0
- package/src/idle-self-care.ts +58 -0
- package/src/index.ts +35 -0
- package/src/injection-sweep-pacing.ts +24 -0
- package/src/insights-async.ts +16 -0
- package/src/insights-db.ts +188 -0
- package/src/internal-spawn-model.ts +18 -0
- package/src/invite-link.ts +11 -0
- package/src/issue-tracker/adapter.ts +58 -0
- package/src/issue-tracker/github.ts +342 -0
- package/src/issue-tracker/index.ts +12 -0
- package/src/issue-tracker/registry.ts +26 -0
- package/src/journal-preamble.ts +350 -0
- package/src/kernel-correlation.ts +28 -0
- package/src/land-authorization.ts +73 -0
- package/src/land-block.ts +59 -0
- package/src/land-failure-event-key.ts +8 -0
- package/src/land-gate-failure-routing.ts +69 -0
- package/src/land-gate-notifications.ts +173 -0
- package/src/land-gate-queue-progress.ts +54 -0
- package/src/land-gates-source.ts +126 -0
- package/src/land-gates.ts +29 -0
- package/src/land-lifecycle-drives.ts +15 -0
- package/src/land-settle-dispatch.ts +134 -0
- package/src/land-stack-depth.ts +11 -0
- package/src/land-telemetry.ts +40 -0
- package/src/landing-base-ref.ts +3 -0
- package/src/landing-host-safety.ts +38 -0
- package/src/landing-lane-key.ts +74 -0
- package/src/launch-mode-support.ts +11 -0
- package/src/launch-mode.ts +58 -0
- package/src/legacy-landing.test-fixture.ts +56 -0
- package/src/lifecycle-context-pressure.ts +134 -0
- package/src/lifecycle-manager.ts +831 -0
- package/src/lifecycle-signal-registry.ts +87 -0
- package/src/live-runs-section.ts +38 -0
- package/src/loop-block-attribution.ts +442 -0
- package/src/loop-block-regression-alarm.ts +156 -0
- package/src/loop-task-stamps.ts +62 -0
- package/src/main-thread-clock.ts +95 -0
- package/src/maintenance/agent-identity-archive-job.ts +15 -0
- package/src/maintenance/artifact-checkout-gc-job.ts +14 -0
- package/src/maintenance/artifact-checkout-gc.ts +33 -0
- package/src/maintenance/artifact-sweep.ts +23 -0
- package/src/maintenance/breaker.ts +200 -0
- package/src/maintenance/cd-watcher.ts +176 -0
- package/src/maintenance/checkout-refresh.ts +83 -0
- package/src/maintenance/ci-monitor.ts +14 -0
- package/src/maintenance/claude-api-budget-job.ts +16 -0
- package/src/maintenance/constants.ts +134 -0
- package/src/maintenance/continuation-archive-search-job.ts +27 -0
- package/src/maintenance/critical-job-watchdog.ts +252 -0
- package/src/maintenance/db-planner-stats-job.ts +19 -0
- package/src/maintenance/db-wal-reclaim-job.ts +82 -0
- package/src/maintenance/events.ts +28 -0
- package/src/maintenance/gate-capacity-sample-job.ts +16 -0
- package/src/maintenance/index.ts +10 -0
- package/src/maintenance/jobs.ts +857 -0
- package/src/maintenance/long-running-work.ts +41 -0
- package/src/maintenance/orphaned-sessions.ts +126 -0
- package/src/maintenance/pauses.ts +174 -0
- package/src/maintenance/provider-secret-scrub-job.ts +16 -0
- package/src/maintenance/queued-message-expiration.ts +23 -0
- package/src/maintenance/red-main-controller-job.ts +22 -0
- package/src/maintenance/reply-obligation-parity-job.ts +27 -0
- package/src/maintenance/restart-epoch-hold-health.ts +62 -0
- package/src/maintenance/run-registry.ts +194 -0
- package/src/maintenance/scheduler.ts +778 -0
- package/src/maintenance/service-access-job.ts +31 -0
- package/src/maintenance/shipping-stats-rollup-job.ts +23 -0
- package/src/maintenance/snapshot-ledger-prune-job.ts +17 -0
- package/src/maintenance/stalled-delivery-pager.ts +125 -0
- package/src/maintenance/steward-handback.ts +11 -0
- package/src/maintenance/task-state-reconcile-job.ts +22 -0
- package/src/maintenance/teams.ts +426 -0
- package/src/maintenance/types.ts +124 -0
- package/src/maintenance/vault-backup-job.ts +34 -0
- package/src/maintenance/vault-expiry-job.ts +29 -0
- package/src/maintenance/web-tool-call-prune-job.ts +13 -0
- package/src/maintenance/workflow-backstop-job.ts +12 -0
- package/src/maintenance/workflow-journal-prune-job.ts +29 -0
- package/src/maintenance/workspaces.ts +784 -0
- package/src/maintenance.ts +1 -0
- package/src/managed-policy-escalation.ts +123 -0
- package/src/managed-policy.ts +236 -0
- package/src/managed-provider-gate.ts +27 -0
- package/src/managed-spawn-reservation.ts +23 -0
- package/src/markdown-frontmatter.ts +14 -0
- package/src/mcp/activity-output.ts +57 -0
- package/src/mcp/artifact-upload.ts +53 -0
- package/src/mcp/context-output.ts +73 -0
- package/src/mcp/dispatch-shape-schema.ts +13 -0
- package/src/mcp/guides.ts +33 -0
- package/src/mcp/http.ts +27 -0
- package/src/mcp/identity-projection.ts +121 -0
- package/src/mcp/identity.ts +235 -0
- package/src/mcp/index.ts +355 -0
- package/src/mcp/issue-selector-schema.ts +12 -0
- package/src/mcp/message-read.ts +87 -0
- package/src/mcp/output-descriptions.ts +72 -0
- package/src/mcp/output-levels.ts +71 -0
- package/src/mcp/output-projection.ts +88 -0
- package/src/mcp/plan-presentation.ts +166 -0
- package/src/mcp/presentation-values.ts +11 -0
- package/src/mcp/presentation.ts +653 -0
- package/src/mcp/project-entry-search-schema.ts +7 -0
- package/src/mcp/prompts.ts +36 -0
- package/src/mcp/runtime-output.ts +84 -0
- package/src/mcp/schema-budget.ts +28 -0
- package/src/mcp/self-care-visibility.ts +23 -0
- package/src/mcp/service-access.ts +18 -0
- package/src/mcp/spawn-targets-matrix.ts +68 -0
- package/src/mcp/spawn-targets.test-fixture.ts +21 -0
- package/src/mcp/task-validation-presentation.ts +19 -0
- package/src/mcp/tool-generation.ts +8 -0
- package/src/mcp/tool-groups.ts +136 -0
- package/src/mcp/tools-artifacts.ts +82 -0
- package/src/mcp/tools-messaging.ts +541 -0
- package/src/mcp/tools-permission.ts +88 -0
- package/src/mcp/tools-run.ts +73 -0
- package/src/mcp/tools-scheduler.ts +156 -0
- package/src/mcp/tools-spawn.ts +418 -0
- package/src/mcp/tools-web-tool-calls.ts +28 -0
- package/src/mcp/tools-workspace.ts +260 -0
- package/src/mcp/types.ts +68 -0
- package/src/mcp/validation.ts +66 -0
- package/src/mcp-agent-action.ts +96 -0
- package/src/mcp-agent-keep.ts +37 -0
- package/src/mcp-backlog-tools.ts +137 -0
- package/src/mcp-blackboard-tools.ts +131 -0
- package/src/mcp-channel-binding-tools.ts +27 -0
- package/src/mcp-claude-api-budget.ts +35 -0
- package/src/mcp-codex-reset.ts +43 -0
- package/src/mcp-decision-tools.ts +96 -0
- package/src/mcp-dispatch-tools.ts +142 -0
- package/src/mcp-egress-tools.ts +168 -0
- package/src/mcp-errors.ts +7 -0
- package/src/mcp-host-tools.ts +61 -0
- package/src/mcp-interrupt-agent.ts +47 -0
- package/src/mcp-issue-activity-tools.ts +114 -0
- package/src/mcp-issue-association-tools.ts +103 -0
- package/src/mcp-issue-lifecycle-tools.ts +49 -0
- package/src/mcp-issue-ref-tools.ts +214 -0
- package/src/mcp-maintenance-tools.ts +113 -0
- package/src/mcp-merge-tools.ts +66 -0
- package/src/mcp-notification-subscription-tools.ts +297 -0
- package/src/mcp-output-levels.test-fixture.ts +95 -0
- package/src/mcp-plan-tools.ts +347 -0
- package/src/mcp-profile-trust-tools.ts +47 -0
- package/src/mcp-project-journal-tools.ts +160 -0
- package/src/mcp-project-tools.ts +420 -0
- package/src/mcp-provider-catalog.ts +9 -0
- package/src/mcp-release-tools.ts +33 -0
- package/src/mcp-routing-policy-tools.ts +35 -0
- package/src/mcp-secrets-tools.ts +87 -0
- package/src/mcp-task-deliver-tools.ts +166 -0
- package/src/mcp-task-land-withdraw-tools.ts +49 -0
- package/src/mcp-task-memory-tools.ts +119 -0
- package/src/mcp-task-review-hold-tools.ts +57 -0
- package/src/mcp-task-tools.ts +342 -0
- package/src/mcp-task-validation-tools.ts +30 -0
- package/src/mcp-task-weave-tools.ts +63 -0
- package/src/mcp-team-template-tools.ts +141 -0
- package/src/mcp-team-tools.ts +197 -0
- package/src/mcp-tool-allowlist.ts +88 -0
- package/src/mcp-workflow-tools.ts +158 -0
- package/src/mcp.ts +1 -0
- package/src/memory-admission-rank.ts +55 -0
- package/src/memory-area-injection.ts +216 -0
- package/src/memory-boundary-capture.ts +206 -0
- package/src/memory-entry-safety.ts +28 -0
- package/src/memory-inject-filter.ts +190 -0
- package/src/memory-injection.ts +954 -0
- package/src/memory-preamble-admission.ts +158 -0
- package/src/memory-preamble-async.ts +13 -0
- package/src/memory-preamble.ts +1142 -0
- package/src/memory-retirement.ts +11 -0
- package/src/memory-seam.ts +273 -0
- package/src/memory-tokens.ts +91 -0
- package/src/merge-drain.ts +101 -0
- package/src/merge-pause-maintenance.ts +19 -0
- package/src/message-visibility.ts +50 -0
- package/src/messaging-policy.ts +94 -0
- package/src/native-memory.ts +59 -0
- package/src/notification-prefs.ts +25 -0
- package/src/notification-role-policy.ts +14 -0
- package/src/notification-router.ts +329 -0
- package/src/notification-rules.ts +390 -0
- package/src/notification-settings-store.ts +47 -0
- package/src/notification-settings.ts +166 -0
- package/src/notification-subscription-rules.ts +11 -0
- package/src/notification-types.ts +312 -0
- package/src/notify.ts +55 -0
- package/src/observed-reset-boundary.ts +23 -0
- package/src/observed-reset-refresh.ts +21 -0
- package/src/operator-alarm.ts +41 -0
- package/src/operator-decisions-section.ts +29 -0
- package/src/orchestrator-lookup.ts +29 -0
- package/src/orchestrator-self-report-authz.ts +34 -0
- package/src/package-pack.ts +249 -0
- package/src/post-bind-startup.ts +58 -0
- package/src/process-guard.ts +31 -0
- package/src/profile-cells.ts +305 -0
- package/src/profile-effective-survey.ts +121 -0
- package/src/profile-host-sources.ts +73 -0
- package/src/profile-instruction-blocks.ts +11 -0
- package/src/profile-project-validation.ts +23 -0
- package/src/profile-provider-options.ts +59 -0
- package/src/profile-role-templates.ts +26 -0
- package/src/profile-workflow-policy.ts +14 -0
- package/src/project-claudemd-sweep.ts +176 -0
- package/src/project-file-source.ts +54 -0
- package/src/project-ingest.ts +195 -0
- package/src/project-instructions.ts +700 -0
- package/src/project-mcp.ts +18 -0
- package/src/project-role-assets.ts +109 -0
- package/src/project-roles-validate.ts +53 -0
- package/src/project-roles.ts +364 -0
- package/src/project-settings.ts +5 -0
- package/src/project-skills.ts +5 -0
- package/src/project-toolchain.ts +58 -0
- package/src/project-trust-fingerprint.ts +174 -0
- package/src/project-trust.ts +262 -0
- package/src/project-workflows.ts +185 -0
- package/src/prompt-resolver.ts +697 -0
- package/src/prompt-template-fallback.ts +15 -0
- package/src/prompt-version-errors.ts +13 -0
- package/src/provider-catalog-store.ts +393 -0
- package/src/provider-config-store.ts +308 -0
- package/src/provider-enablement.ts +36 -0
- package/src/provider-home-gc.ts +58 -0
- package/src/provider-model-seed.ts +18 -0
- package/src/provider-quota-async.ts +152 -0
- package/src/provider-quota-config-store.ts +60 -0
- package/src/provider-secrets.test-fixture.ts +34 -0
- package/src/provider-state.ts +93 -0
- package/src/provider-timeline-event.ts +76 -0
- package/src/quota-advisory.ts +359 -0
- package/src/quota-band-delivery.ts +13 -0
- package/src/quota-band-projection.ts +149 -0
- package/src/quota-band-transition.ts +316 -0
- package/src/quota-pacing.ts +46 -0
- package/src/quota-threshold-config.ts +46 -0
- package/src/quota.ts +61 -0
- package/src/ratchet-files.ts +202 -0
- package/src/recipe-async.ts +50 -0
- package/src/recipe-db.ts +260 -0
- package/src/recipe-loader.ts +132 -0
- package/src/recipe-runner.ts +259 -0
- package/src/recipe-validator.ts +107 -0
- package/src/relay-event-drain.ts +39 -0
- package/src/relay-host-locality.ts +20 -0
- package/src/relay-run-lease.ts +17 -0
- package/src/repo-config-source.ts +209 -0
- package/src/report-verbosity.ts +5 -0
- package/src/restart-epoch-deploy-hold.ts +221 -0
- package/src/retention-config-store.ts +32 -0
- package/src/retention-config.ts +70 -0
- package/src/reviewer-pipeline.ts +238 -0
- package/src/routes/_route.ts +70 -0
- package/src/routes/_shared.ts +513 -0
- package/src/routes/activity.ts +70 -0
- package/src/routes/agent-effort.ts +69 -0
- package/src/routes/agent-keep.ts +27 -0
- package/src/routes/agent-profiles.ts +169 -0
- package/src/routes/agent-reporting.ts +19 -0
- package/src/routes/agent-self-effort.ts +51 -0
- package/src/routes/agent-sessions.ts +650 -0
- package/src/routes/agent-sharing.ts +23 -0
- package/src/routes/agents-spawn.ts +258 -0
- package/src/routes/agents.ts +452 -0
- package/src/routes/artifacts.ts +340 -0
- package/src/routes/auth.ts +123 -0
- package/src/routes/authority-audit.ts +14 -0
- package/src/routes/automations.ts +83 -0
- package/src/routes/backlog.ts +112 -0
- package/src/routes/blackboard.ts +54 -0
- package/src/routes/browser.ts +73 -0
- package/src/routes/channel-binding-delete.ts +21 -0
- package/src/routes/channel-output.ts +17 -0
- package/src/routes/claude-api-budget.ts +65 -0
- package/src/routes/commands-listing.ts +50 -0
- package/src/routes/commands.ts +586 -0
- package/src/routes/config.ts +75 -0
- package/src/routes/connectors.ts +108 -0
- package/src/routes/context-resets.ts +35 -0
- package/src/routes/continuation-archives.ts +37 -0
- package/src/routes/coordinator-teams.ts +14 -0
- package/src/routes/decisions.ts +82 -0
- package/src/routes/deploys.ts +15 -0
- package/src/routes/fleet-convergence.ts +5 -0
- package/src/routes/guides.ts +13 -0
- package/src/routes/host-providers.ts +73 -0
- package/src/routes/host-resource-control.ts +48 -0
- package/src/routes/host-secret-files.ts +38 -0
- package/src/routes/hosts.ts +240 -0
- package/src/routes/inbox.ts +151 -0
- package/src/routes/index.ts +614 -0
- package/src/routes/insights.ts +86 -0
- package/src/routes/integrations.ts +636 -0
- package/src/routes/issue-activity.ts +78 -0
- package/src/routes/issue-associations.ts +76 -0
- package/src/routes/issue-lifecycle.ts +34 -0
- package/src/routes/issue-refs.ts +163 -0
- package/src/routes/kernel-timers-operator.ts +57 -0
- package/src/routes/memory.ts +25 -0
- package/src/routes/merges.ts +109 -0
- package/src/routes/message-viewer.ts +4 -0
- package/src/routes/messages.ts +621 -0
- package/src/routes/notifications.ts +36 -0
- package/src/routes/orchestrator-bootstrap.ts +101 -0
- package/src/routes/orchestrator-host-registration.ts +125 -0
- package/src/routes/orchestrator-host-utilization.ts +255 -0
- package/src/routes/orchestrator-proxy.ts +174 -0
- package/src/routes/orchestrator.ts +699 -0
- package/src/routes/pairs.ts +214 -0
- package/src/routes/plans.ts +98 -0
- package/src/routes/project-onboarding.ts +56 -0
- package/src/routes/project-trust.ts +73 -0
- package/src/routes/projects.ts +296 -0
- package/src/routes/prompt-templates.ts +106 -0
- package/src/routes/provider-config.ts +233 -0
- package/src/routes/provider-quota-config.ts +48 -0
- package/src/routes/provider-quotas.ts +312 -0
- package/src/routes/provisioning-registry.ts +192 -0
- package/src/routes/recipes.ts +129 -0
- package/src/routes/restart-epochs.ts +98 -0
- package/src/routes/routing-policy.ts +30 -0
- package/src/routes/run-command.ts +25 -0
- package/src/routes/secrets-backup.ts +53 -0
- package/src/routes/secrets-import.ts +32 -0
- package/src/routes/secrets-page.ts +98 -0
- package/src/routes/secrets-vault.ts +121 -0
- package/src/routes/secrets.ts +165 -0
- package/src/routes/service-access.ts +57 -0
- package/src/routes/settings.ts +191 -0
- package/src/routes/shipping.ts +56 -0
- package/src/routes/spawn-policy.ts +299 -0
- package/src/routes/spec.ts +58 -0
- package/src/routes/sse.ts +18 -0
- package/src/routes/stats.ts +159 -0
- package/src/routes/steward.ts +49 -0
- package/src/routes/task-graph.ts +30 -0
- package/src/routes/task-http.ts +27 -0
- package/src/routes/task-issues.ts +81 -0
- package/src/routes/task-reads.ts +139 -0
- package/src/routes/task-validation.ts +22 -0
- package/src/routes/tasks.ts +553 -0
- package/src/routes/team-templates.ts +65 -0
- package/src/routes/teams-config.ts +15 -0
- package/src/routes/teams.ts +141 -0
- package/src/routes/token-usage.ts +167 -0
- package/src/routes/tokens.ts +393 -0
- package/src/routes/users.ts +248 -0
- package/src/routes/viewer-read.ts +27 -0
- package/src/routes/web-tool-calls.ts +38 -0
- package/src/routes/workflows.ts +142 -0
- package/src/routes/workspaces.ts +642 -0
- package/src/routes.ts +3 -0
- package/src/routing-eligibility.ts +42 -0
- package/src/routing-model-aliases.ts +21 -0
- package/src/routing-policy-normalize.ts +412 -0
- package/src/routing-policy-push.ts +154 -0
- package/src/routing-policy-service.ts +19 -0
- package/src/routing-policy-store.ts +16 -0
- package/src/routing-preferences.ts +82 -0
- package/src/routing-step-defaults.ts +31 -0
- package/src/runtime-grant.ts +164 -0
- package/src/runtime-prefix.ts +8 -0
- package/src/runtime-tokens.ts +404 -0
- package/src/search-query.ts +10 -0
- package/src/secret-keys.ts +24 -0
- package/src/secrets-broker/config.ts +53 -0
- package/src/secrets-broker/error.ts +8 -0
- package/src/secrets-broker/infisical.ts +259 -0
- package/src/secrets-broker/reader-infisical.ts +41 -0
- package/src/secrets-broker/reader.ts +101 -0
- package/src/secrets-broker/service.ts +242 -0
- package/src/secrets-broker/tool-credentials.ts +9 -0
- package/src/secrets-vault/backend-conformance.ts +26 -0
- package/src/secrets-vault/backend.ts +102 -0
- package/src/secrets-vault/backup.ts +103 -0
- package/src/secrets-vault/config.ts +7 -0
- package/src/secrets-vault/expiry.ts +10 -0
- package/src/secrets-vault/identity.ts +27 -0
- package/src/secrets-vault/import.ts +90 -0
- package/src/secrets-vault/key-files.ts +91 -0
- package/src/secrets-vault/keys.ts +79 -0
- package/src/secrets-vault/metadata.ts +51 -0
- package/src/secrets-vault/provider-env.ts +25 -0
- package/src/secrets-vault/resolve.ts +101 -0
- package/src/secrets-vault/restore.ts +57 -0
- package/src/secrets-vault/scope.ts +25 -0
- package/src/secrets-vault/service.ts +192 -0
- package/src/secrets-vault/shared.ts +10 -0
- package/src/security.ts +772 -0
- package/src/self-effort-rule.ts +36 -0
- package/src/self-resume-carry.ts +131 -0
- package/src/self-resume-command.ts +24 -0
- package/src/self-resume-config.ts +54 -0
- package/src/self-resume-identity.ts +40 -0
- package/src/self-resume-supersede.ts +19 -0
- package/src/self-resume.ts +884 -0
- package/src/server-background.ts +24 -0
- package/src/server.ts +726 -0
- package/src/service-access/config.ts +3 -0
- package/src/service-access/health.ts +151 -0
- package/src/service-access/host-health.ts +62 -0
- package/src/service-access/host.ts +63 -0
- package/src/service-access/operations.ts +21 -0
- package/src/service-access/policy.ts +30 -0
- package/src/service-access/probe.ts +62 -0
- package/src/service-access/request-logs.ts +93 -0
- package/src/service-access/scope.ts +7 -0
- package/src/service-access/service.ts +185 -0
- package/src/service-access/tokens.ts +174 -0
- package/src/service-access/validation.ts +75 -0
- package/src/service-access/vault.ts +59 -0
- package/src/services/agent-action.ts +238 -0
- package/src/services/agent-control-host.ts +74 -0
- package/src/services/agent-effort.ts +60 -0
- package/src/services/agent-hang-watchdog-job.ts +513 -0
- package/src/services/agent-hang-watchdog-wiring.ts +487 -0
- package/src/services/agent-hang-watchdog.ts +395 -0
- package/src/services/agent-keep.ts +72 -0
- package/src/services/agent-message-fanout.ts +91 -0
- package/src/services/agent-outstanding-work.ts +66 -0
- package/src/services/agent-reporting.ts +27 -0
- package/src/services/artifact-access.ts +39 -0
- package/src/services/artifact-multipart.ts +70 -0
- package/src/services/artifact-path-host.ts +55 -0
- package/src/services/artifact-read.ts +88 -0
- package/src/services/artifact-write.ts +25 -0
- package/src/services/auth-context.ts +117 -0
- package/src/services/automatic-disposal.ts +33 -0
- package/src/services/backlog.ts +149 -0
- package/src/services/browser-inventory.ts +52 -0
- package/src/services/browser-session-state.ts +41 -0
- package/src/services/browser-session.ts +167 -0
- package/src/services/bus-command-update.ts +84 -0
- package/src/services/bus-expiration-death.ts +57 -0
- package/src/services/canonical-root.ts +284 -0
- package/src/services/captured-delivery-gate.ts +12 -0
- package/src/services/carry-pending.ts +5 -0
- package/src/services/channel-binding-delete.ts +20 -0
- package/src/services/channel-suppression-receipt.ts +28 -0
- package/src/services/checkout-refresh-state.ts +18 -0
- package/src/services/checkout-refresh.test-fixture.ts +12 -0
- package/src/services/child-work-evidence.ts +77 -0
- package/src/services/claude-app.ts +91 -0
- package/src/services/command-claim-rejection.ts +23 -0
- package/src/services/command-host.ts +42 -0
- package/src/services/coordinator-digest.ts +30 -0
- package/src/services/decision-audience.ts +26 -0
- package/src/services/delivery-gate-policy.ts +98 -0
- package/src/services/delivery-tip.test-fixture.ts +25 -0
- package/src/services/diff-gate.ts +110 -0
- package/src/services/dispatch-command.ts +388 -0
- package/src/services/effective-launch-driver.ts +240 -0
- package/src/services/effective-launch-harness.ts +257 -0
- package/src/services/errors.ts +31 -0
- package/src/services/git-process.ts +176 -0
- package/src/services/git-remote.ts +100 -0
- package/src/services/harness-subagents.ts +12 -0
- package/src/services/host-changed-paths.test-fixture.ts +134 -0
- package/src/services/host-landing-placement.ts +65 -0
- package/src/services/host-project-readiness.ts +49 -0
- package/src/services/host-providers.ts +114 -0
- package/src/services/host-utilization.ts +70 -0
- package/src/services/idle-agent-digest.ts +318 -0
- package/src/services/idle-epics.ts +105 -0
- package/src/services/idle-self-care.ts +47 -0
- package/src/services/interrupt-agent.ts +146 -0
- package/src/services/isolated-workspace-placement.ts +258 -0
- package/src/services/issue-activity.ts +23 -0
- package/src/services/issue-associations.ts +72 -0
- package/src/services/issue-completion-drain.ts +24 -0
- package/src/services/issue-completion.ts +24 -0
- package/src/services/issue-lifecycle-comments.ts +12 -0
- package/src/services/issue-lifecycle.ts +620 -0
- package/src/services/issue-refs.ts +65 -0
- package/src/services/kernel-command-bridge.ts +219 -0
- package/src/services/kernel-control-host.ts +78 -0
- package/src/services/kernel-control-http.ts +119 -0
- package/src/services/kernel-control-mcp.ts +193 -0
- package/src/services/kernel-landing-command.ts +28 -0
- package/src/services/kernel-landing-ingress.ts +65 -0
- package/src/services/kernel-timers-authoritative-ingress.ts +48 -0
- package/src/services/kernel-timers-authz.ts +229 -0
- package/src/services/kernel-timers-command.ts +182 -0
- package/src/services/kernel-timers-cutover-chaos-worker.ts +211 -0
- package/src/services/kernel-timers-cutover.ts +39 -0
- package/src/services/kernel-timers-ingress-apply.ts +39 -0
- package/src/services/kernel-timers-ingress-chaos-worker.ts +312 -0
- package/src/services/kernel-timers-ingress.ts +702 -0
- package/src/services/kernel-timers-message-authority-chaos-worker.ts +97 -0
- package/src/services/kernel-timers-migrate.ts +158 -0
- package/src/services/kernel-timers-operator-chaos-worker.ts +259 -0
- package/src/services/kernel-timers-operator-preflight.ts +18 -0
- package/src/services/kernel-timers-operator.ts +424 -0
- package/src/services/kernel-timers-outbox.ts +138 -0
- package/src/services/kernel-timers-request-key-migration-chaos-worker.ts +80 -0
- package/src/services/kernel-timers-stage10-operator.ts +210 -0
- package/src/services/kernel-timers-stage10.ts +85 -0
- package/src/services/kernel-timers-stage9.ts +57 -0
- package/src/services/kernel-timers-transfer-chaos-worker.ts +118 -0
- package/src/services/kernel-timers-transfer.ts +525 -0
- package/src/services/kernel-timers-verifier.ts +39 -0
- package/src/services/kernel-timers.ts +247 -0
- package/src/services/land-boundary-settle.ts +32 -0
- package/src/services/land-gate-placement.ts +60 -0
- package/src/services/land-issue-relations.ts +46 -0
- package/src/services/land-restart-retry.ts +77 -0
- package/src/services/landed-ancestry.ts +417 -0
- package/src/services/landed-task-attribution.ts +14 -0
- package/src/services/landing-terminal-report.ts +119 -0
- package/src/services/legacy-landing-backfill.ts +159 -0
- package/src/services/legacy-landing-host.ts +291 -0
- package/src/services/legacy-landing-publication.ts +35 -0
- package/src/services/legacy-landing-recovery.ts +111 -0
- package/src/services/macos-privacy.ts +34 -0
- package/src/services/managed-running.ts +189 -0
- package/src/services/memory-areas.ts +172 -0
- package/src/services/memory-identity.ts +162 -0
- package/src/services/merge-pause.ts +37 -0
- package/src/services/message-delivery-actions.ts +11 -0
- package/src/services/operator-decisions.ts +260 -0
- package/src/services/orchestrator-landing-recovery.ts +55 -0
- package/src/services/orchestrator-registration-recovery.ts +12 -0
- package/src/services/orchestrator-upgrade.ts +83 -0
- package/src/services/parity-harness.ts +141 -0
- package/src/services/permission-decision.ts +129 -0
- package/src/services/plan-ci-recovery.ts +76 -0
- package/src/services/plan-conformance.ts +105 -0
- package/src/services/plan-dispatch-policy.ts +79 -0
- package/src/services/plan-dispatch.ts +372 -0
- package/src/services/plan-external-view.ts +7 -0
- package/src/services/plan-frontier.ts +34 -0
- package/src/services/plan-graph.ts +703 -0
- package/src/services/plan-import.ts +66 -0
- package/src/services/plan-live-bindings.ts +139 -0
- package/src/services/plan-task-create.ts +80 -0
- package/src/services/plan-terminal-refs.ts +83 -0
- package/src/services/plan-wake-digest.ts +88 -0
- package/src/services/plan-wake-policy.ts +12 -0
- package/src/services/profile-trust.ts +54 -0
- package/src/services/project-checkout-binding.ts +65 -0
- package/src/services/project-checkout-enrollment.ts +27 -0
- package/src/services/project-cwd.ts +41 -0
- package/src/services/project-onboarding.ts +165 -0
- package/src/services/project-repo-create.ts +27 -0
- package/src/services/project-role.test-fixture.ts +74 -0
- package/src/services/project.ts +191 -0
- package/src/services/prompt-templates.ts +46 -0
- package/src/services/prompt-version-writer.ts +42 -0
- package/src/services/provider-catalog.ts +7 -0
- package/src/services/provider-hold-flap.ts +130 -0
- package/src/services/provider-hold-nudge.ts +191 -0
- package/src/services/provider-hold-record.ts +137 -0
- package/src/services/provider-state-audit.ts +214 -0
- package/src/services/provisioning-harness/analyze.ts +285 -0
- package/src/services/provisioning-harness/budget-baseline.json +391 -0
- package/src/services/provisioning-harness/capture.ts +197 -0
- package/src/services/provisioning-harness/config.ts +55 -0
- package/src/services/provisioning-harness/context-sources.ts +85 -0
- package/src/services/provisioning-harness/driver.ts +156 -0
- package/src/services/provisioning-harness/expect.ts +81 -0
- package/src/services/provisioning-harness/fixture-matrix.ts +38 -0
- package/src/services/provisioning-harness/fixtures/project/.agent-relay/land-gates.json +1 -0
- package/src/services/provisioning-harness/fixtures/project/.claude/skills/harness-skill/SKILL.md +6 -0
- package/src/services/provisioning-harness/fixtures/project/.mcp.json +1 -0
- package/src/services/provisioning-harness/fixtures/project/AGENTS.md +1 -0
- package/src/services/provisioning-harness/fixtures/project/CLAUDE.md +1 -0
- package/src/services/provisioning-harness/fixtures/project/mcp-server.ts +33 -0
- package/src/services/provisioning-harness/fixtures/provider-home/AGENTS.md +1 -0
- package/src/services/provisioning-harness/fixtures/provider-home/CLAUDE.md +1 -0
- package/src/services/provisioning-harness/host-fixtures.ts +25 -0
- package/src/services/provisioning-harness/index.ts +4 -0
- package/src/services/provisioning-harness/inventory-types.ts +8 -0
- package/src/services/provisioning-harness/inventory.ts +33 -0
- package/src/services/provisioning-harness/lifecycle.ts +193 -0
- package/src/services/provisioning-harness/live.ts +61 -0
- package/src/services/provisioning-harness/manifests.ts +118 -0
- package/src/services/provisioning-harness/prepare.ts +113 -0
- package/src/services/provisioning-harness/redundancy-report.ts +32 -0
- package/src/services/provisioning-harness/redundancy.ts +137 -0
- package/src/services/provisioning-harness/report.ts +129 -0
- package/src/services/provisioning-harness/types.ts +174 -0
- package/src/services/provisioning-registry.ts +15 -0
- package/src/services/rate-limit-resume.ts +220 -0
- package/src/services/reap-verdict.ts +52 -0
- package/src/services/red-main-auto-revert.ts +103 -0
- package/src/services/red-main-controller-deps.ts +80 -0
- package/src/services/red-main-controller.ts +262 -0
- package/src/services/red-main-incident.ts +44 -0
- package/src/services/red-main-quarantine.ts +92 -0
- package/src/services/register-agent.ts +447 -0
- package/src/services/release-readiness.ts +219 -0
- package/src/services/reported-exit-death.ts +29 -0
- package/src/services/response-report-admission.ts +17 -0
- package/src/services/restart-epoch-driver.ts +290 -0
- package/src/services/restart-epoch-reconciler.ts +326 -0
- package/src/services/restart-epoch-stale-command-recovery.ts +133 -0
- package/src/services/restart-instructions.ts +86 -0
- package/src/services/restart-project-role.ts +74 -0
- package/src/services/restart-secret-refs.ts +14 -0
- package/src/services/restart-spawn.ts +510 -0
- package/src/services/review-publish.ts +76 -0
- package/src/services/review-ref-reconcile.ts +337 -0
- package/src/services/run-command-input.ts +22 -0
- package/src/services/run-command.ts +510 -0
- package/src/services/run-completion-message.ts +70 -0
- package/src/services/run-log.ts +212 -0
- package/src/services/run-queue.ts +63 -0
- package/src/services/scheduler-command-cancel.ts +49 -0
- package/src/services/scheduler-command.ts +590 -0
- package/src/services/scheduler-create.ts +25 -0
- package/src/services/scheduler-plan.ts +202 -0
- package/src/services/scheduler-recovery.ts +31 -0
- package/src/services/scheduler.ts +406 -0
- package/src/services/self-care-state.ts +10 -0
- package/src/services/self-effort-grant.ts +93 -0
- package/src/services/self-effort.ts +152 -0
- package/src/services/send-message.ts +548 -0
- package/src/services/server-credentials.ts +53 -0
- package/src/services/shipping-board.ts +111 -0
- package/src/services/shipping-project-config.ts +86 -0
- package/src/services/shipping-stats.ts +86 -0
- package/src/services/shutdown-agent.ts +463 -0
- package/src/services/shutdown-watchdog.ts +119 -0
- package/src/services/spawn-agent.ts +967 -0
- package/src/services/spawn-approval.ts +26 -0
- package/src/services/spawn-brief.ts +39 -0
- package/src/services/spawn-chain-inspector.ts +286 -0
- package/src/services/spawn-cwd-placement.ts +250 -0
- package/src/services/spawn-identity.ts +127 -0
- package/src/services/spawn-instruction-inputs.ts +114 -0
- package/src/services/spawn-issue-activity.ts +102 -0
- package/src/services/spawn-launch-decision.ts +32 -0
- package/src/services/spawn-launch.ts +116 -0
- package/src/services/spawn-loss-escalation.ts +253 -0
- package/src/services/spawn-placement.test-fixture.ts +30 -0
- package/src/services/spawn-project-role.ts +133 -0
- package/src/services/spawn-registration-watchdog.ts +352 -0
- package/src/services/spawn-replay.ts +61 -0
- package/src/services/spawn-repo-probe.ts +118 -0
- package/src/services/spawn-tree-cleanup.ts +37 -0
- package/src/services/spawn-warnings.ts +13 -0
- package/src/services/steward-reaper.ts +244 -0
- package/src/services/task-context-hydration.ts +413 -0
- package/src/services/task-delivery-close.ts +26 -0
- package/src/services/task-delivery-event.ts +11 -0
- package/src/services/task-delivery-land-policy.ts +35 -0
- package/src/services/task-delivery-summary.ts +38 -0
- package/src/services/task-delivery.ts +762 -0
- package/src/services/task-dependency-graph.ts +116 -0
- package/src/services/task-dispatch.ts +178 -0
- package/src/services/task-done-when.ts +45 -0
- package/src/services/task-entity.ts +758 -0
- package/src/services/task-from-issue.ts +80 -0
- package/src/services/task-issue-digest.ts +45 -0
- package/src/services/task-issue-link.ts +158 -0
- package/src/services/task-issue-weave.ts +570 -0
- package/src/services/task-land-withdraw.ts +462 -0
- package/src/services/task-lifecycle.ts +668 -0
- package/src/services/task-nothing-to-land.ts +37 -0
- package/src/services/task-plan-view.ts +172 -0
- package/src/services/task-review-hold.ts +244 -0
- package/src/services/task-semantic-events.ts +396 -0
- package/src/services/task-stage-wake.ts +15 -0
- package/src/services/task-state-reconcile.ts +169 -0
- package/src/services/task-validation.ts +42 -0
- package/src/services/team-claim-race.worker.ts +72 -0
- package/src/services/team-spawn-delegation.ts +30 -0
- package/src/services/team-templates.ts +172 -0
- package/src/services/team.ts +320 -0
- package/src/services/terminal-provider-exit.ts +57 -0
- package/src/services/timer-message-fire-chaos-worker.ts +29 -0
- package/src/services/timer-message-fire-outbox.ts +184 -0
- package/src/services/transient-agent-reaper.ts +412 -0
- package/src/services/turn-reconcile-audit.ts +236 -0
- package/src/services/user-onboarding.ts +98 -0
- package/src/services/user-profile.ts +57 -0
- package/src/services/web-search.ts +83 -0
- package/src/services/web-tool-calls.ts +65 -0
- package/src/services/withdraw-steward.ts +57 -0
- package/src/services/work-finality.ts +34 -0
- package/src/services/workflow-agent-obligation.ts +35 -0
- package/src/services/workflow-auto-start.ts +126 -0
- package/src/services/workflow-backstop.ts +38 -0
- package/src/services/workflow-budget.test-fixture.ts +10 -0
- package/src/services/workflow-caller.ts +32 -0
- package/src/services/workflow-catalog.ts +43 -0
- package/src/services/workflow-child-proof-worker.ts +76 -0
- package/src/services/workflow-child.test-fixture.ts +51 -0
- package/src/services/workflow-ci-main.ts +93 -0
- package/src/services/workflow-control-proof-worker.ts +149 -0
- package/src/services/workflow-coordinator-decision-proof-worker.ts +123 -0
- package/src/services/workflow-coordinator.ts +8 -0
- package/src/services/workflow-decision-answer.ts +18 -0
- package/src/services/workflow-decision-proof-worker.ts +92 -0
- package/src/services/workflow-decision.test-fixture.ts +58 -0
- package/src/services/workflow-decisions.ts +107 -0
- package/src/services/workflow-deferred-cleanup.ts +40 -0
- package/src/services/workflow-dispatch-result.ts +20 -0
- package/src/services/workflow-effect-driver.ts +165 -0
- package/src/services/workflow-effects.ts +544 -0
- package/src/services/workflow-foreach-proof-worker.ts +209 -0
- package/src/services/workflow-land-notice.ts +18 -0
- package/src/services/workflow-land.ts +105 -0
- package/src/services/workflow-notice.ts +32 -0
- package/src/services/workflow-overdue-notice.ts +19 -0
- package/src/services/workflow-pins.ts +162 -0
- package/src/services/workflow-reconcile.ts +210 -0
- package/src/services/workflow-resume-pins.ts +30 -0
- package/src/services/workflow-run-chaos-worker.ts +67 -0
- package/src/services/workflow-run-view.ts +71 -0
- package/src/services/workflow-run.test-fixture.ts +165 -0
- package/src/services/workflow-runs.ts +370 -0
- package/src/services/workflow-scripts.ts +100 -0
- package/src/services/workflow-slice-proof.ts +14 -0
- package/src/services/workflow-stats.ts +208 -0
- package/src/services/workflow-supervisor-state.ts +117 -0
- package/src/services/workflow-supervisor.ts +122 -0
- package/src/services/workflow-verification.ts +68 -0
- package/src/services/workspace-recovery.ts +168 -0
- package/src/services/workspace-task-binding.ts +22 -0
- package/src/settings/modules.ts +149 -0
- package/src/settings/registry.ts +629 -0
- package/src/settings/user-settings.ts +81 -0
- package/src/setup.ts +199 -0
- package/src/shared-mcp.ts +87 -0
- package/src/shutdown.ts +33 -0
- package/src/spawn-admission.ts +48 -0
- package/src/spawn-budget.ts +18 -0
- package/src/spawn-command.ts +373 -0
- package/src/spawn-env.ts +27 -0
- package/src/spawn-intent.ts +17 -0
- package/src/spawn-lease.ts +41 -0
- package/src/spawn-models.ts +22 -0
- package/src/spawn-placement.ts +348 -0
- package/src/spawn-profile-errors.ts +9 -0
- package/src/spawn-quota.ts +15 -0
- package/src/spawn-targets.ts +679 -0
- package/src/sse-agent-status.ts +35 -0
- package/src/sse-outbox-cursor.ts +28 -0
- package/src/sse-visibility.ts +36 -0
- package/src/sse.ts +684 -0
- package/src/startup-context-injection.ts +518 -0
- package/src/startup-timing.ts +30 -0
- package/src/state-adoption/artifacts.ts +27 -0
- package/src/state-adoption/cd-cutover.ts +125 -0
- package/src/state-adoption/files.ts +31 -0
- package/src/state-adoption/index.ts +166 -0
- package/src/state-adoption/linux-plan.ts +67 -0
- package/src/state-adoption/linux.ts +104 -0
- package/src/state-adoption/macos-plan.ts +58 -0
- package/src/state-adoption/macos.ts +112 -0
- package/src/steward-claim-release.ts +38 -0
- package/src/steward-handoff.ts +28 -0
- package/src/steward-identity.ts +54 -0
- package/src/steward-policy-cleanup.ts +222 -0
- package/src/steward-policy-model-reconcile.ts +33 -0
- package/src/steward-policy-name.ts +13 -0
- package/src/steward-provenance.ts +59 -0
- package/src/steward-queue.ts +85 -0
- package/src/steward-slot-recovery.ts +34 -0
- package/src/steward-spawn-guard.ts +344 -0
- package/src/steward.test-fixture.ts +11 -0
- package/src/steward.ts +199 -0
- package/src/stream-proxy.ts +84 -0
- package/src/task-authz.ts +40 -0
- package/src/task-completion.ts +39 -0
- package/src/task-dispatch-live.ts +70 -0
- package/src/task-dispatcher-ranking.ts +136 -0
- package/src/task-dispatcher.ts +841 -0
- package/src/task-owner-notices.ts +35 -0
- package/src/task-owner.ts +63 -0
- package/src/task-plan-status.ts +21 -0
- package/src/task-verification.ts +35 -0
- package/src/team-idle-tracker.ts +39 -0
- package/src/team-template-config.ts +100 -0
- package/src/teams-config-store.ts +22 -0
- package/src/terminal-authz.ts +49 -0
- package/src/token-db-write.ts +44 -0
- package/src/token-db.ts +487 -0
- package/src/token-usage-async.ts +40 -0
- package/src/transport-subscriptions.ts +57 -0
- package/src/types.ts +1 -0
- package/src/upgrade-install-verify.ts +179 -0
- package/src/upgrade-local-id.ts +3 -0
- package/src/upgrade-services.ts +125 -0
- package/src/upgrade.ts +1006 -0
- package/src/user-awaiting-reply.ts +42 -0
- package/src/user-path.ts +246 -0
- package/src/user-settings-async.ts +33 -0
- package/src/user-settings-store.ts +106 -0
- package/src/user-style.ts +83 -0
- package/src/utils.ts +42 -0
- package/src/validation.ts +324 -0
- package/src/vault-backup-config.ts +28 -0
- package/src/vault-expiry-config.ts +12 -0
- package/src/versioned-prompts.ts +57 -0
- package/src/workflow-capabilities.ts +10 -0
- package/src/workflow-prompt-templates.ts +20 -0
- package/src/workspace-action-audit.ts +42 -0
- package/src/workspace-actions.ts +689 -0
- package/src/workspace-auto-merge.ts +1055 -0
- package/src/workspace-changed-paths-client.ts +97 -0
- package/src/workspace-claim.ts +45 -0
- package/src/workspace-cleanup-settle.ts +51 -0
- package/src/workspace-cleanup-stale.ts +231 -0
- package/src/workspace-command-settle.ts +589 -0
- package/src/workspace-config.ts +7 -0
- package/src/workspace-conflict-resolver.ts +182 -0
- package/src/workspace-dead-owner-recovery.ts +19 -0
- package/src/workspace-delivery-tip.ts +51 -0
- package/src/workspace-escalation.ts +107 -0
- package/src/workspace-git-state-client.ts +42 -0
- package/src/workspace-host-client.ts +86 -0
- package/src/workspace-host-target.ts +5 -0
- package/src/workspace-host.ts +61 -0
- package/src/workspace-human-escalation.ts +70 -0
- package/src/workspace-land-gate-watchdog.ts +76 -0
- package/src/workspace-land-gate.ts +99 -0
- package/src/workspace-land-result.ts +12 -0
- package/src/workspace-land-retry.ts +82 -0
- package/src/workspace-land-stopped.ts +57 -0
- package/src/workspace-merge-dispatch.ts +27 -0
- package/src/workspace-merge-progress.ts +369 -0
- package/src/workspace-merge-retry-policy.ts +59 -0
- package/src/workspace-merge.ts +614 -0
- package/src/workspace-nothing-to-land-notice.ts +27 -0
- package/src/workspace-orphans.ts +927 -0
- package/src/workspace-phase.ts +507 -0
- package/src/workspace-pr-completion.ts +285 -0
- package/src/workspace-probe.ts +212 -0
- package/src/workspace-recorded-land.ts +47 -0
- package/src/workspace-recovery-authz.ts +88 -0
- package/src/workspace-rekey.ts +106 -0
- package/src/workspace-steward-authority.ts +16 -0
- package/src/workspace-steward-failure.ts +42 -0
- package/src/workspace-steward-wake.ts +150 -0
- package/src/workspace-steward-watchdog.ts +240 -0
|
@@ -0,0 +1,967 @@
|
|
|
1
|
+
import { writeChildEnv } from "@humwick/sdk/env";
|
|
2
|
+
import { bindSpawnProjectCheckout } from "./project-checkout-binding";
|
|
3
|
+
import { REPORT_VERBOSITIES, resolveReportVerbosity } from "@humwick/sdk";
|
|
4
|
+
import { cleanCallerSpawnEnv } from "../spawn-env";
|
|
5
|
+
import { optionalEnum } from "../validation";
|
|
6
|
+
import { optionalNonNegativeInt } from "../validation";
|
|
7
|
+
import { cleanSpawnBudget } from "../spawn-budget";
|
|
8
|
+
import { teamId as newTeamId } from "../db/teams";
|
|
9
|
+
import { getGateway } from "../db/gateway";
|
|
10
|
+
import type { WorkflowSpawnQuota } from "../db/spawn-in-flight";
|
|
11
|
+
// Transport convergence (epic #342, slice #349) — the agent-spawn service.
|
|
12
|
+
//
|
|
13
|
+
// ONE home for "spawn a provider agent through the orchestrator". Previously the
|
|
14
|
+
// security core was inlined in the MCP `relay_spawn_agent` handler ONLY: the
|
|
15
|
+
// `command:spawn` scope, the #221 no-grandchild + maxSpawnedAgents quota gate, the
|
|
16
|
+
// #323 orchestrator-resource gate, authoritative `spawnedBy` lineage stamping, and
|
|
17
|
+
// the #328/#331/#324 caller-context inheritance (host / cwd / approvalMode / isolated
|
|
18
|
+
// workspace). The HTTP `POST /api/agents/spawn` route did NONE of it — it authorized
|
|
19
|
+
// on `agent:write` and emitted an ungated, un-parented spawn command. A spawn-capable
|
|
20
|
+
// token reaching HTTP bypassed the entire gate (masked today only because the dashboard
|
|
21
|
+
// uses an admin `*` token). That is exactly the "fixed in one transport, not the other"
|
|
22
|
+
// drift epic #342 kills.
|
|
23
|
+
//
|
|
24
|
+
// Transports now shrink to: parse wire → `authContextFrom*` → `spawnAgent` → serialize.
|
|
25
|
+
// Both the MCP and HTTP paths feed ONE `AuthContext`; identity (`ctx.callerAgentId`),
|
|
26
|
+
// scopes, and signed constraints are read identically, so the gate cannot diverge. The
|
|
27
|
+
// parity harness (spawn-agent.parity.test.ts) asserts both transports produce a
|
|
28
|
+
// byte-identical command payload + identical gate behavior through this service.
|
|
29
|
+
//
|
|
30
|
+
// NOTE — internal callers (managed-policy auto-spawn, automations, agent-session resume)
|
|
31
|
+
// are SYSTEM-actor spawns with their own lineage semantics (policy/scheduled, not
|
|
32
|
+
// agent-parented); the agent-caller gate genuinely no-ops for them. They stay on the
|
|
33
|
+
// shared `buildSpawnCommand`/`buildManagedSpawnParams` payload home directly. Folding
|
|
34
|
+
// them through `spawnAgent(systemCtx)` is a clean belt-and-suspenders follow-up (#342),
|
|
35
|
+
// deliberately out of scope here — this slice converges the two external TRANSPORTS.
|
|
36
|
+
import { resolveSpawnApprovalMode } from "./spawn-approval";
|
|
37
|
+
import { assertOrchestratorSupportsLaunchMode, resolveSpawnLaunchMode } from "../launch-mode";
|
|
38
|
+
import { DEFAULT_USER_ID, errMessage, isRecord, stringValue, type LaunchMode, type ReportVerbosity, type SpawnProvider, type TaskDispatch } from "@humwick/sdk";
|
|
39
|
+
import { addProjectRootAsync, countLiveSpawnedAgents, createActivityEventAsync, getAgent, getProject, getTaskDetailAsync, listAgents, listProjects, listWorkspaces, recordTaskSpawnRequestedAsync, reportedRepoRootForCwd, resolveAgentOwnershipAsync, resolveProjectForCwd, rootsForProject, ValidationError, withResolvedProvisioningAsync } from "../db";
|
|
40
|
+
import { acquireCoordinatorTeam } from "./team";
|
|
41
|
+
import { countInFlightSpawnCommands } from "../commands-db";
|
|
42
|
+
import { createSpawnCommandWithinQuotaAsync } from "../commands-write";
|
|
43
|
+
import { emitCommandEvent } from "../command-events";
|
|
44
|
+
import { redactCommandSecrets } from "../command-secrets";
|
|
45
|
+
import { buildSpawnCommand, generateSpawnRequestId } from "../spawn-command"; import { systemTagsForSpawn } from "../agent-system-tags";
|
|
46
|
+
import { resolveSpawnLandBlocked } from "../land-block";
|
|
47
|
+
import { runnerRuntimeTokenEnv } from "../runtime-tokens";
|
|
48
|
+
import { liveSpawnQuota } from "../spawn-quota";
|
|
49
|
+
import { resolveCanonicalHost } from "../host-identity";
|
|
50
|
+
import { resolveSpawnHostAnchor } from "../spawn-targets";
|
|
51
|
+
import { builtInProfileSpawnDefaults } from "../agent-profile-catalog";
|
|
52
|
+
import { DEFAULT_SPAWN_PROFILE_NAME, getAgentProfile, getLandingConfig, hostPinForProfile, projectMemoryEnabledForProfile, spawnGrantForProfile } from "../config-store";
|
|
53
|
+
import { profileNotFoundMessage } from "../spawn-profile-errors";
|
|
54
|
+
import { composeSpawnInstructionsWithEventsAsync } from "../project-instructions";
|
|
55
|
+
import { applyDefaultSharedMcp, type SharedMcpSpawnOverride } from "../shared-mcp";
|
|
56
|
+
import { findGitRepoRoot, isInsideGitWorkTree, pathVisibleLocally } from "./canonical-root";
|
|
57
|
+
import { selectSpawnCwdPlacement } from "./spawn-cwd-placement";
|
|
58
|
+
import { isolatedSpawnGitRepoError, resolveSpawnRepoRoot } from "./spawn-repo-probe";
|
|
59
|
+
import { autoSeedProjectForCwdAsync } from "./project"; import { applyProjectCapabilityGates } from "../project-trust";
|
|
60
|
+
import { assertProjectRoleMcpCwd, assertProjectRoleMcpTrusted, projectRoleProfile, projectRoleProvenance, projectRoleSpawnDefaults, withRoleProfile } from "../project-roles";
|
|
61
|
+
import { spawnWarnings } from "./spawn-warnings";
|
|
62
|
+
import { resolveSpawnProjectRole } from "./spawn-project-role";
|
|
63
|
+
import { profileProviderPin, resolveSpawnLaunch } from "./spawn-launch";
|
|
64
|
+
import { hydrateTaskContext, projectTaskHydration } from "./task-context-hydration";
|
|
65
|
+
import { createTaskEntity, getTaskEntityAsync, recordTaskEntityDispatchDecisionAsync } from "./task-entity";
|
|
66
|
+
import { autoSubscribeTaskCoordinator } from "./task-semantic-events"; import { resolveTaskOwnerAgentId } from "../task-owner";
|
|
67
|
+
import { dispatchTaskAsync, type DispatchPin } from "../task-dispatcher";
|
|
68
|
+
import { hasComponentScope, isComponentAuthorizedFor } from "../security";
|
|
69
|
+
import { isOrchestratorLocalToRelay, isPathWithinBase } from "../utils";
|
|
70
|
+
import { McpAuthError, McpNotFoundError } from "../mcp-errors";
|
|
71
|
+
import { actingUserIdOf, type AuthContext } from "./auth-context";
|
|
72
|
+
import { replayAdmittedSpawn, spawnReplay } from "./spawn-replay";
|
|
73
|
+
import { resolveSpawnSelfEffortDefault, type SelfEffortSpawnInput } from "./self-effort";
|
|
74
|
+
import type { AgentProfile, AgentCard, AgentLifecycle, Command, CreateCommandInput, SpawnApprovalMode, WorkspaceAutoMergePolicy, WorkspaceLandingPolicy, WorkspaceLandMechanism, WorkspaceMode } from "../types";
|
|
75
|
+
import { isOwnerAlive, liveAgentCwds, worktreeInUseByLiveAgent } from "../workspace-merge";
|
|
76
|
+
import { TERMINAL_WORKSPACE_STATUSES } from "../workspace-phase";
|
|
77
|
+
import { AUTO_SCAFFOLD_TASK_NUDGE, shouldAutoScaffoldTask, spawnBrief, taskSpawnLabel, taskTitleFromBrief } from "./spawn-brief";
|
|
78
|
+
import { buildProspectiveSpawnIdentity, assertBranchFromTargetPlacementWithinBase, generateSpawnAgentId, isolatedWorktreeCwdPrefixes, resolveProspectiveWorkspaceIdentity } from "./spawn-identity";
|
|
79
|
+
import type { WhoamiSpawner } from "../mcp/presentation";
|
|
80
|
+
|
|
81
|
+
/** The spawn scope every transport must hold (admin `*` / `admin:*` pass; `system` bypasses). */
|
|
82
|
+
const SPAWN_SCOPE = "command:spawn";
|
|
83
|
+
const RETIRED_PROFILE_PROVISIONING_SPAWN_FIELDS = ["projectInstructions", "projectMcp", "projectSettings", "projectSkills"] as const;
|
|
84
|
+
|
|
85
|
+
/** Reject removed wire fields at the shared boundary so legacy HTTP, MCP, and direct service
|
|
86
|
+
* callers receive a migration path instead of silently changing profile policy. */
|
|
87
|
+
export function rejectRetiredProfileProvisioningSpawnFields(input: object): void {
|
|
88
|
+
const fields = RETIRED_PROFILE_PROVISIONING_SPAWN_FIELDS.filter((field) => Object.hasOwn(input, field));
|
|
89
|
+
if (fields.length > 0) {
|
|
90
|
+
throw new ValidationError(`${fields.join(", ")} can no longer be set when spawning an agent; configure this on the profile instead`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// findGitRepoRoot is the *worktree-local* walk on purpose here: workspace placement and the
|
|
95
|
+
// isolated-spawn repo assertion are about the checkout the spawn physically happens in, not
|
|
96
|
+
// about project identity. Project identity goes through canonicalRoot() (#1597) inside
|
|
97
|
+
// autoSeedProjectForCwdAsync below.
|
|
98
|
+
//
|
|
99
|
+
// #1627 — but that walk runs on THE RELAY's filesystem, which is not where the spawn happens. A
|
|
100
|
+
// relay is a hub; the orchestrator a spawn targets routinely runs on another machine. Statting a
|
|
101
|
+
// maclinux checkout from a relay on macmini2 answers about a path that is not there, so a clean
|
|
102
|
+
// non-bare clone on `main` was refused as "not a git repo" — a claim the relay was in no position
|
|
103
|
+
// to make. With the same home layout on every host it is worse than blind: it can see a DIFFERENT
|
|
104
|
+
// directory at the same absolute path and answer confidently about the wrong one. (The same
|
|
105
|
+
// blindness is why autoSeedProjectForCwdAsync mints no project for such a cwd — which is how ONE
|
|
106
|
+
// condition, "the relay cannot see the orchestrator's disk", surfaced as two unrelated-looking
|
|
107
|
+
// errors, one of them false.)
|
|
108
|
+
//
|
|
109
|
+
// So the relay refuses only what it can actually observe, and only where git agrees:
|
|
110
|
+
// 1. a host-REPORTED repo root covering the cwd (a workspace row written by the runner that
|
|
111
|
+
// launched there, i.e. `git rev-parse` run on the real filesystem) → accept; host truth
|
|
112
|
+
// outranks anything this process can guess about a path that is not its own;
|
|
113
|
+
// 2. a `.git` marker on the local walk → accept, so the single-host case pays nothing;
|
|
114
|
+
// 3. the cwd is invisible to the relay → it cannot judge. Defer: the orchestrator's
|
|
115
|
+
// resolveSpawnWorkspace re-runs this precondition against the real disk with real
|
|
116
|
+
// `git rev-parse` and throws there, so a genuine non-repo is still rejected — by the only
|
|
117
|
+
// process able to tell. The cost is that a *same-host* typo'd cwd now fails as a spawn
|
|
118
|
+
// failure instead of synchronously; refusing a real repo is the worse of the two errors,
|
|
119
|
+
// because its only fallback is workspaceMode "shared" in a live tree;
|
|
120
|
+
// 4. visible and no marker → ask `git rev-parse --is-inside-work-tree` before refusing, so
|
|
121
|
+
// layouts the marker walk cannot see (GIT_DIR-style setups) are accepted too.
|
|
122
|
+
async function assertIsolatedSpawnHasGitRepo(cwd: string): Promise<void> {
|
|
123
|
+
if (reportedRepoRootForCwd(cwd)) return;
|
|
124
|
+
if (findGitRepoRoot(cwd)) return;
|
|
125
|
+
if (!pathVisibleLocally(cwd)) return;
|
|
126
|
+
if (await isInsideGitWorkTree(cwd)) return;
|
|
127
|
+
throw isolatedSpawnGitRepoError(cwd);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function acquisitionManifestFor(projectId: string, cwd: string): {
|
|
131
|
+
mode: "project-root";
|
|
132
|
+
projectId: string;
|
|
133
|
+
rootPath: string;
|
|
134
|
+
cwd: string;
|
|
135
|
+
remoteUrl: string;
|
|
136
|
+
ref?: string;
|
|
137
|
+
sync: "ff-only";
|
|
138
|
+
} | undefined {
|
|
139
|
+
const root = rootsForProject(projectId)
|
|
140
|
+
.filter((candidate) => candidate.remoteUrl && isPathWithinBase(cwd, candidate.rootPath))
|
|
141
|
+
.sort((a, b) => b.rootPath.length - a.rootPath.length)[0];
|
|
142
|
+
if (!root?.remoteUrl) return undefined;
|
|
143
|
+
return {
|
|
144
|
+
mode: "project-root",
|
|
145
|
+
projectId,
|
|
146
|
+
rootPath: root.rootPath,
|
|
147
|
+
cwd,
|
|
148
|
+
remoteUrl: root.remoteUrl,
|
|
149
|
+
...(root.ref ? { ref: root.ref } : {}),
|
|
150
|
+
sync: "ff-only",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export async function taskLinkedRepoCwd(taskId: number, callerCwd?: string): Promise<string> {
|
|
155
|
+
const task = await getTaskDetailAsync(taskId);
|
|
156
|
+
if (!task) throw new ValidationError(`task ${taskId} not found or not a deliverable task`);
|
|
157
|
+
// #2844 — a Task created with `repo:` but no linked issue still names its project repo.
|
|
158
|
+
const repos = [...new Set([...task.issues.map((issue) => issue.repo), task.repo].filter((repo): repo is string => Boolean(repo)))];
|
|
159
|
+
if (repos.length === 0) {
|
|
160
|
+
throw new ValidationError(`task ${taskId} has no linked issue repo; pass cwd/orchestratorId explicitly`);
|
|
161
|
+
}
|
|
162
|
+
const candidates = listProjects()
|
|
163
|
+
.filter((project) => project.issueRepo && repos.includes(project.issueRepo))
|
|
164
|
+
.flatMap((project) => rootsForProject(project.id).map((root) => ({ project, root })));
|
|
165
|
+
if (candidates.length === 0) {
|
|
166
|
+
// #1627 — this refusal is real and names its own cause: with no registered root, relay has no
|
|
167
|
+
// way to turn "repo owner/name" into a checkout path on a specific host. What made it a trap
|
|
168
|
+
// was the NEXT step: following its advice (pass cwd + orchestratorId) used to hit the isolated
|
|
169
|
+
// precondition's local-filesystem probe and get told the repo was "not a git repo". That lie is
|
|
170
|
+
// fixed at assertIsolatedSpawnHasGitRepo, so the remedy below now works. Name the tool so it is
|
|
171
|
+
// mechanical rather than a step you have to know exists.
|
|
172
|
+
throw new ValidationError(`task ${taskId} links repo ${repos.join(", ")} but no Relay project root is registered for it, so relay cannot resolve a checkout path for it; pass cwd + orchestratorId explicitly, or register the checkout with relay_project_add_root`);
|
|
173
|
+
}
|
|
174
|
+
const matchingCallerRoot = callerCwd
|
|
175
|
+
? candidates
|
|
176
|
+
.filter((candidate) => isPathWithinBase(callerCwd, candidate.root.rootPath))
|
|
177
|
+
.sort((a, b) => b.root.rootPath.length - a.root.rootPath.length)[0]
|
|
178
|
+
: undefined;
|
|
179
|
+
if (matchingCallerRoot) return matchingCallerRoot.root.rootPath;
|
|
180
|
+
if (candidates.length === 1) return candidates[0]!.root.rootPath;
|
|
181
|
+
throw new ValidationError(`task ${taskId} links repo ${repos.join(", ")} with multiple registered roots; pass cwd explicitly`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* A normalized spawn request — every transport validates its own wire shape (enums,
|
|
186
|
+
* lengths) and hands the service this. Caller-context defaults (cwd, approvalMode,
|
|
187
|
+
* workspaceMode, host) are resolved INSIDE the service from `ctx`, so `undefined`
|
|
188
|
+
* here means "not explicitly set; apply the unified default", never "transport forgot".
|
|
189
|
+
*/
|
|
190
|
+
export interface SpawnAgentInput extends SelfEffortSpawnInput {
|
|
191
|
+
env?: Record<string, string>;
|
|
192
|
+
budget?: import("@humwick/sdk").DelegationBudget;
|
|
193
|
+
maxSpawnedAgents?: number;
|
|
194
|
+
provider?: SpawnProvider | "auto";
|
|
195
|
+
orchestratorId?: string;
|
|
196
|
+
cwd?: string;
|
|
197
|
+
/** Raw model/effort; resolved to a {model,providerModel,effort} payload by the service. */
|
|
198
|
+
model?: string;
|
|
199
|
+
effort?: string;
|
|
200
|
+
approvalMode?: SpawnApprovalMode;
|
|
201
|
+
workspaceMode?: WorkspaceMode;
|
|
202
|
+
lifecycle?: AgentLifecycle;
|
|
203
|
+
label?: string;
|
|
204
|
+
policyName?: string;
|
|
205
|
+
profile?: string;
|
|
206
|
+
/** #3043 — a project role (`.agent-relay/roles/<name>.md` at the default-branch commit); excludes `profile`. */
|
|
207
|
+
role?: string;
|
|
208
|
+
/** #3043 — read `role` at this landed commit (an ancestor of the default branch); #3045 the workflow run spawning a step; #3091 the base profile its step pins,
|
|
209
|
+
* the run's checkout in place of the Task's repo root, and the host to prefer for reading the role (the one the run read its workflow on). Service-only. */
|
|
210
|
+
roleSnapshot?: import("../project-roles").ProjectRole;
|
|
211
|
+
workflowCaller?: WorkflowSpawnQuota;
|
|
212
|
+
roleSha?: string; workflowRunId?: string; roleProfile?: string; taskRepoCwd?: string; roleHost?: string;
|
|
213
|
+
prompt?: string;
|
|
214
|
+
systemPromptAppend?: string;
|
|
215
|
+
/**
|
|
216
|
+
* #838 — spawn-with-task. When set, relay hydrates the worker's FIRST-TURN context FROM the
|
|
217
|
+
* durable Task #834 (intent + linked-issue spec/acceptance + recorded decisions + history +
|
|
218
|
+
* attribution) instead of the caller hand-writing a brief, records the spawn on the Task for
|
|
219
|
+
* attribution, and (when model/effort are omitted) MAY resolve them from the Task's dispatch
|
|
220
|
+
* work-shape (#839). Absent = today's behavior, byte-identical.
|
|
221
|
+
*/
|
|
222
|
+
taskId?: number;
|
|
223
|
+
/** #3327 — inline work shape for the service's own dispatch; wins over the Task's and the profile's. */
|
|
224
|
+
dispatch?: TaskDispatch;
|
|
225
|
+
/** Internal: model/effort pins applied over the work-shape decision the service makes itself (#4961). */
|
|
226
|
+
dispatchPin?: Pick<DispatchPin, "model" | "effort">;
|
|
227
|
+
pinSources?: Record<string, string>;
|
|
228
|
+
/** #3105 — the service's own dispatch prefers a provider outside these when one can run this spawn. Service-only. */
|
|
229
|
+
avoidProviders?: SpawnProvider[];
|
|
230
|
+
/**
|
|
231
|
+
* #867 — explicit escape hatch for utility/standby spawns that carry a prompt but are not
|
|
232
|
+
* dispatching deliverable work. Known utility profiles are also exempt by default.
|
|
233
|
+
*/
|
|
234
|
+
taskless?: boolean;
|
|
235
|
+
/** #838 — the latest one-line steer; the actionable instruction layered over the hydrated Task context. */
|
|
236
|
+
steer?: string;
|
|
237
|
+
/**
|
|
238
|
+
* #672 — shared host-listener MCP. When set, the runner emits a per-agent `callmux bridge`
|
|
239
|
+
* stdio entry so the agent's NON-IDENTITY MCP (tokenlean, github) flows through the
|
|
240
|
+
* orchestrator-owned shared listener instead of per-agent server processes — the session
|
|
241
|
+
* survives a listener/downstream restart, with `--cwd "$WORKTREE"` session-cwd isolation.
|
|
242
|
+
* Additive-from-empty + opt-in: absent (undefined) = OFF → the launch is byte-identical to
|
|
243
|
+
* today. Sibling to projectMcp; carried to the runner on the in-flight `agentProfile.sharedMcp`.
|
|
244
|
+
* The identity-bearing relay endpoint stays per-agent (#215), never on the shared listener.
|
|
245
|
+
*/
|
|
246
|
+
sharedMcp?: SharedMcpSpawnOverride;
|
|
247
|
+
harnessSubagents?: boolean;
|
|
248
|
+
landStrategy?: WorkspaceLandingPolicy;
|
|
249
|
+
landMechanism?: WorkspaceLandMechanism;
|
|
250
|
+
autoMerge?: WorkspaceAutoMergePolicy;
|
|
251
|
+
reviewer?: string;
|
|
252
|
+
/** Permanent explicit no-land request. Task type never implies a block; a built-in's code-owned
|
|
253
|
+
* spawn default (probe, #2982) fills it only when the caller leaves it unset. */
|
|
254
|
+
landBlocked?: boolean;
|
|
255
|
+
/** Bind the child's runner token to its launch host (#2982, replaces the host-pinned preset).
|
|
256
|
+
* Only ever adds a pin: it cannot lift one the profile or an agent-initiated spawn implies. */
|
|
257
|
+
hostPinned?: boolean;
|
|
258
|
+
/**
|
|
259
|
+
* Legacy report-back contract flag. Spawned children now report up by lineage: their
|
|
260
|
+
* turn-final response is delivered to the spawner automatically, without a reply obligation.
|
|
261
|
+
* Explicit true is preserved in the command payload for compatibility only.
|
|
262
|
+
*/
|
|
263
|
+
expectReply?: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* #1037 — per-spawn report-up verbosity (`quiet` default | `normal` | `verbose`). Persisted in
|
|
266
|
+
* the spawn command params and stamped onto the child's meta at registration, where the lineage
|
|
267
|
+
* report-up delivery gate reads it. Absent = `quiet`.
|
|
268
|
+
*/
|
|
269
|
+
reportVerbosity?: ReportVerbosity;
|
|
270
|
+
tags?: string[];
|
|
271
|
+
capabilities?: string[];
|
|
272
|
+
providerArgs?: string[];
|
|
273
|
+
/** #2773 — interactive|headless for providers that offer both; absent resolves the central default. */
|
|
274
|
+
launchMode?: LaunchMode;
|
|
275
|
+
spawnRequestId?: string;
|
|
276
|
+
/** Transport provenance label baked into the command payload (e.g. "mcp", "dashboard"). */
|
|
277
|
+
requestedVia?: string;
|
|
278
|
+
/** Provenance actor override (the dashboard records "dashboard"); falls back to caller id / actor. */
|
|
279
|
+
requestedBy?: string;
|
|
280
|
+
/** Poll for the spawned child's registration this long (ms). 0 = fire-and-forget (HTTP). */
|
|
281
|
+
waitForRegistrationMs?: number;
|
|
282
|
+
/**
|
|
283
|
+
* #635 — attach to or branch off an existing managed worktree. Relay validates existence
|
|
284
|
+
* + live-agent containment before enriching with the resolved worktreePath/workspaceId and
|
|
285
|
+
* threading to the orchestrator. User provides only `branch` + `mode`; relay fills the rest.
|
|
286
|
+
*/
|
|
287
|
+
resumeWorkspace?: {
|
|
288
|
+
branch: string;
|
|
289
|
+
mode: "attach" | "branch-from";
|
|
290
|
+
/** Relay-enriched: resolved worktree path from the DB (set during validation, not user input). */
|
|
291
|
+
worktreePath?: string;
|
|
292
|
+
/** Relay-enriched: existing workspace id so the record is updated, not duplicated (attach only). */
|
|
293
|
+
workspaceId?: string;
|
|
294
|
+
/** Relay-enriched: existing baseRef. */
|
|
295
|
+
baseRef?: string;
|
|
296
|
+
/** Relay-enriched: existing baseSha. */
|
|
297
|
+
baseSha?: string;
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* #2095 self-compact e2e test rig — force the spawned runner to REPORT a synthetic context
|
|
301
|
+
* utilization (a 0..1 fraction, or a percentage the route normalizes) so the server's real
|
|
302
|
+
* lifecycle tick drives ONE real advisory + forced clear-inject cycle. Translated here into the
|
|
303
|
+
* runner env var `AGENT_RELAY_FORCE_CONTEXT_PCT`; absent = no env var = production behavior. The
|
|
304
|
+
* strict one-shot latch + the whole compaction path live runner-side (see runner-core).
|
|
305
|
+
*/
|
|
306
|
+
forceContextPct?: number;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export interface SpawnAgentResult {
|
|
310
|
+
ok: true;
|
|
311
|
+
spawnRequestId: string;
|
|
312
|
+
orchestratorId: string;
|
|
313
|
+
placementReason: string;
|
|
314
|
+
provider: SpawnProvider;
|
|
315
|
+
/** Resolved once the child registers with this spawnRequestId; null on timeout / no wait. */
|
|
316
|
+
agentId: string | null;
|
|
317
|
+
registered: boolean;
|
|
318
|
+
harnessSubagents: boolean;
|
|
319
|
+
command: Command;
|
|
320
|
+
/** #1033 — the durable Task this spawn is bound to (explicit taskId or auto-scaffolded), when any. */
|
|
321
|
+
taskId?: number;
|
|
322
|
+
task?: { id: number; autoScaffolded: boolean; nudge: string };
|
|
323
|
+
/** The decision admitted with the command (stored at `command.params.dispatchDecision`), when one was made. */
|
|
324
|
+
dispatchDecision?: Awaited<ReturnType<typeof dispatchTaskAsync>>;
|
|
325
|
+
/** #3043 — the spawn went ahead, but the caller should know (a role read from a stale default branch). */
|
|
326
|
+
warnings?: string[];
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/** Reject when a component token's signed resource constraints disallow the target (#323). */
|
|
330
|
+
function assertResourceAllowed(ctx: AuthContext, check: Parameters<typeof isComponentAuthorizedFor>[1]): void {
|
|
331
|
+
if (ctx.component && !isComponentAuthorizedFor(ctx.component, check)) {
|
|
332
|
+
throw new McpAuthError("component token cannot access this resource");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/** True if the principal holds the spawn scope. System callers bypass; admin `*`/`admin:*` pass. */
|
|
337
|
+
export function canSpawn(ctx: AuthContext): boolean {
|
|
338
|
+
if (ctx.actor.kind === "system") return true;
|
|
339
|
+
if (ctx.scopes.includes("*") || ctx.scopes.includes("admin:*")) return true;
|
|
340
|
+
if (ctx.component) return hasComponentScope(ctx.component, SPAWN_SCOPE);
|
|
341
|
+
return ctx.scopes.includes(SPAWN_SCOPE);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
function concreteProvider(value: SpawnAgentInput["provider"]): SpawnProvider | undefined {
|
|
345
|
+
return value && value !== "auto" ? value : undefined;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function agentIdFromTaskCreator(createdBy: string | undefined): string | undefined {
|
|
349
|
+
const raw = createdBy?.trim();
|
|
350
|
+
if (!raw) return undefined;
|
|
351
|
+
const candidates = [raw, raw.startsWith("agent:") ? raw.slice("agent:".length) : undefined].filter((value): value is string => Boolean(value));
|
|
352
|
+
return candidates.find((candidate) => getAgent(candidate)) ?? undefined;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/** The agent a spawn inherits its cwd and host from: the caller, else the Task's owner seat (#2862). */
|
|
356
|
+
export function spawnLineageAgentId(ctx: AuthContext, task: Parameters<typeof resolveTaskOwnerAgentId>[0]): string | undefined {
|
|
357
|
+
return ctx.callerAgentId ?? agentIdFromTaskCreator(resolveTaskOwnerAgentId(task));
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Spawn a provider agent. Transport-agnostic: every gate + side effect lives here so the
|
|
362
|
+
* MCP and HTTP paths cannot drift. Throws `McpAuthError` (→403) on a gate denial,
|
|
363
|
+
* `ValidationError` (→400) on bad input/quota, `McpNotFoundError` (→404) on a missing
|
|
364
|
+
* orchestrator. With `waitForRegistrationMs > 0` it resolves the child's agent id by
|
|
365
|
+
* polling its registration; otherwise it returns immediately (fire-and-forget).
|
|
366
|
+
*/
|
|
367
|
+
export async function spawnAgent(input: SpawnAgentInput, ctx: AuthContext): Promise<SpawnAgentResult> {
|
|
368
|
+
rejectRetiredProfileProvisioningSpawnFields(input);
|
|
369
|
+
const budget = cleanSpawnBudget(input.budget);
|
|
370
|
+
const maxSpawnedAgents = optionalNonNegativeInt(input.maxSpawnedAgents, "maxSpawnedAgents");
|
|
371
|
+
// The authenticated caller's own agent card (when the token resolves to one). Drives both
|
|
372
|
+
// the #221 gate AND the #328/#331/#324 caller-context inheritance — one lookup, reused.
|
|
373
|
+
const governed = ctx.actor.kind === "system" ? input.workflowCaller : undefined;
|
|
374
|
+
const callerId = governed?.agentId ?? ctx.callerAgentId;
|
|
375
|
+
// Coarse capability: spawning requires command:spawn, on every transport, before any replay or resolution.
|
|
376
|
+
if (!canSpawn(ctx)) throw new McpAuthError(`spawn requires the ${SPAWN_SCOPE} scope`);
|
|
377
|
+
// #3327 — an admitted request replays its stored command and decision before any live input is read.
|
|
378
|
+
const replay = replayAdmittedSpawn(input.spawnRequestId?.trim(), ctx, callerId);
|
|
379
|
+
if (replay) return replay;
|
|
380
|
+
const callerEnv = cleanCallerSpawnEnv(input.env);
|
|
381
|
+
const caller: AgentCard | undefined = (callerId ? getAgent(callerId) : undefined) ?? undefined;
|
|
382
|
+
let autoScaffoldedTask: SpawnAgentResult["task"] | undefined;
|
|
383
|
+
let linkedTask = input.taskId !== undefined ? (await getTaskEntityAsync(input.taskId)) ?? undefined : undefined;
|
|
384
|
+
const lineageAgentId = governed?.agentId ?? spawnLineageAgentId(ctx, linkedTask);
|
|
385
|
+
const lineageAgent: AgentCard | undefined = (lineageAgentId ? getAgent(lineageAgentId) : undefined) ?? undefined;
|
|
386
|
+
const callerCwd = stringValue(caller?.meta?.cwd) ?? stringValue(lineageAgent?.meta?.cwd);
|
|
387
|
+
const taskDefaultCwd = input.taskId !== undefined && (!input.orchestratorId || input.role !== undefined) && !input.cwd
|
|
388
|
+
? input.taskRepoCwd ?? await taskLinkedRepoCwd(input.taskId, callerCwd)
|
|
389
|
+
: undefined;
|
|
390
|
+
const requestedCwd = input.cwd ?? taskDefaultCwd ?? (input.role !== undefined ? callerCwd : undefined);
|
|
391
|
+
const roleSpawn = input.roleSnapshot ? { role: input.roleSnapshot, warnings: [] } : input.role === undefined && input.roleSha === undefined ? undefined : await resolveSpawnProjectRole({ role: input.role, roleSha: input.roleSha, profile: input.profile, orchestratorId: input.orchestratorId, cwd: requestedCwd, preferHost: input.roleHost ?? caller?.machine ?? lineageAgent?.machine, allowedOrchestratorIds: ctx.constraints?.orchestrators, canSpawn: canSpawn(ctx) });
|
|
392
|
+
// #3109 — the host that read the role does not pin the spawn: an omitted orchestratorId still means capacity placement.
|
|
393
|
+
const projectRole = roleSpawn && withRoleProfile(roleSpawn.role, input.roleProfile);
|
|
394
|
+
|
|
395
|
+
const baseProfileName = projectRole?.extends ?? input.profile;
|
|
396
|
+
const profileEntry = getAgentProfile(baseProfileName ?? DEFAULT_SPAWN_PROFILE_NAME)?.value;
|
|
397
|
+
if (!profileEntry) throw new McpNotFoundError(projectRole ? `project role "${projectRole.name}" extends unknown profile "${projectRole.extends}"` : profileNotFoundMessage(input.profile));
|
|
398
|
+
// #2791 — canonicalize once at the seam: everything downstream (task scaffolding, system tags,
|
|
399
|
+
// token scopes, payload/meta/memoryIdentity profile) uses the STORED case, never the caller's.
|
|
400
|
+
const profileName = profileEntry.name;
|
|
401
|
+
const warnings = spawnWarnings(roleSpawn?.warnings, projectRole?.assets, profileName, Boolean(lineageAgentId));
|
|
402
|
+
const profileSpawnDefaults = projectRoleSpawnDefaults(builtInProfileSpawnDefaults(profileName), projectRole);
|
|
403
|
+
// Shared workspaces must remain on the caller's host because they use the live tree.
|
|
404
|
+
const autoHostAnchor = !input.orchestratorId && input.workspaceMode === "shared" && (input.dispatch ?? linkedTask?.dispatch) === undefined
|
|
405
|
+
? resolveSpawnHostAnchor({ cwd: requestedCwd, preferHost: caller?.machine ?? lineageAgent?.machine, allowedOrchestratorIds: ctx.constraints?.orchestrators, pinToPreferHost: input.workspaceMode === "shared" })
|
|
406
|
+
: undefined;
|
|
407
|
+
const launch = await resolveSpawnLaunch({
|
|
408
|
+
profile: profileName, pinSources: { ...input.pinSources, ...(!concreteProvider(input.provider) && profileProviderPin(profileEntry) ? { provider: "profile" } : {}) },
|
|
409
|
+
provider: concreteProvider(input.provider) ?? profileProviderPin(profileEntry), model: input.model, effort: input.effort, dispatchPin: input.dispatchPin,
|
|
410
|
+
dispatchShape: input.dispatch ?? linkedTask?.dispatch ?? profileSpawnDefaults.dispatch, orchestratorId: input.orchestratorId, avoidProviders: input.avoidProviders, projectRole, providerArgs: input.providerArgs,
|
|
411
|
+
anchorProviders: autoHostAnchor?.providers, taskId: input.taskId, spawnCap: { callerAgentId: caller?.id, attach: input.resumeWorkspace?.mode === "attach" },
|
|
412
|
+
});
|
|
413
|
+
const { provider: resolvedProvider, modelParams, catalog: providerCatalog } = launch;
|
|
414
|
+
const taskDispatchDecision = launch.decision;
|
|
415
|
+
const launchMode = resolveSpawnLaunchMode(resolvedProvider, input.launchMode, input.providerArgs);
|
|
416
|
+
const selfEffort = resolveSpawnSelfEffortDefault(input, resolvedProvider, modelParams.model, providerCatalog, modelParams.effort);
|
|
417
|
+
// #324 — agent/task spawns default to isolated; resolve before applying host placement policy.
|
|
418
|
+
const workspaceMode = input.workspaceMode ?? projectRole?.workspace?.mode ?? (callerId || input.taskId !== undefined || shouldAutoScaffoldTask(input, profileName) ? ("isolated" as WorkspaceMode) : undefined);
|
|
419
|
+
// Stamp the explicit block into trusted spawn params and the prospective identity; a caller cannot lift a role's floor.
|
|
420
|
+
const landBlockResolution = resolveSpawnLandBlocked({ explicit: (projectRole && profileSpawnDefaults.landBlocked) || (input.landBlocked ?? profileSpawnDefaults.landBlocked), isolated: workspaceMode === "isolated" });
|
|
421
|
+
// #3109 — a cwd Relay defaulted from the Task's repo names the repository, not a path on one host.
|
|
422
|
+
const repoSource = !input.orchestratorId && !input.cwd ? taskDefaultCwd : undefined;
|
|
423
|
+
const { orchestrator, placementReason, resolvedCwd, lazyRoot } = await selectSpawnCwdPlacement({
|
|
424
|
+
provider: resolvedProvider, orchestratorId: input.orchestratorId, requestedCwd: repoSource ? undefined : requestedCwd, repoSource,
|
|
425
|
+
resumeWorkspace: input.resumeWorkspace, caller, lineageMachine: lineageAgent?.machine,
|
|
426
|
+
callerCwd, allowedOrchestratorIds: ctx.constraints?.orchestrators,
|
|
427
|
+
shared: workspaceMode === "shared", workspaceMode, canLand: !landBlockResolution.landBlocked, model: modelParams.model, effort: modelParams.effort,
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
assertOrchestratorSupportsLaunchMode(orchestrator, launchMode, input.providerArgs);
|
|
431
|
+
|
|
432
|
+
// Resolve + validate the named agent profile server-side (was HTTP-only; the MCP path passed
|
|
433
|
+
// the name through unvalidated). Omitted profile uses Relay's spawn default so coordinator
|
|
434
|
+
// spawns still get the bundled Relay context/affordances. Explicit profile always wins.
|
|
435
|
+
let agentProfile = await withResolvedProvisioningAsync(profileEntry, resolvedProvider);
|
|
436
|
+
if (!agentProfile) throw new McpNotFoundError(profileNotFoundMessage(baseProfileName));
|
|
437
|
+
if (projectRole) agentProfile = projectRoleProfile(agentProfile, projectRole);
|
|
438
|
+
|
|
439
|
+
// Profile policy and current lineage determine the live spawn quota.
|
|
440
|
+
// Server/admin/dashboard tokens carry no caller identity → unrestricted by design.
|
|
441
|
+
const quota = liveSpawnQuota(caller, ctx.constraints);
|
|
442
|
+
const spawnQuota = callerId
|
|
443
|
+
? { parentId: callerId, maxSpawnedAgents: governed ? Number.MAX_SAFE_INTEGER : quota, ...(governed ? { workflow: governed } : {}) }
|
|
444
|
+
: undefined;
|
|
445
|
+
// #2979 — gate on the orchestrator only, never the caller token's cwdPrefixes: a coordinator may
|
|
446
|
+
// spawn into any repo under the target host's baseDir (checked in selectSpawnCwdPlacement), which
|
|
447
|
+
// is the filesystem boundary on every host. The old same-host cwd check (#1018) blocked only
|
|
448
|
+
// same-host sibling repos while the same spawn pinned elsewhere passed.
|
|
449
|
+
assertResourceAllowed(ctx, { scope: "agent:write", resource: { orchestratorId: orchestrator.id } });
|
|
450
|
+
|
|
451
|
+
// Provenance actor: the resolved caller agent when known, else the transport's label, else
|
|
452
|
+
// the raw token actor. Recorded in the command payload, the token mint, and the audit row.
|
|
453
|
+
const requestedBy = lineageAgentId ?? input.requestedBy ?? ctx.actor.id;
|
|
454
|
+
|
|
455
|
+
// #405 — durable project binding: the project whose registered root contains the spawn cwd.
|
|
456
|
+
// Stamped on both the child token and an auto-scaffolded Task row so issueless spawned work
|
|
457
|
+
// stays filterable by project.
|
|
458
|
+
// Capture the registry state BEFORE auto-seeding. Project trust must not turn an
|
|
459
|
+
// unregistered cwd into an accepted root merely because this spawn happened to
|
|
460
|
+
// create one as a side effect.
|
|
461
|
+
if (!lazyRoot) await bindSpawnProjectCheckout(resolvedCwd, orchestrator.id, lineageAgentId, profileName);
|
|
462
|
+
const delegatedProjectId = await getGateway().read("spawnTree.validateTarget", { type: "agent.spawn", source: requestedBy, target: orchestrator.agentId ?? orchestrator.id,
|
|
463
|
+
params: { ...(maxSpawnedAgents === undefined ? {} : { maxSpawnedAgents }), ...(budget ? { budget } : {}), spawnedBy: lineageAgentId, cwd: resolvedCwd, taskId: input.taskId, orchestratorId: orchestrator.id, profile: profileName, ...(input.workflowRunId ? { workflowRunId: input.workflowRunId } : {}) } });
|
|
464
|
+
if (lazyRoot && delegatedProjectId) throw new ValidationError("SPAWN_PROJECT_ROOT_MISSING: delegated launches require existing checkouts");
|
|
465
|
+
if (lazyRoot) await addProjectRootAsync(lazyRoot.projectId, lazyRoot.rootPath, { remoteUrl: lazyRoot.remoteUrl, ref: lazyRoot.ref, orchestratorId: orchestrator.id });
|
|
466
|
+
const registeredProjectBeforeAutoSeed = delegatedProjectId ? getProject(delegatedProjectId) : resolveProjectForCwd(resolvedCwd); let callerProject = registeredProjectBeforeAutoSeed;
|
|
467
|
+
try {
|
|
468
|
+
const seeded = delegatedProjectId ? undefined : await autoSeedProjectForCwdAsync(resolvedCwd, requestedBy);
|
|
469
|
+
callerProject = seeded?.project ?? callerProject;
|
|
470
|
+
if (seeded?.ingestError) {
|
|
471
|
+
console.warn(`project auto-seed failed to ingest CLAUDE.md for ${resolvedCwd}: ${seeded.ingestError.message}`);
|
|
472
|
+
}
|
|
473
|
+
} catch (err) {
|
|
474
|
+
if (!callerProject) console.warn(`project auto-seed skipped for ${resolvedCwd}: ${errMessage(err)}`);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
if (shouldAutoScaffoldTask(input, profileName)) {
|
|
478
|
+
const brief = spawnBrief(input)!;
|
|
479
|
+
linkedTask = createTaskEntity({
|
|
480
|
+
title: taskTitleFromBrief(brief, input.label),
|
|
481
|
+
intent: brief,
|
|
482
|
+
latestSteer: input.steer,
|
|
483
|
+
createdBy: requestedBy,
|
|
484
|
+
source: "spawn",
|
|
485
|
+
target: requestedBy,
|
|
486
|
+
// #889 — ephemeral spawn: done when the worker exits, not when a deliverable lands.
|
|
487
|
+
doneWhen: "agent-exit",
|
|
488
|
+
...(callerProject ? { projectId: callerProject.id, repo: callerProject.issueRepo } : {}),
|
|
489
|
+
});
|
|
490
|
+
input = { ...input, taskId: linkedTask.id };
|
|
491
|
+
autoScaffoldedTask = { id: linkedTask.id, autoScaffolded: true, nudge: AUTO_SCAFFOLD_TASK_NUDGE };
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// #838 — spawn-with-task hydration. When a taskId is given, relay assembles the worker's
|
|
495
|
+
// first-turn context FROM the durable Task (intent + linked-issue spec/acceptance + recorded
|
|
496
|
+
// decisions + history + latest steer), resolved server-side ONCE, and projects it onto the
|
|
497
|
+
// provider-appropriate channel (Claude → systemPromptAppend; Codex/other → first message).
|
|
498
|
+
// Caller prompt is not re-appended after hydration: auto-scaffolded prompt is already the Task
|
|
499
|
+
// intent, and explicit task spawns should use taskId + steer as their single instruction source.
|
|
500
|
+
// Absent (no taskId) = byte-identical to today: raw prompt/system append pass through.
|
|
501
|
+
let resolvedSystemPromptAppend = input.systemPromptAppend;
|
|
502
|
+
let resolvedPrompt = input.prompt;
|
|
503
|
+
let hydratedTask: Awaited<ReturnType<typeof hydrateTaskContext>> | undefined;
|
|
504
|
+
if (input.taskId !== undefined) {
|
|
505
|
+
hydratedTask = await hydrateTaskContext({ taskId: input.taskId, steer: input.steer });
|
|
506
|
+
const projection = projectTaskHydration(
|
|
507
|
+
resolvedProvider,
|
|
508
|
+
hydratedTask.context,
|
|
509
|
+
hydratedTask.steer,
|
|
510
|
+
input.systemPromptAppend,
|
|
511
|
+
input.taskId,
|
|
512
|
+
);
|
|
513
|
+
resolvedSystemPromptAppend = projection.systemPromptAppend;
|
|
514
|
+
resolvedPrompt = projection.prompt;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
const resolvedLabel = taskSpawnLabel(linkedTask, input.label);
|
|
518
|
+
|
|
519
|
+
// #331 — default the child's approval mode to the CALLER's, not a hardcoded `guarded` (a
|
|
520
|
+
// headless `guarded` child wedges on its first tool-call approval prompt). Explicit always
|
|
521
|
+
// wins and can NARROW a child; non-agent callers keep the safe `guarded` default.
|
|
522
|
+
const approvalMode = resolveSpawnApprovalMode(resolvedProvider, input.approvalMode, caller?.meta?.approvalMode as SpawnApprovalMode | undefined, lineageAgent?.meta?.approvalMode as SpawnApprovalMode | undefined, input.taskId !== undefined, agentProfile.permissions?.mode);
|
|
523
|
+
|
|
524
|
+
const lifecycle = input.lifecycle ?? profileSpawnDefaults.lifecycle ?? "persistent"; const systemTags = systemTagsForSpawn({ profile: profileName, requestedVia: input.requestedVia, requestedBy: input.requestedBy });
|
|
525
|
+
const acquisition = callerProject ? acquisitionManifestFor(callerProject.id, resolvedCwd) : undefined;
|
|
526
|
+
if (workspaceMode === "isolated" && (input.taskId !== undefined || input.workspaceMode === "isolated")) {
|
|
527
|
+
if (!acquisition && !orchestrator.apiUrl) await assertIsolatedSpawnHasGitRepo(resolvedCwd);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const spawnRequestId = input.spawnRequestId ?? generateSpawnRequestId();
|
|
531
|
+
const targetAgentId = generateSpawnAgentId();
|
|
532
|
+
|
|
533
|
+
// G3 GAP1 (#2073 Opus review): content review reads `resolvedCwd` off THIS relay process's own
|
|
534
|
+
// disk. That's only trustworthy when the spawn's target orchestrator actually shares this
|
|
535
|
+
// filesystem — a remote orchestrator's host can coincidentally have the same path with
|
|
536
|
+
// DIFFERENT content, so the gate is told explicitly rather than inferring from path existence.
|
|
537
|
+
if (agentProfile.sources?.project) agentProfile = applyProjectCapabilityGates(agentProfile, resolvedCwd, registeredProjectBeforeAutoSeed, { orchestratorLocal: isOrchestratorLocalToRelay(orchestrator), ...(projectRole ? { pinnedMcpCommit: projectRole.source.sha } : {}) });
|
|
538
|
+
if (projectRole) assertProjectRoleMcpTrusted(projectRole, agentProfile);
|
|
539
|
+
|
|
540
|
+
// N7 — project hooks/MCP are executable code and are gated against the project
|
|
541
|
+
// source matrix plus the pre-existing project-root registry. The helper stamps
|
|
542
|
+
// only this in-flight profile; persisted profile data is never rewritten here.
|
|
543
|
+
// #689 — shared host-listener MCP defaults on only for profiles that would otherwise receive
|
|
544
|
+
// host non-identity MCP. Per-spawn false and the global env kill-switch force direct MCP.
|
|
545
|
+
// Explicit opt-in still works for zero-host profiles.
|
|
546
|
+
agentProfile = applyDefaultSharedMcp(agentProfile, projectRole ? false : input.sharedMcp);
|
|
547
|
+
if (input.harnessSubagents !== undefined) agentProfile = { ...agentProfile, harnessSubagents: input.harnessSubagents };
|
|
548
|
+
|
|
549
|
+
// #635 — validate and enrich resumeWorkspace before dispatching to the orchestrator.
|
|
550
|
+
// The relay has the workspace DB records; the orchestrator has disk access. We do the
|
|
551
|
+
// "is this a real managed workspace and is it free?" check here, the orchestrator
|
|
552
|
+
// does the "does the worktree actually exist on disk?" check in resolveSpawnWorkspace.
|
|
553
|
+
if (input.resumeWorkspace) {
|
|
554
|
+
const { branch, mode } = input.resumeWorkspace;
|
|
555
|
+
const existingWs = listWorkspaces().find(
|
|
556
|
+
(ws) => ws.branch === branch && ws.mode === "isolated" && !TERMINAL_WORKSPACE_STATUSES.has(ws.status),
|
|
557
|
+
);
|
|
558
|
+
if (!existingWs || !existingWs.worktreePath) {
|
|
559
|
+
throw new ValidationError(`resumeWorkspace: no active isolated workspace found for branch "${branch}"`);
|
|
560
|
+
}
|
|
561
|
+
if (mode === "attach") {
|
|
562
|
+
// #2614 — attach genuinely reuses THIS worktree, so the same-host base-dir requirement is
|
|
563
|
+
// correct: keep the original-worktree check (plus the liveness guards) attach-only.
|
|
564
|
+
if (!isPathWithinBase(existingWs.worktreePath, orchestrator.baseDir)) {
|
|
565
|
+
throw new ValidationError(`resumeWorkspace: worktree "${existingWs.worktreePath}" is outside orchestrator base dir "${orchestrator.baseDir}"`);
|
|
566
|
+
}
|
|
567
|
+
if (isOwnerAlive(existingWs.ownerAgentId)) {
|
|
568
|
+
throw new ValidationError(`resumeWorkspace: workspace owner "${existingWs.ownerAgentId}" is still alive — cannot double-attach`);
|
|
569
|
+
}
|
|
570
|
+
if (worktreeInUseByLiveAgent(existingWs.worktreePath, liveAgentCwds())) {
|
|
571
|
+
throw new ValidationError(`resumeWorkspace: worktree "${existingWs.worktreePath}" is still in use by a live agent`);
|
|
572
|
+
}
|
|
573
|
+
} else {
|
|
574
|
+
// #2614 — branch-from materializes a FRESH worktree off origin/<branch> under the TARGET
|
|
575
|
+
// orchestrator's base dir, so the ORIGINAL worktree's path (on its creating host) must not
|
|
576
|
+
// gate the spawn. This relay-side target-placement check is a CHEAP EARLY HINT only; the
|
|
577
|
+
// AUTHORITATIVE containment guard is the orchestrator's materialization seam (#2614 review).
|
|
578
|
+
assertBranchFromTargetPlacementWithinBase({ baseDir: orchestrator.baseDir, repoRoot: findGitRepoRoot(resolvedCwd), spawnRequestId, label: resolvedLabel, policyName: input.policyName });
|
|
579
|
+
}
|
|
580
|
+
// Enrich with relay-resolved fields the orchestrator needs.
|
|
581
|
+
input.resumeWorkspace = {
|
|
582
|
+
branch,
|
|
583
|
+
mode,
|
|
584
|
+
worktreePath: existingWs.worktreePath,
|
|
585
|
+
workspaceId: existingWs.id,
|
|
586
|
+
baseRef: existingWs.baseRef,
|
|
587
|
+
baseSha: existingWs.baseSha,
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// #3107 — the lineage coordinator's active team; a coordinator takes its project's seat, never a dissolved id.
|
|
592
|
+
const callerTeam = lineageAgentId ? acquireCoordinatorTeam(lineageAgentId) : undefined;
|
|
593
|
+
const privateTeamId = profileName === "sub-coordinator" ? newTeamId() : undefined;
|
|
594
|
+
const launchTeamId = privateTeamId ?? callerTeam?.id;
|
|
595
|
+
|
|
596
|
+
// #409 + #463 + #557 — the instruction-sources half of the launch-assembly contract.
|
|
597
|
+
// composeSpawnInstructions is the single home that composes the prompt material handed to
|
|
598
|
+
// providers (project preamble → profile system → profile append → caller/fork context) and
|
|
599
|
+
// carries the #559 scoped-knowledge seam. Spawns without profile/project material stay
|
|
600
|
+
// byte-identical to the caller-provided systemPromptAppend.
|
|
601
|
+
const projectInstructionsEnabled = projectMemoryEnabledForProfile(profileName, agentProfile ?? undefined);
|
|
602
|
+
// #559 — resolve the child's {profile|user} memory stores READ-ONLY (never create an empty
|
|
603
|
+
// anchor just by spawning). The profile store is keyed on the resolved profile name; the user
|
|
604
|
+
// store on the spawn-chain operator (the requesting agent's owner, else the default operator).
|
|
605
|
+
// Both resolve null until someone has actually written to them, so a fresh deployment stays
|
|
606
|
+
// byte-identical. Injection of their active (promoted) entries happens in the composer.
|
|
607
|
+
const sessionUserId = actingUserIdOf(ctx);
|
|
608
|
+
// #3567 D5 — principal (= memory operator): the signed-in spawner, else the spawner agent's, else default.
|
|
609
|
+
const operatorId = sessionUserId ?? (lineageAgentId ? (await resolveAgentOwnershipAsync(lineageAgentId)).ownerUserId : DEFAULT_USER_ID);
|
|
610
|
+
// #1383/#1385 — the injected identity must describe what THIS agent will actually be, not the
|
|
611
|
+
// coordinator/no-workspace defaults the whoami DB projection falls back to before any workspace row
|
|
612
|
+
// exists. resolveProspectiveWorkspaceIdentity mirrors the orchestrator's mode resolution and pins an
|
|
613
|
+
// isolated worker's cwd AND repoRoot to its own worktree (so absolute paths it derives never edit main).
|
|
614
|
+
let gitRepoRoot = input.resumeWorkspace?.mode === "attach" ? input.resumeWorkspace.worktreePath! : findGitRepoRoot(resolvedCwd);
|
|
615
|
+
if (input.resumeWorkspace?.mode !== "attach" && (workspaceMode === "isolated" || (workspaceMode !== "shared" && input.policyName))) gitRepoRoot = await resolveSpawnRepoRoot(orchestrator, resolvedCwd, acquisition?.rootPath, workspaceMode === "isolated");
|
|
616
|
+
const wsIdentity = resolveProspectiveWorkspaceIdentity({
|
|
617
|
+
baseDir: orchestrator.baseDir,
|
|
618
|
+
sourceCwd: resolvedCwd,
|
|
619
|
+
gitRepoRoot,
|
|
620
|
+
workspaceMode,
|
|
621
|
+
policyName: input.policyName,
|
|
622
|
+
spawnRequestId,
|
|
623
|
+
label: resolvedLabel,
|
|
624
|
+
// #2033 review BLOCKER 2 — only "attach" actually runs the child IN the resumed worktree
|
|
625
|
+
// (orchestrator/src/workspace-probe/probe.ts's `resolveSpawnWorkspace`). "branch-from" creates a
|
|
626
|
+
// FRESH worktree off the resumed branch's HEAD, at the SAME deterministic path a plain isolated
|
|
627
|
+
// spawn would get (keyed on THIS spawn's own spawnRequestId, never the resumed one) — passing the
|
|
628
|
+
// resumed worktreePath here for branch-from would widen the child's token to a DIFFERENT (and
|
|
629
|
+
// possibly still-live) agent's worktree it never runs in. Omitting it for branch-from falls
|
|
630
|
+
// through to the same fresh-placement branch below that an ordinary isolated spawn takes.
|
|
631
|
+
...(input.resumeWorkspace?.mode === "attach" ? { resumeWorktreePath: input.resumeWorkspace.worktreePath } : {}),
|
|
632
|
+
resumeBranch: input.resumeWorkspace?.branch,
|
|
633
|
+
landStrategy: input.landStrategy,
|
|
634
|
+
profileLandingStrategy: agentProfile?.landingStrategy,
|
|
635
|
+
defaultLandStrategy: getLandingConfig().strategy, systemTags,
|
|
636
|
+
});
|
|
637
|
+
if (projectRole) assertProjectRoleMcpCwd(projectRole, wsIdentity.cwd);
|
|
638
|
+
const identitySpawner: WhoamiSpawner | undefined = lineageAgentId
|
|
639
|
+
? { kind: "agent", id: lineageAgentId }
|
|
640
|
+
: sessionUserId ? { kind: "user", id: sessionUserId }
|
|
641
|
+
: ctx.actor.kind === "user" ? { kind: "user", id: requestedBy } : undefined;
|
|
642
|
+
// #1608 — the SAME resolution `memoryIdentityForAgent` uses at clear/compact re-injection, so
|
|
643
|
+
// the two seams render byte-identical `MemoryIdentity.host` for the same agent.
|
|
644
|
+
const canonicalHost = resolveCanonicalHost(orchestrator.hostname) ?? orchestrator.hostname;
|
|
645
|
+
const targetIdentity = buildProspectiveSpawnIdentity({
|
|
646
|
+
agentId: targetAgentId,
|
|
647
|
+
provider: resolvedProvider,
|
|
648
|
+
label: resolvedLabel,
|
|
649
|
+
tags: input.tags ?? [], systemTags,
|
|
650
|
+
capabilities: input.capabilities ?? [],
|
|
651
|
+
machine: canonicalHost,
|
|
652
|
+
cwd: wsIdentity.cwd,
|
|
653
|
+
repoRoot: wsIdentity.repoRoot,
|
|
654
|
+
workspaceMode: wsIdentity.mode,
|
|
655
|
+
...(wsIdentity.branch ? { workspaceBranch: wsIdentity.branch } : {}),
|
|
656
|
+
lifecycle,
|
|
657
|
+
profileName,
|
|
658
|
+
modelParams,
|
|
659
|
+
approvalMode,
|
|
660
|
+
spawnRequestId,
|
|
661
|
+
policyName: input.policyName,
|
|
662
|
+
spawnedBy: lineageAgentId,
|
|
663
|
+
teamId: launchTeamId,
|
|
664
|
+
taskId: input.taskId,
|
|
665
|
+
agentProfile,
|
|
666
|
+
role: profileName === "sub-coordinator" ? "coordinator" : wsIdentity.role,
|
|
667
|
+
// #1482 — a landBlocked worker's projected capability tells the truth: capability stays high, but
|
|
668
|
+
// canLand is false (the whoami prose the reviewer sees now matches the structural enforcement).
|
|
669
|
+
canLand: wsIdentity.canLand && !landBlockResolution.landBlocked,
|
|
670
|
+
landStrategy: wsIdentity.landStrategy,
|
|
671
|
+
...(identitySpawner ? { spawner: identitySpawner } : {}),
|
|
672
|
+
});
|
|
673
|
+
// #2171 — AWAITED: the land-gates config behind the validation preamble is read from
|
|
674
|
+
// `canonicalHost`'s disk, which for a remote orchestrator means an HTTP read through that host.
|
|
675
|
+
// The synchronous composer could only serve a cached answer, so a remote host's FIRST spawn would
|
|
676
|
+
// get no validation block at all.
|
|
677
|
+
const composedInstructions = await composeSpawnInstructionsWithEventsAsync({
|
|
678
|
+
projectInstructionsEnabled,
|
|
679
|
+
...(resolvedCwd ? { cwd: resolvedCwd } : {}),
|
|
680
|
+
// The machine the agent will run on — whose `.agent-relay/land-gates.json` is the authoritative
|
|
681
|
+
// one. Not the relay's, which may hold a coincidentally same-path stale checkout. The read is
|
|
682
|
+
// recorded against the WORKTREE too (#2171 F1): an isolated agent is recorded at `wsIdentity.cwd`,
|
|
683
|
+
// so that is the cwd every later re-injection looks it up by.
|
|
684
|
+
host: canonicalHost, agentRuntimeCwd: wsIdentity.cwd,
|
|
685
|
+
// #1565 P4 — WHO this agent is, for the unified memory preamble (base → provider → host →
|
|
686
|
+
// project, audience-filtered by profile). Resolved at spawn, never asked for.
|
|
687
|
+
memoryIdentity: { operator: operatorId, provider: resolvedProvider, host: canonicalHost, profile: profileName, ...(callerProject ? { projectId: callerProject.id } : {}) },
|
|
688
|
+
...(agentProfile ? { profile: agentProfile } : {}),
|
|
689
|
+
...(lineageAgentId ? { spawnedBy: lineageAgentId } : {}), ...(selfEffort ? { selfEffort: true } : {}), ...(input.workflowRunId ? { workflowRunId: input.workflowRunId } : {}),
|
|
690
|
+
agentRelayIdentity: targetIdentity,
|
|
691
|
+
...(resolvedSystemPromptAppend ? { callerSystemPromptAppend: resolvedSystemPromptAppend } : {}),
|
|
692
|
+
});
|
|
693
|
+
const systemPromptAppend = composedInstructions.systemPromptAppend;
|
|
694
|
+
// TODO(#569): comms:delivered emitter — deferred, lives on the #575 delivery path.
|
|
695
|
+
|
|
696
|
+
// #2033 — an isolated worker's runner process actually runs inside the worktree the orchestrator
|
|
697
|
+
// creates, not `resolvedCwd` (the source checkout the spawn was requested from). Without this, an
|
|
698
|
+
// agent-initiated command (relay_schedule_timer{command}) targeting the worker's own cwd either
|
|
699
|
+
// 403s (worktree outside cwdPrefixes) or silently defaults onto the source checkout. See
|
|
700
|
+
// `isolatedWorktreeCwdPrefixes` for why widening to this server-derived path is contained.
|
|
701
|
+
const extraCwdPrefixes = isolatedWorktreeCwdPrefixes(wsIdentity, resolvedCwd);
|
|
702
|
+
|
|
703
|
+
// Child runner token. `agentInitiated` (set whenever an agent is the caller) forces a
|
|
704
|
+
// non-spawn-capable child (no grandchildren); `spawnedBy` stamps authoritative lineage the
|
|
705
|
+
// child can't forge (it registers with spawnedBy = caller, read from the signed token).
|
|
706
|
+
const env = { ...callerEnv, ...runnerRuntimeTokenEnv({
|
|
707
|
+
agentId: targetAgentId,
|
|
708
|
+
orchestratorId: orchestrator.id,
|
|
709
|
+
cwd: resolvedCwd,
|
|
710
|
+
provider: resolvedProvider,
|
|
711
|
+
label: resolvedLabel,
|
|
712
|
+
policyName: input.policyName,
|
|
713
|
+
spawnRequestId,
|
|
714
|
+
taskId: input.taskId,
|
|
715
|
+
createdBy: requestedBy,
|
|
716
|
+
// Thread the resolved profile into the mint so the spawn grant (command:spawn/shutdown +
|
|
717
|
+
// maxSpawnedAgents quota) is honored — parity with the HTTP path (agent-sessions.ts). #349
|
|
718
|
+
// dropped this when it unified the spawn service, silently un-spawning every default-spawner
|
|
719
|
+
// (P0 regression #364). For an agent caller, agentInitiated still forces a non-spawn-capable
|
|
720
|
+
// child regardless of profile (no grandchildren).
|
|
721
|
+
// #2245 — `approvalMode` is the EFFECTIVE posture resolved above (explicit, else inherited);
|
|
722
|
+
// stamped into the signed constraints so the scheduler background-command path can honor `open`
|
|
723
|
+
// without ever trusting the caller-writable `agent.meta.approvalMode`.
|
|
724
|
+
profile: profileName, approvalMode, maxSpawnedAgents,
|
|
725
|
+
...(lineageAgentId ? { spawnedBy: lineageAgentId } : {}),
|
|
726
|
+
...(launchTeamId ? { teamId: launchTeamId } : {}),
|
|
727
|
+
...(callerProject ? { projectId: callerProject.id } : {}),
|
|
728
|
+
hostPinned: input.hostPinned === true || hostPinForProfile(input.profile ?? profileName),
|
|
729
|
+
// #1259-followup — the caller's own scopes bound what the child may hold (no privilege amplification
|
|
730
|
+
// through spawn); #3110 review — they become the provenance its restarts are bounded by.
|
|
731
|
+
authority: { kind: "delegated", callerScopes: ctx.scopes, agentInitiated: Boolean(lineageAgentId) },
|
|
732
|
+
...(extraCwdPrefixes.length ? { extraCwdPrefixes } : {}),
|
|
733
|
+
}) };
|
|
734
|
+
|
|
735
|
+
// #2095 self-compact e2e test rig — thread the forced-context lever into the child runner env. Kept
|
|
736
|
+
// as the single env var the runner reads (see forceContextPctFromEnv); absent when the caller omits
|
|
737
|
+
// forceContextPct, so a normal spawn's env is byte-identical to before.
|
|
738
|
+
if (input.forceContextPct !== undefined) {
|
|
739
|
+
writeChildEnv(env, { "AGENT_RELAY_FORCE_CONTEXT_PCT": String(input.forceContextPct) });
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// #573 — no default reply obligation for spawned children. Report-up is lineage-routed from
|
|
743
|
+
// captured turn-final responses; explicit true is retained only for old clients inspecting the
|
|
744
|
+
// command payload.
|
|
745
|
+
const expectReply = input.expectReply === true;
|
|
746
|
+
|
|
747
|
+
const apiExpiryLeadTimeMs = resolvedProvider === "claude-api" && taskDispatchDecision?.factors.apiExpiry?.selected ? taskDispatchDecision.factors.apiExpiry.leadTimeMs : undefined;
|
|
748
|
+
const commandInput: CreateCommandInput = {
|
|
749
|
+
type: "agent.spawn",
|
|
750
|
+
source: "system",
|
|
751
|
+
target: orchestrator.agentId,
|
|
752
|
+
correlationId: spawnRequestId,
|
|
753
|
+
params: buildSpawnCommand({
|
|
754
|
+
provider: resolvedProvider,
|
|
755
|
+
modelParams,
|
|
756
|
+
cwd: resolvedCwd,
|
|
757
|
+
...(workspaceMode ? { workspaceMode } : {}),
|
|
758
|
+
lifecycle,
|
|
759
|
+
label: resolvedLabel,
|
|
760
|
+
agentId: targetAgentId,
|
|
761
|
+
profile: profileName,
|
|
762
|
+
agentProfile,
|
|
763
|
+
harnessSubagents: input.harnessSubagents,
|
|
764
|
+
tags: input.tags ?? [],
|
|
765
|
+
systemTags,
|
|
766
|
+
capabilities: input.capabilities ?? [],
|
|
767
|
+
approvalMode,
|
|
768
|
+
permissionMode: approvalMode,
|
|
769
|
+
providerArgs: input.providerArgs ?? [],
|
|
770
|
+
launchMode,
|
|
771
|
+
prompt: resolvedPrompt,
|
|
772
|
+
systemPromptAppend,
|
|
773
|
+
// #1062 — stash the RAW caller brief (pre-composition) so a dashboard (non-policy) restart can
|
|
774
|
+
// re-thread it as callerSystemPromptAppend and stay fresh-spawn-identical instead of dropping it.
|
|
775
|
+
...(resolvedSystemPromptAppend ? { callerSystemPromptAppend: resolvedSystemPromptAppend } : {}),
|
|
776
|
+
relayInjectionEvents: composedInstructions.relayInjectionEvents,
|
|
777
|
+
// #1625 — stamp the memory identity this spawn composed from into immutable params. The host
|
|
778
|
+
// cell was previously re-derived from the agent's raw reported `machine` instead of the
|
|
779
|
+
// orchestrator hostname resolved here. Later seams replay this identity; #2134 derives
|
|
780
|
+
// Project memory inclusion from its current profile rather than persisting an override.
|
|
781
|
+
...(composedInstructions.memorySeam ? { memorySeam: composedInstructions.memorySeam } : {}),
|
|
782
|
+
landStrategy: input.landStrategy,
|
|
783
|
+
landMechanism: input.landMechanism,
|
|
784
|
+
autoMerge: input.autoMerge,
|
|
785
|
+
reviewer: input.reviewer,
|
|
786
|
+
// #1482 — stamp the server-resolved no-land flag into the IMMUTABLE spawn command params. The
|
|
787
|
+
// workspace row derives ws.metadata.landBlocked from here on every heartbeat (a trusted read
|
|
788
|
+
// that an agent-reported heartbeat can't clear), making the guardrail durable + multi-host-safe.
|
|
789
|
+
...(landBlockResolution.landBlocked ? { landBlocked: true, landBlockedReason: landBlockResolution.reason } : {}),
|
|
790
|
+
selfEffort,
|
|
791
|
+
taskId: input.taskId,
|
|
792
|
+
resumeWorkspace: input.resumeWorkspace,
|
|
793
|
+
acquisition,
|
|
794
|
+
...(expectReply ? { expectReply } : {}),
|
|
795
|
+
reportVerbosity: resolveReportVerbosity({ reportVerbosity: optionalEnum(input.reportVerbosity, "reportVerbosity", REPORT_VERBOSITIES), profile: profileName, budget, canSpawn: spawnGrantForProfile(profileName).canSpawn }),
|
|
796
|
+
policyName: input.policyName,
|
|
797
|
+
...(projectRole ? { projectRole: projectRoleProvenance(projectRole) } : {}), workflowRunId: input.workflowRunId,
|
|
798
|
+
spawnRequestId,
|
|
799
|
+
env,
|
|
800
|
+
requestedBy,
|
|
801
|
+
requestedVia: input.requestedVia,
|
|
802
|
+
requestedAt: Date.now(),
|
|
803
|
+
orchestratorId: orchestrator.id,
|
|
804
|
+
// #308 — stamp the spawning parent so a FAILED agent.spawn command (child never registers,
|
|
805
|
+
// so there's no agent row to resolve `spawnedBy` from) can be routed back to it.
|
|
806
|
+
// #3567 — registration writes agent_ownership from this; the default admin needs no row.
|
|
807
|
+
extra: { ...(maxSpawnedAgents === undefined ? {} : { maxSpawnedAgents }), ...(operatorId !== DEFAULT_USER_ID ? { principalUserId: operatorId } : {}), ...(budget ? { budget } : {}), ...(privateTeamId ? { privateTeamId } : {}), ...(lineageAgentId ? { spawnedBy: lineageAgentId } : {}), ...(apiExpiryLeadTimeMs !== undefined ? { apiExpiryLeadTimeMs } : {}), ...(taskDispatchDecision ? { dispatchDecision: taskDispatchDecision } : {}) },
|
|
808
|
+
}),
|
|
809
|
+
};
|
|
810
|
+
// #2694/#2702 — the host agent cap is enforced at the command seam, atomically with the INSERT.
|
|
811
|
+
// Attach-resume is exempt: the worktree already lives on that host, so there is nowhere else to go.
|
|
812
|
+
const hostCap = {
|
|
813
|
+
...(input.resumeWorkspace?.mode === "attach" ? { exempt: "attach-resume" as const } : {}),
|
|
814
|
+
...(callerId ? { callerAgentId: callerId } : {}),
|
|
815
|
+
};
|
|
816
|
+
const reserved = await createSpawnCommandWithinQuotaAsync(commandInput, spawnQuota, hostCap, requestedBy, ctx.constraints?.projectId);
|
|
817
|
+
if (!reserved.command) {
|
|
818
|
+
throw new ValidationError(`spawn quota reached (${reserved.occupiedSlots}/${spawnQuota?.maxSpawnedAgents} live or in-flight children) — shut one down or wait for one to exit`);
|
|
819
|
+
}
|
|
820
|
+
// #3327 — a concurrent attempt lost the admission race: return the winner's command and decision.
|
|
821
|
+
if (reserved.replayed) return spawnReplay(reserved.command, reserved.registeredAgentId ? getAgent(reserved.registeredAgentId) ?? undefined : undefined);
|
|
822
|
+
const command: Command = reserved.command;
|
|
823
|
+
if (privateTeamId) await (await import("./workflow-supervisor")).ensureSupervisor();
|
|
824
|
+
emitCommandEvent(command, "command.requested");
|
|
825
|
+
|
|
826
|
+
// ONE spawn-request audit row, identical across transports (the MCP path previously emitted
|
|
827
|
+
// none of its own — only the generic tool-call telemetry; the HTTP path emitted one).
|
|
828
|
+
// Command dispatch is already durable. A writer ACK-loss may reject even though this audit commit
|
|
829
|
+
// landed; never turn that post-dispatch uncertainty into a retryable spawn failure (double-spawn).
|
|
830
|
+
try {
|
|
831
|
+
await createActivityEventAsync({
|
|
832
|
+
clientId: `server-agent-spawn-${resolvedProvider}-${command.id}`,
|
|
833
|
+
kind: "state",
|
|
834
|
+
title: `${resolvedProvider} agent spawn requested (via ${orchestrator.id})`,
|
|
835
|
+
body: resolvedCwd,
|
|
836
|
+
meta: orchestrator.id,
|
|
837
|
+
icon: "ti-plus",
|
|
838
|
+
view: "agents",
|
|
839
|
+
metadata: {
|
|
840
|
+
provider: resolvedProvider,
|
|
841
|
+
orchestratorId: orchestrator.id,
|
|
842
|
+
approvalMode,
|
|
843
|
+
launchMode: launchMode ?? null,
|
|
844
|
+
lifecycle,
|
|
845
|
+
workspaceMode: workspaceMode ?? null,
|
|
846
|
+
label: resolvedLabel ?? null,
|
|
847
|
+
commandId: command.id,
|
|
848
|
+
spawnRequestId,
|
|
849
|
+
requestedVia: input.requestedVia ?? null,
|
|
850
|
+
actor: requestedBy,
|
|
851
|
+
actorKind: ctx.actor.kind,
|
|
852
|
+
},
|
|
853
|
+
});
|
|
854
|
+
} catch (error) { console.error("spawn activity audit failed after command dispatch", error); }
|
|
855
|
+
|
|
856
|
+
// #838 — record the spawn on the Task FOR attribution, keyed on spawnRequestId. Done now (not
|
|
857
|
+
// after registration) so even a fire-and-forget spawn leaves the durable hook #831 reads to
|
|
858
|
+
// drive one-shot reap. Best-effort: an attribution write never fails the spawn.
|
|
859
|
+
if (input.taskId !== undefined) {
|
|
860
|
+
try {
|
|
861
|
+
// The audit above crossed the writer boundary. Re-read the Task before its follow-on
|
|
862
|
+
// attribution so a concurrent steer edit cannot be written back as this spawn's snapshot.
|
|
863
|
+
const currentTask = await getTaskEntityAsync(input.taskId);
|
|
864
|
+
// #3327 — the Task's decision is the admitted one, whoever planned it.
|
|
865
|
+
if (taskDispatchDecision) {
|
|
866
|
+
await recordTaskEntityDispatchDecisionAsync(input.taskId, {
|
|
867
|
+
decision: taskDispatchDecision,
|
|
868
|
+
source: input.dispatchPin ? "dispatch" : "spawn",
|
|
869
|
+
actor: requestedBy,
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
await recordTaskSpawnRequestedAsync(input.taskId, {
|
|
873
|
+
spawnRequestId,
|
|
874
|
+
provider: resolvedProvider,
|
|
875
|
+
requestedBy,
|
|
876
|
+
...(currentTask?.latestSteer ? { steer: currentTask.latestSteer } : {}),
|
|
877
|
+
});
|
|
878
|
+
autoSubscribeTaskCoordinator(requestedBy, input.taskId);
|
|
879
|
+
} catch (err) {
|
|
880
|
+
console.warn(`task ${input.taskId} spawn attribution skipped: ${errMessage(err)}`);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// #255 — resolve the spawned child's id once it registers back to THIS relay (same DB) with
|
|
885
|
+
// meta.spawnRequestId set. Bounded poll; 0 opts out (pure fire-and-forget, e.g. the HTTP 202).
|
|
886
|
+
const waitMs = Math.min(input.waitForRegistrationMs ?? 0, 30_000);
|
|
887
|
+
const agentId = waitMs > 0 ? await waitForSpawnedAgent(spawnRequestId, waitMs) : null;
|
|
888
|
+
|
|
889
|
+
return {
|
|
890
|
+
ok: true,
|
|
891
|
+
spawnRequestId,
|
|
892
|
+
orchestratorId: orchestrator.id,
|
|
893
|
+
placementReason,
|
|
894
|
+
provider: resolvedProvider,
|
|
895
|
+
agentId,
|
|
896
|
+
registered: agentId !== null,
|
|
897
|
+
harnessSubagents: agentProfile.harnessSubagents === true,
|
|
898
|
+
command,
|
|
899
|
+
...(input.taskId !== undefined ? { taskId: input.taskId } : {}),
|
|
900
|
+
...(autoScaffoldedTask ? { task: autoScaffoldedTask } : {}),
|
|
901
|
+
...(taskDispatchDecision ? { dispatchDecision: taskDispatchDecision } : {}),
|
|
902
|
+
...(warnings.length ? { warnings } : {}),
|
|
903
|
+
};
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
/**
|
|
907
|
+
* #734 — strip the heavy resolved-provisioning file CONTENTS from a spawn command before
|
|
908
|
+
* echoing it back to the CALLER. `withResolvedProvisioning` inlines every bundled plugin/skill
|
|
909
|
+
* file under `params.agentProfile.provisioning.{skills,plugins}[].files[].content` (~90KB for a
|
|
910
|
+
* bundled-plugin profile like default-relay), which blows the MCP result token cap and hard-errors
|
|
911
|
+
* the call. The ORCHESTRATOR-bound command — dispatched on the command bus inside `spawnAgent`
|
|
912
|
+
* (the row in `listCommands`, not this returned object) — keeps the full bytes so it can still
|
|
913
|
+
* materialize the plugins on the target host. This returns a structural summary (paths + byte
|
|
914
|
+
* counts, contents dropped) leaving the dispatched command untouched (the mutated path is
|
|
915
|
+
* shallow-cloned, never mutated in place).
|
|
916
|
+
*/
|
|
917
|
+
export function summarizeSpawnCommandForCaller(command: Command): Command {
|
|
918
|
+
// #T764 F2 — the spawn RESPONSE (HTTP agents-spawn, MCP tools-spawn verbose, team-template tools)
|
|
919
|
+
// must never echo the child's live AGENT_RELAY_TOKEN back to the caller. Redact secret-shaped env
|
|
920
|
+
// values first — same masking the commands read path applies to a non-orchestrator caller (#1300).
|
|
921
|
+
// The DISPATCHED command row (the one the orchestrator polls) is untouched: redactCommandSecrets
|
|
922
|
+
// deep-copies params, and we only ever return the copy.
|
|
923
|
+
const redacted = redactCommandSecrets(command);
|
|
924
|
+
const profile = redacted.params.agentProfile;
|
|
925
|
+
if (!isRecord(profile) || !isRecord(profile.provisioning)) return redacted;
|
|
926
|
+
const provisioning = profile.provisioning;
|
|
927
|
+
const stripContents = (assets: unknown): unknown => {
|
|
928
|
+
if (!Array.isArray(assets)) return assets;
|
|
929
|
+
return assets.map((asset) => {
|
|
930
|
+
if (!isRecord(asset) || !Array.isArray(asset.files)) return asset;
|
|
931
|
+
return {
|
|
932
|
+
...asset,
|
|
933
|
+
files: asset.files.map((file) =>
|
|
934
|
+
isRecord(file) && typeof file.content === "string"
|
|
935
|
+
? { path: file.path, contentBytes: file.content.length }
|
|
936
|
+
: file,
|
|
937
|
+
),
|
|
938
|
+
};
|
|
939
|
+
});
|
|
940
|
+
};
|
|
941
|
+
return {
|
|
942
|
+
...redacted,
|
|
943
|
+
params: {
|
|
944
|
+
...redacted.params,
|
|
945
|
+
agentProfile: {
|
|
946
|
+
...profile,
|
|
947
|
+
provisioning: {
|
|
948
|
+
...provisioning,
|
|
949
|
+
skills: stripContents(provisioning.skills),
|
|
950
|
+
plugins: stripContents(provisioning.plugins),
|
|
951
|
+
hooks: stripContents(provisioning.hooks ?? []),
|
|
952
|
+
},
|
|
953
|
+
},
|
|
954
|
+
},
|
|
955
|
+
};
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
/** Poll the agents table for the child that registers with this spawnRequestId (#255). */
|
|
959
|
+
async function waitForSpawnedAgent(spawnRequestId: string, timeoutMs: number, pollMs = 300): Promise<string | null> {
|
|
960
|
+
const deadline = Date.now() + timeoutMs;
|
|
961
|
+
for (;;) {
|
|
962
|
+
const match = listAgents().find((a) => a.meta?.spawnRequestId === spawnRequestId);
|
|
963
|
+
if (match) return match.id;
|
|
964
|
+
if (Date.now() >= deadline) return null;
|
|
965
|
+
await new Promise<void>((resolve) => setTimeout(resolve, Math.min(pollMs, Math.max(0, deadline - Date.now()))));
|
|
966
|
+
}
|
|
967
|
+
}
|