@humwick/server 0.130.2 → 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/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-coordination.md +1 -0
- package/docs/guides/workflows.md +16 -0
- package/docs/openapi.json +73 -4
- package/package.json +8 -7
- package/public/assets/{MessageBubble-BWLqMGKG.js → MessageBubble-Bq9kr21N.js} +2 -2
- package/public/assets/{PlanGraphPanel-3TlIQpjk.js → PlanGraphPanel-Dqiroy06.js} +2 -2
- package/public/assets/{TraceView-Wimm0Czv.js → TraceView-DYU962-H.js} +2 -2
- package/public/assets/{VaultDecisionCard-Bau_vNax.js → VaultDecisionCard-DhPfzioE.js} +2 -2
- package/public/assets/{activity-CrSurn-r.js → activity-DzCcQTee.js} +2 -2
- package/public/assets/{agent-lineage-CknAJKcb.js → agent-lineage-SgDt9i3T.js} +2 -2
- package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
- package/public/assets/{agent-name-DKbiIhBo.js → agent-name-CcY3Aijy.js} +2 -2
- package/public/assets/{agent-profiles-DwF6EQ4R.js → agent-profiles-cxtRBn6O.js} +2 -2
- package/public/assets/{agent-project-badge-Diz4Sjjb.js → agent-project-badge-DGYbIhaI.js} +2 -2
- package/public/assets/{agent-tools-CRhpRQza.js → agent-tools-DHbftV0N.js} +2 -2
- package/public/assets/{agent-type-icon-LrUEU3lB.js → agent-type-icon-CY113sp-.js} +2 -2
- package/public/assets/{agents-B-v66C-4.js → agents-BPzY7IlQ.js} +2 -2
- package/public/assets/{analytics-BqCb-LKi.js → analytics-DENFPv_a.js} +2 -2
- package/public/assets/{artifact-viewer-kf4pGuAR.js → artifact-viewer-KRvSc7sl.js} +2 -2
- package/public/assets/{artifacts-DJevXcvg.js → artifacts-C9gSmL3s.js} +2 -2
- package/public/assets/{artifacts-D32zyw4Y.js → artifacts-DT-HkI5O.js} +2 -2
- package/public/assets/{automation-BpRajx_5.js → automation-BsmjQhKD.js} +2 -2
- package/public/assets/{backlog-D_UjTdzX.js → backlog-8NYH_62t.js} +2 -2
- package/public/assets/{busy-health-N3VEh4ao.js → busy-health-D3hwvYb4.js} +2 -2
- package/public/assets/{channels-9jopungq.js → channels-DCJ5WL7O.js} +2 -2
- package/public/assets/{chat-CSXrTB3C.js → chat-DAIl357U.js} +3 -3
- package/public/assets/{code-preview-p1NnmqK0.js → code-preview-CzrZfr9U.js} +2 -2
- package/public/assets/{connectors-CZdqlDNL.js → connectors-xTxtlyou.js} +2 -2
- package/public/assets/{cosmos-BgdsE4dG.js → cosmos-BpebFLK2.js} +2 -2
- package/public/assets/{crate-agent-30aXTKva.js → crate-agent-BHvI5wXC.js} +2 -2
- package/public/assets/{dependency-graph-B_jvw2GE.js → dependency-graph-DGT0o3wJ.js} +2 -2
- package/public/assets/{deploys-DoN6bAb5.js → deploys-hqWOHSHE.js} +2 -2
- package/public/assets/{display-BrKWFGJz.js → display-CDeH4I8T.js} +2 -2
- package/public/assets/{files-D6XEu8Ng.js → files-BTeGVmTg.js} +2 -2
- package/public/assets/{fleet-C7jQWbw2.js → fleet-DgXtNgCa.js} +2 -2
- package/public/assets/{fleet-metrics-BiDs3MLx.js → fleet-metrics-BHEt5yc_.js} +2 -2
- package/public/assets/{formatted-body-CQBwc1fb.js → formatted-body-MLtodyPp.js} +3 -3
- package/public/assets/{formatted-body-impl-DyG0WsQS.js → formatted-body-impl-CAe664Z8.js} +2 -2
- package/public/assets/{host-providers-dialog-DKaW31dN.js → host-providers-dialog-mapF4Fj9.js} +2 -2
- package/public/assets/{index-CRHep3M9.js → index-CqqgOI5R.js} +5 -5
- package/public/assets/{insights-CzrtkpOE.js → insights-DNyf7IzF.js} +2 -2
- package/public/assets/{integrations-aVsUmigt.js → integrations-DlYOHq7T.js} +2 -2
- package/public/assets/{issue-ref-chip-BnSlM_95.js → issue-ref-chip-CeWBNWn7.js} +2 -2
- package/public/assets/{log-viewer-qe7Ee47Z.js → log-viewer-Cib8nqdE.js} +2 -2
- package/public/assets/{maintenance-NfjqFZAk.js → maintenance-DSn1cPm7.js} +2 -2
- package/public/assets/{managed-agents-BiH0HgaE.js → managed-agents-C3CkM81m.js} +2 -2
- package/public/assets/{markdown-preview-BixaT3Xr.js → markdown-preview-W4VQQPAv.js} +3 -3
- package/public/assets/{markdown-preview-impl-DNGlWIS3.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
- package/public/assets/{memory-DNsCl6UX.js → memory-BV17qtO4.js} +2 -2
- package/public/assets/{messages-DopU1L1X.js → messages-Bm_1AqSA.js} +2 -2
- package/public/assets/{orchestrators-Cq7ckLQT.js → orchestrators-Dg-vfP09.js} +2 -2
- package/public/assets/{overview-C1DCTzzV.js → overview-DcYCrvlr.js} +2 -2
- package/public/assets/{pairs-DE_m6rrE.js → pairs-8o9nuG3V.js} +2 -2
- package/public/assets/{profile-icon-B3rfh77F.js → profile-icon-BsRyBMea.js} +2 -2
- package/public/assets/{project-profile-instructions-DQWZE0kA.js → project-profile-instructions-DETKFn_E.js} +2 -2
- package/public/assets/{projects-Br2Bd2h1.js → projects-M_m6AHws.js} +2 -2
- package/public/assets/{prompt-settings-BKvFsvGD.js → prompt-settings-C_mNCgeL.js} +2 -2
- package/public/assets/provider-display-BEeLXC_D.js +2 -0
- package/public/assets/{registry-Cw38_6gW.js → registry-DDHHHE5N.js} +2 -2
- package/public/assets/run-card-Dt4I4jaP.js +2 -0
- package/public/assets/{secrets-DxI-vzSq.js → secrets-BkVwxI5O.js} +2 -2
- package/public/assets/{service-access-settings-D9s_VJbd.js → service-access-settings-Crq-6a-B.js} +2 -2
- package/public/assets/{settings-CKZTVGIx.js → settings-CYcavMFu.js} +2 -2
- package/public/assets/shipping-H6gzEeZB.js +2 -0
- package/public/assets/{stats-DyUBKyWI.js → stats-BJVeWkpV.js} +2 -2
- package/public/assets/{status-dot-DYqlEUhJ.js → status-dot-BcHyw1Vw.js} +2 -2
- package/public/assets/store-DKPDIZBe.js +9 -0
- package/public/assets/{tasks-Bh7Chr4-.js → tasks-qJjlQPpx.js} +2 -2
- package/public/assets/{teams-bowI7qVY.js → teams-Cd5Sk1uX.js} +2 -2
- package/public/assets/{terminal-viewer-BgVLHdsU.js → terminal-viewer-CpY5_m7W.js} +3 -3
- package/public/assets/{terminal-viewer-impl-Dz22UPy6.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
- package/public/assets/{use-agent-terminal-DSQQ-iY7.js → use-agent-terminal-0yJA_buM.js} +2 -2
- package/public/assets/{use-decisions-samMQhQf.js → use-decisions-uJXHf34W.js} +2 -2
- package/public/assets/{use-project-list-59LheVP7.js → use-project-list-CpWl6eHQ.js} +2 -2
- package/public/assets/{use-selectors-BZa25xEB.js → use-selectors-BdxBW8mL.js} +2 -2
- package/public/assets/{user-avatar-DHxlvUvV.js → user-avatar-3IndfpOc.js} +2 -2
- package/public/assets/{versioned-prompt-editor-BmED5DnJ.js → versioned-prompt-editor-CIVg7XB1.js} +2 -2
- package/public/assets/{work-queue-CSvpuNLz.js → work-queue-B9rnLwHZ.js} +2 -2
- package/public/assets/{workflow-marker-DAZcj5qt.js → workflow-marker-X8wxyhzC.js} +2 -2
- package/public/assets/{workflows-DdmxRSyg.js → workflows-o5YyMFW7.js} +2 -2
- package/public/assets/{workspaces-BxeKfVuF.js → workspaces-CzEGoAng.js} +2 -2
- package/public/cosmos.html +4 -4
- package/public/index.html +28 -28
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- 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/provider-quota-harvest.ts +20 -71
- package/runner/src/agent-runner/lifecycle-milestones.ts +2 -2
- package/runner/src/agent-runner/liveness-exchange.ts +104 -0
- package/runner/src/claude-system-prompt.ts +49 -0
- 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 +2 -1
- package/runner/src/runner-core.ts +14 -15
- package/runner/src/runner-helpers.ts +0 -8
- package/runner/src/session-scratch.ts +6 -2
- package/runner/test-support/provisioning-context.ts +4 -2
- package/runner/test-support/runner-harness.ts +2 -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 +3 -3
- package/src/branch-landed.ts +25 -23
- package/src/bus.ts +21 -19
- package/src/cd-deploy-notify.ts +2 -2
- package/src/ci/notifications.ts +4 -4
- package/src/ci/root-missing.ts +3 -3
- package/src/ci/transition-notify.ts +5 -5
- package/src/claude-app/oauth-http.ts +3 -3
- package/src/cli/workflow.ts +12 -3
- package/src/commands-db.ts +4 -4
- package/src/commands-write.ts +8 -0
- package/src/compaction-watch.ts +10 -8
- package/src/config-store-write.ts +2 -2
- package/src/config.ts +4 -11
- package/src/connectors.ts +10 -8
- package/src/context-advisory.ts +22 -21
- 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/agents-async.ts +8 -5
- package/src/db/agents.ts +15 -12
- 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/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/commands-planner-stats.test-fixture.ts +8 -0
- package/src/db/commands-read-ops.ts +16 -0
- package/src/db/connection.ts +1 -182
- package/src/db/context-carry-write.ts +74 -0
- package/src/db/continuations.ts +4 -4
- package/src/db/db-error-registry.ts +12 -0
- package/src/db/gateway.ts +26 -133
- package/src/db/history-retention-ops.ts +13 -0
- package/src/db/inbox-async.ts +2 -2
- package/src/db/inbox-read-ops.ts +1 -1
- package/src/db/inbox.ts +9 -3
- package/src/db/issue-associations.ts +2 -2
- package/src/db/issue-refs-async.ts +4 -1
- package/src/db/issue-refs-read-ops.ts +6 -0
- package/src/db/issue-refs.ts +8 -8
- 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/main-connection-mode.ts +11 -0
- package/src/db/main-connection-writes.ts +20 -2
- package/src/db/maintenance-job-runs-async.ts +2 -2
- package/src/db/maintenance-job-write-ops.ts +1 -1
- package/src/db/maintenance-pauses.ts +2 -2
- package/src/db/message-send.ts +4 -0
- package/src/db/messages.ts +31 -25
- package/src/db/migrations.ts +18 -1
- package/src/db/notification-write-ops.ts +19 -0
- package/src/db/operator-answer-write.ts +19 -0
- package/src/db/orchestrators.ts +10 -4
- package/src/db/pairs-async.ts +22 -1
- package/src/db/pairs-write-ops.ts +8 -3
- package/src/db/pairs.ts +41 -48
- 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-trust-approvals.ts +2 -2
- package/src/db/prompt-templates.ts +4 -4
- package/src/db/read-op-marshaling-fixtures.ts +18 -0
- package/src/db/read-ops.ts +4 -0
- package/src/db/retention.ts +13 -2
- package/src/db/review-publish-write.ts +8 -0
- 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 +4 -1
- package/src/db/spawn-budget.ts +5 -0
- package/src/db/spawn-delegation.ts +1 -11
- package/src/db/sql-audit-indexes.ts +3 -0
- package/src/db/stats-async.ts +5 -3
- package/src/db/task-entity.ts +5 -4
- 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/token-db-write-ops.ts +2 -0
- package/src/db/token-standing-async.ts +12 -0
- package/src/db/token-standing.ts +6 -9
- 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/workspaces.ts +8 -5
- package/src/db/write-ops.ts +31 -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 +42 -46
- package/src/dev.ts +8 -3
- 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-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 +104 -98
- package/src/maintenance/breaker.ts +18 -16
- package/src/maintenance/checkout-refresh.ts +18 -1
- package/src/maintenance/critical-job-watchdog.ts +3 -3
- package/src/maintenance/events.ts +3 -3
- package/src/maintenance/history-retention-job.ts +30 -0
- package/src/maintenance/jobs.ts +29 -67
- 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 +18 -13
- package/src/maintenance/stalled-delivery-pager.ts +4 -4
- package/src/maintenance/teams.ts +19 -30
- package/src/maintenance/workspaces.ts +17 -27
- package/src/managed-policy-escalation.ts +7 -7
- package/src/managed-policy.ts +3 -3
- package/src/managed-provider-gate.ts +5 -4
- package/src/managed-spawn-reservation.ts +5 -4
- package/src/mcp/index.ts +8 -8
- package/src/mcp/output-descriptions.ts +1 -1
- package/src/mcp/presentation.ts +2 -1
- 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 +3 -2
- package/src/mcp/tool-roles.ts +81 -0
- package/src/mcp/tools-workspace.ts +1 -1
- 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 +3 -3
- 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 +1 -1
- package/src/mcp-project-journal-tools.ts +4 -12
- package/src/mcp-project-tools.ts +17 -18
- package/src/mcp-routing-policy-tools.ts +3 -2
- package/src/mcp-team-tools.ts +6 -6
- package/src/mcp-workflow-tools.ts +5 -3
- 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/notify.ts +5 -5
- package/src/observed-reset-refresh.ts +4 -4
- package/src/operator-alarm.ts +2 -5
- package/src/project-ingest.ts +6 -6
- package/src/project-instructions.ts +8 -1
- package/src/project-trust.ts +12 -11
- package/src/prompt-resolver.ts +3 -3
- package/src/provider-quota-async.ts +5 -7
- package/src/provider-timeline-event.ts +4 -7
- package/src/quota-band-delivery.ts +2 -2
- package/src/recipe-runner.ts +4 -3
- 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-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 +1 -1
- package/src/routes/agents.ts +17 -119
- 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 +1 -1
- package/src/routes/commands.ts +29 -27
- package/src/routes/context-resets.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 +2 -1
- package/src/routes/integrations.ts +9 -7
- package/src/routes/issue-activity.ts +2 -2
- package/src/routes/issue-associations.ts +4 -4
- package/src/routes/issue-refs.ts +3 -3
- 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 +1 -1
- package/src/routes/orchestrator-host-registration.ts +2 -0
- package/src/routes/orchestrator-host-utilization.ts +2 -2
- package/src/routes/orchestrator-proxy.ts +2 -2
- package/src/routes/orchestrator.ts +27 -18
- package/src/routes/pairs.ts +8 -8
- package/src/routes/project-profile-instructions.ts +1 -1
- package/src/routes/project-trust.ts +1 -1
- package/src/routes/projects.ts +16 -16
- package/src/routes/prompt-templates.ts +12 -12
- 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 +1 -1
- 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/team-templates.ts +7 -7
- package/src/routes/teams.ts +10 -10
- package/src/routes/tokens.ts +18 -17
- 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 +2 -2
- package/src/routes/workspaces.ts +17 -16
- package/src/routing-policy-push.ts +6 -6
- package/src/runtime-grant.ts +17 -11
- package/src/runtime-tokens.ts +20 -28
- package/src/secrets-broker/config.ts +1 -1
- package/src/secrets-broker/service.ts +2 -2
- package/src/security.ts +3 -1
- 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 +1 -1
- package/src/server.ts +21 -22
- 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 +9 -9
- package/src/services/idle-agent-digest.ts +17 -12
- package/src/services/idle-epics.ts +4 -4
- 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 +14 -13
- package/src/services/issue-refs.ts +4 -5
- package/src/services/kernel-timers-cutover-chaos-worker.ts +1 -1
- package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
- package/src/services/kernel-timers-ingress.ts +3 -3
- 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 +6 -5
- 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 +3 -3
- 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 +1 -1
- 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 +8 -3
- package/src/services/profile-trust.ts +2 -2
- 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/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 +17 -16
- 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-effort-grant.ts +5 -25
- package/src/services/send-message.ts +16 -33
- package/src/services/shutdown-agent.ts +17 -14
- package/src/services/spawn-agent.ts +12 -41
- package/src/services/spawn-chain-inspector.ts +1 -1
- 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-registration-watchdog.ts +2 -2
- package/src/services/spawn-repo-probe.ts +7 -5
- package/src/services/spawn-tree-cleanup.ts +7 -8
- 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-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 +3 -4
- package/src/services/task-validation.ts +2 -2
- package/src/services/team-templates.ts +5 -5
- 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 +22 -19
- 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 +2 -1
- package/src/services/workflow-caller.ts +61 -4
- package/src/services/workflow-child-proof-worker.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 +1 -1
- package/src/services/workflow-effect-driver.ts +42 -19
- package/src/services/workflow-effects.ts +41 -27
- package/src/services/workflow-pins.ts +7 -4
- package/src/services/workflow-reconcile.ts +1 -0
- 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 +4 -3
- package/src/services/workflow-run.test-fixture.ts +1 -1
- package/src/services/workflow-runs.ts +34 -22
- package/src/services/workflow-supervisor-state.ts +21 -1
- package/src/services/workflow-supervisor.ts +4 -3
- package/src/services/workspace-recovery.ts +4 -3
- package/src/spawn-admission.ts +10 -2
- package/src/spawn-placement.ts +27 -9
- package/src/spawn-targets.ts +8 -8
- package/src/sse-agent-status.ts +15 -6
- package/src/sse.ts +49 -24
- package/src/startup-context-injection.ts +61 -57
- package/src/steward-handoff.ts +4 -3
- package/src/steward-policy-cleanup.ts +9 -8
- package/src/steward.ts +2 -2
- package/src/task-dispatch-live.ts +5 -2
- package/src/task-dispatcher.ts +2 -2
- 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 +24 -16
- 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 +2 -2
- package/public/assets/agent-liveness-CaNwK0Zf.js +0 -2
- package/public/assets/provider-display-DsuWMvVL.js +0 -2
- package/public/assets/run-card-CpKqRbhg.js +0 -2
- package/public/assets/shipping-B9YtnwtG.js +0 -2
- package/public/assets/store-DcClXLH0.js +0 -9
- package/runner/src/agent-runner/http-liveness.ts +0 -85
- package/src/db/on-loop-write-transaction.ts +0 -34
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{p as t,u as n}from"./dist-DeW2Y1R5.js";import{t as r,wt as i}from"./store-DcClXLH0.js";import{N as a}from"./provider-display-DsuWMvVL.js";import{et as o}from"./display-BrKWFGJz.js";import{t as s}from"./api-CIIVBtAV.js";import{i as c,n as l,r as u,t as d}from"./package-open-ckPgcjpv.js";import{t as f}from"./check-B3M9Ug1P.js";import{t as p}from"./chevron-down-BoG3JCZn.js";import{t as m}from"./chevron-right-iljytE0x.js";import{t as h}from"./clock-BWPPBh1_.js";import{t as g}from"./eye-BAP6fHrX.js";import{t as _}from"./file-pen-Crunre5f.js";import{t as v}from"./flag-CnEG9PH-.js";import{t as y}from"./folder-open-CBUCMSlu.js";import{t as b}from"./git-branch-yxhV0m8E.js";import{t as x}from"./git-commit-horizontal-DS1pJ_SS.js";import{t as S}from"./git-merge-C7eIG425.js";import{t as ee}from"./pause-DttnHD4c.js";import{t as te}from"./play-BbT8m7A0.js";import{t as C}from"./refresh-cw-CfpvQcUn.js";import{t as w}from"./trash-2-FbcSq927.js";import{t as T}from"./triangle-alert-BBNhfgMi.js";import{t as E}from"./x-Bge17hWJ.js";import{t as D}from"./button-Do6Z3vvn.js";import{t as O}from"./badge-DqJRtj_p.js";import{t as k}from"./copy-button-CjOj4HEf.js";import{t as A}from"./task-chip-CYj0mpoL.js";import{t as j}from"./agent-name-DKbiIhBo.js";import{o as M,r as N,s as P,t as F}from"./card-C4QJ4hCW.js";var I=[`cleaned`,`merged`,`landed`,`abandoned`],ne=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`,`gate_running`,`gate_failed`,`merging`]),L=new Set([`active`,`ready`,`review_requested`,`merge_planned`,`gate_failed`,`conflict`]),R={active:`bg-tone-info/10 text-tone-info-fg border-tone-info/20`,ready:`bg-tone-success/10 text-tone-success-fg border-tone-success/20`,conflict:`bg-tone-danger/10 text-tone-danger-fg border-tone-danger/20`,review_requested:`bg-tone-yellow/10 text-tone-yellow-fg border-tone-yellow/20`,merge_planned:`bg-tone-indigo/10 text-tone-indigo-fg border-tone-indigo/20`,gate_running:`bg-tone-sky/10 text-tone-sky-fg border-tone-sky/20`,gate_failed:`bg-tone-danger/10 text-tone-danger-fg border-tone-danger/20`,merging:`bg-tone-indigo/10 text-tone-indigo-fg border-tone-indigo/20`,landed:`bg-tone-violet/10 text-tone-violet-fg border-tone-violet/20`,merged:`bg-tone-violet/10 text-tone-violet-fg border-tone-violet/20`,abandoned:`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`,cleanup_requested:`bg-tone-orange/10 text-tone-orange-fg border-tone-orange/20`,cleaned:`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`,stranded:`bg-tone-warning/10 text-tone-warning-fg border-tone-warning/20`},z={active:`active`,ready:`ready`,conflict:`conflict`,review_requested:`review`,merge_planned:`queued`,gate_running:`gate running`,gate_failed:`gate failed`,merging:`merging`,landed:`landed`,merged:`merged`,abandoned:`abandoned`,cleanup_requested:`cleanup`,cleaned:`cleaned`,stranded:`stranded`},B={conflict:0,ready:1,review_requested:2,merge_planned:3,gate_running:4,gate_failed:5,merging:6,active:7,cleanup_requested:8,landed:9,merged:10,abandoned:11,cleaned:12,stranded:13},V=n();function H({workspace:e,expanded:t,onToggleDetails:n}){let i=r(e=>e.workspaceAction),a=r(e=>e.purgeWorkspace),o=r(e=>e.fetchWorkspaceMergePreview),s=r(e=>e.openFilesAt),c=e.status===`cleaned`||e.status===`merged`||e.status===`landed`||e.status===`abandoned`,l=!!e.metadata.stewardCancellation&&![`completed`,`unproven-released`].includes(e.metadata.stewardCancellation.status),u=l||c||e.status===`cleanup_requested`,d=e.worktreePath||e.sourceCwd||e.repoRoot,h=r(t=>t.workspaceGitState[e.id]),_=!!h&&h.available!==!1&&h.landed===!0,b=!!e.metadata.mergeHold,x=e.mode===`isolated`&&!!e.worktreePath&&L.has(e.status)&&!_&&!l&&!b;async function C(){await o(e.id),await i(e.id,`merge`)}return(0,V.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-1.5`,children:[(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:t?`Hide details`:`Show diff & timeline`,onClick:n,children:t?(0,V.jsx)(p,{className:`h-3.5 w-3.5`}):(0,V.jsx)(m,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:`Open workspace`,disabled:!d||e.status===`cleaned`,onClick:()=>void s({path:d}),children:(0,V.jsx)(y,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(k,{value:d,label:`Copy path`,copiedLabel:`Copied path`,size:`icon-sm`,variant:`ghost`,disabled:!d}),e.mode===`isolated`&&!c&&(0,V.jsxs)(D,{size:`sm`,variant:`outline`,title:b?`Resume workspace merge`:`Hold workspace merge (does not cancel an admitted land)`,onClick:()=>void i(e.id,b?`resume-merge`:`hold-merge`),children:[b?(0,V.jsx)(te,{className:`mr-1 h-3.5 w-3.5`}):(0,V.jsx)(ee,{className:`mr-1 h-3.5 w-3.5`}),b?`Merge held — resume`:`Hold merge`]}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Mark ready`,disabled:u||e.status===`ready`,onClick:()=>void i(e.id,`ready`),children:(0,V.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Request review`,disabled:u||e.status===`review_requested`,onClick:()=>void i(e.id,`request-review`),children:(0,V.jsx)(g,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Mark merge planned`,disabled:u||b||e.status===`merge_planned`,onClick:()=>void i(e.id,`merge-plan`),children:(0,V.jsx)(v,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`default`,title:_?`Already merged into base — nothing to land`:`Merge & land work`,disabled:!x,onClick:()=>void C(),children:(0,V.jsx)(S,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Request cleanup (removes the worktree on the host)`,disabled:u,onClick:()=>void i(e.id,`cleanup`),children:(0,V.jsx)(w,{className:`h-3.5 w-3.5`})}),c&&(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:`Purge record (clears the row, does not touch disk)`,onClick:()=>void a(e.id),children:(0,V.jsx)(E,{className:`h-3.5 w-3.5`})})]})}var U=e(t(),1),W=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`,`gate_running`,`gate_failed`,`merging`,`cleanup_requested`]),G=new Set(I),K=`__all__`,q=`__unassigned__`;function J(e,t){let n=new Map;for(let t of e){let e=t.repoRoot||t.sourceCwd||`unknown repo`;n.set(e,[...n.get(e)||[],t])}return[...n.entries()].map(([e,n])=>({repoRoot:e,workspaces:n.sort(t)})).sort((e,t)=>e.repoRoot.localeCompare(t.repoRoot))}function Y(e,t){let n=new Map;for(let t of e){let e=t.projectSlug||t.repoRoot||t.sourceCwd||`unassigned`;n.set(e,[...n.get(e)||[],t])}return[...n.entries()].map(([e,n])=>{let r=n[0],i=!r.projectId;return{key:e,title:i?r.repoRoot||r.sourceCwd||`unknown repo`:r.projectTitle||r.projectSlug||r.repoRoot,...r.projectId?{projectId:r.projectId}:{},...r.projectSlug?{projectSlug:r.projectSlug}:{},unassigned:i,repoGroups:J(n,t)}}).sort((e,t)=>{let n=e.repoGroups.some(e=>e.workspaces.some(e=>W.has(e.status)));return n===t.repoGroups.some(e=>e.workspaces.some(e=>W.has(e.status)))?e.title.localeCompare(t.title):n?-1:1})}function X(e,t,n){let r=t===`all`?e:t===`cleaned`?e.filter(e=>G.has(e.status)):e.filter(e=>!G.has(e.status));return n===`__all__`?r:n===`__unassigned__`?r.filter(e=>!e.projectId):r.filter(e=>e.projectId===n)}function Z({group:e,renderWorkspaceRow:t}){let n=e.repoGroups.flatMap(e=>e.workspaces),r=n.filter(e=>W.has(e.status)).length,i=n.filter(e=>e.status===`ready`||e.status===`review_requested`||e.status===`merge_planned`||e.status===`gate_running`||e.status===`gate_failed`||e.status===`merging`).length,a=n.filter(e=>e.status===`conflict`).length,o=e.repoGroups.length>1;return(0,V.jsxs)(F,{children:[(0,V.jsx)(M,{className:`px-4 py-3`,children:(0,V.jsx)(`div`,{className:`flex min-w-0 items-start gap-3`,children:(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(P,{className:`truncate text-sm font-medium`,title:e.title,children:e.title}),e.unassigned&&(0,V.jsx)(O,{variant:`outline`,className:`text-[10px]`,children:`Unassigned`})]}),(0,V.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1.5`,children:[(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[n.length,` total`]}),(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[r,` live`]}),i>0&&(0,V.jsxs)(O,{variant:`outline`,className:`border-tone-success/20 text-tone-success-fg text-[10px]`,children:[i,` merge signal`]}),a>0&&(0,V.jsxs)(O,{variant:`outline`,className:`border-tone-danger/20 text-tone-danger-fg text-[10px]`,children:[a,` conflict`]})]})]})})}),(0,V.jsx)(N,{className:`p-0`,children:e.repoGroups.map(e=>(0,V.jsxs)(`div`,{className:`border-t border-border first:border-t-0`,children:[o&&(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-dashed border-border/80 px-3 py-2`,children:[(0,V.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate font-mono text-[11px] text-muted-foreground`,title:e.repoRoot,children:e.repoRoot})]}),e.workspaces.map(e=>t(e))]},e.repoRoot))})]})}function re(e){let t=e.split(`/`).filter(Boolean);return t.length<=3?e||`-`:`/${t.slice(-3).join(`/`)}`}function ie(){let e=r(e=>e.workspaceOrphans),t=r(e=>e.fetchWorkspaceOrphans),n=r(e=>e.reclaimWorkspaceOrphan);return(0,U.useEffect)(()=>{t()},[t]),e.length?(0,V.jsxs)(F,{className:`border-tone-warning/30`,children:[(0,V.jsxs)(M,{className:`px-4 py-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(d,{className:`h-4 w-4 text-tone-warning-fg`}),(0,V.jsx)(P,{className:`text-sm font-medium`,children:`Orphaned worktrees`}),(0,V.jsx)(O,{variant:`outline`,className:`border-tone-warning/30 text-tone-warning-fg text-[10px]`,children:e.length}),(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`ml-auto h-6 w-6`,title:`Rescan`,onClick:()=>void t(),children:(0,V.jsx)(C,{className:`h-3.5 w-3.5`})})]}),(0,V.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Agent worktrees on disk with no live workspace. Reclaim removes them from the host.`})]}),(0,V.jsx)(N,{className:`p-0`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-border px-4 py-2 text-xs`,children:[(0,V.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate font-medium`,title:e.branch,children:e.branch||`(detached)`}),(0,V.jsx)(`span`,{className:`truncate font-mono text-muted-foreground`,title:e.worktreePath,children:re(e.worktreePath)}),e.hadTerminalRow&&(0,V.jsx)(O,{variant:`outline`,className:`text-[10px]`,children:`cleanup failed`}),(0,V.jsxs)(D,{size:`sm`,variant:`outline`,className:`ml-auto h-7 text-xs`,onClick:()=>void n(e),children:[(0,V.jsx)(d,{className:`mr-1 h-3.5 w-3.5`}),`Reclaim`]})]},e.worktreePath))})]}):null}function ae(e,t,n){if(n){let t=e.find(e=>e.branch&&e.branch===n);if(t)return t}if(!t)return null;let r=e.filter(e=>e.ownerAgentId===t);return r.length===0?null:r.length===1?r[0]:null}function oe({cancellation:e}){let t=e.status===`completed`,n=e.status===`unproven-released`,r=e.proof===`unavailable`;return(0,V.jsxs)(`div`,{className:`mx-3 mb-3 rounded-md border border-tone-warning/20 px-3 py-2 text-xs`,role:`status`,children:[(0,V.jsx)(`span`,{className:`font-medium`,children:n?`Workspace released · stop unproven`:t?`Steward stopped · workspace handed back`:`Steward cancellation · hand-back pending`}),(0,V.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:e.status===`stopped`?`Steward stopped; hand-back awaits withdrawal of remaining landing activity. Recovery retries automatically.`:n||r?`Process-tree proof unavailable. Claims released; the canceled generation remains fenced.`:t?`The host confirmed the conflict job and its children stopped.`:`Shutdown is settling. Retry in 2 seconds; deadline recovery starts after 60 seconds.`})]})}function se({workspace:e}){let t=typeof e.metadata.rekeyCommandId==`string`,n=typeof e.metadata.rekeyError==`string`?e.metadata.rekeyError:void 0,r=a(e.metadata.lastStewardRekey)?e.metadata.lastStewardRekey:void 0;return!t&&!n&&!r?null:(0,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,role:`status`,children:t?`Steward rebase: synchronizing owner host`:n?`Steward rebase refused: ${n}`:`Steward rebase recorded: ${String(r?.oldHeadSha).slice(0,12)} → ${String(r?.newHeadSha).slice(0,12)}`})}function Q(e,t){return(0,V.jsx)(j,{agent:e,fallback:t||`-`})}function ce(e){let t=e.split(`/`).filter(Boolean);return t.length<=3?e||`-`:`/${t.slice(-3).join(`/`)}`}function le(e){return R[e]||`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`}function ue(e,t){let n=(B[e.status]??99)-(B[t.status]??99);return n===0?Number(t.updatedAt||0)-Number(e.updatedAt||0):n}function $({workspace:e,unmerged:t}){let n=r(t=>t.workspaceMergePreview[e.id]),i=r(e=>e.fetchWorkspaceMergePreview),a=t>0&&L.has(e.status);return(0,U.useEffect)(()=>{a&&n===void 0&&i(e.id)},[a,n,e.id,i]),!a||n===void 0||n.available===!1?null:n.conflict?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-warning-fg`,title:`Merging into ${n.baseRef||`base`} would conflict — resolve before merging`,children:[(0,V.jsx)(T,{className:`h-3 w-3`}),`conflict`]}):n.conflict===!1?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-success-fg`,title:`Clean to merge via ${n.strategy===`pr`?`PR`:`rebase + fast-forward`} into ${n.baseRef||`base`}`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),n.strategy===`pr`?`PR ready`:`clean`]}):null}function de({workspace:e}){let t=i(),n=r(t=>t.workspaceGitState[e.id]),a=r(e=>e.fetchWorkspaceGitState),s=e.mode===`isolated`&&!!e.worktreePath&&ne.has(e.status);if((0,U.useEffect)(()=>{s&&n===void 0&&a(e.id)},[s,n,e.id,a]),!s)return null;let l=(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh git state`,onClick:()=>void a(e.id),children:(0,V.jsx)(C,{className:`h-3 w-3`})});if(n===void 0)return(0,V.jsx)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:`Loading git state…`});if(n.available===!1)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,title:n.reason,children:[(0,V.jsx)(`span`,{children:`git state unavailable`}),l]});if(n.missing)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:[`worktree gone `,l]});if(n.error)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-tone-danger-fg`,title:n.error,children:[(0,V.jsx)(`span`,{children:`git error`}),l]});let d=n.ahead??0,p=n.landed===!0,m=p?0:n.unmergedAhead??d,h=n.behind??0,g=n.dirtyCount??0,v=m===0&&g===0&&!p,y=n.lastCommit;return(0,V.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[11px]`,children:[v?(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`no unmerged work`}):(0,V.jsxs)(V.Fragment,{children:[p?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-success-fg`,title:`Work already landed in ${n.baseRef||`base`} via squash/cherry-pick — safe to clean up`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),`landed`]}):(0,V.jsxs)(`span`,{className:m>0?`flex items-center text-tone-success-fg`:`flex items-center text-muted-foreground`,title:d===m?`${m} commit(s) ahead of base`:`${m} unmerged commit(s) (${d} ahead of base)`,children:[(0,V.jsx)(u,{className:`h-3 w-3`}),m]}),(0,V.jsxs)(`span`,{className:h>0?`flex items-center text-tone-warning-fg`:`flex items-center text-muted-foreground`,title:`${h} commit(s) behind base`,children:[(0,V.jsx)(c,{className:`h-3 w-3`}),h]}),g>0&&(0,V.jsxs)(`span`,{className:`flex items-center text-tone-orange-fg`,title:`${g} uncommitted change(s)`,children:[(0,V.jsx)(_,{className:`h-3 w-3`}),g]}),!p&&(0,V.jsx)($,{workspace:e,unmerged:m})]}),l]}),y&&(0,V.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1 text-[11px] text-muted-foreground`,title:`${y.sha.slice(0,8)} — ${y.message}`,children:[(0,V.jsx)(x,{className:`h-3 w-3 shrink-0`}),(0,V.jsx)(`span`,{className:`truncate`,children:y.message||y.sha.slice(0,8)}),y.at?(0,V.jsxs)(`span`,{className:`shrink-0 opacity-70`,children:[`· `,o(t,y.at)]}):null]})]})}function fe({workspace:e}){let t=i(),n=typeof e.metadata?.mergedAt==`number`?e.metadata.mergedAt:void 0,r=[{label:`created`,at:e.createdAt},{label:`ready`,at:e.readyAt},{label:`merged`,at:n},{label:`cleaned`,at:e.cleanedAt}].filter(e=>typeof e.at==`number`&&e.at>0);return(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground`,children:[(0,V.jsxs)(`span`,{className:`flex items-center gap-1 font-medium text-foreground`,children:[(0,V.jsx)(h,{className:`h-3 w-3`}),`Timeline`]}),r.map((e,n)=>(0,V.jsxs)(`span`,{className:`flex items-center gap-1`,children:[n>0&&(0,V.jsx)(`span`,{className:`opacity-40`,children:`→`}),(0,V.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,V.jsx)(`span`,{title:new Date(e.at).toLocaleString(),children:o(t,e.at)})]},e.label))]})}function pe(e){return e.startsWith(`+`)&&!e.startsWith(`+++`)?`text-tone-success-fg`:e.startsWith(`-`)&&!e.startsWith(`---`)?`text-tone-danger-fg`:e.startsWith(`@@`)?`text-tone-cyan-fg`:e.startsWith(`diff `)||e.startsWith(`index `)||e.startsWith(`+++`)||e.startsWith(`---`)?`text-muted-foreground`:``}function me({workspace:e}){let t=r(t=>t.workspaceDiff[e.id]),n=r(e=>e.fetchWorkspaceDiff),i=e.mode===`isolated`&&!!e.worktreePath;if((0,U.useEffect)(()=>{i&&t===void 0&&n(e.id)},[i,t,e.id,n]),!i)return null;if(t===void 0)return(0,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Loading diff…`});if(t.available===!1)return(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`Diff unavailable`,t.reason?`: ${t.reason}`:``]});if(t.missing)return(0,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Worktree no longer on disk`});if(t.error)return(0,V.jsxs)(`div`,{className:`text-[11px] text-tone-danger-fg`,children:[`Diff error: `,t.error]});if(!t.files.length)return(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`No committed changes against `,t.baseRef||`base`]});let a=(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh diff`,onClick:()=>void n(e.id),children:(0,V.jsx)(C,{className:`h-3 w-3`})});return(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium`,children:[(0,V.jsx)(l,{className:`h-3 w-3`}),(0,V.jsxs)(`span`,{children:[t.files.length,` file`,t.files.length===1?``:`s`,` vs `,t.baseRef||`base`]}),a]}),(0,V.jsx)(`ul`,{className:`space-y-0.5 text-[11px]`,children:t.files.map(e=>(0,V.jsxs)(`li`,{className:`flex items-center gap-2 font-mono`,children:[(0,V.jsx)(`span`,{className:`truncate`,title:e.path,children:e.path}),e.binary?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`binary`}):(0,V.jsxs)(`span`,{className:`shrink-0`,children:[(0,V.jsxs)(`span`,{className:`text-tone-success-fg`,children:[`+`,e.additions??0]}),` `,(0,V.jsxs)(`span`,{className:`text-tone-danger-fg`,children:[`−`,e.deletions??0]})]})]},e.path))}),t.patch&&(0,V.jsxs)(`pre`,{className:`max-h-80 overflow-auto rounded border border-border bg-muted/30 p-2 text-[10.5px] leading-relaxed`,children:[t.patch.split(`
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{p as t,u as n}from"./dist-DeW2Y1R5.js";import{t as r,wt as i}from"./store-DKPDIZBe.js";import{N as a}from"./provider-display-BEeLXC_D.js";import{et as o}from"./display-CDeH4I8T.js";import{t as s}from"./api-CIIVBtAV.js";import{i as c,n as l,r as u,t as d}from"./package-open-ckPgcjpv.js";import{t as f}from"./check-B3M9Ug1P.js";import{t as p}from"./chevron-down-BoG3JCZn.js";import{t as m}from"./chevron-right-iljytE0x.js";import{t as h}from"./clock-BWPPBh1_.js";import{t as g}from"./eye-BAP6fHrX.js";import{t as _}from"./file-pen-Crunre5f.js";import{t as v}from"./flag-CnEG9PH-.js";import{t as y}from"./folder-open-CBUCMSlu.js";import{t as b}from"./git-branch-yxhV0m8E.js";import{t as x}from"./git-commit-horizontal-DS1pJ_SS.js";import{t as S}from"./git-merge-C7eIG425.js";import{t as ee}from"./pause-DttnHD4c.js";import{t as te}from"./play-BbT8m7A0.js";import{t as C}from"./refresh-cw-CfpvQcUn.js";import{t as w}from"./trash-2-FbcSq927.js";import{t as T}from"./triangle-alert-BBNhfgMi.js";import{t as E}from"./x-Bge17hWJ.js";import{t as D}from"./button-Do6Z3vvn.js";import{t as O}from"./badge-DqJRtj_p.js";import{t as k}from"./copy-button-CjOj4HEf.js";import{t as A}from"./task-chip-CYj0mpoL.js";import{t as j}from"./agent-name-CcY3Aijy.js";import{o as M,r as N,s as P,t as F}from"./card-C4QJ4hCW.js";var I=[`cleaned`,`merged`,`landed`,`abandoned`],ne=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`,`gate_running`,`gate_failed`,`merging`]),L=new Set([`active`,`ready`,`review_requested`,`merge_planned`,`gate_failed`,`conflict`]),R={active:`bg-tone-info/10 text-tone-info-fg border-tone-info/20`,ready:`bg-tone-success/10 text-tone-success-fg border-tone-success/20`,conflict:`bg-tone-danger/10 text-tone-danger-fg border-tone-danger/20`,review_requested:`bg-tone-yellow/10 text-tone-yellow-fg border-tone-yellow/20`,merge_planned:`bg-tone-indigo/10 text-tone-indigo-fg border-tone-indigo/20`,gate_running:`bg-tone-sky/10 text-tone-sky-fg border-tone-sky/20`,gate_failed:`bg-tone-danger/10 text-tone-danger-fg border-tone-danger/20`,merging:`bg-tone-indigo/10 text-tone-indigo-fg border-tone-indigo/20`,landed:`bg-tone-violet/10 text-tone-violet-fg border-tone-violet/20`,merged:`bg-tone-violet/10 text-tone-violet-fg border-tone-violet/20`,abandoned:`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`,cleanup_requested:`bg-tone-orange/10 text-tone-orange-fg border-tone-orange/20`,cleaned:`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`,stranded:`bg-tone-warning/10 text-tone-warning-fg border-tone-warning/20`},z={active:`active`,ready:`ready`,conflict:`conflict`,review_requested:`review`,merge_planned:`queued`,gate_running:`gate running`,gate_failed:`gate failed`,merging:`merging`,landed:`landed`,merged:`merged`,abandoned:`abandoned`,cleanup_requested:`cleanup`,cleaned:`cleaned`,stranded:`stranded`},B={conflict:0,ready:1,review_requested:2,merge_planned:3,gate_running:4,gate_failed:5,merging:6,active:7,cleanup_requested:8,landed:9,merged:10,abandoned:11,cleaned:12,stranded:13},V=n();function H({workspace:e,expanded:t,onToggleDetails:n}){let i=r(e=>e.workspaceAction),a=r(e=>e.purgeWorkspace),o=r(e=>e.fetchWorkspaceMergePreview),s=r(e=>e.openFilesAt),c=e.status===`cleaned`||e.status===`merged`||e.status===`landed`||e.status===`abandoned`,l=!!e.metadata.stewardCancellation&&![`completed`,`unproven-released`].includes(e.metadata.stewardCancellation.status),u=l||c||e.status===`cleanup_requested`,d=e.worktreePath||e.sourceCwd||e.repoRoot,h=r(t=>t.workspaceGitState[e.id]),_=!!h&&h.available!==!1&&h.landed===!0,b=!!e.metadata.mergeHold,x=e.mode===`isolated`&&!!e.worktreePath&&L.has(e.status)&&!_&&!l&&!b;async function C(){await o(e.id),await i(e.id,`merge`)}return(0,V.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-1.5`,children:[(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:t?`Hide details`:`Show diff & timeline`,onClick:n,children:t?(0,V.jsx)(p,{className:`h-3.5 w-3.5`}):(0,V.jsx)(m,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:`Open workspace`,disabled:!d||e.status===`cleaned`,onClick:()=>void s({path:d}),children:(0,V.jsx)(y,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(k,{value:d,label:`Copy path`,copiedLabel:`Copied path`,size:`icon-sm`,variant:`ghost`,disabled:!d}),e.mode===`isolated`&&!c&&(0,V.jsxs)(D,{size:`sm`,variant:`outline`,title:b?`Resume workspace merge`:`Hold workspace merge (does not cancel an admitted land)`,onClick:()=>void i(e.id,b?`resume-merge`:`hold-merge`),children:[b?(0,V.jsx)(te,{className:`mr-1 h-3.5 w-3.5`}):(0,V.jsx)(ee,{className:`mr-1 h-3.5 w-3.5`}),b?`Merge held — resume`:`Hold merge`]}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Mark ready`,disabled:u||e.status===`ready`,onClick:()=>void i(e.id,`ready`),children:(0,V.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Request review`,disabled:u||e.status===`review_requested`,onClick:()=>void i(e.id,`request-review`),children:(0,V.jsx)(g,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Mark merge planned`,disabled:u||b||e.status===`merge_planned`,onClick:()=>void i(e.id,`merge-plan`),children:(0,V.jsx)(v,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`default`,title:_?`Already merged into base — nothing to land`:`Merge & land work`,disabled:!x,onClick:()=>void C(),children:(0,V.jsx)(S,{className:`h-3.5 w-3.5`})}),(0,V.jsx)(D,{size:`icon-sm`,variant:`outline`,title:`Request cleanup (removes the worktree on the host)`,disabled:u,onClick:()=>void i(e.id,`cleanup`),children:(0,V.jsx)(w,{className:`h-3.5 w-3.5`})}),c&&(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,title:`Purge record (clears the row, does not touch disk)`,onClick:()=>void a(e.id),children:(0,V.jsx)(E,{className:`h-3.5 w-3.5`})})]})}var U=e(t(),1),W=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`,`gate_running`,`gate_failed`,`merging`,`cleanup_requested`]),G=new Set(I),K=`__all__`,q=`__unassigned__`;function J(e,t){let n=new Map;for(let t of e){let e=t.repoRoot||t.sourceCwd||`unknown repo`;n.set(e,[...n.get(e)||[],t])}return[...n.entries()].map(([e,n])=>({repoRoot:e,workspaces:n.sort(t)})).sort((e,t)=>e.repoRoot.localeCompare(t.repoRoot))}function Y(e,t){let n=new Map;for(let t of e){let e=t.projectSlug||t.repoRoot||t.sourceCwd||`unassigned`;n.set(e,[...n.get(e)||[],t])}return[...n.entries()].map(([e,n])=>{let r=n[0],i=!r.projectId;return{key:e,title:i?r.repoRoot||r.sourceCwd||`unknown repo`:r.projectTitle||r.projectSlug||r.repoRoot,...r.projectId?{projectId:r.projectId}:{},...r.projectSlug?{projectSlug:r.projectSlug}:{},unassigned:i,repoGroups:J(n,t)}}).sort((e,t)=>{let n=e.repoGroups.some(e=>e.workspaces.some(e=>W.has(e.status)));return n===t.repoGroups.some(e=>e.workspaces.some(e=>W.has(e.status)))?e.title.localeCompare(t.title):n?-1:1})}function X(e,t,n){let r=t===`all`?e:t===`cleaned`?e.filter(e=>G.has(e.status)):e.filter(e=>!G.has(e.status));return n===`__all__`?r:n===`__unassigned__`?r.filter(e=>!e.projectId):r.filter(e=>e.projectId===n)}function Z({group:e,renderWorkspaceRow:t}){let n=e.repoGroups.flatMap(e=>e.workspaces),r=n.filter(e=>W.has(e.status)).length,i=n.filter(e=>e.status===`ready`||e.status===`review_requested`||e.status===`merge_planned`||e.status===`gate_running`||e.status===`gate_failed`||e.status===`merging`).length,a=n.filter(e=>e.status===`conflict`).length,o=e.repoGroups.length>1;return(0,V.jsxs)(F,{children:[(0,V.jsx)(M,{className:`px-4 py-3`,children:(0,V.jsx)(`div`,{className:`flex min-w-0 items-start gap-3`,children:(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(P,{className:`truncate text-sm font-medium`,title:e.title,children:e.title}),e.unassigned&&(0,V.jsx)(O,{variant:`outline`,className:`text-[10px]`,children:`Unassigned`})]}),(0,V.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1.5`,children:[(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[n.length,` total`]}),(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[r,` live`]}),i>0&&(0,V.jsxs)(O,{variant:`outline`,className:`border-tone-success/20 text-tone-success-fg text-[10px]`,children:[i,` merge signal`]}),a>0&&(0,V.jsxs)(O,{variant:`outline`,className:`border-tone-danger/20 text-tone-danger-fg text-[10px]`,children:[a,` conflict`]})]})]})})}),(0,V.jsx)(N,{className:`p-0`,children:e.repoGroups.map(e=>(0,V.jsxs)(`div`,{className:`border-t border-border first:border-t-0`,children:[o&&(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-dashed border-border/80 px-3 py-2`,children:[(0,V.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate font-mono text-[11px] text-muted-foreground`,title:e.repoRoot,children:e.repoRoot})]}),e.workspaces.map(e=>t(e))]},e.repoRoot))})]})}function re(e){let t=e.split(`/`).filter(Boolean);return t.length<=3?e||`-`:`/${t.slice(-3).join(`/`)}`}function ie(){let e=r(e=>e.workspaceOrphans),t=r(e=>e.fetchWorkspaceOrphans),n=r(e=>e.reclaimWorkspaceOrphan);return(0,U.useEffect)(()=>{t()},[t]),e.length?(0,V.jsxs)(F,{className:`border-tone-warning/30`,children:[(0,V.jsxs)(M,{className:`px-4 py-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(d,{className:`h-4 w-4 text-tone-warning-fg`}),(0,V.jsx)(P,{className:`text-sm font-medium`,children:`Orphaned worktrees`}),(0,V.jsx)(O,{variant:`outline`,className:`border-tone-warning/30 text-tone-warning-fg text-[10px]`,children:e.length}),(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`ml-auto h-6 w-6`,title:`Rescan`,onClick:()=>void t(),children:(0,V.jsx)(C,{className:`h-3.5 w-3.5`})})]}),(0,V.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Agent worktrees on disk with no live workspace. Reclaim removes them from the host.`})]}),(0,V.jsx)(N,{className:`p-0`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-border px-4 py-2 text-xs`,children:[(0,V.jsx)(y,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate font-medium`,title:e.branch,children:e.branch||`(detached)`}),(0,V.jsx)(`span`,{className:`truncate font-mono text-muted-foreground`,title:e.worktreePath,children:re(e.worktreePath)}),e.hadTerminalRow&&(0,V.jsx)(O,{variant:`outline`,className:`text-[10px]`,children:`cleanup failed`}),(0,V.jsxs)(D,{size:`sm`,variant:`outline`,className:`ml-auto h-7 text-xs`,onClick:()=>void n(e),children:[(0,V.jsx)(d,{className:`mr-1 h-3.5 w-3.5`}),`Reclaim`]})]},e.worktreePath))})]}):null}function ae(e,t,n){if(n){let t=e.find(e=>e.branch&&e.branch===n);if(t)return t}if(!t)return null;let r=e.filter(e=>e.ownerAgentId===t);return r.length===0?null:r.length===1?r[0]:null}function oe({cancellation:e}){let t=e.status===`completed`,n=e.status===`unproven-released`,r=e.proof===`unavailable`;return(0,V.jsxs)(`div`,{className:`mx-3 mb-3 rounded-md border border-tone-warning/20 px-3 py-2 text-xs`,role:`status`,children:[(0,V.jsx)(`span`,{className:`font-medium`,children:n?`Workspace released · stop unproven`:t?`Steward stopped · workspace handed back`:`Steward cancellation · hand-back pending`}),(0,V.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:e.status===`stopped`?`Steward stopped; hand-back awaits withdrawal of remaining landing activity. Recovery retries automatically.`:n||r?`Process-tree proof unavailable. Claims released; the canceled generation remains fenced.`:t?`The host confirmed the conflict job and its children stopped.`:`Shutdown is settling. Retry in 2 seconds; deadline recovery starts after 60 seconds.`})]})}function se({workspace:e}){let t=typeof e.metadata.rekeyCommandId==`string`,n=typeof e.metadata.rekeyError==`string`?e.metadata.rekeyError:void 0,r=a(e.metadata.lastStewardRekey)?e.metadata.lastStewardRekey:void 0;return!t&&!n&&!r?null:(0,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,role:`status`,children:t?`Steward rebase: synchronizing owner host`:n?`Steward rebase refused: ${n}`:`Steward rebase recorded: ${String(r?.oldHeadSha).slice(0,12)} → ${String(r?.newHeadSha).slice(0,12)}`})}function Q(e,t){return(0,V.jsx)(j,{agent:e,fallback:t||`-`})}function ce(e){let t=e.split(`/`).filter(Boolean);return t.length<=3?e||`-`:`/${t.slice(-3).join(`/`)}`}function le(e){return R[e]||`bg-tone-neutral/10 text-tone-neutral-fg border-tone-neutral/20`}function ue(e,t){let n=(B[e.status]??99)-(B[t.status]??99);return n===0?Number(t.updatedAt||0)-Number(e.updatedAt||0):n}function $({workspace:e,unmerged:t}){let n=r(t=>t.workspaceMergePreview[e.id]),i=r(e=>e.fetchWorkspaceMergePreview),a=t>0&&L.has(e.status);return(0,U.useEffect)(()=>{a&&n===void 0&&i(e.id)},[a,n,e.id,i]),!a||n===void 0||n.available===!1?null:n.conflict?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-warning-fg`,title:`Merging into ${n.baseRef||`base`} would conflict — resolve before merging`,children:[(0,V.jsx)(T,{className:`h-3 w-3`}),`conflict`]}):n.conflict===!1?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-success-fg`,title:`Clean to merge via ${n.strategy===`pr`?`PR`:`rebase + fast-forward`} into ${n.baseRef||`base`}`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),n.strategy===`pr`?`PR ready`:`clean`]}):null}function de({workspace:e}){let t=i(),n=r(t=>t.workspaceGitState[e.id]),a=r(e=>e.fetchWorkspaceGitState),s=e.mode===`isolated`&&!!e.worktreePath&&ne.has(e.status);if((0,U.useEffect)(()=>{s&&n===void 0&&a(e.id)},[s,n,e.id,a]),!s)return null;let l=(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh git state`,onClick:()=>void a(e.id),children:(0,V.jsx)(C,{className:`h-3 w-3`})});if(n===void 0)return(0,V.jsx)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:`Loading git state…`});if(n.available===!1)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,title:n.reason,children:[(0,V.jsx)(`span`,{children:`git state unavailable`}),l]});if(n.missing)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:[`worktree gone `,l]});if(n.error)return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-tone-danger-fg`,title:n.error,children:[(0,V.jsx)(`span`,{children:`git error`}),l]});let d=n.ahead??0,p=n.landed===!0,m=p?0:n.unmergedAhead??d,h=n.behind??0,g=n.dirtyCount??0,v=m===0&&g===0&&!p,y=n.lastCommit;return(0,V.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[11px]`,children:[v?(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`no unmerged work`}):(0,V.jsxs)(V.Fragment,{children:[p?(0,V.jsxs)(`span`,{className:`flex items-center gap-0.5 text-tone-success-fg`,title:`Work already landed in ${n.baseRef||`base`} via squash/cherry-pick — safe to clean up`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),`landed`]}):(0,V.jsxs)(`span`,{className:m>0?`flex items-center text-tone-success-fg`:`flex items-center text-muted-foreground`,title:d===m?`${m} commit(s) ahead of base`:`${m} unmerged commit(s) (${d} ahead of base)`,children:[(0,V.jsx)(u,{className:`h-3 w-3`}),m]}),(0,V.jsxs)(`span`,{className:h>0?`flex items-center text-tone-warning-fg`:`flex items-center text-muted-foreground`,title:`${h} commit(s) behind base`,children:[(0,V.jsx)(c,{className:`h-3 w-3`}),h]}),g>0&&(0,V.jsxs)(`span`,{className:`flex items-center text-tone-orange-fg`,title:`${g} uncommitted change(s)`,children:[(0,V.jsx)(_,{className:`h-3 w-3`}),g]}),!p&&(0,V.jsx)($,{workspace:e,unmerged:m})]}),l]}),y&&(0,V.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1 text-[11px] text-muted-foreground`,title:`${y.sha.slice(0,8)} — ${y.message}`,children:[(0,V.jsx)(x,{className:`h-3 w-3 shrink-0`}),(0,V.jsx)(`span`,{className:`truncate`,children:y.message||y.sha.slice(0,8)}),y.at?(0,V.jsxs)(`span`,{className:`shrink-0 opacity-70`,children:[`· `,o(t,y.at)]}):null]})]})}function fe({workspace:e}){let t=i(),n=typeof e.metadata?.mergedAt==`number`?e.metadata.mergedAt:void 0,r=[{label:`created`,at:e.createdAt},{label:`ready`,at:e.readyAt},{label:`merged`,at:n},{label:`cleaned`,at:e.cleanedAt}].filter(e=>typeof e.at==`number`&&e.at>0);return(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground`,children:[(0,V.jsxs)(`span`,{className:`flex items-center gap-1 font-medium text-foreground`,children:[(0,V.jsx)(h,{className:`h-3 w-3`}),`Timeline`]}),r.map((e,n)=>(0,V.jsxs)(`span`,{className:`flex items-center gap-1`,children:[n>0&&(0,V.jsx)(`span`,{className:`opacity-40`,children:`→`}),(0,V.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,V.jsx)(`span`,{title:new Date(e.at).toLocaleString(),children:o(t,e.at)})]},e.label))]})}function pe(e){return e.startsWith(`+`)&&!e.startsWith(`+++`)?`text-tone-success-fg`:e.startsWith(`-`)&&!e.startsWith(`---`)?`text-tone-danger-fg`:e.startsWith(`@@`)?`text-tone-cyan-fg`:e.startsWith(`diff `)||e.startsWith(`index `)||e.startsWith(`+++`)||e.startsWith(`---`)?`text-muted-foreground`:``}function me({workspace:e}){let t=r(t=>t.workspaceDiff[e.id]),n=r(e=>e.fetchWorkspaceDiff),i=e.mode===`isolated`&&!!e.worktreePath;if((0,U.useEffect)(()=>{i&&t===void 0&&n(e.id)},[i,t,e.id,n]),!i)return null;if(t===void 0)return(0,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Loading diff…`});if(t.available===!1)return(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`Diff unavailable`,t.reason?`: ${t.reason}`:``]});if(t.missing)return(0,V.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Worktree no longer on disk`});if(t.error)return(0,V.jsxs)(`div`,{className:`text-[11px] text-tone-danger-fg`,children:[`Diff error: `,t.error]});if(!t.files.length)return(0,V.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`No committed changes against `,t.baseRef||`base`]});let a=(0,V.jsx)(D,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh diff`,onClick:()=>void n(e.id),children:(0,V.jsx)(C,{className:`h-3 w-3`})});return(0,V.jsxs)(`div`,{className:`space-y-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium`,children:[(0,V.jsx)(l,{className:`h-3 w-3`}),(0,V.jsxs)(`span`,{children:[t.files.length,` file`,t.files.length===1?``:`s`,` vs `,t.baseRef||`base`]}),a]}),(0,V.jsx)(`ul`,{className:`space-y-0.5 text-[11px]`,children:t.files.map(e=>(0,V.jsxs)(`li`,{className:`flex items-center gap-2 font-mono`,children:[(0,V.jsx)(`span`,{className:`truncate`,title:e.path,children:e.path}),e.binary?(0,V.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`binary`}):(0,V.jsxs)(`span`,{className:`shrink-0`,children:[(0,V.jsxs)(`span`,{className:`text-tone-success-fg`,children:[`+`,e.additions??0]}),` `,(0,V.jsxs)(`span`,{className:`text-tone-danger-fg`,children:[`−`,e.deletions??0]})]})]},e.path))}),t.patch&&(0,V.jsxs)(`pre`,{className:`max-h-80 overflow-auto rounded border border-border bg-muted/30 p-2 text-[10.5px] leading-relaxed`,children:[t.patch.split(`
|
|
2
2
|
`).map((e,t)=>(0,V.jsx)(`div`,{className:pe(e),children:e||` `},t)),t.truncated&&(0,V.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`… patch truncated`})]})]})}function he({workspace:e}){return(0,V.jsxs)(`div`,{className:`space-y-3 border-t border-dashed border-border bg-muted/20 px-3 py-3`,children:[(0,V.jsx)(fe,{workspace:e}),(0,V.jsx)(se,{workspace:e}),(0,V.jsx)(me,{workspace:e})]})}function ge(e){let t=e.match(/\/pull\/(\d+)/);return t?`PR #${t[1]}`:`View PR`}function _e({workspace:e}){let t=e.metadata?.mergeResult,n=t?.prUrl,r=t?.error||e.metadata?.mergeError;return!n&&!r?null:(0,V.jsxs)(V.Fragment,{children:[n&&(0,V.jsxs)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,title:n,className:`inline-flex items-center gap-0.5 rounded border border-tone-violet/30 px-1.5 py-0 text-[10px] text-tone-violet-fg hover:text-tone-violet-fg`,children:[(0,V.jsx)(S,{className:`h-2.5 w-2.5`}),ge(n)]}),r&&(0,V.jsxs)(O,{variant:`outline`,className:`max-w-[16rem] border-tone-warning/30 text-tone-warning-fg text-[10px]`,title:r,children:[(0,V.jsx)(T,{className:`mr-0.5 h-2.5 w-2.5 shrink-0`}),(0,V.jsxs)(`span`,{className:`truncate`,children:[`merge: `,r]})]})]})}function ve({workspace:e}){let t=i(),[n,a]=(0,U.useState)(!1),s=r(e=>e.agentsById),c=r(t=>t.workspaceFocusId===e.id),l=r(e=>e.deliverableTasks),u=r(e=>e.openTaskDetail),d=e.ownerAgentId?s[e.ownerAgentId]:void 0,f=ae(l,e.ownerAgentId,e.branch),p=r(t=>t.workspaceGitState[e.id]),m=!!p&&p.available!==!1&&p.landed===!0,h=f!=null&&(e.status===`merged`||e.status===`landed`||e.status===`cleaned`||e.status===`abandoned`||m),g=e.stewardAgentId?s[e.stewardAgentId]:void 0,_=e.worktreePath||e.sourceCwd||e.repoRoot,v=(0,U.useRef)(null);return(0,U.useEffect)(()=>{c&&v.current?.scrollIntoView({behavior:`smooth`,block:`center`})},[c]),(0,V.jsxs)(`div`,{ref:v,className:`border-t border-border ${c?`bg-primary/5 ring-1 ring-inset ring-primary/40`:``}`,children:[(0,V.jsxs)(`div`,{className:`grid gap-3 px-3 py-3 text-sm lg:grid-cols-[minmax(180px,1.2fr)_minmax(220px,1.5fr)_minmax(160px,1fr)_minmax(170px,auto)]`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,V.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,V.jsx)(b,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,V.jsx)(`span`,{className:`truncate font-medium`,title:e.branch||e.id,children:e.branch||e.id})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,V.jsx)(O,{variant:`outline`,className:`text-[10px] ${e.mode===`isolated`?`border-tone-sky/30 text-tone-sky-fg`:`border-tone-neutral/30 text-tone-neutral-fg`}`,children:e.mode}),e.requestedMode&&e.requestedMode!==e.mode&&(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[`requested `,e.requestedMode]}),(0,V.jsx)(O,{variant:`outline`,className:`text-[10px] ${le(e.status)}`,children:z[e.status]||e.status}),e.landState&&(0,V.jsxs)(O,{variant:`outline`,className:`text-[10px] border-tone-violet/30 text-tone-violet-fg`,title:`Lifecycle state since ${e.landStateAt?o(t,e.landStateAt):`unknown`}`,children:[e.landState,e.landWaitReason?` · ${e.landWaitReason}`:``,e.landStateAt?` (${o(t,e.landStateAt)})`:``]}),(0,V.jsx)(_e,{workspace:e}),h&&f&&(0,V.jsx)(A,{id:f.id,title:f.title,status:f.status,onClick:()=>u(f)})]})]}),(0,V.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,V.jsx)(`div`,{className:`truncate font-mono text-xs`,title:_,children:ce(_)}),(0,V.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,title:e.sourceCwd,children:e.sourceCwd}),(0,V.jsx)(de,{workspace:e})]}),(0,V.jsxs)(`div`,{className:`grid grid-cols-[4.5rem_minmax(0,1fr)] gap-x-2 gap-y-1 text-xs`,children:[typeof e.metadata.gateHost==`string`&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Gate host`}),(0,V.jsx)(`span`,{className:`truncate`,title:String(e.metadata.gateOrchestratorId??``),children:e.metadata.gateHost})]}),(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Owner`}),(0,V.jsx)(`span`,{className:`truncate`,title:e.ownerAgentId,children:Q(d,e.ownerPolicyName||e.ownerAgentId)}),(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Steward`}),(0,V.jsx)(`span`,{className:`truncate`,title:e.stewardAgentId,children:Q(g,e.stewardAgentId)}),(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Updated`}),(0,V.jsx)(`span`,{children:o(t,e.updatedAt)}),e.baseRef&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`text-muted-foreground`,children:`Base`}),(0,V.jsx)(`span`,{className:`truncate`,title:e.baseSha,children:e.baseRef})]})]}),(0,V.jsx)(H,{workspace:e,expanded:n,onToggleDetails:()=>a(!n)})]}),!!e.metadata.stewardCancellation&&(0,V.jsx)(oe,{cancellation:e.metadata.stewardCancellation}),n&&(0,V.jsx)(he,{workspace:e})]})}function ye(){let[e,t]=(0,U.useState)(`active`),[n,i]=(0,U.useState)(K),[a,o]=(0,U.useState)([]),c=r(e=>e.workspaces),l=r(e=>e.set),u=r(e=>e.workspaceFocusId);(0,U.useEffect)(()=>{u&&(t(`all`),i(K))},[u]),(0,U.useEffect)(()=>()=>{l({workspaceFocusId:null})},[l]),(0,U.useEffect)(()=>{let e=!1;return s(`GET`,`/projects`).then(t=>{e||o(t.projects??[])}).catch(()=>{e||o([])}),()=>{e=!0}},[]);let d=(0,U.useMemo)(()=>X(c,e,n),[c,e,n]),f=(0,U.useMemo)(()=>Y(d,ue),[d]),p=c.filter(e=>W.has(e.status)).length,m=c.filter(e=>e.mode===`isolated`).length,h=c.filter(e=>e.status===`ready`||e.status===`review_requested`||e.status===`merge_planned`||e.status===`gate_running`||e.status===`gate_failed`||e.status===`merging`).length,g=c.filter(e=>e.status===`conflict`).length,_=c.filter(e=>e.status===`merged`||e.status===`landed`||e.status===`abandoned`||e.status===`cleaned`).length,v=[{key:`active`,label:`Active`,count:c.length-_},{key:`cleaned`,label:`Done`,count:_},{key:`all`,label:`All`,count:c.length}],y=(0,U.useMemo)(()=>{let e=[{value:K,label:`All Projects`}];for(let t of a)e.push({value:t.id,label:t.title||t.slug});return e.push({value:q,label:`Unassigned`}),e},[a]);return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Workspaces`}),(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Agent worktrees, ownership, and merge readiness.`})]}),(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-1.5`,children:[(0,V.jsxs)(O,{variant:`outline`,children:[m,` isolated`]}),(0,V.jsxs)(O,{variant:`outline`,children:[p,` live`]}),(0,V.jsxs)(O,{variant:`outline`,children:[h,` ready`]}),g>0&&(0,V.jsxs)(O,{variant:`outline`,className:`border-tone-danger/20 text-tone-danger-fg`,children:[g,` conflict`]})]})]}),(0,V.jsx)(ie,{}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`flex rounded-md border border-border bg-card p-1`,children:v.map(n=>(0,V.jsxs)(D,{size:`sm`,variant:e===n.key?`secondary`:`ghost`,className:`h-7 text-xs`,onClick:()=>t(n.key),children:[n.label,(0,V.jsx)(`span`,{className:`ml-1 text-muted-foreground`,children:n.count})]},n.key))}),(0,V.jsx)(`select`,{className:`h-8 min-w-[12rem] rounded-md border border-border bg-card px-2.5 text-sm text-foreground`,value:n,onChange:e=>i(e.target.value),children:y.map(e=>(0,V.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),f.length===0?(0,V.jsxs)(`div`,{className:`rounded-md border border-border px-3 py-12 text-center text-sm text-muted-foreground`,children:[`No `,e===`all`?``:e,` workspaces`,n===`__all__`?``:` in this project filter`]}):(0,V.jsx)(`div`,{className:`space-y-3`,children:f.map(e=>(0,V.jsx)(Z,{group:e,renderWorkspaceRow:e=>(0,V.jsx)(ve,{workspace:e},e.id)},e.key))})]})}export{ye as WorkspacesView};
|
|
3
|
-
//# sourceMappingURL=workspaces-
|
|
3
|
+
//# sourceMappingURL=workspaces-CzEGoAng.js.map
|
package/public/cosmos.html
CHANGED
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
touch-action: none;
|
|
19
19
|
}
|
|
20
20
|
</style>
|
|
21
|
-
<script type="module" crossorigin src="./assets/cosmos-
|
|
21
|
+
<script type="module" crossorigin src="./assets/cosmos-BpebFLK2.js"></script>
|
|
22
22
|
<link rel="modulepreload" crossorigin href="./assets/legacy-storage-carry-C-tBSxRA.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="./assets/provider-display-
|
|
24
|
-
<link rel="modulepreload" crossorigin href="./assets/display-
|
|
23
|
+
<link rel="modulepreload" crossorigin href="./assets/provider-display-BEeLXC_D.js">
|
|
24
|
+
<link rel="modulepreload" crossorigin href="./assets/display-CDeH4I8T.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="./assets/api-CIIVBtAV.js">
|
|
26
|
-
<link rel="modulepreload" crossorigin href="./assets/agent-liveness-
|
|
26
|
+
<link rel="modulepreload" crossorigin href="./assets/agent-liveness-Bq-s73jW.js">
|
|
27
27
|
<link rel="stylesheet" crossorigin href="./assets/cosmos-Dn8XrlnS.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
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">
|
|
@@ -172,16 +172,16 @@
|
|
|
172
172
|
<link rel="modulepreload" crossorigin href="./assets/user-plus-D9749q73.js">
|
|
173
173
|
<link rel="modulepreload" crossorigin href="./assets/volume-2-XrcRKD9Z.js">
|
|
174
174
|
<link rel="modulepreload" crossorigin href="./assets/waypoints-CIzINtLT.js">
|
|
175
|
-
<link rel="modulepreload" crossorigin href="./assets/use-selectors-
|
|
176
|
-
<link rel="modulepreload" crossorigin href="./assets/status-dot-
|
|
177
|
-
<link rel="modulepreload" crossorigin href="./assets/terminal-viewer-
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/log-viewer-
|
|
179
|
-
<link rel="modulepreload" crossorigin href="./assets/fleet-metrics-
|
|
180
|
-
<link rel="modulepreload" crossorigin href="./assets/busy-health-
|
|
181
|
-
<link rel="modulepreload" crossorigin href="./assets/profile-icon-
|
|
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
182
|
<link rel="modulepreload" crossorigin href="./assets/token-estimate-Co-Jdphh.js">
|
|
183
|
-
<link rel="modulepreload" crossorigin href="./assets/versioned-prompt-editor-
|
|
184
|
-
<link rel="modulepreload" crossorigin href="./assets/host-providers-dialog-
|
|
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
185
|
<link rel="stylesheet" crossorigin href="./assets/index-MYAIwYTX.css">
|
|
186
186
|
</head>
|
|
187
187
|
<body class="bg-background text-foreground antialiased">
|
|
@@ -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
|
+
}
|