@overdeck/desktop 0.47.1 → 0.48.0
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/drizzle/overdeck/0000_overdeck_init.sql +59 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-Cd7ZGZCq.js → acceptance-criteria-DmtLDbtt.js} +2 -2
- package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
- package/server/activity-logger-K7FYGF_z.js +3 -0
- package/server/{advancing-selfheal-DieFp3qi.js → advancing-selfheal-8AR68Asf.js} +6 -6
- package/server/{agent-gc-BMcgTDl7.js → agent-gc-BmYeT6eH.js} +5 -5
- package/server/agent-state-Dq3s84-P.js +3 -0
- package/server/{agent-state-service-DFO6qvHp.js → agent-state-service-DK1Vay1E.js} +1 -1
- package/server/{agent-state-service-BOzQhLjU.js → agent-state-service-rjnzpHDx.js} +6 -6
- package/server/{agent-state-source-Ca_zCaII.js → agent-state-source-Ds968-j6.js} +1 -1
- package/server/{agents-CtACUuVG.js → agents-Dls7tfJH.js} +5 -5
- package/server/agents-IPSa5kzn.js +3 -0
- package/server/{archive-planning-Binfb99i.js → archive-planning-Cq7cyinS.js} +51 -24
- package/server/archive-planning-MbkGCBIY.js +2 -0
- package/server/{artifact-index-jobs-Jn7BGOtV.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
- package/server/{assemble-DsqK9OAq.js → assemble-BTCmbcfH.js} +20 -13
- package/server/{auto-spawn-consent-BooqhC3L.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
- package/server/{backlog-auto-trigger-BADGPxov.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
- package/server/{behavior-B7biGtFT.js → behavior-DIMQMRzs.js} +2 -2
- package/server/{boot-reconciled-stop-events-bQUzU8ns.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
- package/server/{bridge-pool-patrol-DsPj6F7t.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
- package/server/{briefing-freshness-CUerZqWd.js → briefing-freshness-3PNmL_p3.js} +2 -2
- package/server/{build-info-D0q_i8WM.js → build-info-CJg813Hm.js} +3 -3
- package/server/{build-info-Du74MKiP.js → build-info-CXyeFsXu.js} +1 -1
- package/server/{checkpoint-manager-Cu-R5Uzg.js → checkpoint-manager-9t7G5c1V.js} +1 -1
- package/server/{checkpoint-manager-R5tnaxEY.js → checkpoint-manager-B2G38R3p.js} +3 -3
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-wF84ubZ8.js → checkpoints-CuBgiXO-.js} +1 -1
- package/server/{checkpoints-DYtLu-PB.js → checkpoints-VTZMd4Qm.js} +2 -2
- package/server/{claude-hooks-provision-DXI3Wqlm.js → claude-hooks-provision-55SyQaPz.js} +2 -2
- package/server/{claude-hooks-provision-UKxCeOyj.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
- package/server/{claude-permissions-DYVLnX9t.js → claude-permissions-Cn0dIu2i.js} +2 -2
- package/server/{claude-settings-overlay-DxP2F_gY.js → claude-settings-overlay-B19hdzSA.js} +1 -1
- package/server/{claude-settings-overlay-DsbpIq2d.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
- package/server/{cli-DzRKxxP_.js → cli-C9S84iTy.js} +79 -22
- package/server/cli-M1cwZ__d.js +3 -0
- package/server/{cliproxy-CG4meRFc.js → cliproxy-CJq3KXU6.js} +2 -2
- package/server/{cliproxy-Cwzw39yN.js → cliproxy-DgEZlr7Y.js} +1 -1
- package/server/{close-issue-BX1bATJy.js → close-issue-DPxRddGR.js} +5 -5
- package/server/{closed-issue-reaper-hLt0W86J.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
- package/server/{closed-issue-reaper-DvnTSN6a.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
- package/server/{codex-rnJN3v3_.js → codex-B3n_rkwn.js} +1 -1
- package/server/{codex-BYwi1uyW.js → codex-CjkD1PJu.js} +6 -6
- package/server/{codex-parser-Poyz29GE.js → codex-parser-DpB1Il-P.js} +2 -2
- package/server/{compaction-continuation-DtMfHN0f.js → compaction-continuation-DZD9ukSE.js} +3 -3
- package/server/{config-R793W0yA.js → config-C5saf4Ja.js} +1 -1
- package/server/{config-CX4vk1CV.js → config-DnLJATZk.js} +2 -2
- package/server/{config-ktAVnp4s.js → config-DvM8jtQK.js} +2 -2
- package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
- package/server/{conflict-gate-BSTlwCtF.js → conflict-gate-DXa_L28t.js} +1 -1
- package/server/{conflict-gate-BNv6UolH.js → conflict-gate-WfVqgalf.js} +4 -4
- package/server/{context-layers-DCdaGsRG.js → context-layers-D7UqH9Ab.js} +2 -2
- package/server/{context-layers-DlWsDiRF.js → context-layers-Dpz3Vd6d.js} +3 -3
- package/server/{control-settings-qYYHrIqy.js → control-settings-DVf6pKyv.js} +4 -4
- package/server/{conversation-compaction-BxUKObHb.js → conversation-compaction-5XuH6OBn.js} +1 -1
- package/server/{conversation-compaction-CXQrN3I_.js → conversation-compaction-COrbnX1J.js} +8 -8
- package/server/{conversation-service-CZiUE8Uw.js → conversation-service-BufdtnZF.js} +169 -10
- package/server/{conversation-service-CDnQ3ayN.js → conversation-service-DnUyIiLb.js} +1 -1
- package/server/{conversations-D7lR670u.js → conversations-B4rxz-Wl.js} +17 -10
- package/server/{conversations-DXl5YTf4.js → conversations-D1bwxQMy.js} +1 -1
- package/server/{cost-Aat8HfO_.js → cost-CpFDrJUS.js} +46 -2
- package/server/{cost-CWvN9FP2.js → cost-KLuwKCW9.js} +3 -3
- package/server/{cost-sync-DiUBXwl6.js → cost-sync-cesi9dp8.js} +3 -3
- package/server/{dag-5QlmH0oC.js → dag-BYiFMqpU.js} +2 -2
- package/server/{dangerous-git-ops-DWX6Og8c.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-PW_bg4uL.js → deacon-BbsWw8a6.js} +3 -3
- package/server/{deacon-B1LD5cJU.js → deacon-HdEh0Esp.js} +672 -181
- package/server/deacon-event-client-C93rvOT7.js +237 -0
- package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
- package/server/{deacon-nudge-log-DPHsO14z.js → deacon-nudge-log-BND_97Wo.js} +4 -3
- package/server/{deacon-pending-lifecycle-2ZflPxgo.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
- package/server/deacon-swarm-DgWADWd_.js +2 -0
- package/server/{deacon-swarm-DwGUgSVp.js → deacon-swarm-rqrl4TMs.js} +39 -18
- package/server/deacon.js +12 -210
- package/server/{dead-end-trip-B06RFIr2.js → dead-end-trip-DSF23CLX.js} +4 -3
- package/server/dead-end-trip-zKlS4v6f.js +2 -0
- package/server/delivery-CsbQdZkS.js +3 -0
- package/server/{deploy-patrol-BNjeCL8u.js → deploy-patrol-kARAkji4.js} +17 -21
- package/server/{deploy-queue-CKT_Ia9p.js → deploy-queue-Bj0HJT1i.js} +2 -2
- package/server/{deploy-queue-DMMYhFC8.js → deploy-queue-rjTUy1RM.js} +1 -1
- package/server/{deploy-window-DC8lze3d.js → deploy-window-B2IM-9G5.js} +10 -44
- package/server/{deploy-window-D_AimdNN.js → deploy-window-BNFWnA8D.js} +1 -1
- package/server/{dev-supervisor-C4F0vbno.js → dev-supervisor-B1mZYXz4.js} +2 -2
- package/server/{devcontainer-renderer-66sqMQIi.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
- package/server/{dist-C5FT9lTG.js → dist-3W--cGMa.js} +1 -1
- package/server/dist-BR0QtwmS.js +3 -0
- package/server/{dist-src-B-AlGWSl.js → dist-src-C-Vk2jNk.js} +1 -1
- package/server/{docker-BxrFhTZ_.js → docker-DH3jUYg1.js} +1 -1
- package/server/{docker-CoAT8R0J.js → docker-meuLKLzV.js} +27 -20
- package/server/{dod-Bg6wsKTV.js → dod-D7-9dCOD.js} +1 -1
- package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
- package/server/{durable-review-pipeline-D_DcfIGP.js → durable-review-pipeline-CStTgOAf.js} +1 -1
- package/server/{durable-review-pipeline-HkAgnx0L.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
- package/server/{ensure-devcontainer-Bg5HJAcO.js → ensure-devcontainer-BE3llBWP.js} +1 -1
- package/server/{ensure-devcontainer-DTxChVuA.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
- package/server/{esm-shims-CaBWIR7f.js → esm-shims-Bzy4ZzNU.js} +1 -1
- package/server/event-store-COd2tOx8.js +3 -0
- package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
- package/server/{events-ChEFB7Jp.js → events-CCkFWa7X.js} +1 -1
- package/server/{events-DhRN-6vM.js → events-zjDQozet.js} +3 -3
- package/server/{factory-BezSPaTd.js → factory-DhavwKVc.js} +5 -5
- package/server/{feature-registry-population-DhswNiXx.js → feature-registry-population-DWGBKyWd.js} +4 -4
- package/server/{feature-registry-storage-CUVNpAso.js → feature-registry-storage-C5DkXmCM.js} +3 -3
- package/server/{features-B2CfNPFw.js → features-CC47YcCX.js} +2 -2
- package/server/{feedback-target-CMrEAoeA.js → feedback-target-D9Tex35_.js} +1 -1
- package/server/{feedback-target-VBr9gKgX.js → feedback-target-DoRCR3L-.js} +8 -8
- package/server/{feedback-writer-CY91ckuw.js → feedback-writer-CTSuA6lw.js} +1 -1
- package/server/{feedback-writer-xpFgU632.js → feedback-writer-DdsBdtNL.js} +5 -5
- package/server/{flywheel-DsICCjTR.js → flywheel-DHWHzaYK.js} +1 -1
- package/server/{flywheel-DQqsSm7P.js → flywheel-DJQa9az8.js} +14 -14
- package/server/{flywheel-CTVY3yCG.js → flywheel-TacAI9MA.js} +21 -17
- package/server/{flywheel-merge-order-C-TI4JGu.js → flywheel-merge-order-D2foPh88.js} +1 -1
- package/server/{flywheel-merge-order-CMGz-imq.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
- package/server/forge-CdlCG9aS.js +3 -0
- package/server/{forge-RTNqJe6a.js → forge-c8LeC-tw.js} +2 -2
- package/server/{from-DxGcivc9.js → from-BogSwvr2.js} +1 -1
- package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
- package/server/{fts-operations-BuTdlZFA.js → fts-operations-DP9R-8Q3.js} +3 -3
- package/server/{git-utils-CedsVume.js → git-utils-C31x1lpE.js} +1 -1
- package/server/{git-utils-DtdoEXJk.js → git-utils-xQ74FoSn.js} +5 -4
- package/server/{github-app-DIE8BkHI.js → github-app-CpQSDlv8.js} +1 -1
- package/server/{github-app-gVnZcP9B.js → github-app-D2QuvZ3j.js} +3 -3
- package/server/{github-client-BrAC6ELh.js → github-client-D9YvJX5D.js} +3 -3
- package/server/{github-client-CBOkvBUl.js → github-client-Tpi3PmKX.js} +1 -1
- package/server/{github-pr-lookup-CgMULTPf.js → github-pr-lookup-DvBMv-IW.js} +2 -2
- package/server/{harness-binary-CnBHpd57.js → harness-binary-BHxWf_sX.js} +7 -6
- package/server/{harness-resolve-BVj6sI8m.js → harness-resolve-bj9WMABA.js} +4 -4
- package/server/{health-events-BBWO_Dh9.js → health-events-bCDPn59Z.js} +2 -2
- package/server/{health-events-Der6bOkm.js → health-events-qo7Ss34U.js} +1 -1
- package/server/{hooks-BOavco-e.js → hooks-Dyxtg5fk.js} +2 -2
- package/server/{hooks-BJNal-bs.js → hooks-X2XHBB2b.js} +1 -1
- package/server/{hume-DBocJFkA.js → hume-DrZEGpqc.js} +2 -2
- package/server/hume-YPsy4UA8.js +3 -0
- package/server/{idle-stack-reaper-DQFh8rDh.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
- package/server/{idle-stack-reaper-CyGxXOfC.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
- package/server/{in-flight-guard-nXEKoxI7.js → in-flight-guard-CG2Eo-rr.js} +1 -1
- package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
- package/server/{injection-DfFFEMKL.js → injection-BisQ0lpX.js} +1 -1
- package/server/{injection-CCopdUKz.js → injection-C9sxqbc2.js} +73 -193
- package/server/{inspect-agent-FCDlNT_i.js → inspect-agent-BoSO51YC.js} +12 -12
- package/server/inspect-agent-BykeOH4a.js +2 -0
- package/server/{internal-token-BG6yQKNL.js → internal-token-AvXePaQT.js} +2 -2
- package/server/{internal-token-BJZa40Ld.js → internal-token-Djkj-yqK.js} +1 -1
- package/server/{io-C0NV7y6C.js → io-mxOWMZ7I.js} +6 -6
- package/server/{issue-closed-CNNGbhWm.js → issue-closed-Bj_bCv_0.js} +7 -7
- package/server/{issue-lifecycle-DSH0GpWC.js → issue-lifecycle-A5YIpDZE.js} +1 -1
- package/server/{issue-lifecycle-BXfzxFCD.js → issue-lifecycle-BXUqaHzF.js} +32 -28
- package/server/{issue-service-singleton-F3A5VP6M.js → issue-service-singleton-BPNEXczv.js} +11 -11
- package/server/{issue-service-singleton-lwFJ4dHk.js → issue-service-singleton-CcaHjKPR.js} +1 -1
- package/server/{issues-DA-U_MpR.js → issues-AX-YBeAQ.js} +2 -2
- package/server/{jsonl-parser-BXiGANOh.js → jsonl-parser-CgYWQ20q.js} +7 -3
- package/server/kimi-code-BYbme0aV.js +579 -0
- package/server/kimi-code-D_Ppt82c.js +3 -0
- package/server/kimi-parser-B-JBg3Pv.js +147 -0
- package/server/{label-cleanup-BnxRk0Eo.js → label-cleanup-sXUlgdM0.js} +3 -3
- package/server/{lifecycle-DOgGnpIv.js → lifecycle-D2X3al0D.js} +2 -2
- package/server/{lifecycle-Di48-w4x.js → lifecycle-DjlljAZ1.js} +6 -6
- package/server/{lifecycle-io-eVG6v_8-.js → lifecycle-io-C5nVk55o.js} +1 -1
- package/server/{lifecycle-io-1XSeczTr.js → lifecycle-io-NPm1YtIG.js} +5 -5
- package/server/{linear-client-CvGo9n7M.js → linear-client--luYwCZg.js} +1 -1
- package/server/{linear-client-CYZRrcjp.js → linear-client-B8pLegW1.js} +3 -3
- package/server/{linear-mcp-auth-Cp0XaP96.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
- package/server/{linear-mcp-auth-DoJnjdPZ.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DO14mOr3.js → merge-Bx5Bh9pi.js} +3 -3
- package/server/{merge-ZF99ig6A.js → merge-Dqmh_zja.js} +1 -1
- package/server/{merge-agent-gpiRkcvj.js → merge-agent-DP9AUY29.js} +33 -33
- package/server/{merge-agent-C1-9zbP_.js → merge-agent-DWd0KfiS.js} +1 -1
- package/server/{merge-batch-C11ocNkO.js → merge-batch-BdmvTEAC.js} +1 -1
- package/server/{merge-completeness-CghMbyX7.js → merge-completeness-BfRwFjRx.js} +1 -1
- package/server/{merge-completeness-BUzPZy0E.js → merge-completeness-C1FevcDT.js} +4 -4
- package/server/merge-ops-B98tKc1e.js +2 -0
- package/server/merge-rebase-BLykMwPO.js +2 -0
- package/server/{merge-rebase-iwlUzZjr.js → merge-rebase-BX1xKsrE.js} +2 -2
- package/server/{merge-set-Dbnx4chw.js → merge-set-DsLjjLEV.js} +4 -4
- package/server/{merge-set-BymrheTj.js → merge-set-H6epHOsw.js} +1 -1
- package/server/{merge-sync-CM978zez.js → merge-sync-BEdfsQV4.js} +2 -2
- package/server/{merge-sync-CqEtqjI2.js → merge-sync-BebcWWGA.js} +1 -1
- package/server/{merge-train-DvLcAn1G.js → merge-train-D1I0lNOT.js} +4 -4
- package/server/{merge-train-deps-Cl_kcRbO.js → merge-train-deps-D_-C0Pk2.js} +4 -4
- package/server/{merge-verification-c9Y9mllw.js → merge-verification-DN1Ov9bU.js} +6 -6
- package/server/{merged-docker-cleanup-worker-CGiDOdv8.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
- package/server/{merged-docker-cleanup-worker-DgsLOx3E.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
- package/server/{multipart-parser-D0twwRjz.js → multipart-parser-CL5QG8iv.js} +2 -2
- package/server/{no-resume-mode-DZvP0M_S.js → no-resume-mode-DUR7Hi98.js} +1 -1
- package/server/node_modules/.package-lock.json +7 -7
- package/server/node_modules/brace-expansion/README.md +23 -1
- package/server/node_modules/brace-expansion/index.js +206 -85
- package/server/node_modules/brace-expansion/package.json +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.js +34 -28
- package/server/node_modules/msgpackr/dist/index.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/node.cjs +36 -29
- package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/test.js +63 -32
- package/server/node_modules/msgpackr/dist/test.js.map +1 -1
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/package.json +1 -1
- package/server/node_modules/msgpackr/unpack.js +34 -28
- package/server/{orphan-proposed-reconciler-6r2OEfYd.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
- package/server/{orphan-proposed-reconciler-DtQP6oE_.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
- package/server/package-lock.json +8 -8
- package/server/package.json +1 -1
- package/server/{pan-dir-DAOb1V2-.js → pan-dir-DhgKfO86.js} +21 -6
- package/server/{paths-DuATV5iE.js → paths-BUuhi6jM.js} +17 -17
- package/server/{pending-lifecycle-claim-DQUHIDfX.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
- package/server/{persistent-logger-CBj016pT.js → persistent-logger-s8cbpFNV.js} +2 -2
- package/server/{pickup-zXZl5lQI.js → pickup-2AxtB3dW.js} +1 -1
- package/server/{pipeline-membership-DHOXmvba.js → pipeline-membership-2_okL5bm.js} +1 -1
- package/server/{pipeline-membership-B2yUcBz7.js → pipeline-membership-Dqv6_0ig.js} +1 -1
- package/server/{pipeline-membership-gather-OkLXuvxR.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
- package/server/{pipeline-membership-gather-BIcJ-N0W.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
- package/server/{pipeline-notifier-BmwrVKsO.js → pipeline-notifier-CO9rxJgB.js} +1 -1
- package/server/{pipeline-notifier-CxMes51i.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
- package/server/{post-merge-lifecycle-worker-3u_rA4R0.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
- package/server/{project-pipelines-C3SPFJ38.js → project-pipelines-72WE8GVK.js} +2 -2
- package/server/{project-repos-BOpBzkO6.js → project-repos-BAqDwtvi.js} +16 -11
- package/server/project-repos-Df90Zw7Y.js +3 -0
- package/server/projects-WqMWCdpa.js +3 -0
- package/server/{prompts-B0TtboFm.js → prompts-XkL10m8M.js} +2 -2
- package/server/{providers-O2smCvSz.js → providers-ClGPGkQ8.js} +15 -12
- package/server/providers-DFUOed8u.js +3 -0
- package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
- package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
- package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
- package/server/public/assets/index-Cml-kHo6.css +1 -0
- package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
- package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
- package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-BonZ4WVG.js → pull-requests-B-KrUph5.js} +3 -3
- package/server/{pull-requests-DNcJUVWA.js → pull-requests-DK5k92B4.js} +1 -1
- package/server/{queries-DCX27GRr.js → queries-DVpl1vsU.js} +1212 -193
- package/server/{rally-Cxe7lKYX.js → rally-DbE561hD.js} +3 -3
- package/server/rally-O_st_X7n.js +3 -0
- package/server/{rally-api-CzkKenoi.js → rally-api-CZLeEd2C.js} +2 -2
- package/server/{rally-api-Cp50exEi.js → rally-api-DaHtn5QN.js} +1 -1
- package/server/{rally-client-Bu3Cekkw.js → rally-client-C-MAl8ur.js} +1 -1
- package/server/{rally-client-CyBBEDHu.js → rally-client-Ch3zRsBX.js} +5 -5
- package/server/{reap-terminal-sessions-CtAhr6L0.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
- package/server/{reap-terminal-sessions-DvFqQUnq.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
- package/server/{rebuild-stack-hCQtprWC.js → rebuild-stack-C9Li44A3.js} +20 -10
- package/server/{rebuild-stack-BKYpIPDL.js → rebuild-stack-qC0jCNm6.js} +2 -2
- package/server/{reconstruct-cache-CF2avArx.js → reconstruct-cache-BHyiAg02.js} +7 -7
- package/server/record-aVzu-LGm.js +3 -0
- package/server/record-update-CZh46a2f.js +617 -0
- package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
- package/server/recovery-trip-CSNWSLDn.js +77 -0
- package/server/recovery-trip-_16hFKv4.js +3 -0
- package/server/{release-engine-_eO3VFth.js → release-engine-Be5MX5GP.js} +5 -5
- package/server/{release-set-vxgZwwZV.js → release-set-DJv_O6PS.js} +3 -3
- package/server/{remote-BienmcrZ.js → remote-BMM3uH2J.js} +3 -3
- package/server/{remote-CVPCc7Vy.js → remote-C0xVTHA5.js} +3 -3
- package/server/{remote-agents-kwsEZvXu.js → remote-agents-BIIoc5pD.js} +1 -1
- package/server/{remote-agents-kxraOCGT.js → remote-agents-EUiZ26bj.js} +7 -7
- package/server/{remote-completion-BtmZ42aP.js → remote-completion-BS4tJUn8.js} +13 -13
- package/server/resolver-BvHd6RE4.js +163 -0
- package/server/resume-9thEqAQR.js +3 -0
- package/server/{review-agent-CIRr0yYt.js → review-agent-BHGaBoBu.js} +29 -29
- package/server/{review-agent-UpAM4DmT.js → review-agent-CD3RQ-tc.js} +1 -1
- package/server/{review-artifacts-BCODM9ww.js → review-artifacts-DyhajWso.js} +6 -6
- package/server/{review-context-BBsNrDri.js → review-context-B-dlsPnx.js} +9 -9
- package/server/{review-convoy-liveness-l06_LYCt.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
- package/server/{review-status-CacDM78F.js → review-status-B6wYcOtP.js} +1 -1
- package/server/{review-status-CwhA9wmd.js → review-status-CKLk5aZ-.js} +306 -59
- package/server/{review-status-emit-BPJwYcRy.js → review-status-emit-CJ7UmEVU.js} +3 -3
- package/server/{review-status-enrichment-DvyZAbGR.js → review-status-enrichment-DJRgGX7-.js} +3 -3
- package/server/review-status-limits-4EJDCGHO.js +7 -0
- package/server/{review-status-source-DWnFE0b6.js → review-status-source-7nU3Z2wL.js} +1 -1
- package/server/{review-status-source-B70ekARK.js → review-status-source-BsDYGfyv.js} +1 -1
- package/server/{review-status-sync-B0IS6Beh.js → review-status-sync-BLssMTEW.js} +1 -1
- package/server/{review-status-sync-h2CJX6ju.js → review-status-sync-BxBeHRde.js} +35 -11
- package/server/{review-verdict-feedback-yrrmgps_.js → review-verdict-feedback-5jWuzgpc.js} +22 -10
- package/server/{review-verdict-feedback-qRohbFG2.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
- package/server/{rollup-CUoav0Op.js → rollup-BGIrCEkU.js} +79 -44
- package/server/rollup-CZB4UL9q.js +3 -0
- package/server/{scanner-ChURu_b-.js → scanner-DydjXPrz.js} +16 -9
- package/server/search-DdtIjAiu.js +395 -0
- package/server/{sequence-io-D9ITDxzq.js → sequence-io-Fw-cLyDs.js} +4 -4
- package/server/{sequencer-agent-m7gmaakW.js → sequencer-agent-BcpGMt5x.js} +15 -10
- package/server/server.js +1258 -438
- package/server/{service-BzFG0Us_.js → service-BFFkGsG4.js} +58 -58
- package/server/{session-fork-KBq4HIHF.js → session-fork-D0V-3e5P.js} +2 -2
- package/server/{session-history-C_EMhIIF.js → session-history-Bta5l9jY.js} +5 -5
- package/server/{settings-DejgzzLs.js → settings-Ce8B1daF.js} +2 -2
- package/server/{settings-BLbcDqUp.js → settings-E3FnEIUx.js} +3 -3
- package/server/settings-eOOJpxi_.js +2 -0
- package/server/{shadow-engineering-D8R9I8Yl.js → shadow-engineering-Mt9nJO4i.js} +3 -3
- package/server/{shadow-state-C0Af4clN.js → shadow-state-Bzj_AZCV.js} +1 -1
- package/server/{shadow-state-fzIqIMDD.js → shadow-state-DrkhoVSx.js} +2 -2
- package/server/{shadow-utils-Ugca_9ND.js → shadow-utils-H1GfqP06.js} +2 -2
- package/server/{ship-log-VAv-lHrF.js → ship-log-CFUIo4PR.js} +1 -1
- package/server/{smart-compaction-BcYY_Suf.js → smart-compaction-DSTq-Wua.js} +1 -1
- package/server/{smart-compaction-B2Xu5XEb.js → smart-compaction-Hzp3KCJX.js} +7 -7
- package/server/{spawn-planning-session-Dsv-350T.js → spawn-planning-session-C0uSA2SL.js} +2 -2
- package/server/{spawn-planning-session-DhCoBPct.js → spawn-planning-session-DN4son31.js} +23 -21
- package/server/{specialist-completion-z6v3ZqJE.js → specialist-completion-Cf6tpIh1.js} +1 -1
- package/server/{specialist-context-CrA5azkJ.js → specialist-context-DEUEkjIQ.js} +5 -5
- package/server/{specialist-handoff-logger-CmpZYJMB.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
- package/server/{specialist-logs-BorrIu0x.js → specialist-logs-7Ynue0R7.js} +3 -3
- package/server/{specialists-ZdrifiKx.js → specialists-CQwBEGlD.js} +1 -1
- package/server/{specialists-2yLmqph9.js → specialists-DAjPgYs_.js} +504 -238
- package/server/{specialists-Dfx9_Wzb.js → specialists-Hr6iW9fU.js} +18 -18
- package/server/{specialists-CH6ah6D-.js → specialists-MOoeB4A8.js} +1 -1
- package/server/specs-Dl88cbKY.js +3 -0
- package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
- package/server/{src-Dm_NV7f6.js → src-DQnkPN2i.js} +3 -3
- package/server/{src-B2e5rGu2.js → src-DhfDV0o4.js} +6 -6
- package/server/{stack-health-Bf2WdG4E.js → stack-health-D_iKwNRg.js} +107 -16
- package/server/stack-health-deVSdDwn.js +3 -0
- package/server/{stale-task-claims-D1Ll8fI5.js → stale-task-claims-BYJGqhLI.js} +5 -5
- package/server/{staleness-CuED1Psm.js → staleness-CopBDKnA.js} +1 -1
- package/server/{staleness-45qZ_a60.js → staleness-D8WeMUHd.js} +1 -1
- package/server/{state-home-B4EWfIxF.js → state-home-DjN8qduI.js} +24 -3
- package/server/{state-mapping-BEONzr8P.js → state-mapping-DlM7OYRW.js} +1 -1
- package/server/{state-migrate-Cd8BH33U.js → state-migrate-a2p1gtD7.js} +4 -4
- package/server/state-mirror-Cv_XgvT5.js +121 -0
- package/server/{stuck-remediation-ChcooZuk.js → stuck-remediation-CXJX_kki.js} +1 -1
- package/server/{stuck-remediation-DmY5UJLg.js → stuck-remediation-CbCRSz1v.js} +31 -732
- package/server/{substrate-bug-weights-service-BvTWrFUz.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
- package/server/{summary-fork--Jr8duYh.js → summary-fork-B61fjRJn.js} +2 -2
- package/server/{summary-fork-Ct514_Jl.js → summary-fork-B9pszUJN.js} +91 -10
- package/server/supervisor/{injection-budget-B3UyEONL.js → injection-budget-Ar7hgyJq.js} +1 -1
- package/server/supervisor/pty-supervisor.js +12 -3
- package/server/supervisor/{pty-token-CWRffcCa.js → pty-token-CXCFU0Z8.js} +1 -1
- package/server/{supervisor-B7BHGcNA.js → supervisor-BvnxbuuF.js} +6 -4
- package/server/supervisor-C69kpqvd.js +2 -0
- package/server/{swarm-readiness-MNE5O8hn.js → swarm-readiness-vTw1kqGa.js} +3 -3
- package/server/{system-prerequisites-Cin9ZgDx.js → system-prerequisites-LLzTEqsK.js} +3 -3
- package/server/{teardown-workspace-CvBpvc85.js → teardown-workspace-CqKKVJr1.js} +15 -15
- package/server/{test-agent-queue-DmSIqays.js → test-agent-queue-CWMq7oyG.js} +8 -7
- package/server/{test-verdict-BieVDAV1.js → test-verdict-NdtgRBuA.js} +1 -1
- package/server/{test-verdict-Cy2jJGTe.js → test-verdict-diIWE6hz.js} +15 -3
- package/server/{tldr-daemon-Ca0eovh3.js → tldr-daemon-B1Jhrtc8.js} +1 -1
- package/server/{tldr-daemon-IOssGwg7.js → tldr-daemon-Bpls1CJB.js} +2 -2
- package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
- package/server/tmux-Cjpx8L8u.js +4 -0
- package/server/{token-B10VFNOD.js → token-Bgpjo3tE.js} +2 -2
- package/server/token-util-BsjFll-k.js +3 -0
- package/server/{token-util-CZ8WPtdk.js → token-util-BymbpkJp.js} +1 -1
- package/server/{tracker-config-CHbrjg6m.js → tracker-config-4DaKVTfc.js} +2 -2
- package/server/{tracker-utils-DZZq_C0R.js → tracker-utils-BDeAXC-q.js} +2 -2
- package/server/{traefik-connect-GHomyBaD.js → traefik-connect-CC5FyxYj.js} +1 -1
- package/server/{tunnel-Dz7y434T.js → tunnel-CDWkeceJ.js} +1 -1
- package/server/{tunnel-Bdyb-sNq.js → tunnel-CPf5M-Pc.js} +3 -3
- package/server/{typed-errors-Bn_2WRU7.js → typed-errors-9K7Dq_Vn.js} +1 -1
- package/server/{typed-errors-BR_RmPS_.js → typed-errors-DrS5fb5z.js} +1 -1
- package/server/{types-D2ETIB8T.js → types-DzlUKiuf.js} +4 -3
- package/server/{types-Dh6RI5Vj.js → types-kI9ik8XO.js} +1 -1
- package/server/{uat-promote-verification-DyvQXvIn.js → uat-promote-verification-c_pxoxEc.js} +5 -5
- package/server/{uat-train-Dv0Bxer7.js → uat-train-CWGxBdJO.js} +0 -0
- package/server/{uat-train-diX_7shd.js → uat-train-CfCYd2ve.js} +1 -1
- package/server/{validate-606KcYZC.js → validate-f3ItVCfm.js} +3 -3
- package/server/{validation-Cf7aaV5A.js → validation-5G_wQtea.js} +1 -1
- package/server/{validation-CnrDul1x.js → validation-7tSiCM82.js} +4 -4
- package/server/{verification-artifact-GOaj8u2s.js → verification-artifact-9h9dH8uX.js} +1 -1
- package/server/{verification-artifact-D4b-bio9.js → verification-artifact-C_4WJnf6.js} +1 -1
- package/server/{verification-runner-DiPaUP-C.js → verification-runner-BV5F6wrA.js} +1 -1
- package/server/{verification-runner-B5MVxDvU.js → verification-runner-D58KmBhK.js} +18 -38
- package/server/{vtt-parser-CMU5EZ5R.js → vtt-parser-2iT9OHa9.js} +1 -1
- package/server/{work-agent-prompt-Csb3fbVR.js → work-agent-prompt-D03s4DD1.js} +9 -9
- package/server/{workflows-D87ajwV6.js → workflows-BMBwLYPV.js} +281 -98
- package/server/workflows-BOmWGpIh.js +2 -0
- package/server/{workspace-iD8oULqu.js → workspace-BgflNCH0.js} +3 -3
- package/server/{workspace-AIOM7n00.js → workspace-Cn9ywfSW.js} +1 -1
- package/server/{workspace-anchor-drift-19cJ1bH5.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
- package/server/{workspace-anchor-drift-C3mK5wNI.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
- package/server/{workspace-config-CJ7RqQiP.js → workspace-config-aUc2nIz6.js} +1 -1
- package/server/{workspace-manager-CXfrw4rR.js → workspace-manager-Bem7ZBs9.js} +521 -292
- package/server/workspace-manager-C0CpNh3t.js +3 -0
- package/server/{workspace-metadata-BuMRco5P.js → workspace-metadata-C5iSlPRo.js} +1 -1
- package/server/{workspace-metadata-eHSj_NsP.js → workspace-metadata-UKmTYmDQ.js} +2 -2
- package/server/{workspaces-DbtMX2TM.js → workspaces-DqxgwDZ8.js} +143 -113
- package/sync-sources/hooks/notification-hook +12 -1
- package/sync-sources/hooks/pan-hook-lib.sh +226 -0
- package/sync-sources/hooks/session-start-hook +31 -4
- package/sync-sources/hooks/work-agent-stop-hook +23 -1
- package/sync-sources/skills/pan-memory/SKILL.md +19 -3
- package/sync-sources/skills/pan-projects/SKILL.md +9 -0
- package/sync-sources/skills/pan-restart/SKILL.md +26 -7
- package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
- package/server/activity-logger-CMthG6Vd.js +0 -3
- package/server/agent-state-DyZJia9f.js +0 -3
- package/server/agents-Dnn4XgdB.js +0 -3
- package/server/archive-planning-BHCd_eL5.js +0 -2
- package/server/cli-D6mRfUE6.js +0 -3
- package/server/deacon-swarm-BkKR7SXu.js +0 -2
- package/server/delivery-C2M73sBg.js +0 -3
- package/server/dist-qcf9gAP0.js +0 -3
- package/server/event-store-5UKzh9Jf.js +0 -3
- package/server/forge-D647IMNa.js +0 -3
- package/server/fts-db-wROfFfje.js +0 -146
- package/server/hume-DtWN8oV5.js +0 -3
- package/server/inspect-agent-CPqXI81t.js +0 -2
- package/server/merge-ops-7QqziXAh.js +0 -2
- package/server/merge-rebase-B4pgzvQJ.js +0 -2
- package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
- package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
- package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
- package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
- package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
- package/server/project-repos-BgW4lcIa.js +0 -3
- package/server/projects-_n3Zui6K.js +0 -3
- package/server/providers-BI1mOBQ4.js +0 -3
- package/server/public/assets/index-Ddkcz3WT.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
- package/server/rally-x6ztTQo4.js +0 -3
- package/server/record-BTwWhtBb.js +0 -3
- package/server/record-update-DaOKS7Wb.js +0 -277
- package/server/recovery-trip-D-wM9EfB.js +0 -44
- package/server/resume-DXIIfJNk.js +0 -3
- package/server/rollup-DxCjJaAM.js +0 -3
- package/server/settings-9jSGHBPY.js +0 -2
- package/server/specs-DKV3jIEs.js +0 -3
- package/server/stack-health-CoWAhA99.js +0 -3
- package/server/supervisor-CyR_mW5B.js +0 -2
- package/server/tmux-Ctk6RV5l.js +0 -3
- package/server/token-util-CrfQ2FKf.js +0 -3
- package/server/workflows-DN6NyVGd.js +0 -2
- package/server/workspace-manager-B38rFWA1.js +0 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { $ as
|
|
5
|
-
import { s as getHarnessBehavior } from "./src-
|
|
6
|
-
import { t as init_behavior } from "./behavior-
|
|
7
|
-
import { f as toCodexSandboxValue, l as init_codex } from "./codex-
|
|
2
|
+
import { $n as qualifyPiModel, Ir as MessageDeliveryFailed, Vr as init_errors, Zn as init_providers, _i as packageRoot, hi as init_paths, mi as getOverdeckHome$1 } from "./config-yaml-BSCqwmX0.js";
|
|
3
|
+
import { n as init_fs_lock, o as releaseRecordLock, t as acquireRecordLock } from "./fs-lock-D_GeJtXl.js";
|
|
4
|
+
import { $ as getUiThemeSync, C as init_tmux, G as validateSessionName, Q as colorFgBgForTheme, W as tmuxExecAsync, Y as paneHasBlockingChoiceMenu, a as capturePaneText, c as deliveryVerifyLine, et as init_ui_theme, q as init_pane_choice_menu } from "./tmux-CImZaX4q.js";
|
|
5
|
+
import { s as getHarnessBehavior } from "./src-BYdwL_n-.js";
|
|
6
|
+
import { t as init_behavior } from "./behavior-DIMQMRzs.js";
|
|
7
|
+
import { f as toCodexSandboxValue, l as init_codex } from "./codex-CjkD1PJu.js";
|
|
8
8
|
import { dirname, join } from "node:path";
|
|
9
9
|
import { Data } from "effect";
|
|
10
10
|
import { join as join$1 } from "path";
|
|
@@ -56,7 +56,7 @@ var init_model_validation = __esmMin((() => {
|
|
|
56
56
|
* prepending its own, so a Flywheel-spawned agent never runs behind the
|
|
57
57
|
* orchestrator's shim inherited through the environment.
|
|
58
58
|
*/
|
|
59
|
-
function shellQuote$
|
|
59
|
+
function shellQuote$2(value) {
|
|
60
60
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
@@ -79,10 +79,10 @@ function buildGitGuardLines(agentId, guardRoot) {
|
|
|
79
79
|
"PATH=\"$(IFS=':'; echo \"${_overdeck_kept_path[*]}\")\"",
|
|
80
80
|
"unset _overdeck_path_segments _overdeck_kept_path _overdeck_path_segment",
|
|
81
81
|
"_OVERDECK_REAL_GIT=\"$(command -v git)\"",
|
|
82
|
-
`_OVERDECK_GUARD_ROOT="$(cd ${shellQuote$
|
|
83
|
-
`[ -n "$_OVERDECK_GUARD_ROOT" ] || _OVERDECK_GUARD_ROOT=${shellQuote$
|
|
84
|
-
`mkdir -p ${shellQuote$
|
|
85
|
-
`cat > ${shellQuote$
|
|
82
|
+
`_OVERDECK_GUARD_ROOT="$(cd ${shellQuote$2(guardRoot)} 2>/dev/null && pwd -P)"`,
|
|
83
|
+
`[ -n "$_OVERDECK_GUARD_ROOT" ] || _OVERDECK_GUARD_ROOT=${shellQuote$2(guardRoot)}`,
|
|
84
|
+
`mkdir -p ${shellQuote$2(guardDir)}`,
|
|
85
|
+
`cat > ${shellQuote$2(guardPath)} <<EOF`,
|
|
86
86
|
"#!/bin/sh",
|
|
87
87
|
"_OVERDECK_REAL_GIT=\"$_OVERDECK_REAL_GIT\"",
|
|
88
88
|
"_OVERDECK_GUARD_ROOT=\"$_OVERDECK_GUARD_ROOT\"",
|
|
@@ -210,7 +210,7 @@ function buildGitGuardLines(agentId, guardRoot) {
|
|
|
210
210
|
"esac",
|
|
211
211
|
"exec \"\\$_OVERDECK_REAL_GIT\" \"\\$@\"",
|
|
212
212
|
"EOF",
|
|
213
|
-
`chmod 0755 ${shellQuote$
|
|
213
|
+
`chmod 0755 ${shellQuote$2(guardPath)}`,
|
|
214
214
|
`export PATH="${pathForDoubleQuotes}:$PATH"`
|
|
215
215
|
];
|
|
216
216
|
}
|
|
@@ -218,14 +218,83 @@ var init_launcher_git_guard = __esmMin((() => {
|
|
|
218
218
|
init_paths();
|
|
219
219
|
}));
|
|
220
220
|
//#endregion
|
|
221
|
-
//#region ../../lib/
|
|
221
|
+
//#region ../../lib/shell-quote.ts
|
|
222
222
|
/**
|
|
223
223
|
* Quote a string for safe use as a shell literal in single quotes.
|
|
224
224
|
* e.g. shellQuote("foo'bar") → "'foo'\\''bar'"
|
|
225
|
+
*
|
|
226
|
+
* Leaf module (PAN-3300) so launcher-generator.ts and the launcher command
|
|
227
|
+
* builders extracted out of it share one implementation.
|
|
225
228
|
*/
|
|
226
|
-
function shellQuote(value) {
|
|
229
|
+
function shellQuote$1(value) {
|
|
227
230
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
228
231
|
}
|
|
232
|
+
var init_shell_quote = __esmMin((() => {}));
|
|
233
|
+
//#endregion
|
|
234
|
+
//#region ../../lib/launcher-codex-command.ts
|
|
235
|
+
/**
|
|
236
|
+
* Codex command-line construction for the launcher generator (PAN-3300).
|
|
237
|
+
*
|
|
238
|
+
* Extracted from launcher-generator.ts (file-size ceiling): every `codex` and
|
|
239
|
+
* codex-app-server invocation shape lives here. The generator passes the
|
|
240
|
+
* LauncherConfig fields these shapes read plus its own PTY-supervisor wrapper,
|
|
241
|
+
* so this module stays a leaf — it never imports back into the generator.
|
|
242
|
+
*/
|
|
243
|
+
function buildCodexCommand(config, useExec, wrap) {
|
|
244
|
+
const cmd = computeCodexCommandTokens(config, useExec, wrap);
|
|
245
|
+
const flat = cmd.join(" ").replace(/\s+/g, " ");
|
|
246
|
+
const applied = /(^|\s)resume(\s|$)/.test(flat) ? "YES" : "no";
|
|
247
|
+
console.log(`[codex-launcher] agent=${config.overdeckEnv?.agentId ?? "?"} mode=${config.codexMode ?? "exec"} resumeSessionId=${config.resumeSessionId ?? "(none)"} resumeApplied=${applied} cmd=${flat.slice(0, 200)}`);
|
|
248
|
+
return cmd;
|
|
249
|
+
}
|
|
250
|
+
function computeCodexCommandTokens(config, useExec, wrap) {
|
|
251
|
+
const codexMode = config.codexMode ?? "exec";
|
|
252
|
+
if (codexMode === "tui") {
|
|
253
|
+
const tokens = ["codex"];
|
|
254
|
+
if (config.resumeSessionId) tokens.push("resume");
|
|
255
|
+
tokens.push("-c", "project_doc_max_bytes=0");
|
|
256
|
+
if (config.resumeSessionId) tokens.push(shellQuote$1(config.resumeSessionId));
|
|
257
|
+
const cmd = wrap(tokens.join(" "));
|
|
258
|
+
return [useExec ? `exec ${cmd}` : cmd];
|
|
259
|
+
}
|
|
260
|
+
if (codexMode === "work-tui") {
|
|
261
|
+
const tokens = ["codex"];
|
|
262
|
+
if (config.resumeSessionId) tokens.push("resume");
|
|
263
|
+
if (config.model) tokens.push("-m", shellQuoteModelIdSync(config.model));
|
|
264
|
+
if (config.resumeSessionId) tokens.push(shellQuote$1(config.resumeSessionId));
|
|
265
|
+
const cmd = wrap(tokens.join(" "));
|
|
266
|
+
return [useExec ? `exec ${cmd}` : cmd];
|
|
267
|
+
}
|
|
268
|
+
if (codexMode === "app-server") {
|
|
269
|
+
const tokens = ["node", shellQuote$1(join(packageRoot, "dist", "codex-app-server-host.js"))];
|
|
270
|
+
if (config.model) tokens.push("--model", shellQuoteModelIdSync(config.model));
|
|
271
|
+
if (config.resumeSessionId) tokens.push("--resume", shellQuote$1(config.resumeSessionId));
|
|
272
|
+
const cmd = tokens.join(" ");
|
|
273
|
+
return [useExec ? `exec ${cmd}` : cmd];
|
|
274
|
+
}
|
|
275
|
+
const isResume = Boolean(config.resumeSessionId);
|
|
276
|
+
const tokens = ["codex", "exec"];
|
|
277
|
+
if (isResume) tokens.push("resume");
|
|
278
|
+
if (config.model) tokens.push("-m", shellQuoteModelIdSync(config.model));
|
|
279
|
+
tokens.push("-c", "approval_policy=never");
|
|
280
|
+
const sandbox = toCodexSandboxValue(config.codexSandboxMode);
|
|
281
|
+
if (isResume) tokens.push("-c", `sandbox_mode=${sandbox}`);
|
|
282
|
+
else tokens.push("-s", sandbox);
|
|
283
|
+
tokens.push("--skip-git-repo-check");
|
|
284
|
+
if (isResume) tokens.push(shellQuote$1(config.resumeSessionId));
|
|
285
|
+
if (config.promptFile) tokens.push("\"$prompt\"");
|
|
286
|
+
else if (config.promptInline) tokens.push(shellQuote$1(config.promptInline));
|
|
287
|
+
const cmd = tokens.join(" ").replace(/\s+/g, " ").trim();
|
|
288
|
+
return [useExec ? `exec ${cmd}` : cmd];
|
|
289
|
+
}
|
|
290
|
+
var init_launcher_codex_command = __esmMin((() => {
|
|
291
|
+
init_codex();
|
|
292
|
+
init_model_validation();
|
|
293
|
+
init_paths();
|
|
294
|
+
init_shell_quote();
|
|
295
|
+
}));
|
|
296
|
+
//#endregion
|
|
297
|
+
//#region ../../lib/launcher-generator.ts
|
|
229
298
|
/**
|
|
230
299
|
* Build the trailing `--mcp-config <path> --dangerously-load-development-channels server:<name>`
|
|
231
300
|
* fragment when both channels-bridge fields are set. Returns an empty string when
|
|
@@ -237,13 +306,13 @@ function shellQuote(value) {
|
|
|
237
306
|
function buildChannelsArgs(config) {
|
|
238
307
|
if (!config.channelsBridgeMcpConfig) return "";
|
|
239
308
|
const serverName = config.channelsBridgeServerName ?? "overdeck-bridge";
|
|
240
|
-
return ` --mcp-config ${shellQuote(config.channelsBridgeMcpConfig)} --dangerously-load-development-channels server:${serverName}`;
|
|
309
|
+
return ` --mcp-config ${shellQuote$1(config.channelsBridgeMcpConfig)} --dangerously-load-development-channels server:${serverName}`;
|
|
241
310
|
}
|
|
242
311
|
function wrapWithSupervisor(config, cmd) {
|
|
243
312
|
if (!config.useSupervisor) return cmd;
|
|
244
313
|
if (!getHarnessBehavior(config.harness ?? "claude-code").supportsPtySupervisor || config.reviewSignal) return cmd;
|
|
245
314
|
if (!config.supervisorScriptPath) throw new Error("LauncherConfig.supervisorScriptPath is required when useSupervisor=true");
|
|
246
|
-
return `node ${shellQuote(config.supervisorScriptPath)} ${cmd}`;
|
|
315
|
+
return `node ${shellQuote$1(config.supervisorScriptPath)} ${cmd}`;
|
|
247
316
|
}
|
|
248
317
|
/**
|
|
249
318
|
* Canonical launcher script generator.
|
|
@@ -256,6 +325,7 @@ function wrapWithSupervisor(config, cmd) {
|
|
|
256
325
|
function generateLauncherScriptSync(config) {
|
|
257
326
|
const lines = [];
|
|
258
327
|
lines.push("#!/bin/bash");
|
|
328
|
+
lines.push("export OVERDECK_HOST_TMUX=\"$TMUX\" OVERDECK_HOST_TMUX_PANE=\"$TMUX_PANE\"");
|
|
259
329
|
lines.push("unset TMUX TMUX_PANE STY");
|
|
260
330
|
if (config.setPipefail) lines.push("set -o pipefail");
|
|
261
331
|
lines.push("command -v mkcert >/dev/null 2>&1 && export NODE_EXTRA_CA_CERTS=\"$(mkcert -CAROOT)/rootCA.pem\"");
|
|
@@ -271,22 +341,22 @@ function generateLauncherScriptSync(config) {
|
|
|
271
341
|
const explicitlySetOverdeckKeys = /* @__PURE__ */ new Set();
|
|
272
342
|
if (config.overdeckEnv) {
|
|
273
343
|
if (config.overdeckEnv.agentId != null) {
|
|
274
|
-
lines.push(`export OVERDECK_AGENT_ID=${shellQuote(config.overdeckEnv.agentId)}`);
|
|
344
|
+
lines.push(`export OVERDECK_AGENT_ID=${shellQuote$1(config.overdeckEnv.agentId)}`);
|
|
275
345
|
explicitlySetOverdeckKeys.add("OVERDECK_AGENT_ID");
|
|
276
346
|
}
|
|
277
347
|
if (config.overdeckEnv.issueId != null) {
|
|
278
|
-
lines.push(`export OVERDECK_ISSUE_ID=${shellQuote(config.overdeckEnv.issueId)}`);
|
|
348
|
+
lines.push(`export OVERDECK_ISSUE_ID=${shellQuote$1(config.overdeckEnv.issueId)}`);
|
|
279
349
|
explicitlySetOverdeckKeys.add("OVERDECK_ISSUE_ID");
|
|
280
350
|
}
|
|
281
351
|
if (config.overdeckEnv.sessionType != null) {
|
|
282
|
-
lines.push(`export OVERDECK_SESSION_TYPE=${shellQuote(config.overdeckEnv.sessionType)}`);
|
|
352
|
+
lines.push(`export OVERDECK_SESSION_TYPE=${shellQuote$1(config.overdeckEnv.sessionType)}`);
|
|
283
353
|
explicitlySetOverdeckKeys.add("OVERDECK_SESSION_TYPE");
|
|
284
354
|
}
|
|
285
355
|
}
|
|
286
356
|
if (config.overdeckEnv?.agentId && config.spawnMode !== "conversation") lines.push(...buildGitGuardLines(config.overdeckEnv.agentId, config.workingDir));
|
|
287
357
|
if (config.extraEnvExports) for (const expr of config.extraEnvExports) lines.push(expr);
|
|
288
|
-
if (config.codexHome) lines.push(`export CODEX_HOME=${shellQuote(config.codexHome)}`);
|
|
289
|
-
if (config.changeDir !== false) lines.push(`cd -- ${shellQuote(config.workingDir)}`);
|
|
358
|
+
if (config.codexHome) lines.push(`export CODEX_HOME=${shellQuote$1(config.codexHome)}`);
|
|
359
|
+
if (config.changeDir !== false) lines.push(`cd -- ${shellQuote$1(config.workingDir)}`);
|
|
290
360
|
if (config.unsetProviderEnv) for (const key of PROVIDER_ENV_UNSETS) lines.push(`unset ${key}`);
|
|
291
361
|
if (config.providerExports) {
|
|
292
362
|
const trimmed = config.providerExports.trimEnd();
|
|
@@ -305,19 +375,19 @@ function generateLauncherScriptSync(config) {
|
|
|
305
375
|
if (keysToUnset.length > 0) lines.push(`unset ${keysToUnset.join(" ")}`);
|
|
306
376
|
}
|
|
307
377
|
if (config.trapHup) lines.push("trap '' HUP");
|
|
308
|
-
if (config.promptFile && config.promptFileMode !== "stdin") lines.push(`prompt=$(cat ${shellQuote(config.promptFile)})`);
|
|
309
|
-
if (config.debugLog) lines.push(`echo "[launcher] Claude starting at $(date)" >> ${shellQuote(config.debugLog)}`);
|
|
378
|
+
if (config.promptFile && config.promptFileMode !== "stdin") lines.push(`prompt=$(cat ${shellQuote$1(config.promptFile)})`);
|
|
379
|
+
if (config.debugLog) lines.push(`echo "[launcher] Claude starting at $(date)" >> ${shellQuote$1(config.debugLog)}`);
|
|
310
380
|
const commandParts = buildCommand(config);
|
|
311
381
|
if (commandParts.length > 0) lines.push(...commandParts);
|
|
312
382
|
if (config.debugLog) {
|
|
313
383
|
lines.push("CLAUDE_EXIT=$?");
|
|
314
|
-
lines.push(`echo "[launcher] Claude exited with code $CLAUDE_EXIT at $(date)" >> ${shellQuote(config.debugLog)}`);
|
|
384
|
+
lines.push(`echo "[launcher] Claude exited with code $CLAUDE_EXIT at $(date)" >> ${shellQuote$1(config.debugLog)}`);
|
|
315
385
|
}
|
|
316
386
|
if (config.role === "plan") {
|
|
317
387
|
lines.push("echo \"\"");
|
|
318
388
|
lines.push("echo \"Planning agent has exited. Session kept alive for review.\"");
|
|
319
389
|
lines.push("echo \"Click 'Done' in the dashboard when ready to hand off to implementation.\"");
|
|
320
|
-
if (config.debugLog) lines.push(`echo "[launcher] Keep-alive loop starting at $(date)" >> ${shellQuote(config.debugLog)}`);
|
|
390
|
+
if (config.debugLog) lines.push(`echo "[launcher] Keep-alive loop starting at $(date)" >> ${shellQuote$1(config.debugLog)}`);
|
|
321
391
|
}
|
|
322
392
|
if (config.spawnMode === "conversation") {
|
|
323
393
|
lines.push("echo \"\"");
|
|
@@ -333,14 +403,15 @@ function buildCommand(config) {
|
|
|
333
403
|
const behavior = getHarnessBehavior(config.harness ?? "claude-code");
|
|
334
404
|
if (config.spawnMode === "conversation") {
|
|
335
405
|
if (behavior.launchCommandKind === "ohmypi-rpc") return buildOhmypiCommand(config, false);
|
|
336
|
-
if (behavior.launchCommandKind === "codex-work-tui") return buildCodexCommand(config, false);
|
|
406
|
+
if (behavior.launchCommandKind === "codex-work-tui") return buildCodexCommand(config, false, (cmd) => wrapWithSupervisor(config, cmd));
|
|
337
407
|
if (behavior.launchCommandKind === "acp-host") return buildAcpCommand(config, false);
|
|
408
|
+
if (behavior.launchCommandKind === "kimi-code-tui") return buildKimiCodeCommand(config, false);
|
|
338
409
|
if (config.baseCommand) {
|
|
339
410
|
let cmd = config.baseCommand;
|
|
340
411
|
cmd += buildChannelsArgs(config);
|
|
341
412
|
const args = [];
|
|
342
|
-
if (config.resumeSessionId) args.push(`--resume ${shellQuote(config.resumeSessionId)}`);
|
|
343
|
-
else if (config.sessionId) args.push(`--session-id ${shellQuote(config.sessionId)}`);
|
|
413
|
+
if (config.resumeSessionId) args.push(`--resume ${shellQuote$1(config.resumeSessionId)}`);
|
|
414
|
+
else if (config.sessionId) args.push(`--session-id ${shellQuote$1(config.sessionId)}`);
|
|
344
415
|
if (config.extraArgs) args.push(config.extraArgs);
|
|
345
416
|
parts.push(wrapWithSupervisor(config, `${cmd} ${args.join(" ")}`.trim()));
|
|
346
417
|
}
|
|
@@ -363,22 +434,22 @@ function buildReviewSubRoleCommand(config) {
|
|
|
363
434
|
const inner = buildNonConversationCommand(config, false);
|
|
364
435
|
if (inner.length === 0) return inner;
|
|
365
436
|
const claudeCmd = `timeout ${sig.timeoutSeconds} ${inner[0]}`;
|
|
366
|
-
const synth = shellQuote(sig.synthesisAgentId);
|
|
437
|
+
const synth = shellQuote$1(sig.synthesisAgentId);
|
|
367
438
|
const out = sig.outputPath;
|
|
368
439
|
const role = sig.subRole;
|
|
369
|
-
const pidFile = shellQuote(sig.launcherPidPath);
|
|
440
|
+
const pidFile = shellQuote$1(sig.launcherPidPath);
|
|
370
441
|
return [
|
|
371
442
|
`echo $$ > ${pidFile}`,
|
|
372
443
|
claudeCmd,
|
|
373
444
|
"CLAUDE_EXIT=$?",
|
|
374
445
|
`if [ "$CLAUDE_EXIT" = "124" ]; then`,
|
|
375
446
|
` pan tell ${synth} "REVIEWER_TIMEOUT ${role} reviewer exceeded ${sig.timeoutSeconds}s deadline" || true`,
|
|
376
|
-
`elif [ -s ${shellQuote(out)} ]; then`,
|
|
447
|
+
`elif [ -s ${shellQuote$1(out)} ]; then`,
|
|
377
448
|
` pan tell ${synth} "REVIEWER_READY ${role} ${out}" || true`,
|
|
378
449
|
`else`,
|
|
379
450
|
` pan tell ${synth} "REVIEWER_FAILED ${role} reviewer exited (code $CLAUDE_EXIT) without writing report" || true`,
|
|
380
451
|
`fi`,
|
|
381
|
-
`touch ${shellQuote(sig.signalMarkerPath)}`,
|
|
452
|
+
`touch ${shellQuote$1(sig.signalMarkerPath)}`,
|
|
382
453
|
`rm -f ${pidFile}`
|
|
383
454
|
];
|
|
384
455
|
}
|
|
@@ -393,8 +464,9 @@ function buildReviewSubRoleCommand(config) {
|
|
|
393
464
|
function buildNonConversationCommand(config, useExec) {
|
|
394
465
|
const behavior = getHarnessBehavior(config.harness ?? "claude-code");
|
|
395
466
|
if (behavior.launchCommandKind === "ohmypi-rpc") return buildOhmypiCommand(config, useExec);
|
|
396
|
-
if (behavior.launchCommandKind === "codex-work-tui") return buildCodexCommand(config, useExec);
|
|
467
|
+
if (behavior.launchCommandKind === "codex-work-tui") return buildCodexCommand(config, useExec, (cmd) => wrapWithSupervisor(config, cmd));
|
|
397
468
|
if (behavior.launchCommandKind === "acp-host") return buildAcpCommand(config, useExec);
|
|
469
|
+
if (behavior.launchCommandKind === "kimi-code-tui") return buildKimiCodeCommand(config, useExec);
|
|
398
470
|
const parts = [];
|
|
399
471
|
if (!config.baseCommand) return parts;
|
|
400
472
|
let cmd = config.baseCommand;
|
|
@@ -403,14 +475,14 @@ function buildNonConversationCommand(config, useExec) {
|
|
|
403
475
|
for (const flag of config.permissionFlags) if (!cmdTokens.includes(flag)) cmd += ` ${flag}`;
|
|
404
476
|
}
|
|
405
477
|
cmd += buildChannelsArgs(config);
|
|
406
|
-
if (config.resumeSessionId) cmd += ` --resume ${shellQuote(config.resumeSessionId)}`;
|
|
407
|
-
if (config.sessionId) cmd += ` --session-id ${shellQuote(config.sessionId)}`;
|
|
478
|
+
if (config.resumeSessionId) cmd += ` --resume ${shellQuote$1(config.resumeSessionId)}`;
|
|
479
|
+
if (config.sessionId) cmd += ` --session-id ${shellQuote$1(config.sessionId)}`;
|
|
408
480
|
if (config.model) cmd += ` --model ${shellQuoteModelIdSync(config.model)}`;
|
|
409
481
|
if (config.extraArgs) cmd += ` ${config.extraArgs}`;
|
|
410
|
-
for (const file of systemPromptFiles(config)) cmd += ` --append-system-prompt-file ${shellQuote(file)}`;
|
|
411
|
-
if (config.promptFile) if (config.promptFileMode === "stdin") cmd += ` < ${shellQuote(config.promptFile)}`;
|
|
482
|
+
for (const file of systemPromptFiles(config)) cmd += ` --append-system-prompt-file ${shellQuote$1(file)}`;
|
|
483
|
+
if (config.promptFile) if (config.promptFileMode === "stdin") cmd += ` < ${shellQuote$1(config.promptFile)}`;
|
|
412
484
|
else cmd += " \"$prompt\"";
|
|
413
|
-
if (config.promptInline) cmd += ` ${shellQuote(config.promptInline)}`;
|
|
485
|
+
if (config.promptInline) cmd += ` ${shellQuote$1(config.promptInline)}`;
|
|
414
486
|
const wrapped = wrapWithSupervisor(config, cmd.trim());
|
|
415
487
|
parts.push(useExec ? `exec ${wrapped}` : wrapped);
|
|
416
488
|
return parts;
|
|
@@ -449,22 +521,22 @@ function buildOhmypiCommand(config, useExec) {
|
|
|
449
521
|
const tokens = ["omp"];
|
|
450
522
|
if (piMode === "rpc") tokens.push("--mode", "rpc");
|
|
451
523
|
if (config.model) tokens.push("--model", shellQuoteModelIdSync(qualifyPiModel(config.model)));
|
|
452
|
-
tokens.push("--session-dir", shellQuote(config.piSessionDir));
|
|
453
|
-
if (config.piExtensionPath) tokens.push("--extension", shellQuote(config.piExtensionPath));
|
|
454
|
-
for (const file of systemPromptFiles(config)) tokens.push("--append-system-prompt", `"$(cat ${shellQuote(file)} 2>/dev/null)"`);
|
|
455
|
-
if (config.resumeSessionId) tokens.push("--resume", shellQuote(config.resumeSessionId));
|
|
524
|
+
tokens.push("--session-dir", shellQuote$1(config.piSessionDir));
|
|
525
|
+
if (config.piExtensionPath) tokens.push("--extension", shellQuote$1(config.piExtensionPath));
|
|
526
|
+
for (const file of systemPromptFiles(config)) tokens.push("--append-system-prompt", `"$(cat ${shellQuote$1(file)} 2>/dev/null)"`);
|
|
527
|
+
if (config.resumeSessionId) tokens.push("--resume", shellQuote$1(config.resumeSessionId));
|
|
456
528
|
if (config.extraArgs) tokens.push(config.extraArgs);
|
|
457
529
|
if (config.promptFile) tokens.push("--append-system-prompt", "\"$prompt\"");
|
|
458
|
-
else if (config.promptInline) tokens.push("--append-system-prompt", shellQuote(config.promptInline));
|
|
530
|
+
else if (config.promptInline) tokens.push("--append-system-prompt", shellQuote$1(config.promptInline));
|
|
459
531
|
let cmd = tokens.join(" ").replace(/\s+/g, " ").trim();
|
|
460
532
|
if (piMode === "rpc") {
|
|
461
533
|
const agentDir = dirname(config.piFifoPath);
|
|
462
534
|
const outputLogPath = join(agentDir, "output.log");
|
|
463
535
|
const exitStatusPath = join(agentDir, "exit-status");
|
|
464
536
|
return [
|
|
465
|
-
`${cmd} <> ${shellQuote(config.piFifoPath)} >> ${shellQuote(outputLogPath)} 2>&1`,
|
|
537
|
+
`${cmd} <> ${shellQuote$1(config.piFifoPath)} >> ${shellQuote$1(outputLogPath)} 2>&1`,
|
|
466
538
|
"__omp_exit=$?",
|
|
467
|
-
`printf '%s %s\\n' "$__omp_exit" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > ${shellQuote(exitStatusPath)}`,
|
|
539
|
+
`printf '%s %s\\n' "$__omp_exit" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > ${shellQuote$1(exitStatusPath)}`,
|
|
468
540
|
"exit $__omp_exit"
|
|
469
541
|
];
|
|
470
542
|
}
|
|
@@ -505,78 +577,56 @@ function buildAcpCommand(config, useExec) {
|
|
|
505
577
|
if (!config.acpBinaryPath) throw new Error("acp launcher requires acpBinaryPath");
|
|
506
578
|
const tokens = [
|
|
507
579
|
"node",
|
|
508
|
-
shellQuote(join(packageRoot, "dist", "acp-host.js")),
|
|
580
|
+
shellQuote$1(join(packageRoot, "dist", "acp-host.js")),
|
|
509
581
|
"--agent",
|
|
510
|
-
shellQuote(config.acpAgentId),
|
|
582
|
+
shellQuote$1(config.acpAgentId),
|
|
511
583
|
"--provider",
|
|
512
|
-
shellQuote(config.acpProvider),
|
|
584
|
+
shellQuote$1(config.acpProvider),
|
|
513
585
|
"--workspace",
|
|
514
|
-
shellQuote(config.acpWorkspace),
|
|
586
|
+
shellQuote$1(config.acpWorkspace),
|
|
515
587
|
"--binary-path",
|
|
516
|
-
shellQuote(config.acpBinaryPath)
|
|
588
|
+
shellQuote$1(config.acpBinaryPath)
|
|
517
589
|
];
|
|
518
|
-
if (config.resumeSessionId) tokens.push("--resume", shellQuote(config.resumeSessionId));
|
|
590
|
+
if (config.resumeSessionId) tokens.push("--resume", shellQuote$1(config.resumeSessionId));
|
|
519
591
|
if (config.model) tokens.push("--model", shellQuoteModelIdSync(config.model));
|
|
520
|
-
if (config.acpContextFile) tokens.push("--context-file", shellQuote(config.acpContextFile));
|
|
592
|
+
if (config.acpContextFile) tokens.push("--context-file", shellQuote$1(config.acpContextFile));
|
|
521
593
|
const cmd = tokens.join(" ");
|
|
522
594
|
return [useExec ? `exec ${cmd}` : cmd];
|
|
523
595
|
}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
const cmd = wrapWithSupervisor(config, tokens.join(" "));
|
|
547
|
-
return [useExec ? `exec ${cmd}` : cmd];
|
|
548
|
-
}
|
|
549
|
-
if (codexMode === "app-server") {
|
|
550
|
-
const tokens = ["node", shellQuote(join(packageRoot, "dist", "codex-app-server-host.js"))];
|
|
551
|
-
if (config.model) tokens.push("--model", shellQuoteModelIdSync(config.model));
|
|
552
|
-
if (config.resumeSessionId) tokens.push("--resume", shellQuote(config.resumeSessionId));
|
|
553
|
-
const cmd = tokens.join(" ");
|
|
554
|
-
return [useExec ? `exec ${cmd}` : cmd];
|
|
555
|
-
}
|
|
556
|
-
const isResume = Boolean(config.resumeSessionId);
|
|
557
|
-
const tokens = ["codex", "exec"];
|
|
558
|
-
if (isResume) tokens.push("resume");
|
|
559
|
-
if (config.model) tokens.push("-m", shellQuoteModelIdSync(config.model));
|
|
560
|
-
tokens.push("-c", "approval_policy=never");
|
|
561
|
-
const sandbox = toCodexSandboxValue(config.codexSandboxMode);
|
|
562
|
-
if (isResume) tokens.push("-c", `sandbox_mode=${sandbox}`);
|
|
563
|
-
else tokens.push("-s", sandbox);
|
|
564
|
-
tokens.push("--skip-git-repo-check");
|
|
565
|
-
if (isResume) tokens.push(shellQuote(config.resumeSessionId));
|
|
566
|
-
if (config.promptFile) tokens.push("\"$prompt\"");
|
|
567
|
-
else if (config.promptInline) tokens.push(shellQuote(config.promptInline));
|
|
568
|
-
let cmd = tokens.join(" ").replace(/\s+/g, " ").trim();
|
|
596
|
+
/**
|
|
597
|
+
* Build a native Kimi Code CLI command line (D2/erratum E1 — RESOLVED 0.29.2
|
|
598
|
+
* checkpoint): `kimi [-S <id>] -m <model> --yolo [--add-dir <dir>]...`,
|
|
599
|
+
* wrapped in the PTY supervisor like claude-code
|
|
600
|
+
* (KIMI_CODE_BEHAVIOR.supportsPtySupervisor is true). Deliberately NO
|
|
601
|
+
* --session (long form), NO --work-dir (neither flag exists on the installed
|
|
602
|
+
* binary), and NO -p/--print (v1 work agents run interactively). On a fresh
|
|
603
|
+
* launch, Kimi generates its own session id, captured post-launch as the
|
|
604
|
+
* newest session directory under the workspace's workDirKey bucket; on a
|
|
605
|
+
* true resume, that captured id is passed back via `-S` (PAN-1837).
|
|
606
|
+
*/
|
|
607
|
+
function buildKimiCodeCommand(config, useExec) {
|
|
608
|
+
if (!config.kimiCodeModel) throw new Error("kimi-code launcher requires kimiCodeModel");
|
|
609
|
+
const tokens = [
|
|
610
|
+
"kimi",
|
|
611
|
+
"-m",
|
|
612
|
+
shellQuoteModelIdSync(config.kimiCodeModel)
|
|
613
|
+
];
|
|
614
|
+
if (config.resumeSessionId) tokens.push("-S", shellQuote$1(config.resumeSessionId));
|
|
615
|
+
if (config.kimiCodeYolo) tokens.push("--yolo");
|
|
616
|
+
for (const dir of config.kimiCodeAddDirs ?? []) tokens.push("--add-dir", shellQuote$1(dir));
|
|
617
|
+
const cmd = wrapWithSupervisor(config, tokens.join(" "));
|
|
569
618
|
return [useExec ? `exec ${cmd}` : cmd];
|
|
570
619
|
}
|
|
571
620
|
var PROVIDER_ENV_UNSETS;
|
|
572
621
|
var init_launcher_generator = __esmMin((() => {
|
|
573
|
-
init_codex();
|
|
574
622
|
init_behavior();
|
|
575
623
|
init_providers();
|
|
576
624
|
init_model_validation();
|
|
577
625
|
init_ui_theme();
|
|
578
626
|
init_paths();
|
|
579
627
|
init_launcher_git_guard();
|
|
628
|
+
init_launcher_codex_command();
|
|
629
|
+
init_shell_quote();
|
|
580
630
|
PROVIDER_ENV_UNSETS = [
|
|
581
631
|
"ANTHROPIC_API_KEY",
|
|
582
632
|
"ANTHROPIC_BASE_URL",
|
|
@@ -620,11 +670,15 @@ var init_provenance = __esmMin((() => {}));
|
|
|
620
670
|
*
|
|
621
671
|
* (none) ──paste──► PENDING ──atomic claim+Enter──► TERMINAL
|
|
622
672
|
*
|
|
623
|
-
* - `sendKeysDedup` atomically pastes and sets
|
|
624
|
-
*
|
|
625
|
-
*
|
|
626
|
-
*
|
|
627
|
-
*
|
|
673
|
+
* - `sendKeysDedup` atomically pastes and sets PENDING plus payload-state
|
|
674
|
+
* `unverified`. Recovery proves that payload in the cursor-anchored composer
|
|
675
|
+
* before reusing the claim, or re-pastes after positive absence. An Enter
|
|
676
|
+
* attempt atomically advances the state to `enter-attempted`, so rollback
|
|
677
|
+
* recovery does not duplicate content that may already have landed. State
|
|
678
|
+
* reads are strict; unset legacy and unknown values fail closed.
|
|
679
|
+
* A POISON breadcrumb (a terminal marker that proved
|
|
680
|
+
* false but could not be rolled back) is repaired first and never honored as
|
|
681
|
+
* a dedup.
|
|
628
682
|
* - `completeKeyedSubmit` issues ONE `if-shell`: only when PENDING is
|
|
629
683
|
* present, TERMINAL absent, and the pane alive does the tmux server send
|
|
630
684
|
* the Enter and then flip TERMINAL and clear PENDING — in that order, in a
|
|
@@ -636,6 +690,9 @@ var init_provenance = __esmMin((() => {}));
|
|
|
636
690
|
* server-side condition and sends nothing, so no stray Enter can ever land
|
|
637
691
|
* in a composer holding unrelated text.
|
|
638
692
|
*/
|
|
693
|
+
function shellQuote(value) {
|
|
694
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
695
|
+
}
|
|
639
696
|
/** Set once the keyed message has been SUBMITTED (Enter sent). */
|
|
640
697
|
function dedupTerminalOptionName(dedupKey) {
|
|
641
698
|
return `@overdeck-dedup-${dedupKey}`;
|
|
@@ -663,9 +720,16 @@ function dedupPoisonOptionName(dedupKey) {
|
|
|
663
720
|
function dedupTargetOptionName(dedupKey) {
|
|
664
721
|
return `@overdeck-dedup-target-${dedupKey}`;
|
|
665
722
|
}
|
|
723
|
+
/** Explicit payload phase for a pending claim; unset means legacy/unknown. */
|
|
724
|
+
function dedupPayloadStateOptionName(dedupKey) {
|
|
725
|
+
return `@overdeck-dedup-payload-state-${dedupKey}`;
|
|
726
|
+
}
|
|
666
727
|
function assertValidDedupKey(dedupKey) {
|
|
667
728
|
if (!DEDUP_KEY_RE.test(dedupKey)) throw new Error(`dedupKey must match [A-Za-z0-9:_-]+, got: ${dedupKey.slice(0, 40)}`);
|
|
668
729
|
}
|
|
730
|
+
function isKeyedSubmitBlockedMenuError(error) {
|
|
731
|
+
return error instanceof KeyedSubmitBlockedMenuError || error instanceof Error && error.name === "KeyedSubmitBlockedMenuError";
|
|
732
|
+
}
|
|
669
733
|
/** pane_pid + pane_dead in one read — the identity of the Enter's target. */
|
|
670
734
|
async function readPaneTarget(sessionName) {
|
|
671
735
|
return tmuxExecAsync([
|
|
@@ -711,6 +775,60 @@ async function readMarkerStrict(sessionName, option) {
|
|
|
711
775
|
], { encoding: "utf-8" });
|
|
712
776
|
return String(result.stdout).trim();
|
|
713
777
|
}
|
|
778
|
+
async function readPendingPayloadState(sessionName, dedupKey, option, readStrict, context) {
|
|
779
|
+
let state;
|
|
780
|
+
try {
|
|
781
|
+
state = await readStrict(sessionName, option);
|
|
782
|
+
} catch (error) {
|
|
783
|
+
throw new KeyedMarkerVerificationError(sessionName, `${context} payload-state read (key "${dedupKey}")`, { cause: error });
|
|
784
|
+
}
|
|
785
|
+
if (state === PAYLOAD_STATE_UNVERIFIED || state === PAYLOAD_STATE_ENTER_ATTEMPTED) return state;
|
|
786
|
+
throw new KeyedMarkerVerificationError(sessionName, `${context} payload-state is ${state === "" ? "legacy/unset" : `unknown value "${state}"`} (key "${dedupKey}")`);
|
|
787
|
+
}
|
|
788
|
+
async function captureVisiblePane(sessionName) {
|
|
789
|
+
const [pane, cursor] = await Promise.all([tmuxExecAsync([
|
|
790
|
+
"capture-pane",
|
|
791
|
+
"-t",
|
|
792
|
+
sessionName,
|
|
793
|
+
"-p"
|
|
794
|
+
], { encoding: "utf-8" }), tmuxExecAsync([
|
|
795
|
+
"display-message",
|
|
796
|
+
"-p",
|
|
797
|
+
"-t",
|
|
798
|
+
sessionName,
|
|
799
|
+
"#{cursor_y}"
|
|
800
|
+
], { encoding: "utf-8" })]);
|
|
801
|
+
const cursorY = Number.parseInt(String(cursor.stdout).trim(), 10);
|
|
802
|
+
if (!Number.isInteger(cursorY)) throw new Error(`Unreadable cursor row for ${sessionName}`);
|
|
803
|
+
return {
|
|
804
|
+
text: String(pane.stdout),
|
|
805
|
+
cursorY
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
function activeComposerRegion(viewport) {
|
|
809
|
+
const lines = viewport.text.replace(PANE_ANSI_PATTERN, "").split("\n").map((line) => line.replace(/\s+$/g, ""));
|
|
810
|
+
if (lines.every((line) => line.trim() === "")) return null;
|
|
811
|
+
if (viewport.cursorY < 0 || viewport.cursorY >= lines.length) return null;
|
|
812
|
+
let start = viewport.cursorY;
|
|
813
|
+
for (let index = viewport.cursorY; index >= 0; index -= 1) if (COMPOSER_TOP_BOUNDARY.test(lines[index])) {
|
|
814
|
+
start = index + 1;
|
|
815
|
+
break;
|
|
816
|
+
}
|
|
817
|
+
return lines.slice(start, viewport.cursorY + 1).join("\n");
|
|
818
|
+
}
|
|
819
|
+
async function pendingPayloadPresence(sessionName, keys, readViewport) {
|
|
820
|
+
const verifyLine = deliveryVerifyLine(keys);
|
|
821
|
+
if (verifyLine.length < 3) return "unproven";
|
|
822
|
+
let viewport;
|
|
823
|
+
try {
|
|
824
|
+
viewport = await readViewport(sessionName);
|
|
825
|
+
} catch {
|
|
826
|
+
return "unproven";
|
|
827
|
+
}
|
|
828
|
+
const composer = activeComposerRegion(viewport);
|
|
829
|
+
if (composer === null) return "unproven";
|
|
830
|
+
return composer.includes(verifyLine.slice(0, 40)) ? "present" : "absent";
|
|
831
|
+
}
|
|
714
832
|
/**
|
|
715
833
|
* Clear the poison breadcrumb and VERIFY it is gone with a strict read.
|
|
716
834
|
* EVERY failure here — the clear command, the verification read, or a
|
|
@@ -755,6 +873,7 @@ async function repairPoisonedMarkers(sessionName, dedupKey, sendId, readStrict)
|
|
|
755
873
|
const terminalOption = dedupTerminalOptionName(dedupKey);
|
|
756
874
|
const pendingOption = dedupPendingOptionName(dedupKey);
|
|
757
875
|
const poisonOption = dedupPoisonOptionName(dedupKey);
|
|
876
|
+
const payloadStateOption = dedupPayloadStateOptionName(dedupKey);
|
|
758
877
|
await tmuxExecAsync([
|
|
759
878
|
"set-option",
|
|
760
879
|
"-u",
|
|
@@ -766,16 +885,27 @@ async function repairPoisonedMarkers(sessionName, dedupKey, sendId, readStrict)
|
|
|
766
885
|
"-t",
|
|
767
886
|
sessionName,
|
|
768
887
|
pendingOption,
|
|
769
|
-
sendId
|
|
888
|
+
sendId,
|
|
889
|
+
";",
|
|
890
|
+
"set-option",
|
|
891
|
+
"-t",
|
|
892
|
+
sessionName,
|
|
893
|
+
payloadStateOption,
|
|
894
|
+
PAYLOAD_STATE_ENTER_ATTEMPTED
|
|
770
895
|
], { encoding: "utf-8" });
|
|
771
896
|
let repairedTerminal;
|
|
772
897
|
let repairedPending;
|
|
898
|
+
let repairedPayloadState;
|
|
773
899
|
try {
|
|
774
|
-
[repairedTerminal, repairedPending] = await Promise.all([
|
|
900
|
+
[repairedTerminal, repairedPending, repairedPayloadState] = await Promise.all([
|
|
901
|
+
readStrict(sessionName, terminalOption),
|
|
902
|
+
readStrict(sessionName, pendingOption),
|
|
903
|
+
readStrict(sessionName, payloadStateOption)
|
|
904
|
+
]);
|
|
775
905
|
} catch {
|
|
776
906
|
throw new KeyedMarkerVerificationError(sessionName, `repair verification of key "${dedupKey}"`);
|
|
777
907
|
}
|
|
778
|
-
if (repairedTerminal !== "" || repairedPending === "") throw new Error(`Keyed tmux markers for ${sessionName} are poisoned and could not be repaired (key "${dedupKey}")`);
|
|
908
|
+
if (repairedTerminal !== "" || repairedPending === "" || repairedPayloadState !== PAYLOAD_STATE_ENTER_ATTEMPTED) throw new Error(`Keyed tmux markers for ${sessionName} are poisoned and could not be repaired (key "${dedupKey}")`);
|
|
779
909
|
await clearPoisonVerified(sessionName, poisonOption, `repair of key "${dedupKey}"`, readStrict);
|
|
780
910
|
}
|
|
781
911
|
/**
|
|
@@ -798,6 +928,7 @@ async function sendKeysDedup(sessionName, keys, dedupKey, caller, deps = {}) {
|
|
|
798
928
|
const terminalOption = dedupTerminalOptionName(dedupKey);
|
|
799
929
|
const pendingOption = dedupPendingOptionName(dedupKey);
|
|
800
930
|
const poisonOption = dedupPoisonOptionName(dedupKey);
|
|
931
|
+
const payloadStateOption = dedupPayloadStateOptionName(dedupKey);
|
|
801
932
|
const sendId = randomUUID();
|
|
802
933
|
let poisonMarker;
|
|
803
934
|
try {
|
|
@@ -823,7 +954,7 @@ async function sendKeysDedup(sessionName, keys, dedupKey, caller, deps = {}) {
|
|
|
823
954
|
"-t",
|
|
824
955
|
sessionName,
|
|
825
956
|
`test -z "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" && test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})"`,
|
|
826
|
-
`paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}'`
|
|
957
|
+
`paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}' \; set-option -t ${sessionName} ${payloadStateOption} ${PAYLOAD_STATE_UNVERIFIED}`
|
|
827
958
|
], { encoding: "utf-8" });
|
|
828
959
|
const [pendingMarker, terminalMarker] = await Promise.all([read(sessionName, pendingOption), read(sessionName, terminalOption)]);
|
|
829
960
|
if (terminalMarker !== "") return "deduplicated";
|
|
@@ -831,14 +962,27 @@ async function sendKeysDedup(sessionName, keys, dedupKey, caller, deps = {}) {
|
|
|
831
962
|
if (pendingMarker !== "") {
|
|
832
963
|
const recordedTarget = await read(sessionName, targetOption);
|
|
833
964
|
const currentPid = (await (deps.readPaneTarget ?? readPaneTarget)(sessionName)).pid;
|
|
834
|
-
|
|
835
|
-
|
|
965
|
+
const payloadState = await readPendingPayloadState(sessionName, dedupKey, payloadStateOption, readStrict, "pending claim");
|
|
966
|
+
const readViewport = deps.readPaneViewport ?? captureVisiblePane;
|
|
967
|
+
if (recordedTarget !== "" && currentPid !== "" && recordedTarget === currentPid) {
|
|
968
|
+
if (payloadState === PAYLOAD_STATE_ENTER_ATTEMPTED) return "submit-pending";
|
|
969
|
+
const presence = await pendingPayloadPresence(sessionName, keys, readViewport);
|
|
970
|
+
if (presence === "present") return "submit-pending";
|
|
971
|
+
if (presence === "unproven") throw new KeyedMarkerVerificationError(sessionName, `pending payload visibility (key "${dedupKey}")`);
|
|
972
|
+
}
|
|
973
|
+
const repasteArgs = [
|
|
836
974
|
"if-shell",
|
|
837
975
|
"-t",
|
|
838
976
|
sessionName,
|
|
839
|
-
`test
|
|
840
|
-
`paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}'`
|
|
841
|
-
]
|
|
977
|
+
`test "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" = ${shellQuote(pendingMarker)} && test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})"`,
|
|
978
|
+
`paste-buffer -b ${bufferName} -p -t ${sessionName} \; set-option -t ${sessionName} ${pendingOption} ${sendId} \; set-option -F -t ${sessionName} ${targetOption} '#{pane_pid}' \; set-option -t ${sessionName} ${payloadStateOption} ${PAYLOAD_STATE_UNVERIFIED}`
|
|
979
|
+
];
|
|
980
|
+
try {
|
|
981
|
+
if (deps.runTmuxCommand) await deps.runTmuxCommand(repasteArgs);
|
|
982
|
+
else await tmuxExecAsync(repasteArgs, { encoding: "utf-8" });
|
|
983
|
+
} catch (error) {
|
|
984
|
+
throw new KeyedMarkerVerificationError(sessionName, `pending payload re-paste command (key "${dedupKey}")`, { cause: error });
|
|
985
|
+
}
|
|
842
986
|
const [repastedPending, repastedTerminal, repastedTarget] = await Promise.all([
|
|
843
987
|
read(sessionName, pendingOption),
|
|
844
988
|
read(sessionName, terminalOption),
|
|
@@ -848,7 +992,12 @@ async function sendKeysDedup(sessionName, keys, dedupKey, caller, deps = {}) {
|
|
|
848
992
|
if (repastedPending === sendId) return "pasted";
|
|
849
993
|
if (repastedPending !== "") {
|
|
850
994
|
const nowPid = (await (deps.readPaneTarget ?? readPaneTarget)(sessionName)).pid;
|
|
851
|
-
|
|
995
|
+
const repastedPayloadState = await readPendingPayloadState(sessionName, dedupKey, payloadStateOption, readStrict, "concurrent claim");
|
|
996
|
+
if (repastedTarget !== "" && nowPid !== "" && repastedTarget === nowPid) {
|
|
997
|
+
if (repastedPayloadState === PAYLOAD_STATE_ENTER_ATTEMPTED) return "submit-pending";
|
|
998
|
+
if (await pendingPayloadPresence(sessionName, keys, readViewport) === "present") return "submit-pending";
|
|
999
|
+
}
|
|
1000
|
+
throw new KeyedMarkerVerificationError(sessionName, `concurrent pending payload visibility (key "${dedupKey}")`);
|
|
852
1001
|
}
|
|
853
1002
|
}
|
|
854
1003
|
throw new Error(`Keyed tmux paste for ${sessionName} did not land and no dedup marker was recorded` + (caller ? ` (caller: ${caller})` : ""));
|
|
@@ -907,15 +1056,20 @@ async function completeKeyedSubmit(sessionName, dedupKey, deps = {}) {
|
|
|
907
1056
|
const pendingOption = dedupPendingOptionName(dedupKey);
|
|
908
1057
|
const poisonOption = dedupPoisonOptionName(dedupKey);
|
|
909
1058
|
const targetOption = dedupTargetOptionName(dedupKey);
|
|
1059
|
+
const payloadStateOption = dedupPayloadStateOptionName(dedupKey);
|
|
910
1060
|
await new Promise((resolve) => setTimeout(resolve, PASTE_SETTLE_MS));
|
|
911
1061
|
const preTarget = await readTarget(sessionName);
|
|
912
1062
|
const pendingBefore = await read(sessionName, pendingOption);
|
|
1063
|
+
if (pendingBefore !== "") {
|
|
1064
|
+
const paneSnapshot = await (deps.readPaneText ?? capturePaneText)(sessionName, 90).catch(() => "");
|
|
1065
|
+
if (paneSnapshot && paneHasBlockingChoiceMenu(paneSnapshot)) throw new KeyedSubmitBlockedMenuError(sessionName, dedupKey, paneSnapshot);
|
|
1066
|
+
}
|
|
913
1067
|
await tmuxExecAsync([
|
|
914
1068
|
"if-shell",
|
|
915
1069
|
"-t",
|
|
916
1070
|
sessionName,
|
|
917
1071
|
`test -z "$(tmux show-option -qv -t ${sessionName} ${terminalOption})" && test -n "$(tmux show-option -qv -t ${sessionName} ${pendingOption})" && test "$(tmux display-message -p -t ${sessionName} '#{pane_dead}')" = "0" && test "$(tmux display-message -p -t ${sessionName} '#{pane_pid}')" = "$(tmux show-option -qv -t ${sessionName} ${targetOption})"`,
|
|
918
|
-
`send-keys -t ${sessionName} C-m \; set-option -t ${sessionName} ${poisonOption} 1 \; set-option -t ${sessionName} ${terminalOption} 1 \; set-option -u -t ${sessionName} ${pendingOption}`
|
|
1072
|
+
`send-keys -t ${sessionName} C-m \; set-option -t ${sessionName} ${poisonOption} 1 \; set-option -t ${sessionName} ${terminalOption} 1 \; set-option -u -t ${sessionName} ${pendingOption} \; set-option -t ${sessionName} ${payloadStateOption} ${PAYLOAD_STATE_ENTER_ATTEMPTED}`
|
|
919
1073
|
], { encoding: "utf-8" });
|
|
920
1074
|
const [terminalAfter, pendingAfter, postTarget, recordedTarget] = await Promise.all([
|
|
921
1075
|
read(sessionName, terminalOption),
|
|
@@ -940,7 +1094,13 @@ async function completeKeyedSubmit(sessionName, dedupKey, deps = {}) {
|
|
|
940
1094
|
"-u",
|
|
941
1095
|
"-t",
|
|
942
1096
|
sessionName,
|
|
943
|
-
pendingOption
|
|
1097
|
+
pendingOption,
|
|
1098
|
+
";",
|
|
1099
|
+
"set-option",
|
|
1100
|
+
"-t",
|
|
1101
|
+
sessionName,
|
|
1102
|
+
payloadStateOption,
|
|
1103
|
+
PAYLOAD_STATE_ENTER_ATTEMPTED
|
|
944
1104
|
] : [
|
|
945
1105
|
"set-option",
|
|
946
1106
|
"-u",
|
|
@@ -952,16 +1112,27 @@ async function completeKeyedSubmit(sessionName, dedupKey, deps = {}) {
|
|
|
952
1112
|
"-t",
|
|
953
1113
|
sessionName,
|
|
954
1114
|
pendingOption,
|
|
955
|
-
pendingBefore
|
|
1115
|
+
pendingBefore,
|
|
1116
|
+
";",
|
|
1117
|
+
"set-option",
|
|
1118
|
+
"-t",
|
|
1119
|
+
sessionName,
|
|
1120
|
+
payloadStateOption,
|
|
1121
|
+
PAYLOAD_STATE_ENTER_ATTEMPTED
|
|
956
1122
|
], { encoding: "utf-8" }).catch(() => {});
|
|
957
1123
|
let rolledTerminal;
|
|
958
1124
|
let restoredPending;
|
|
1125
|
+
let remainingPayloadState;
|
|
959
1126
|
try {
|
|
960
|
-
[rolledTerminal, restoredPending] = await Promise.all([
|
|
1127
|
+
[rolledTerminal, restoredPending, remainingPayloadState] = await Promise.all([
|
|
1128
|
+
readStrict(sessionName, terminalOption),
|
|
1129
|
+
readStrict(sessionName, pendingOption),
|
|
1130
|
+
readStrict(sessionName, payloadStateOption)
|
|
1131
|
+
]);
|
|
961
1132
|
} catch {
|
|
962
1133
|
throw new KeyedMarkerVerificationError(sessionName, `rollback verification of key "${dedupKey}"`);
|
|
963
1134
|
}
|
|
964
|
-
if (rolledTerminal === "" && restoredPending !== "") await clearPoisonVerified(sessionName, poisonOption, `verified rollback of key "${dedupKey}"`, readStrict).catch(() => {});
|
|
1135
|
+
if (rolledTerminal === "" && restoredPending !== "" && remainingPayloadState === PAYLOAD_STATE_ENTER_ATTEMPTED) await clearPoisonVerified(sessionName, poisonOption, `verified rollback of key "${dedupKey}"`, readStrict).catch(() => {});
|
|
965
1136
|
throw new KeyedSubmitTargetDeadError(sessionName, dedupKey);
|
|
966
1137
|
}
|
|
967
1138
|
if (pendingAfter !== "") {
|
|
@@ -971,10 +1142,14 @@ async function completeKeyedSubmit(sessionName, dedupKey, deps = {}) {
|
|
|
971
1142
|
}
|
|
972
1143
|
throw new Error(`Keyed tmux submit for ${sessionName} found neither a pending claim nor a terminal marker — the paste vanished without submission`);
|
|
973
1144
|
}
|
|
974
|
-
var DEDUP_KEY_RE, PASTE_SETTLE_MS, KeyedSubmitTargetDeadError, KeyedMarkerVerificationError;
|
|
1145
|
+
var DEDUP_KEY_RE, PAYLOAD_STATE_UNVERIFIED, PAYLOAD_STATE_ENTER_ATTEMPTED, PASTE_SETTLE_MS, KeyedSubmitTargetDeadError, KeyedSubmitBlockedMenuError, KeyedMarkerVerificationError, PANE_ANSI_PATTERN, COMPOSER_TOP_BOUNDARY;
|
|
975
1146
|
var init_tmux_dedup = __esmMin((() => {
|
|
976
1147
|
init_tmux();
|
|
1148
|
+
init_errors();
|
|
1149
|
+
init_pane_choice_menu();
|
|
977
1150
|
DEDUP_KEY_RE = /^[A-Za-z0-9:_-]+$/;
|
|
1151
|
+
PAYLOAD_STATE_UNVERIFIED = "unverified";
|
|
1152
|
+
PAYLOAD_STATE_ENTER_ATTEMPTED = "enter-attempted";
|
|
978
1153
|
PASTE_SETTLE_MS = 300;
|
|
979
1154
|
KeyedSubmitTargetDeadError = class extends Error {
|
|
980
1155
|
constructor(sessionName, dedupKey) {
|
|
@@ -982,6 +1157,12 @@ var init_tmux_dedup = __esmMin((() => {
|
|
|
982
1157
|
this.name = "KeyedSubmitTargetDeadError";
|
|
983
1158
|
}
|
|
984
1159
|
};
|
|
1160
|
+
KeyedSubmitBlockedMenuError = class extends MessageDeliveryFailed {
|
|
1161
|
+
constructor(sessionName, dedupKey, paneSnapshot) {
|
|
1162
|
+
super(`Keyed submit to ${sessionName} aborted: the pane is blocked on a choice menu, so Enter would answer that menu (key "${dedupKey}")`, sessionName, paneSnapshot);
|
|
1163
|
+
this.name = "KeyedSubmitBlockedMenuError";
|
|
1164
|
+
}
|
|
1165
|
+
};
|
|
985
1166
|
KeyedMarkerVerificationError = class extends Error {
|
|
986
1167
|
constructor(sessionName, context, options) {
|
|
987
1168
|
const causeText = options?.cause instanceof Error ? `: ${options.cause.message}` : "";
|
|
@@ -989,6 +1170,8 @@ var init_tmux_dedup = __esmMin((() => {
|
|
|
989
1170
|
this.name = "KeyedMarkerVerificationError";
|
|
990
1171
|
}
|
|
991
1172
|
};
|
|
1173
|
+
PANE_ANSI_PATTERN = /\x1b\[[0-9;?]*[ -/]*[@-~]/g;
|
|
1174
|
+
COMPOSER_TOP_BOUNDARY = /^\s*[─━═]{6,}/;
|
|
992
1175
|
}));
|
|
993
1176
|
//#endregion
|
|
994
1177
|
//#region ../../lib/planning/auto-spawn-consent.ts
|
|
@@ -1136,6 +1319,6 @@ var init_auto_spawn_consent = __esmMin((() => {
|
|
|
1136
1319
|
init_fs_lock();
|
|
1137
1320
|
}));
|
|
1138
1321
|
//#endregion
|
|
1139
|
-
export {
|
|
1322
|
+
export { generateLauncherScriptSync as C, normalizeModelOverrideSync as D, init_model_validation as E, requireModelOverrideSync as O, normalizeFlywheelRunId as S, MODEL_ID_PATTERN as T, init_tmux_dedup as _, readAutoSpawnOnFinalizeFlagAsync as a, init_provenance as b, writeAutoSpawnOnFinalizeFlag as c, assertValidDedupKey as d, completeKeyedSubmit as f, dedupTerminalOptionName as g, dedupTargetOptionName as h, init_auto_spawn_consent as i, shellQuoteModelIdSync as k, KeyedMarkerVerificationError as l, dedupPoisonOptionName as m, claimAutoSpawnConsentForWorkStart as n, releaseAutoSpawnConsentClaim as o, dedupPendingOptionName as p, completeAutoSpawnConsentClaim as r, withAutoSpawnConsentClaim as s, autoSpawnOnFinalizeFlagPath as t, KeyedSubmitTargetDeadError as u, isKeyedSubmitBlockedMenuError as v, init_launcher_generator as w, isOperatorStartedBy as x, sendKeysDedup as y };
|
|
1140
1323
|
|
|
1141
|
-
//# sourceMappingURL=auto-spawn-consent-
|
|
1324
|
+
//# sourceMappingURL=auto-spawn-consent-lXqRJ1Dr.js.map
|