@humwick/server 0.130.1 → 0.130.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/bundled/prompts/manifest.json +1 -0
- package/bundled/prompts/task.hydration.md +1 -1
- package/bundled/roles/builder.md +1 -1
- package/docs/guides/sub-coordinators.md +12 -5
- package/docs/guides/tools-administration.md +4 -0
- package/docs/guides/tools-coordination.md +2 -0
- package/docs/guides/tools-tasks.md +8 -0
- package/docs/guides/workflows.md +74 -0
- package/docs/openapi.json +486 -4
- package/package.json +10 -18
- package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
- package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
- package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
- package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
- package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
- package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
- package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
- package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
- package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
- package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
- package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
- package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
- package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
- package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
- package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
- package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
- package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
- package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
- package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
- package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
- package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
- package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
- package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
- package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
- package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
- package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
- package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
- package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
- package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
- package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
- package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
- package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
- package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
- package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
- package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
- package/public/assets/index-CqqgOI5R.js +15 -0
- package/public/assets/index-MYAIwYTX.css +2 -0
- package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
- package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
- package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
- package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
- package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
- package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
- package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
- package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
- package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
- package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
- package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
- package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
- package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
- package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
- package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
- package/public/assets/projects-M_m6AHws.js +2 -0
- package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
- package/public/assets/provider-display-BEeLXC_D.js +2 -0
- package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
- package/public/assets/run-card-Dt4I4jaP.js +2 -0
- package/public/assets/scroll-text-BKXS1ahr.js +2 -0
- package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
- package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
- package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
- package/public/assets/shipping-H6gzEeZB.js +2 -0
- package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
- package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
- package/public/assets/store-DKPDIZBe.js +9 -0
- package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
- package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
- package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
- package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
- package/public/assets/token-estimate-Co-Jdphh.js +2 -0
- package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
- package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
- package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
- package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
- package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
- package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
- package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
- package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
- package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
- package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
- package/public/cosmos.html +4 -4
- package/public/index.html +31 -29
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
- package/runner/src/adapters/claude-effort.ts +2 -4
- package/runner/src/adapters/claude-headless.ts +1 -1
- package/runner/src/adapters/claude-launch-exit.ts +26 -0
- package/runner/src/adapters/claude-session-probe.ts +1 -1
- package/runner/src/adapters/claude-tmux.ts +38 -10
- package/runner/src/adapters/claude.ts +28 -75
- package/runner/src/adapters/codex-launch-config.ts +4 -5
- package/runner/src/adapters/codex.ts +1 -1
- package/runner/src/adapters/opencode-provider.ts +7 -22
- package/runner/src/adapters/opencode.ts +4 -4
- package/runner/src/adapters/provider-quota-harvest.ts +20 -71
- package/runner/src/agent-runner/credentials.ts +42 -12
- package/runner/src/agent-runner/inbox.ts +27 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
- package/runner/src/agent-runner/liveness-exchange.ts +104 -0
- package/runner/src/bin/claude.ts +4 -0
- package/runner/src/bin/codex.ts +4 -0
- package/runner/src/bin/opencode.ts +4 -0
- package/runner/src/claude-system-prompt.ts +49 -0
- package/runner/src/index.ts +5 -2
- package/runner/src/launch-assembly.ts +14 -10
- package/runner/src/profile-home.ts +1 -1
- package/runner/src/project-instructions.ts +2 -2
- package/runner/src/provider-command.ts +18 -0
- package/runner/src/provider-setup.ts +35 -0
- package/runner/src/providers.ts +2 -1
- package/runner/src/runner-core.ts +32 -38
- package/runner/src/runner-helpers.ts +0 -8
- package/runner/src/session-scratch.ts +6 -2
- package/runner/src/spawn-input.ts +2 -1
- package/runner/src/test-run-dedup.ts +59 -56
- package/runner/test-support/provisioning-context.ts +4 -2
- package/runner/test-support/runner-harness.ts +2 -1
- package/scripts/cd-config.ts +8 -0
- package/scripts/gate-run-lease.ts +10 -7
- package/scripts/gate.sh +5 -1
- package/scripts/steward-policy-cleanup.ts +2 -2
- package/src/agent-authz.ts +2 -2
- package/src/agent-drive-arbiter.ts +3 -8
- package/src/agent-exit-cleanup-async.ts +2 -2
- package/src/agent-exit-cleanup.ts +23 -19
- package/src/agent-lifecycle-events.ts +112 -85
- package/src/agent-ref.ts +3 -2
- package/src/agent-status-events.ts +43 -14
- package/src/auth/password.ts +4 -3
- package/src/auth/session-refresh.ts +1 -1
- package/src/auth/session.test-fixture.ts +2 -2
- package/src/auth/session.ts +7 -7
- package/src/automations/crud.ts +8 -81
- package/src/automations/dispatch.ts +33 -58
- package/src/automations/index.ts +1 -1
- package/src/automations/persistence.ts +65 -0
- package/src/automations/precheck.ts +18 -16
- package/src/automations/read-async.ts +11 -0
- package/src/automations/reconcile.ts +30 -39
- package/src/automations/storage.ts +33 -10
- package/src/automations/write-async.ts +33 -0
- package/src/branch-land-notice.ts +93 -0
- package/src/branch-landed.ts +31 -98
- package/src/bus.ts +40 -39
- package/src/cd-deploy-notify.ts +32 -4
- package/src/cd-host-lag-notify.ts +7 -6
- package/src/ci/incidents.ts +2 -2
- package/src/ci/monitor.ts +5 -8
- package/src/ci/notifications.ts +4 -4
- package/src/ci/root-missing.ts +4 -9
- package/src/ci/transition-notify.ts +12 -44
- package/src/claude-app/oauth-http.ts +3 -3
- package/src/cli/cd-pauses.ts +19 -0
- package/src/cli/orchestrator.ts +1 -1
- package/src/cli/state.ts +2 -19
- package/src/cli/task-edit.ts +22 -0
- package/src/cli/task.ts +3 -1
- package/src/cli/workflow.ts +19 -4
- package/src/commands-db.ts +7 -7
- package/src/commands-write.ts +8 -0
- package/src/compaction-watch.ts +10 -8
- package/src/config-store-write.ts +13 -1
- package/src/config-store.ts +25 -14
- package/src/config.ts +4 -11
- package/src/connectors.ts +10 -8
- package/src/context-advisory.ts +22 -21
- package/src/db/activity-async.ts +6 -1
- package/src/db/activity-write-ops.ts +12 -1
- package/src/db/activity.ts +1 -14
- package/src/db/agent-action-write.ts +36 -0
- package/src/db/agent-control-async.ts +9 -0
- package/src/db/agent-control-write.ts +49 -0
- package/src/db/agent-effort-observe.ts +22 -0
- package/src/db/agent-meta.ts +14 -3
- package/src/db/agent-search.ts +1 -15
- package/src/db/agents-async.ts +59 -9
- package/src/db/agents-write-ops.ts +12 -3
- package/src/db/agents.ts +95 -65
- package/src/db/auth-identities.ts +2 -2
- package/src/db/automation-read-ops.ts +11 -0
- package/src/db/automation-write-ops.ts +46 -0
- package/src/db/blackboard.ts +2 -2
- package/src/db/browser-session-write.ts +32 -0
- package/src/db/bus-outbox-write-ops.ts +3 -1
- package/src/db/checkout-refresh-schema.ts +47 -0
- package/src/db/checkout-refresh.ts +5 -5
- package/src/db/ci-incidents-async.ts +5 -5
- package/src/db/ci-incidents-write-ops.ts +2 -2
- package/src/db/command-agent-profile-backfill.ts +39 -0
- package/src/db/command-agent-profiles.ts +5 -1
- package/src/db/command-retention.ts +126 -0
- package/src/db/command-row.ts +10 -2
- package/src/db/commands-list-query.ts +2 -0
- package/src/db/commands-planner-stats.test-fixture.ts +8 -0
- package/src/db/commands-read-ops.ts +16 -0
- package/src/db/commands-spawn-read.ts +1 -1
- package/src/db/config-store-write-ops.ts +7 -2
- package/src/db/connection.ts +1 -182
- package/src/db/context-carry-write.ts +74 -0
- package/src/db/continuation-archives-async.ts +5 -0
- package/src/db/continuation-archives-write-ops.ts +7 -0
- package/src/db/continuations.ts +6 -6
- package/src/db/db-error-registry.ts +12 -0
- package/src/db/db-writer-worker.ts +8 -1
- package/src/db/deploy-events-async.ts +1 -0
- package/src/db/deploy-events-read-ops.ts +2 -1
- package/src/db/deploy-events.ts +35 -4
- package/src/db/gateway.ts +26 -133
- package/src/db/history-retention-ops.ts +13 -0
- package/src/db/hosts-registration.ts +10 -2
- package/src/db/hosts.ts +9 -6
- package/src/db/inbox-async.ts +2 -2
- package/src/db/inbox-read-ops.ts +1 -1
- package/src/db/inbox.ts +9 -17
- package/src/db/index.ts +2 -0
- package/src/db/integrations-async.ts +8 -0
- package/src/db/integrations-ops.ts +15 -0
- package/src/db/integrations.ts +15 -21
- package/src/db/issue-associations.ts +2 -2
- package/src/db/issue-lifecycle.ts +3 -4
- package/src/db/issue-refs-async.ts +23 -0
- package/src/db/issue-refs-read-ops.ts +6 -0
- package/src/db/issue-refs-write-ops.ts +29 -0
- package/src/db/issue-refs.ts +15 -16
- package/src/db/kernel-event-log-schema.ts +2 -0
- package/src/db/land-boundaries.ts +51 -5
- package/src/db/land-gate-attestations.ts +2 -2
- package/src/db/landing-receipts.ts +2 -2
- package/src/db/lifecycle-context-write.ts +5 -0
- package/src/db/lifecycle-tail-async.ts +76 -0
- package/src/db/lifecycle-tail-write-ops.ts +62 -0
- package/src/db/lifecycle-write-window.ts +2 -1
- package/src/db/lineage-pair-dedupe-sql.ts +3 -3
- package/src/db/long-running-work.ts +2 -2
- package/src/db/main-connection-mode.ts +11 -0
- package/src/db/main-connection-writes.ts +41 -2
- package/src/db/maintenance-job-reconcile.ts +61 -0
- package/src/db/maintenance-job-runs-async.ts +14 -0
- package/src/db/maintenance-job-write-ops.ts +9 -0
- package/src/db/maintenance-pauses.ts +2 -2
- package/src/db/mappers.ts +2 -14
- package/src/db/merge-lease.ts +1 -15
- package/src/db/message-send.ts +4 -0
- package/src/db/messages.ts +31 -25
- package/src/db/migrations.ts +25 -16
- package/src/db/notification-write-ops.ts +19 -0
- package/src/db/operator-answer-write.ts +19 -0
- package/src/db/orchestrators.ts +14 -76
- package/src/db/pairs-async.ts +22 -1
- package/src/db/pairs-write-ops.ts +8 -3
- package/src/db/pairs.ts +42 -61
- package/src/db/plan-dispatch-schema.ts +5 -1
- package/src/db/plan-ready-notices.ts +43 -0
- package/src/db/plan-tools-include-migration.ts +36 -0
- package/src/db/plans-write-ops.ts +2 -0
- package/src/db/presence-buffer.ts +5 -0
- package/src/db/presence-loop.ts +18 -23
- package/src/db/presence-write.ts +0 -6
- package/src/db/project-entries-async.ts +14 -0
- package/src/db/project-entries-read-ops.ts +5 -1
- package/src/db/project-entries-write-ops.ts +8 -0
- package/src/db/project-entries.ts +15 -12
- package/src/db/project-journal.ts +2 -2
- package/src/db/project-profile-instructions.ts +50 -0
- package/src/db/project-trust-approvals.ts +2 -2
- package/src/db/prompt-templates.ts +4 -4
- package/src/db/prompt-versions.ts +9 -2
- package/src/db/provider-config-history.ts +8 -3
- package/src/db/provider-model-seed.ts +34 -0
- package/src/db/read-op-marshaling-fixtures.ts +23 -0
- package/src/db/read-ops.ts +8 -0
- package/src/db/retention.ts +13 -2
- package/src/db/review-publish-write.ts +8 -0
- package/src/db/routing-policy.ts +2 -3
- package/src/db/runtime-admin-async.ts +19 -0
- package/src/db/runtime-admin-write-ops.ts +36 -0
- package/src/db/runtime-tail-async.ts +288 -0
- package/src/db/runtime-tail-write-ops.ts +97 -0
- package/src/db/schema.ts +13 -4
- package/src/db/spawn-budget.ts +5 -0
- package/src/db/spawn-delegation-state.ts +11 -4
- package/src/db/spawn-delegation.ts +1 -11
- package/src/db/sql-audit-indexes.ts +3 -0
- package/src/db/stats-async.ts +9 -6
- package/src/db/task-entity.ts +28 -6
- package/src/db/task-list.ts +3 -1
- package/src/db/tasks.ts +1 -17
- package/src/db/team-claim-policy.ts +60 -0
- package/src/db/teams-async.ts +4 -0
- package/src/db/teams-write-ops.ts +4 -0
- package/src/db/terminal-events.ts +15 -0
- package/src/db/timer-cutover-bodies.ts +292 -0
- package/src/db/timer-cutover-core.ts +37 -278
- package/src/db/timer-cutover-state.ts +40 -0
- package/src/db/timer-cutover-write-ops.ts +1 -40
- package/src/db/timer-ingress.ts +7 -1
- package/src/db/token-db-write-ops.ts +19 -0
- package/src/db/token-standing-async.ts +12 -0
- package/src/db/token-standing.ts +21 -20
- package/src/db/token-usage-retention.ts +33 -0
- package/src/db/token-usage-write-ops.ts +1 -1
- package/src/db/token-usage.ts +4 -1
- package/src/db/user-invites-async.ts +13 -0
- package/src/db/user-invites.ts +3 -3
- package/src/db/users.ts +14 -6
- package/src/db/workflow-contact.ts +1 -1
- package/src/db/workflow-task-read-ops.ts +30 -0
- package/src/db/workspaces.ts +8 -5
- package/src/db/write-ops.ts +37 -12
- package/src/db/writer-fault-seam.ts +2 -9
- package/src/db/writer-fault-test-ops.ts +18 -0
- package/src/db/writer-gateway.ts +58 -56
- package/src/dev.ts +8 -3
- package/src/dispatch-availability.ts +10 -6
- package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
- package/src/event-loop-lag.ts +4 -2
- package/src/event-loop-yield.ts +2 -2
- package/src/events.ts +10 -8
- package/src/host/disk-alert.ts +121 -0
- package/src/host-provider-store.ts +5 -4
- package/src/hub-metrics-report.ts +5 -1
- package/src/hub-metrics.ts +38 -18
- package/src/injection-sweep-pacing.ts +6 -8
- package/src/land-gate-notifications.ts +11 -10
- package/src/land-gate-queue-progress.ts +3 -3
- package/src/land-settle-dispatch.ts +52 -92
- package/src/lifecycle-context-pressure.ts +11 -10
- package/src/lifecycle-manager.ts +107 -100
- package/src/maintenance/breaker.ts +18 -16
- package/src/maintenance/cd-watcher.ts +3 -3
- package/src/maintenance/checkout-refresh.ts +18 -1
- package/src/maintenance/critical-job-watchdog.ts +19 -20
- package/src/maintenance/events.ts +3 -3
- package/src/maintenance/history-retention-job.ts +30 -0
- package/src/maintenance/index.ts +1 -0
- package/src/maintenance/jobs.ts +32 -69
- package/src/maintenance/long-running-work.ts +3 -1
- package/src/maintenance/offline-agent-prune-job.ts +28 -0
- package/src/maintenance/orphaned-sessions.ts +5 -4
- package/src/maintenance/pauses.ts +4 -10
- package/src/maintenance/plan-ready-notice-job.ts +71 -0
- package/src/maintenance/scheduler.ts +98 -137
- package/src/maintenance/stalled-delivery-pager.ts +10 -9
- package/src/maintenance/teams.ts +19 -30
- package/src/maintenance/workspaces.ts +18 -28
- package/src/managed-policy-escalation.ts +7 -7
- package/src/managed-policy.ts +32 -28
- package/src/managed-provider-gate.ts +5 -4
- package/src/managed-spawn-reservation.ts +5 -4
- package/src/mcp/index.ts +12 -9
- package/src/mcp/output-descriptions.ts +8 -8
- package/src/mcp/presentation.ts +6 -5
- package/src/mcp/project-profile-instructions.ts +32 -0
- package/src/mcp/runtime-output.ts +6 -1
- package/src/mcp/self-care-visibility.ts +2 -2
- package/src/mcp/spawn-targets-matrix.ts +10 -1
- package/src/mcp/tool-groups.ts +4 -3
- package/src/mcp/tool-roles.ts +81 -0
- package/src/mcp/tools-spawn.ts +4 -3
- package/src/mcp/tools-workspace.ts +1 -1
- package/src/mcp-agent-action.ts +1 -2
- package/src/mcp-blackboard-tools.ts +6 -5
- package/src/mcp-decision-tools.ts +7 -7
- package/src/mcp-egress-tools.ts +10 -9
- package/src/mcp-issue-activity-tools.ts +2 -2
- package/src/mcp-issue-association-tools.ts +4 -4
- package/src/mcp-issue-ref-tools.ts +13 -12
- package/src/mcp-maintenance-tools.ts +2 -2
- package/src/mcp-merge-tools.ts +5 -5
- package/src/mcp-notification-subscription-tools.ts +14 -15
- package/src/mcp-output-levels.test-fixture.ts +1 -1
- package/src/mcp-profile-trust-tools.ts +5 -5
- package/src/mcp-project-journal-tools.ts +4 -12
- package/src/mcp-project-tools.ts +17 -18
- package/src/mcp-provider-catalog.ts +2 -2
- package/src/mcp-routing-policy-tools.ts +3 -2
- package/src/mcp-task-tools.ts +11 -5
- package/src/mcp-team-template-tools.ts +3 -3
- package/src/mcp-team-tools.ts +6 -6
- package/src/mcp-workflow-tools.ts +13 -4
- package/src/memory-area-injection.ts +13 -12
- package/src/memory-boundary-capture.ts +6 -6
- package/src/memory-injection.ts +45 -43
- package/src/merge-pause-maintenance.ts +5 -4
- package/src/notification-router.ts +44 -17
- package/src/notification-types.ts +2 -1
- package/src/notify.ts +5 -5
- package/src/observed-reset-refresh.ts +4 -4
- package/src/operator-alarm.ts +23 -11
- package/src/project-ingest.ts +6 -6
- package/src/project-instructions.ts +12 -1
- package/src/project-profile-instruction-text.ts +6 -0
- package/src/project-profile-instructions.ts +20 -0
- package/src/project-trust.ts +12 -11
- package/src/prompt-resolver.ts +3 -3
- package/src/provider-catalog-store.ts +3 -49
- package/src/provider-config-store.ts +12 -11
- package/src/provider-model-seed.ts +1 -18
- package/src/provider-quota-async.ts +5 -7
- package/src/provider-quota-config-store.ts +5 -4
- package/src/provider-secrets.test-fixture.ts +3 -3
- package/src/provider-timeline-event.ts +4 -7
- package/src/quota-band-delivery.ts +2 -2
- package/src/recipe-runner.ts +6 -5
- package/src/repo-config-source.ts +10 -4
- package/src/retention-config-store.ts +4 -3
- package/src/reviewer-pipeline.ts +11 -10
- package/src/routes/_route.ts +4 -4
- package/src/routes/_shared.ts +13 -12
- package/src/routes/agent-effort.ts +5 -5
- package/src/routes/agent-heartbeat-quota.ts +23 -0
- package/src/routes/agent-keep.ts +1 -1
- package/src/routes/agent-profiles.ts +6 -6
- package/src/routes/agent-reporting.ts +1 -1
- package/src/routes/agent-self-effort.ts +5 -5
- package/src/routes/agent-sessions.ts +24 -24
- package/src/routes/agents-spawn.ts +2 -2
- package/src/routes/agents.ts +19 -121
- package/src/routes/auth.ts +14 -15
- package/src/routes/authority-audit.ts +2 -2
- package/src/routes/automations.ts +6 -5
- package/src/routes/channel-binding-delete.ts +1 -1
- package/src/routes/channel-output.ts +3 -3
- package/src/routes/claude-api-budget.ts +5 -5
- package/src/routes/commands-listing.ts +5 -1
- package/src/routes/commands.ts +31 -29
- package/src/routes/context-resets.ts +2 -2
- package/src/routes/continuation-archives.ts +2 -2
- package/src/routes/coordinator-teams.ts +1 -1
- package/src/routes/decisions.ts +2 -2
- package/src/routes/host-secret-files.ts +1 -1
- package/src/routes/hosts.ts +11 -11
- package/src/routes/inbox.ts +3 -2
- package/src/routes/index.ts +12 -2
- package/src/routes/integrations.ts +32 -56
- package/src/routes/issue-activity.ts +2 -2
- package/src/routes/issue-associations.ts +4 -4
- package/src/routes/issue-refs.ts +9 -9
- package/src/routes/kernel-timers-operator.ts +1 -1
- package/src/routes/memory.ts +1 -1
- package/src/routes/merges.ts +11 -11
- package/src/routes/messages.ts +23 -17
- package/src/routes/orchestrator-bootstrap.ts +2 -2
- package/src/routes/orchestrator-host-registration.ts +4 -2
- package/src/routes/orchestrator-host-utilization.ts +5 -3
- package/src/routes/orchestrator-proxy.ts +4 -4
- package/src/routes/orchestrator.ts +28 -19
- package/src/routes/pairs.ts +8 -8
- package/src/routes/project-profile-instructions.ts +27 -0
- package/src/routes/project-trust.ts +3 -3
- package/src/routes/projects.ts +16 -16
- package/src/routes/prompt-templates.ts +12 -12
- package/src/routes/provider-config.ts +6 -6
- package/src/routes/provider-quota-config.ts +2 -2
- package/src/routes/provider-quotas.ts +10 -10
- package/src/routes/run-command.ts +1 -1
- package/src/routes/secrets-backup.ts +2 -2
- package/src/routes/secrets-import.ts +1 -1
- package/src/routes/secrets-vault.ts +7 -7
- package/src/routes/settings.ts +6 -6
- package/src/routes/shipping.ts +9 -1
- package/src/routes/spawn-policy.ts +8 -7
- package/src/routes/sse.ts +2 -2
- package/src/routes/stats.ts +6 -6
- package/src/routes/task-http.ts +15 -1
- package/src/routes/task-issues.ts +11 -26
- package/src/routes/tasks.ts +22 -53
- package/src/routes/team-templates.ts +12 -12
- package/src/routes/teams-config.ts +2 -2
- package/src/routes/teams.ts +10 -10
- package/src/routes/tokens.ts +30 -22
- package/src/routes/users.ts +24 -24
- package/src/routes/viewer-read.ts +3 -3
- package/src/routes/web-tool-calls.ts +4 -4
- package/src/routes/workflows.ts +22 -7
- package/src/routes/workspaces.ts +17 -16
- package/src/routing-policy-normalize.ts +1 -2
- package/src/routing-policy-push.ts +6 -6
- package/src/routing-step-defaults.ts +0 -2
- package/src/runner-token-mint-limit.ts +63 -0
- package/src/runtime-grant.ts +21 -13
- package/src/runtime-tokens.ts +59 -35
- package/src/secrets-broker/config.ts +1 -1
- package/src/secrets-broker/service.ts +2 -2
- package/src/security.ts +16 -21
- package/src/self-resume-carry.ts +21 -110
- package/src/self-resume-supersede.ts +4 -3
- package/src/self-resume.ts +54 -66
- package/src/server-background.ts +2 -2
- package/src/server.ts +26 -24
- package/src/services/agent-action.ts +12 -31
- package/src/services/agent-effort.ts +7 -32
- package/src/services/agent-hang-watchdog-job.ts +2 -2
- package/src/services/agent-heartbeat.ts +166 -0
- package/src/services/agent-reporting.ts +1 -1
- package/src/services/browser-inventory.ts +3 -3
- package/src/services/browser-session-state.ts +3 -2
- package/src/services/browser-session.ts +21 -27
- package/src/services/bus-command-update.ts +9 -9
- package/src/services/checkout-refresh-state.ts +1 -0
- package/src/services/checkout-refresh.test-fixture.ts +3 -2
- package/src/services/command-host.ts +7 -2
- package/src/services/coordinator-digest.ts +3 -2
- package/src/services/dispatch-command.ts +12 -13
- package/src/services/effective-launch-driver.ts +14 -9
- package/src/services/host-changed-paths.test-fixture.ts +5 -6
- package/src/services/host-project-readiness.ts +2 -2
- package/src/services/host-providers.ts +1 -1
- package/src/services/host-utilization.ts +27 -4
- package/src/services/idle-agent-digest.ts +17 -12
- package/src/services/idle-epics.ts +9 -10
- package/src/services/interrupt-agent.ts +12 -9
- package/src/services/issue-activity.ts +3 -3
- package/src/services/issue-associations.ts +15 -18
- package/src/services/issue-lifecycle-comments.ts +3 -2
- package/src/services/issue-lifecycle.ts +69 -72
- package/src/services/issue-refs.ts +10 -15
- package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
- package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
- package/src/services/kernel-timers-ingress.ts +4 -4
- package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
- package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
- package/src/services/kernel-timers-outbox.ts +1 -1
- package/src/services/kernel-timers-stage10-operator.ts +1 -1
- package/src/services/kernel-timers.ts +4 -3
- package/src/services/land-gate-placement.ts +11 -2
- package/src/services/land-issue-relations.ts +5 -4
- package/src/services/land-restart-retry.ts +7 -6
- package/src/services/landed-ancestry.ts +25 -8
- package/src/services/legacy-landing-host.ts +4 -1
- package/src/services/legacy-landing-recovery.ts +8 -6
- package/src/services/managed-running.ts +17 -17
- package/src/services/memory-areas.ts +17 -53
- package/src/services/merge-pause.ts +9 -15
- package/src/services/operator-decisions.ts +37 -41
- package/src/services/orchestrator-registration-recovery.ts +6 -2
- package/src/services/orchestrator-upgrade.ts +14 -12
- package/src/services/permission-decision.ts +4 -3
- package/src/services/plan-ci-notice.ts +57 -0
- package/src/services/plan-ci-recovery.ts +2 -55
- package/src/services/plan-conformance.ts +4 -4
- package/src/services/plan-dispatch-policy.ts +10 -3
- package/src/services/plan-dispatch.ts +35 -14
- package/src/services/plan-graph.ts +39 -261
- package/src/services/plan-import.ts +1 -1
- package/src/services/plan-live-bindings.ts +8 -37
- package/src/services/plan-task-create.ts +1 -1
- package/src/services/plan-terminal-refs.ts +2 -12
- package/src/services/plan-wake-digest.ts +9 -3
- package/src/services/profile-trust.ts +6 -5
- package/src/services/project-config-read.ts +70 -0
- package/src/services/project-profile-instructions.ts +54 -0
- package/src/services/project.ts +11 -10
- package/src/services/prompt-templates.ts +6 -5
- package/src/services/provider-hold-nudge.ts +9 -9
- package/src/services/provider-hold-record.ts +13 -12
- package/src/services/provider-state-audit.ts +19 -18
- package/src/services/provisioning-harness/budget-baseline.json +4 -4
- package/src/services/provisioning-harness/driver.ts +1 -1
- package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
- package/src/services/provisioning-harness/lifecycle.ts +24 -22
- package/src/services/provisioning-harness/prepare.ts +16 -17
- package/src/services/rate-limit-resume.ts +10 -9
- package/src/services/red-main-auto-revert.ts +7 -5
- package/src/services/red-main-controller-deps.ts +20 -3
- package/src/services/red-main-incident.ts +3 -1
- package/src/services/red-main-quarantine.ts +2 -3
- package/src/services/register-agent.ts +22 -22
- package/src/services/restart-project-role.ts +1 -1
- package/src/services/restart-spawn.ts +74 -61
- package/src/services/review-publish.ts +7 -24
- package/src/services/review-ref-reconcile.ts +29 -38
- package/src/services/runtime-dependency-alert.ts +27 -0
- package/src/services/scheduler-command.ts +11 -9
- package/src/services/scheduler.ts +5 -5
- package/src/services/self-care-state.ts +2 -1
- package/src/services/self-effort-grant.ts +5 -25
- package/src/services/self-effort.ts +5 -5
- package/src/services/send-message.ts +21 -34
- package/src/services/shutdown-agent.ts +17 -14
- package/src/services/spawn-agent.ts +25 -43
- package/src/services/spawn-chain-inspector.ts +7 -14
- package/src/services/spawn-cwd-placement.ts +21 -5
- package/src/services/spawn-issue-activity.ts +8 -6
- package/src/services/spawn-launch.ts +17 -1
- package/src/services/spawn-loss-escalation.ts +1 -1
- package/src/services/spawn-policy.ts +68 -0
- package/src/services/spawn-registration-watchdog.ts +2 -2
- package/src/services/spawn-repo-probe.ts +7 -5
- package/src/services/spawn-tree-cleanup.ts +8 -9
- package/src/services/steward-reaper.ts +4 -4
- package/src/services/task-context-hydration.ts +25 -1
- package/src/services/task-delivery.ts +20 -34
- package/src/services/task-dispatch.ts +3 -0
- package/src/services/task-entity.ts +40 -203
- package/src/services/task-issue-link.ts +13 -20
- package/src/services/task-issue-weave.ts +12 -11
- package/src/services/task-lifecycle.ts +27 -31
- package/src/services/task-repo-cwd.ts +37 -0
- package/src/services/task-review-hold.ts +4 -17
- package/src/services/task-semantic-events.ts +13 -11
- package/src/services/task-state-reconcile.ts +8 -17
- package/src/services/task-validation.ts +2 -2
- package/src/services/team-templates.ts +12 -11
- package/src/services/team.ts +31 -98
- package/src/services/terminal-provider-exit.ts +6 -5
- package/src/services/timer-message-fire-chaos-worker.ts +7 -3
- package/src/services/timer-message-fire-outbox.ts +1 -1
- package/src/services/transient-agent-reaper.ts +25 -20
- package/src/services/turn-reconcile-audit.ts +9 -9
- package/src/services/user-onboarding.ts +8 -6
- package/src/services/user-profile.ts +6 -9
- package/src/services/work-finality.ts +16 -4
- package/src/services/workflow-auto-start.ts +26 -13
- package/src/services/workflow-caller.ts +61 -4
- package/src/services/workflow-child-proof-worker.ts +1 -1
- package/src/services/workflow-ci-main.ts +1 -1
- package/src/services/workflow-control-proof-worker.ts +1 -1
- package/src/services/workflow-coordinator.ts +8 -2
- package/src/services/workflow-decisions.ts +5 -5
- package/src/services/workflow-deferred-cleanup.ts +5 -3
- package/src/services/workflow-effect-driver.ts +42 -17
- package/src/services/workflow-effects.ts +58 -37
- package/src/services/workflow-land-notice.ts +10 -0
- package/src/services/workflow-pause-text.ts +43 -0
- package/src/services/workflow-pins.ts +7 -4
- package/src/services/workflow-reconcile.ts +14 -11
- package/src/services/workflow-resume-pins.ts +3 -3
- package/src/services/workflow-routing-defaults.ts +18 -0
- package/src/services/workflow-run-view.ts +6 -3
- package/src/services/workflow-run.test-fixture.ts +1 -1
- package/src/services/workflow-runs.ts +61 -33
- package/src/services/workflow-supervisor-state.ts +26 -1
- package/src/services/workflow-supervisor.ts +11 -6
- package/src/services/workspace-recovery.ts +4 -3
- package/src/settings/registry.ts +1 -2
- package/src/spawn-admission.ts +10 -2
- package/src/spawn-command.ts +4 -4
- package/src/spawn-models.ts +10 -12
- package/src/spawn-placement.ts +28 -10
- package/src/spawn-targets.ts +9 -9
- package/src/sse-agent-status.ts +15 -6
- package/src/sse.ts +49 -24
- package/src/startup-context-injection.ts +62 -57
- package/src/state-adoption/cd-cutover.ts +53 -7
- package/src/state-adoption/fleet-cutover.ts +35 -0
- package/src/state-adoption/fleet-plan.ts +36 -0
- package/src/state-adoption/index.ts +2 -2
- package/src/state-adoption/linux-plan.ts +2 -2
- package/src/state-adoption/linux.ts +2 -2
- package/src/state-adoption/macos-plan.ts +2 -2
- package/src/state-adoption/macos.ts +1 -1
- package/src/steward-handoff.ts +4 -3
- package/src/steward-policy-cleanup.ts +9 -8
- package/src/steward.ts +9 -8
- package/src/task-dispatch-live.ts +6 -3
- package/src/task-dispatcher.ts +3 -3
- package/src/teams-config-store.ts +4 -3
- package/src/token-db-write.ts +10 -0
- package/src/token-db.ts +2 -2
- package/src/token-usage-async.ts +2 -4
- package/src/user-awaiting-reply.ts +5 -5
- package/src/workspace-actions.ts +24 -29
- package/src/workspace-auto-merge.ts +14 -12
- package/src/workspace-changed-paths-client.ts +16 -5
- package/src/workspace-cleanup-stale.ts +30 -7
- package/src/workspace-command-settle.ts +26 -17
- package/src/workspace-config.ts +1 -1
- package/src/workspace-conflict-resolver.ts +9 -7
- package/src/workspace-dead-owner-recovery.ts +5 -4
- package/src/workspace-escalation.ts +12 -11
- package/src/workspace-human-escalation.ts +3 -3
- package/src/workspace-land-gate-watchdog.ts +3 -3
- package/src/workspace-land-refusal.ts +20 -0
- package/src/workspace-land-stopped.ts +1 -0
- package/src/workspace-merge.ts +10 -26
- package/src/workspace-nothing-to-land-notice.ts +2 -2
- package/src/workspace-orphans.ts +18 -37
- package/src/workspace-pr-completion.ts +10 -8
- package/src/workspace-rekey.ts +3 -3
- package/src/workspace-steward-failure.ts +2 -2
- package/src/workspace-steward-wake.ts +4 -4
- package/node_modules/@humwick/kernel/LICENSE +0 -167
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
- package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
- package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
- package/node_modules/@humwick/kernel/config.ts +0 -111
- package/node_modules/@humwick/kernel/contract.ts +0 -572
- package/node_modules/@humwick/kernel/control-authz.ts +0 -281
- package/node_modules/@humwick/kernel/control.ts +0 -645
- package/node_modules/@humwick/kernel/effects.ts +0 -493
- package/node_modules/@humwick/kernel/event-log.ts +0 -319
- package/node_modules/@humwick/kernel/http-transport.ts +0 -384
- package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
- package/node_modules/@humwick/kernel/identity.ts +0 -248
- package/node_modules/@humwick/kernel/index.ts +0 -28
- package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
- package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
- package/node_modules/@humwick/kernel/landing.ts +0 -953
- package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
- package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
- package/node_modules/@humwick/kernel/message-authority.ts +0 -281
- package/node_modules/@humwick/kernel/module-host.ts +0 -722
- package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
- package/node_modules/@humwick/kernel/package.json +0 -39
- package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
- package/node_modules/@humwick/kernel/persistence.ts +0 -510
- package/node_modules/@humwick/kernel/registry.ts +0 -60
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
- package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
- package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
- package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
- package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
- package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
- package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
- package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
- package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
- package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
- package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
- package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
- package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
- package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
- package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
- package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
- package/node_modules/@humwick/offload/LICENSE +0 -167
- package/node_modules/@humwick/offload/README.md +0 -57
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
- package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.js +0 -80
- package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
- package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/index.js +0 -5
- package/node_modules/@humwick/offload/dist/index.js.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
- package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/types.js +0 -176
- package/node_modules/@humwick/offload/dist/types.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.js +0 -1
- package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
- package/node_modules/@humwick/offload/package.json +0 -42
- package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
- package/node_modules/@humwick/offload/src/envelope.ts +0 -92
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
- package/node_modules/@humwick/offload/src/index.ts +0 -4
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
- package/node_modules/@humwick/offload/src/types.ts +0 -235
- package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
- package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
- package/node_modules/@humwick/offload/src/worker.ts +0 -5
- package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
- package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
- package/public/assets/index-B7ZerHLY.css +0 -2
- package/public/assets/index-BU3uWo2t.js +0 -15
- package/public/assets/projects-B_lmcqfO.js +0 -2
- package/public/assets/provider-display-DbLWpP3j.js +0 -2
- package/public/assets/run-card-CO_bguQf.js +0 -2
- package/public/assets/shipping-Bu8p1gEw.js +0 -2
- package/public/assets/store-BvtFdlGX.js +0 -9
- package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
- package/runner/src/agent-runner/http-liveness.ts +0 -85
- package/runner/src/gate-run-lease-probe.ts +0 -38
- package/src/db/claude-catalog-reconcile.ts +0 -27
- package/src/db/on-loop-write-transaction.ts +0 -34
- package/src/routing-model-aliases.ts +0 -21
package/public/index.html
CHANGED
|
@@ -13,17 +13,17 @@
|
|
|
13
13
|
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
14
14
|
<link rel="manifest" href="manifest.webmanifest">
|
|
15
15
|
<link rel="apple-touch-icon" href="icons/apple-touch-icon.png">
|
|
16
|
-
<script type="module" crossorigin src="./assets/index-
|
|
16
|
+
<script type="module" crossorigin src="./assets/index-CqqgOI5R.js"></script>
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-QTnfLwEv.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="./assets/legacy-storage-carry-C-tBSxRA.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="./assets/dist-DeW2Y1R5.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="./assets/react-dom-DSFxiC7T.js">
|
|
21
|
-
<link rel="modulepreload" crossorigin href="./assets/provider-display-
|
|
22
|
-
<link rel="modulepreload" crossorigin href="./assets/display-
|
|
21
|
+
<link rel="modulepreload" crossorigin href="./assets/provider-display-BEeLXC_D.js">
|
|
22
|
+
<link rel="modulepreload" crossorigin href="./assets/display-CDeH4I8T.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="./assets/api-CIIVBtAV.js">
|
|
24
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-liveness-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="./assets/store-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="./assets/artifacts-
|
|
24
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-liveness-Bq-s73jW.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="./assets/store-DKPDIZBe.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="./assets/artifacts-DT-HkI5O.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="./assets/tasks-BIyeAaPC.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="./assets/host-mTgRw7xh.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="./assets/file-code-corner-CXhIR1vB.js">
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<link rel="modulepreload" crossorigin href="./assets/archive-CIuPSvmx.js">
|
|
55
55
|
<link rel="modulepreload" crossorigin href="./assets/arrow-up-a-z-CKC2RCjD.js">
|
|
56
56
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-HclGiUj8.js">
|
|
57
|
-
<link rel="modulepreload" crossorigin href="./assets/markdown-preview-
|
|
57
|
+
<link rel="modulepreload" crossorigin href="./assets/markdown-preview-W4VQQPAv.js">
|
|
58
58
|
<link rel="modulepreload" crossorigin href="./assets/folder-tree-BG3Y9nqH.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="./assets/git-branch-yxhV0m8E.js">
|
|
60
60
|
<link rel="modulepreload" crossorigin href="./assets/loader-circle-BfPd4kOD.js">
|
|
@@ -67,15 +67,15 @@
|
|
|
67
67
|
<link rel="modulepreload" crossorigin href="./assets/copy-DFxhHRtV.js">
|
|
68
68
|
<link rel="modulepreload" crossorigin href="./assets/copy-button-CjOj4HEf.js">
|
|
69
69
|
<link rel="modulepreload" crossorigin href="./assets/input-CsTB6jIx.js">
|
|
70
|
-
<link rel="modulepreload" crossorigin href="./assets/code-preview-
|
|
71
|
-
<link rel="modulepreload" crossorigin href="./assets/files-
|
|
70
|
+
<link rel="modulepreload" crossorigin href="./assets/code-preview-CzrZfr9U.js">
|
|
71
|
+
<link rel="modulepreload" crossorigin href="./assets/files-BTeGVmTg.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/cpu-Dndy84IU.js">
|
|
73
73
|
<link rel="modulepreload" crossorigin href="./assets/eye-BAP6fHrX.js">
|
|
74
74
|
<link rel="modulepreload" crossorigin href="./assets/layers-DEfClY-v.js">
|
|
75
75
|
<link rel="modulepreload" crossorigin href="./assets/lock-BW8MPKw_.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="./assets/rocket-BmO1qSu-.js">
|
|
77
77
|
<link rel="modulepreload" crossorigin href="./assets/terminal-Bl2u7KxT.js">
|
|
78
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-lineage-
|
|
78
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-lineage-SgDt9i3T.js">
|
|
79
79
|
<link rel="modulepreload" crossorigin href="./assets/package-open-ckPgcjpv.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="./assets/bell-_Yzbxxrt.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="./assets/radio-Bn0_qc0G.js">
|
|
@@ -98,29 +98,29 @@
|
|
|
98
98
|
<link rel="modulepreload" crossorigin href="./assets/sparkles-CzwR10ZU.js">
|
|
99
99
|
<link rel="modulepreload" crossorigin href="./assets/bot-B0NpDNhr.js">
|
|
100
100
|
<link rel="modulepreload" crossorigin href="./assets/messages-square-DVM1ZtcI.js">
|
|
101
|
-
<link rel="modulepreload" crossorigin href="./assets/workflow-marker-
|
|
101
|
+
<link rel="modulepreload" crossorigin href="./assets/workflow-marker-X8wxyhzC.js">
|
|
102
102
|
<link rel="modulepreload" crossorigin href="./assets/server-CZIRjFyY.js">
|
|
103
103
|
<link rel="modulepreload" crossorigin href="./assets/provider-brand-icon-_67JR7Zh.js">
|
|
104
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-type-icon-
|
|
104
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-type-icon-CY113sp-.js">
|
|
105
105
|
<link rel="modulepreload" crossorigin href="./assets/users-C7B3u9jv.js">
|
|
106
106
|
<link rel="modulepreload" crossorigin href="./assets/wrench-C7-4CgnY.js">
|
|
107
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-name-
|
|
108
|
-
<link rel="modulepreload" crossorigin href="./assets/formatted-body-
|
|
109
|
-
<link rel="modulepreload" crossorigin href="./assets/TraceView-
|
|
107
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-name-CcY3Aijy.js">
|
|
108
|
+
<link rel="modulepreload" crossorigin href="./assets/formatted-body-MLtodyPp.js">
|
|
109
|
+
<link rel="modulepreload" crossorigin href="./assets/TraceView-DYU962-H.js">
|
|
110
110
|
<link rel="modulepreload" crossorigin href="./assets/boxes-Cv7Wq3h4.js">
|
|
111
111
|
<link rel="modulepreload" crossorigin href="./assets/braces-BOks9SsY.js">
|
|
112
112
|
<link rel="modulepreload" crossorigin href="./assets/brain-circuit-CpQeSmp3.js">
|
|
113
113
|
<link rel="modulepreload" crossorigin href="./assets/calendar-clock-CDG_KBhx.js">
|
|
114
114
|
<link rel="modulepreload" crossorigin href="./assets/calendar-QJjoZ1JU.js">
|
|
115
115
|
<link rel="modulepreload" crossorigin href="./assets/textarea-hs6Mpyfl.js">
|
|
116
|
-
<link rel="modulepreload" crossorigin href="./assets/service-access-settings-
|
|
116
|
+
<link rel="modulepreload" crossorigin href="./assets/service-access-settings-Crq-6a-B.js">
|
|
117
117
|
<link rel="modulepreload" crossorigin href="./assets/chart-column-S02ZGfTR.js">
|
|
118
118
|
<link rel="modulepreload" crossorigin href="./assets/circle-arrow-up-B432r0Kk.js">
|
|
119
119
|
<link rel="modulepreload" crossorigin href="./assets/package-plus-C1AKMjsl.js">
|
|
120
120
|
<link rel="modulepreload" crossorigin href="./assets/octagon-x-B5lnUY-8.js">
|
|
121
121
|
<link rel="modulepreload" crossorigin href="./assets/external-link-BRfu-fHG.js">
|
|
122
122
|
<link rel="modulepreload" crossorigin href="./assets/task-chip-CYj0mpoL.js">
|
|
123
|
-
<link rel="modulepreload" crossorigin href="./assets/issue-ref-chip-
|
|
123
|
+
<link rel="modulepreload" crossorigin href="./assets/issue-ref-chip-CeWBNWn7.js">
|
|
124
124
|
<link rel="modulepreload" crossorigin href="./assets/circle-x-CZ0erS7Q.js">
|
|
125
125
|
<link rel="modulepreload" crossorigin href="./assets/zap-DGuDTw4w.js">
|
|
126
126
|
<link rel="modulepreload" crossorigin href="./assets/clipboard-list-W2YeUsxT.js">
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<link rel="modulepreload" crossorigin href="./assets/flame-CxBuz46L.js">
|
|
132
132
|
<link rel="modulepreload" crossorigin href="./assets/minimize-2-BkK6XoMP.js">
|
|
133
133
|
<link rel="modulepreload" crossorigin href="./assets/pin-DcsKeXxr.js">
|
|
134
|
-
<link rel="modulepreload" crossorigin href="./assets/artifact-viewer-
|
|
134
|
+
<link rel="modulepreload" crossorigin href="./assets/artifact-viewer-KRvSc7sl.js">
|
|
135
135
|
<link rel="modulepreload" crossorigin href="./assets/flag-CnEG9PH-.js">
|
|
136
136
|
<link rel="modulepreload" crossorigin href="./assets/folder-git-2-CJOmTT06.js">
|
|
137
137
|
<link rel="modulepreload" crossorigin href="./assets/folder-open-CBUCMSlu.js">
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
<link rel="modulepreload" crossorigin href="./assets/message-square-C-1G8dMM.js">
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/paperclip-CNpKZKum.js">
|
|
156
156
|
<link rel="modulepreload" crossorigin href="./assets/pause-DttnHD4c.js">
|
|
157
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-project-badge-
|
|
157
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-project-badge-DGYbIhaI.js">
|
|
158
158
|
<link rel="modulepreload" crossorigin href="./assets/pencil-B1Hf2V_J.js">
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/play-BbT8m7A0.js">
|
|
160
160
|
<link rel="modulepreload" crossorigin href="./assets/plug-zap-V0wMDJ-G.js">
|
|
@@ -162,6 +162,7 @@
|
|
|
162
162
|
<link rel="modulepreload" crossorigin href="./assets/rotate-ccw-CtD77qkX.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="./assets/rotate-cw-FPtkDewA.js">
|
|
164
164
|
<link rel="modulepreload" crossorigin href="./assets/save-B_PGqSm4.js">
|
|
165
|
+
<link rel="modulepreload" crossorigin href="./assets/scroll-text-BKXS1ahr.js">
|
|
165
166
|
<link rel="modulepreload" crossorigin href="./assets/shield-CtXNUA0i.js">
|
|
166
167
|
<link rel="modulepreload" crossorigin href="./assets/smile-plus-q6EQBXHZ.js">
|
|
167
168
|
<link rel="modulepreload" crossorigin href="./assets/square-Bqly37YM.js">
|
|
@@ -171,16 +172,17 @@
|
|
|
171
172
|
<link rel="modulepreload" crossorigin href="./assets/user-plus-D9749q73.js">
|
|
172
173
|
<link rel="modulepreload" crossorigin href="./assets/volume-2-XrcRKD9Z.js">
|
|
173
174
|
<link rel="modulepreload" crossorigin href="./assets/waypoints-CIzINtLT.js">
|
|
174
|
-
<link rel="modulepreload" crossorigin href="./assets/use-selectors-
|
|
175
|
-
<link rel="modulepreload" crossorigin href="./assets/status-dot-
|
|
176
|
-
<link rel="modulepreload" crossorigin href="./assets/terminal-viewer-
|
|
177
|
-
<link rel="modulepreload" crossorigin href="./assets/log-viewer-
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/fleet-metrics-
|
|
179
|
-
<link rel="modulepreload" crossorigin href="./assets/busy-health-
|
|
180
|
-
<link rel="modulepreload" crossorigin href="./assets/profile-icon-
|
|
181
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
182
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
183
|
-
<link rel="
|
|
175
|
+
<link rel="modulepreload" crossorigin href="./assets/use-selectors-BdxBW8mL.js">
|
|
176
|
+
<link rel="modulepreload" crossorigin href="./assets/status-dot-BcHyw1Vw.js">
|
|
177
|
+
<link rel="modulepreload" crossorigin href="./assets/terminal-viewer-CpY5_m7W.js">
|
|
178
|
+
<link rel="modulepreload" crossorigin href="./assets/log-viewer-Cib8nqdE.js">
|
|
179
|
+
<link rel="modulepreload" crossorigin href="./assets/fleet-metrics-BHEt5yc_.js">
|
|
180
|
+
<link rel="modulepreload" crossorigin href="./assets/busy-health-D3hwvYb4.js">
|
|
181
|
+
<link rel="modulepreload" crossorigin href="./assets/profile-icon-BsRyBMea.js">
|
|
182
|
+
<link rel="modulepreload" crossorigin href="./assets/token-estimate-Co-Jdphh.js">
|
|
183
|
+
<link rel="modulepreload" crossorigin href="./assets/versioned-prompt-editor-CIVg7XB1.js">
|
|
184
|
+
<link rel="modulepreload" crossorigin href="./assets/host-providers-dialog-mapF4Fj9.js">
|
|
185
|
+
<link rel="stylesheet" crossorigin href="./assets/index-MYAIwYTX.css">
|
|
184
186
|
</head>
|
|
185
187
|
<body class="bg-background text-foreground antialiased">
|
|
186
188
|
<div id="root"></div>
|
|
@@ -260,6 +260,9 @@ function classifyGateRun(command, commands = {}) {
|
|
|
260
260
|
return null;
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
+
// sdk/src/types/host.ts
|
|
264
|
+
var HOST_GATE_KINDS = ["land", "iterate", "validation"];
|
|
265
|
+
|
|
263
266
|
// sdk/src/land-gates.ts
|
|
264
267
|
import { isAbsolute as isAbsolute2, relative as relative2, resolve as resolve3 } from "path";
|
|
265
268
|
|
|
@@ -420,7 +423,34 @@ function cleanLandGatesConfigFull(value, worktreePath) {
|
|
|
420
423
|
const requirements = cleanLandGateRequirements(value);
|
|
421
424
|
const cd = value.cd === true;
|
|
422
425
|
const scope = cleanLandGateScope(value);
|
|
423
|
-
|
|
426
|
+
const resources = cleanGateResources(value);
|
|
427
|
+
return { gates, ...resources ? { resources } : {}, ...deliveryPolicy, ...iterate ? { iterate } : {}, ...cd ? { cd } : {}, ...placement ? { placement } : {}, ...requirements ? { requirements } : {}, ...scope };
|
|
428
|
+
}
|
|
429
|
+
function cleanGateResources(value) {
|
|
430
|
+
if (!isRecord(value))
|
|
431
|
+
throw new ValidationError("land-gates config must be an object");
|
|
432
|
+
if (value.resources === undefined)
|
|
433
|
+
return;
|
|
434
|
+
if (!isRecord(value.resources))
|
|
435
|
+
throw new ValidationError("resources must be an object");
|
|
436
|
+
const resources = {};
|
|
437
|
+
for (const [kind, request] of Object.entries(value.resources)) {
|
|
438
|
+
if (!HOST_GATE_KINDS.includes(kind))
|
|
439
|
+
throw new ValidationError(`resources: unknown gate kind '${kind}'; use land, iterate or validation`);
|
|
440
|
+
if (!isRecord(request))
|
|
441
|
+
throw new ValidationError(`resources.${kind} must be an object`);
|
|
442
|
+
const parsed = {};
|
|
443
|
+
for (const [key, n] of Object.entries(request)) {
|
|
444
|
+
if (key !== "cpus" && key !== "memoryBytes")
|
|
445
|
+
throw new ValidationError(`resources.${kind}: unknown field '${key}'`);
|
|
446
|
+
if (typeof n !== "number" || !Number.isFinite(n) || n <= 0 || key === "memoryBytes" && !Number.isSafeInteger(n)) {
|
|
447
|
+
throw new ValidationError(`resources.${kind}.${key} must be a positive ${key === "memoryBytes" ? "safe integer" : "finite number"}`);
|
|
448
|
+
}
|
|
449
|
+
parsed[key] = n;
|
|
450
|
+
}
|
|
451
|
+
resources[kind] = parsed;
|
|
452
|
+
}
|
|
453
|
+
return resources;
|
|
424
454
|
}
|
|
425
455
|
function cleanDeliveryGatePolicy(value) {
|
|
426
456
|
if (!isRecord(value))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { relayEnv, writeChildEnv } from "@humwick/sdk/env";
|
|
2
|
-
import {
|
|
2
|
+
import { type SpawnProvider } from "@humwick/sdk";
|
|
3
3
|
import { tmuxCommand, tmuxHasSession } from "@humwick/sdk/tmux-utils";
|
|
4
4
|
import type { ManagedProcess, RunnerSpawnConfig } from "../adapter";
|
|
5
5
|
import { effortSwitchEnabledFromEnv } from "../config";
|
|
@@ -24,9 +24,7 @@ export function claudeEffortLaunch(effort: string | undefined, inheritedEnv: Rec
|
|
|
24
24
|
|
|
25
25
|
/** Persistent transports can switch effort. Host-base `/effort` would save into the human's own settings. */
|
|
26
26
|
export function claudeEffortSwitchMeta(provider: SpawnProvider, config: RunnerSpawnConfig, oneShot: boolean): { effortSwitch?: true } {
|
|
27
|
-
|
|
28
|
-
const model = catalog && findProviderCatalogModel(catalog, config.model ?? catalog.defaultModel);
|
|
29
|
-
return effortSwitchEnabledFromEnv() && !oneShot && providerHomePathFor(provider, config) && model?.efforts.length ? { effortSwitch: true } : {};
|
|
27
|
+
return effortSwitchEnabledFromEnv() && !oneShot && providerHomePathFor(provider, config) && (config.modelRecord?.efforts?.length || config.effort) ? { effortSwitch: true } : {};
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
interface ClaudeEffortOutcome { applied?: string; message: string }
|
|
@@ -137,7 +137,7 @@ export class ClaudeHeadlessAdapter implements ProviderAdapter {
|
|
|
137
137
|
if (!config.headless) throw new Error("Claude stream-json transport requires --headless");
|
|
138
138
|
// Use the existing provisioning, permission policy and credential-isolation seam.
|
|
139
139
|
// Prompts enter through stdin only; no positional/one-shot prompt at launch.
|
|
140
|
-
const args = this.launch.buildSpawnArgs({ ...config, prompt: undefined, rig: undefined },
|
|
140
|
+
const args = this.launch.buildSpawnArgs({ ...config, prompt: undefined, rig: undefined }, providerConfig);
|
|
141
141
|
const transportArgs: string[] = [];
|
|
142
142
|
for (let i = 0; i < args.args.length; i++) {
|
|
143
143
|
const arg = args.args[i]!;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { readIncrementalFileRange, statIncrementalFile } from "./incremental-file";
|
|
2
|
+
import type { ProviderStatusUpdate } from "../adapter";
|
|
3
|
+
import { readOneShotExitCode } from "../session-scratch";
|
|
4
|
+
|
|
5
|
+
/** Read only the diagnostic tail, even after a long provider session. */
|
|
6
|
+
async function stderrTail(path: string): Promise<string> {
|
|
7
|
+
try {
|
|
8
|
+
const { size } = await statIncrementalFile(path);
|
|
9
|
+
return new TextDecoder().decode(await readIncrementalFileRange(path, Math.max(0, size - 4096), size)).trim();
|
|
10
|
+
} catch { return ""; }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// #3830 — a vanished pane is not evidence of a successful provider launch.
|
|
14
|
+
export async function claudeLaunchExitStatus(exitCodeFile: string | undefined, ready: boolean, oneShot: boolean, paneTail = ""): Promise<ProviderStatusUpdate> {
|
|
15
|
+
const code = exitCodeFile ? await readOneShotExitCode(exitCodeFile) : undefined;
|
|
16
|
+
// A successful interactive exec replaces the shell and its EXIT trap.
|
|
17
|
+
if ((code === undefined && ready && !oneShot) || (code === "0" && (ready || oneShot))) return "offline";
|
|
18
|
+
const tail = exitCodeFile ? await stderrTail(`${exitCodeFile}.stderr`) : "";
|
|
19
|
+
const reason = ready || oneShot ? "provider-exited" : "spawn_failed";
|
|
20
|
+
const message = `Claude ${ready || oneShot ? "provider exited" : "launch failed before ready"} (${code === undefined ? "exit code unavailable" : `exit code ${code}`})${tail || paneTail ? `: ${tail || paneTail.slice(-4096)}` : ""}`;
|
|
21
|
+
return {
|
|
22
|
+
status: "error",
|
|
23
|
+
providerState: { state: "failed", reason, message, source: "provider", terminal: true },
|
|
24
|
+
metadata: { terminalFailureReason: reason, terminalFailureMessage: message },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// This is the single home (DRY) for reading + version-gating + mapping that probe.
|
|
11
11
|
// `probeActivity`, the BusyReconciler backstop, and the monitorless turn-watch all
|
|
12
12
|
// delegate here; the legacy pane-scrape stays only as the graceful fallback for
|
|
13
|
-
// pre-2.1.119 / probe-missing sessions (e.g. a
|
|
13
|
+
// pre-2.1.119 / probe-missing sessions (e.g. a host whose real config
|
|
14
14
|
// home the runner can't resolve). Schema is reverse-engineered (pbauermeister/
|
|
15
15
|
// claude-busy-monitor), so we gate on `version`/presence and degrade gracefully if
|
|
16
16
|
// Anthropic ever drifts it.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { relayEnv } from "@humwick/sdk/env";
|
|
1
|
+
import { relayEnv, writeChildEnv } from "@humwick/sdk/env";
|
|
2
2
|
import { envPipeSource, prepareEnvPipe, providerSecretEnvKeys } from "@humwick/sdk/child-env";
|
|
3
3
|
import { PROVIDER_SCRATCH_ENV_KEYS } from "@humwick/sdk/provider-scratch";
|
|
4
4
|
// Claude tmux transport plumbing (extracted from ./claude for the file-size
|
|
@@ -15,12 +15,12 @@ import { TMUX_SESSION_OWNER_OPTION, managedTmuxSocketName, renderTmuxSessionTarg
|
|
|
15
15
|
import { claudeClearCommitted, claudeConversationAnchor, claudePaneIsBusy, claudePaneLooksReady } from "./claude-status-detectors";
|
|
16
16
|
import { ClaudeSubmitFence, ClaudeSubmitTranscriptProbe, claudeSubmitRecoveryConfirmed, submitClaudePromptConfirmed } from "./claude-submit-confirmation";
|
|
17
17
|
import type { ClaudePromptHookExpectation, ClaudePromptHookLedger } from "./claude-prompt-hook";
|
|
18
|
-
import type { ProviderInputObserver } from "../adapter";
|
|
18
|
+
import type { ProviderInputObserver, RunnerSpawnConfig, SpawnArgs } from "../adapter";
|
|
19
19
|
import { logger } from "../logger";
|
|
20
20
|
import { claudeClearSessionVerdict, type ClaudeClearSessionReading } from "./claude-session-probe";
|
|
21
21
|
import { tmuxOwnerIdFromEnv } from "../config";
|
|
22
22
|
import { spawnSyncBounded } from "../bounded-spawn-sync";
|
|
23
|
-
import { launcherGatePathForSession, launcherScriptPathForSession
|
|
23
|
+
import { launcherGatePathForSession, launcherScriptPathForSession } from "../session-scratch";
|
|
24
24
|
import { captureTmuxPaneAsync, captureTmuxVisiblePaneAsync, loadTmuxBufferFromStdin, runTmuxInput, tmuxSessionPresence, type TmuxReadOpts, type TmuxSessionPresence } from "./tmux-offload";
|
|
25
25
|
|
|
26
26
|
export const CLAUDE_TMUX_SUBMIT_DELAY_MS = 250;
|
|
@@ -50,11 +50,6 @@ export function seedClaudeInitialPrompt(args: string[], prompt: string, options:
|
|
|
50
50
|
return { stdinFile: promptFile, exitCodeFile, stdinContents: prompt };
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
/** A missing sentinel means the one-shot process was killed before its shell could report success. */
|
|
54
|
-
export async function claudeOneShotExitStatus(exitCodeFile?: string): Promise<"offline" | "error"> {
|
|
55
|
-
if (!exitCodeFile) return "offline";
|
|
56
|
-
return (await readOneShotExitCode(exitCodeFile)) === "0" ? "offline" : "error";
|
|
57
|
-
}
|
|
58
53
|
|
|
59
54
|
export function tmuxSessionName(prefix: string, instanceId: string, label?: string): string {
|
|
60
55
|
if (label) return `${prefix}-${sanitizeFsName(label, { replacement: "-", collapse: false, lowercase: true })}`;
|
|
@@ -487,8 +482,12 @@ export function writeLauncherScript(sessionName: string, env: Record<string, str
|
|
|
487
482
|
const unsets = unsetKeys.map((key) => `unset ${shellEnvKey(key)}`).join("\n");
|
|
488
483
|
const gate = gateFifo ? `read -r _ < ${shellQuote(gateFifo)} || true\n` : "";
|
|
489
484
|
const stdin = stdinFile ? `exec < ${shellQuote(stdinFile)}\n` : "";
|
|
490
|
-
const
|
|
491
|
-
|
|
485
|
+
const codeFile = exitCodeFile ?? `${scriptPath}.exit-code`;
|
|
486
|
+
// Interactive Claude must own pane_pid for its session probe. execfail lets a
|
|
487
|
+
// failed exec return to EXIT; print mode keeps a parent to record completion (#3830).
|
|
488
|
+
const recordExit = `trap ${shellQuote(`exit_code=$?; printf '%s' "$exit_code" > ${shellQuote(codeFile)}; exit "$exit_code"`)} EXIT`;
|
|
489
|
+
const command = exitCodeFile ? `( ${shellCmd} )` : `exec ${shellCmd}`;
|
|
490
|
+
writeFileSync(scriptPath, `#!/usr/bin/env bash\numask 077\nshopt -s execfail\nrm -f -- ${shellQuote(codeFile)} ${shellQuote(`${codeFile}.stderr`)}\n${recordExit}\nexec 2> >(tee ${shellQuote(`${codeFile}.stderr`)} >&2)\n${exports ? `${exports}\n` : ""}${Object.keys(env).length ? `${envPipeSource()}\n` : ""}${unsets ? `${unsets}\n` : ""}rm -f -- "$0"\n${gate}${stdin}${command}\n`, { mode: 0o700 });
|
|
492
491
|
return scriptPath;
|
|
493
492
|
}
|
|
494
493
|
|
|
@@ -546,3 +545,32 @@ export function tmuxEnvKeys(env: Record<string, string>, providerEnv: Record<str
|
|
|
546
545
|
}
|
|
547
546
|
return [...keys].sort();
|
|
548
547
|
}
|
|
548
|
+
|
|
549
|
+
export function buildClaudeTmuxArgs(config: RunnerSpawnConfig, spawnArgs: SpawnArgs, provider: string): { sessionName: string; socketName: string; args: string[]; launcherScript: string; gateFifo?: string; printMode: boolean } {
|
|
550
|
+
const requestedSessionName = config.tmuxSession || tmuxSessionName(config.providerConfig.headless.tmuxPrefix, config.instanceId, config.label);
|
|
551
|
+
// Keep the socket derived from the orchestrator's stable identity, but carry
|
|
552
|
+
// tmux's rendered session name everywhere we later target the pane. Without
|
|
553
|
+
// this, `opus-4.8` is created as `opus-4_8` and every watcher/restart lookup
|
|
554
|
+
// immediately misses it.
|
|
555
|
+
const socketName = tmuxSocketName(requestedSessionName); const sessionName = tmuxSessionTargetName(requestedSessionName);
|
|
556
|
+
const shellCmd = [spawnArgs.command, ...spawnArgs.args].map(shellQuote).join(" ");
|
|
557
|
+
const tmuxArgs = ["new-session", "-d", "-s", sessionName, "-x", "200", "-y", "50"];
|
|
558
|
+
|
|
559
|
+
const envKeys = tmuxEnvKeys(spawnArgs.env, config.providerConfig.env, provider);
|
|
560
|
+
const env: Record<string, string> = {};
|
|
561
|
+
for (const key of envKeys) if (relayEnv(spawnArgs.env, key) !== undefined) writeChildEnv(env, { [key]: relayEnv(spawnArgs.env, key)! });
|
|
562
|
+
|
|
563
|
+
// Only gate the launch behind pipe-pane attachment when there's a log file to
|
|
564
|
+
// protect (#1317) — no point serializing dev/interactive spawns that never
|
|
565
|
+
// read AGENT_RELAY_LOG_FILE.
|
|
566
|
+
const gateFifo = relayEnv(spawnArgs.env, "AGENT_RELAY_LOG_FILE") ? launcherGatePathForSession(sessionName) : undefined;
|
|
567
|
+
|
|
568
|
+
// tmux new-session has a hard command-length limit that includes every argv item,
|
|
569
|
+
// including `-e KEY=value`. The script holds the command; its private FIFO
|
|
570
|
+
// carries env values without writing credentials to disk or argv.
|
|
571
|
+
const printMode = spawnArgs.args.some(arg => arg === "-p" || arg === "--print");
|
|
572
|
+
const exitCodeFile = spawnArgs.exitCodeFile ?? (printMode ? `${launcherScriptPathForSession(sessionName)}.exit-code` : undefined);
|
|
573
|
+
const launcherScript = writeLauncherScript(sessionName, env, shellCmd, gateFifo, spawnArgs.stdinFile, exitCodeFile, spawnArgs.envUnset);
|
|
574
|
+
tmuxArgs.push("-c", spawnArgs.cwd, `bash ${shellQuote(launcherScript)}`);
|
|
575
|
+
return { sessionName, socketName, args: tmuxArgs, launcherScript, gateFifo, printMode };
|
|
576
|
+
}
|
|
@@ -3,9 +3,9 @@ import { claudeSubagentEnv, claudeSubagentPolicy, configureClaudeSubagentLaunch,
|
|
|
3
3
|
import { submitClaudeContextCommand } from "./claude-context-command";
|
|
4
4
|
import { scopeClaudeCredentialEnv } from "./claude-credentials";
|
|
5
5
|
import { claudeEffortLaunch, claudeEffortSwitchMeta, switchClaudeEffort } from "./claude-effort";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { claudeLaunchExitStatus } from "./claude-launch-exit";
|
|
7
|
+
import { claudeCallerAppends } from "../claude-system-prompt";
|
|
8
|
+
import { resolveLaunchCommand } from "../provider-command";
|
|
9
9
|
import { fireAndForget, sanitizeLaunchBoundary, sanitizeLaunchText, type LivenessSignal, type Message } from "@humwick/sdk";
|
|
10
10
|
import { shellEscape as shellQuote } from "@humwick/sdk/shell-utils";
|
|
11
11
|
import { tmuxCommand, tmuxHasSession } from "@humwick/sdk/tmux-utils";
|
|
@@ -25,13 +25,13 @@ import { claudeActivityFromProbeAndPane, claudeBypassDialogDisplayGate, claudeBy
|
|
|
25
25
|
import { ClaudeSessionCapture, collectClaudeTranscriptArchiveSegment, collectClaudeTranscriptSessionEvents } from "./claude-session-capture";
|
|
26
26
|
import { claudeToolHookPaths, extractLatestContextUsage } from "./claude-transcript";
|
|
27
27
|
import { ClaudeTranscriptTokenUsageCapture } from "./claude-token-usage-capture";
|
|
28
|
-
import { CLAUDE_CLEAR_COMMIT_CAPTURE, CLAUDE_TMUX_READY_TIMEOUT_MS,
|
|
28
|
+
import { CLAUDE_CLEAR_COMMIT_CAPTURE, CLAUDE_TMUX_READY_TIMEOUT_MS, buildClaudeTmuxArgs, confirmClaudeSubmitRecovery, confirmTmuxSessionGone, createLauncherGate, createTmuxSessionWithEnv, releaseClaudeSubmitFence, releaseLauncherGate, seedClaudeInitialPrompt, submitTextToTmux, waitForClaudeClearCommitted, waitForClaudeInputReady } from "./claude-tmux";
|
|
29
29
|
import { captureTmuxPaneAsync, captureTmuxVisiblePaneAsync, resolveClaudePanePidAsync, tmuxSessionPresence } from "./tmux-offload";
|
|
30
30
|
import { claudeShutdownGraceMs, shutdownClaudeTmux, type ClaudeShutdownDeps } from "./claude-shutdown";
|
|
31
31
|
import { claudePermissionPromptHandler } from "./claude-permission";
|
|
32
32
|
import { claudeHarnessTrim, claudeProfileDisallowedToolsArgs } from "./claude-tool-policy";
|
|
33
33
|
import { claudeProjectShellEnv } from "./project-shell";
|
|
34
|
-
import {
|
|
34
|
+
import { stageOneShotPrompt } from "../session-scratch";
|
|
35
35
|
|
|
36
36
|
type MonitorlessTurnWatchDeps = {
|
|
37
37
|
resolvePanePid: typeof resolveClaudePanePidAsync;
|
|
@@ -635,32 +635,22 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
635
635
|
// #557 — ONE assembler owns the provisioning/vanilla/instruction launch surface
|
|
636
636
|
// (--setting-sources, --plugin-dir, --mcp-config, status-line, --append-system-prompt);
|
|
637
637
|
// profile-projection describes the SAME assembled result, so report == launch. The
|
|
638
|
-
// adapter only adds the bits the assembler does not own:
|
|
638
|
+
// adapter only adds the bits the assembler does not own: launch command resolution,
|
|
639
639
|
// headless permission flags, --model, and the positional prompt. materializeLaunchAssembly
|
|
640
640
|
// writes the provisioned skills/plugins the assembled args point at.
|
|
641
641
|
const assembled = assembleLaunch(this.provider, config, providerConfig);
|
|
642
|
-
materializeLaunchAssembly(this.provider, config);
|
|
642
|
+
materializeLaunchAssembly(this.provider, config, assembled);
|
|
643
643
|
const defaultArgs = assembled.hostDefaultArgs;
|
|
644
|
-
const
|
|
645
|
-
|
|
646
|
-
// claude-rig — claude-rig resolves host rig config and would redirect the assembled home.
|
|
647
|
-
// Only a profile-less (user-wrapped) session may use claude-rig.
|
|
648
|
-
const usesClaudeRig = isClaudeRig && !assembled.configHome;
|
|
649
|
-
const bypassRigDefaults = config.headless && usesClaudeRig && config.approvalMode !== "open";
|
|
650
|
-
const rigPrefix = usesClaudeRig && !bypassRigDefaults && config.rig ? ["launch", config.rig] : [];
|
|
651
|
-
const command = !usesClaudeRig || bypassRigDefaults || (!config.rig && !findClaudeRigRC(config.cwd))
|
|
652
|
-
? "claude"
|
|
653
|
-
: providerConfig.command;
|
|
654
|
-
const providerArgs = config.headless
|
|
644
|
+
const command = resolveLaunchCommand(providerConfig.command);
|
|
645
|
+
const providerArgs = claudeCallerAppends(config.headless
|
|
655
646
|
? claudeLaunchArgs(defaultArgs, config.providerArgs, config.approvalMode)
|
|
656
|
-
: [...defaultArgs, ...config.providerArgs];
|
|
647
|
+
: [...defaultArgs, ...config.providerArgs]).args;
|
|
657
648
|
// #1096 — when the assembler merged the caller's own `--settings` into relay's (so the
|
|
658
649
|
// baseline hooks/projectSettings/statusLine survive), drop the caller's now-redundant
|
|
659
650
|
// `--settings` here so exactly ONE reaches the launch (relay's merged copy in assembled.args).
|
|
660
651
|
// #2453 — the coding/review profiles' --disallowedTools trim unions in at this single
|
|
661
652
|
// claude-family launch seam (helpers + per-profile config in ./claude-tool-policy).
|
|
662
653
|
const args = claudeProfileDisallowedToolsArgs([
|
|
663
|
-
...rigPrefix,
|
|
664
654
|
...assembled.args,
|
|
665
655
|
...(assembled.callerSettingsConsumed ? stripSettingsArgs(providerArgs) : providerArgs),
|
|
666
656
|
], config);
|
|
@@ -673,12 +663,10 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
673
663
|
...config.env,
|
|
674
664
|
// #557 — the assembler owns the isolated config-home env (CLAUDE_CONFIG_DIR).
|
|
675
665
|
...assembled.env,
|
|
676
|
-
//
|
|
677
|
-
//
|
|
678
|
-
//
|
|
679
|
-
//
|
|
680
|
-
// inject their own token, so only thread it for the plain-claude path, and
|
|
681
|
-
// never override an explicit per-launch value.
|
|
666
|
+
// Bare `claude` runs its own CLAUDE_CONFIG_DIR and so never inherits the host's long-lived
|
|
667
|
+
// CLAUDE_CODE_OAUTH_TOKEN; without it claude falls back to the (often stale) file-based
|
|
668
|
+
// .credentials.json and bails to /login (401). A custom wrapper command manages its own
|
|
669
|
+
// token, and an explicit per-launch value always wins.
|
|
682
670
|
...(command === "claude" && process.env.CLAUDE_CODE_OAUTH_TOKEN && !config.env?.CLAUDE_CODE_OAUTH_TOKEN
|
|
683
671
|
? { CLAUDE_CODE_OAUTH_TOKEN: process.env.CLAUDE_CODE_OAUTH_TOKEN }
|
|
684
672
|
: {}),
|
|
@@ -758,36 +746,13 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
758
746
|
});
|
|
759
747
|
}
|
|
760
748
|
|
|
761
|
-
buildTmuxArgs(config: RunnerSpawnConfig, spawnArgs: SpawnArgs):
|
|
762
|
-
|
|
763
|
-
// Keep the socket derived from the orchestrator's stable identity, but carry
|
|
764
|
-
// tmux's rendered session name everywhere we later target the pane. Without
|
|
765
|
-
// this, `opus-4.8` is created as `opus-4_8` and every watcher/restart lookup
|
|
766
|
-
// immediately misses it.
|
|
767
|
-
const socketName = tmuxSocketName(requestedSessionName); const sessionName = tmuxSessionTargetName(requestedSessionName);
|
|
768
|
-
const shellCmd = [spawnArgs.command, ...spawnArgs.args].map(shellQuote).join(" ");
|
|
769
|
-
const tmuxArgs = ["new-session", "-d", "-s", sessionName, "-x", "200", "-y", "50"];
|
|
770
|
-
|
|
771
|
-
const envKeys = tmuxEnvKeys(spawnArgs.env, config.providerConfig.env, this.provider);
|
|
772
|
-
const env: Record<string, string> = {};
|
|
773
|
-
for (const key of envKeys) if (relayEnv(spawnArgs.env, key) !== undefined) writeChildEnv(env, { [key]: relayEnv(spawnArgs.env, key)! });
|
|
774
|
-
|
|
775
|
-
// Only gate the launch behind pipe-pane attachment when there's a log file to
|
|
776
|
-
// protect (#1317) — no point serializing dev/interactive spawns that never
|
|
777
|
-
// read AGENT_RELAY_LOG_FILE.
|
|
778
|
-
const gateFifo = relayEnv(spawnArgs.env, "AGENT_RELAY_LOG_FILE") ? launcherGatePathForSession(sessionName) : undefined;
|
|
779
|
-
|
|
780
|
-
// tmux new-session has a hard command-length limit that includes every argv item,
|
|
781
|
-
// including `-e KEY=value`. The script holds the command; its private FIFO
|
|
782
|
-
// carries env values without writing credentials to disk or argv.
|
|
783
|
-
const launcherScript = writeLauncherScript(sessionName, env, shellCmd, gateFifo, spawnArgs.stdinFile, spawnArgs.exitCodeFile, spawnArgs.envUnset);
|
|
784
|
-
tmuxArgs.push("-c", spawnArgs.cwd, `bash ${shellQuote(launcherScript)}`);
|
|
785
|
-
return { sessionName, socketName, args: tmuxArgs, launcherScript, gateFifo };
|
|
749
|
+
buildTmuxArgs(config: RunnerSpawnConfig, spawnArgs: SpawnArgs): ReturnType<typeof buildClaudeTmuxArgs> {
|
|
750
|
+
return buildClaudeTmuxArgs(config, spawnArgs, this.provider);
|
|
786
751
|
}
|
|
787
752
|
|
|
788
753
|
private async spawnHeadless(config: RunnerSpawnConfig, spawnArgs: SpawnArgs): Promise<ManagedProcess> {
|
|
789
754
|
if (spawnArgs.stdinFile && spawnArgs.exitCodeFile && spawnArgs.stdinContents !== undefined) await stageOneShotPrompt(spawnArgs.stdinFile, spawnArgs.exitCodeFile, spawnArgs.stdinContents);
|
|
790
|
-
const { sessionName, socketName, args: tmuxArgs, launcherScript, gateFifo } = this.buildTmuxArgs(config, spawnArgs);
|
|
755
|
+
const { sessionName, socketName, args: tmuxArgs, launcherScript, gateFifo, printMode } = this.buildTmuxArgs(config, spawnArgs);
|
|
791
756
|
const providerEpoch = ++this.providerEpoch;
|
|
792
757
|
this.modelUnavailableObservationState = initialClaudeModelUnavailableObservationState();
|
|
793
758
|
this.connectionRetryActive = false;
|
|
@@ -802,7 +767,8 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
802
767
|
|
|
803
768
|
await createTmuxSessionWithEnv(sessionName, socketName, tmuxArgs, launcherScript, spawnArgs.env, config.providerConfig.env, gateFifo, this.provider);
|
|
804
769
|
|
|
805
|
-
|
|
770
|
+
const exitCodeFile = spawnArgs.exitCodeFile ?? `${launcherScript}.exit-code`;
|
|
771
|
+
this.watchTmuxSession(sessionName, socketName, exitCodeFile, printMode);
|
|
806
772
|
// #1838 review MED — resolve the pane pid OFF the loop now that the session exists and cache
|
|
807
773
|
// it, so the synchronous resolveBusyPid() never has to shell out on a hot busy edge. Fenced
|
|
808
774
|
// on providerEpoch so a resolve that lands after a restart can't stamp a stale pid.
|
|
@@ -832,14 +798,15 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
832
798
|
tmuxSession: sessionName,
|
|
833
799
|
tmuxSocket: socketName,
|
|
834
800
|
launcherScript,
|
|
835
|
-
|
|
836
|
-
...(
|
|
801
|
+
exitCodeFile,
|
|
802
|
+
...claudeEffortSwitchMeta(this.provider, config, printMode),
|
|
803
|
+
printMode,
|
|
837
804
|
providerEpoch,
|
|
838
805
|
},
|
|
839
806
|
};
|
|
840
807
|
}
|
|
841
808
|
|
|
842
|
-
private watchTmuxSession(sessionName: string, socketName?: string,
|
|
809
|
+
private watchTmuxSession(sessionName: string, socketName?: string, exitCodeFile?: string, oneShot = false): void {
|
|
843
810
|
if (this.tmuxWatcher) clearInterval(this.tmuxWatcher);
|
|
844
811
|
// #1838 row 12 — the highest-frequency blocking site in the runner (every 2s for the
|
|
845
812
|
// agent's whole lifetime). Its two tmux subprocesses (has-session + capture-pane) now run
|
|
@@ -849,6 +816,7 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
849
816
|
// probe on the same pane. `this.tmuxWatcher !== watcher` still fences a predecessor tick
|
|
850
817
|
// whose session was replaced by a respawn.
|
|
851
818
|
let tickInFlight = false;
|
|
819
|
+
let lastPane = "";
|
|
852
820
|
const watcher = setInterval(() => {
|
|
853
821
|
if (this.tmuxWatcher !== watcher || tickInFlight) return;
|
|
854
822
|
tickInFlight = true;
|
|
@@ -866,7 +834,7 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
866
834
|
// confirm itself only returns true when BOTH reads are `absent` (#1838 HIGH-2).
|
|
867
835
|
const gone = await confirmTmuxSessionGone(sessionName, socketName).catch(() => false);
|
|
868
836
|
if (this.tmuxWatcher !== watcher || !gone) return;
|
|
869
|
-
const exitStatus = await
|
|
837
|
+
const exitStatus = await claudeLaunchExitStatus(exitCodeFile, this.startupReadyObserved, oneShot, lastPane);
|
|
870
838
|
if (this.tmuxWatcher !== watcher) return;
|
|
871
839
|
clearInterval(watcher); this.tmuxWatcher = undefined; this.publishConfirmedTmuxExit(exitStatus);
|
|
872
840
|
return;
|
|
@@ -879,6 +847,7 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
879
847
|
}
|
|
880
848
|
// #1838 HIGH-1: fence again after the capture await, before any observation/status emit.
|
|
881
849
|
if (this.tmuxWatcher !== watcher) return;
|
|
850
|
+
lastPane = pane;
|
|
882
851
|
// A reused tmux pane can leave an old ready footer in scrollback. Until the
|
|
883
852
|
// current launch is visibly ready, derive both readiness and modal state
|
|
884
853
|
// from the visible grid. After that, avoid an extra capture every tick.
|
|
@@ -938,7 +907,7 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
938
907
|
this.tmuxWatcher = watcher;
|
|
939
908
|
}
|
|
940
909
|
|
|
941
|
-
private publishConfirmedTmuxExit(status:
|
|
910
|
+
private publishConfirmedTmuxExit(status: ProviderStatusUpdate): void {
|
|
942
911
|
// The pane and turn pollers are independent. Invalidate the turn generation BEFORE publishing
|
|
943
912
|
// the terminal edge so an in-flight incarnation/activity read cannot land a later idle and
|
|
944
913
|
// resurrect the row with its shutting-down lifecycle pill still latched (#2505).
|
|
@@ -962,7 +931,7 @@ export class ClaudeAdapter implements ProviderAdapter {
|
|
|
962
931
|
const socketName = process.meta?.tmuxSocket as string | undefined;
|
|
963
932
|
const turnWatchResume = this.turnWatchResume?.process === process ? this.turnWatchResume : undefined;
|
|
964
933
|
this.statusWatchersStopped = false;
|
|
965
|
-
if (sessionName) this.watchTmuxSession(sessionName, socketName, process.meta?.
|
|
934
|
+
if (sessionName) this.watchTmuxSession(sessionName, socketName, process.meta?.exitCodeFile as string | undefined, process.meta?.printMode === true);
|
|
966
935
|
if (turnWatchResume) await this.beginMonitorlessTurnWatch(process, turnWatchResume.sessionName, turnWatchResume.socketName, false);
|
|
967
936
|
}
|
|
968
937
|
|
|
@@ -1058,22 +1027,6 @@ export { claudeActivityFromProbeAndPane, claudePaneLooksReady, claudePaneIsBusy,
|
|
|
1058
1027
|
// Shared shell-quoting; re-exported so `./claude` consumers + tests resolve it.
|
|
1059
1028
|
export { shellQuote };
|
|
1060
1029
|
|
|
1061
|
-
export function findClaudeRigRC(cwd: string): string | null {
|
|
1062
|
-
const home = homedir();
|
|
1063
|
-
let dir = resolve(cwd);
|
|
1064
|
-
while (true) {
|
|
1065
|
-
// Stop at $HOME without inspecting it: ~/.claude-rig is the claude-rig tool's
|
|
1066
|
-
// own config home, not a per-project rc marker. Matching it would make every
|
|
1067
|
-
// project under $HOME look like a claude-rig project.
|
|
1068
|
-
if (dir === home) return null;
|
|
1069
|
-
const rc = join(dir, ".claude-rig");
|
|
1070
|
-
if (existsSync(rc)) return rc;
|
|
1071
|
-
const parent = resolve(dir, "..");
|
|
1072
|
-
if (parent === dir) return null;
|
|
1073
|
-
dir = parent;
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
1030
|
async function terminateSingleProcess(process: ManagedProcess, opts: { graceful: boolean; timeoutMs: number }): Promise<ShutdownOutcome> {
|
|
1078
1031
|
const proc = process.process;
|
|
1079
1032
|
if (!proc) return "killed"; // nothing to kill — vacuously terminal
|
|
@@ -10,6 +10,7 @@ import { hostProviderDefaultArgs } from "../host-asset-plan";
|
|
|
10
10
|
import { bundledSkillConfigArgs } from "../launch-assembly";
|
|
11
11
|
import { codexRetiredMcpConfigArgs } from "./codex-effective-config";
|
|
12
12
|
import { codexWebToolsConfigArgs } from "../web-tools";
|
|
13
|
+
import type { ResolvedModelRecord } from "@humwick/sdk/provider-catalog";
|
|
13
14
|
import { tomlString } from "../relay-mcp";
|
|
14
15
|
|
|
15
16
|
export const DEFAULT_CODEX_TOOL_OUTPUT_TOKEN_LIMIT = 12_000;
|
|
@@ -31,14 +32,12 @@ export const DEFAULT_CODEX_TOOL_OUTPUT_TOKEN_LIMIT = 12_000;
|
|
|
31
32
|
// advertise longer polls to the model (#2776): agents are steered to end the turn and take the wake.
|
|
32
33
|
const CODEX_BACKGROUND_TERMINAL_MAX_TIMEOUT_MS = 900000;
|
|
33
34
|
|
|
34
|
-
export function codexModelConfigArgs(model?: string, effort?: string): string[] {
|
|
35
|
+
export function codexModelConfigArgs(model?: string, effort?: string, record?: ResolvedModelRecord): string[] {
|
|
35
36
|
const args: string[] = [];
|
|
36
37
|
if (model) args.push("-c", `model=${tomlString(model)}`);
|
|
37
38
|
if (effort) args.push("-c", `model_reasoning_effort=${tomlString(effort)}`);
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
args.push("-c", "model_context_window=1000000", "-c", "model_auto_compact_token_limit=272000");
|
|
41
|
-
}
|
|
39
|
+
if (record?.contextWindowTokens) args.push("-c", `model_context_window=${record.contextWindowTokens}`);
|
|
40
|
+
if (record?.contextWindowTokens && record.contextThreshold) args.push("-c", `model_auto_compact_token_limit=${Math.floor(record.contextWindowTokens * record.contextThreshold.selfCompactUtilization)}`);
|
|
42
41
|
return args;
|
|
43
42
|
}
|
|
44
43
|
|
|
@@ -688,7 +688,7 @@ export class CodexAdapter implements ProviderAdapter {
|
|
|
688
688
|
? [
|
|
689
689
|
"app-server",
|
|
690
690
|
...codexAppServerConfigArgs(defaultArgs, config.providerArgs),
|
|
691
|
-
...codexModelConfigArgs(config.model, config.effort),
|
|
691
|
+
...codexModelConfigArgs(config.model, config.effort, config.modelRecord),
|
|
692
692
|
...codexApprovalConfigArgs(config.approvalMode),
|
|
693
693
|
...codexToolOutputTokenLimitConfigArgs(config), ...codexHarnessConfigArgs(config), ...codexWebToolsConfigArgs(config),
|
|
694
694
|
...assembled.args,
|