@overdeck/desktop 0.45.24 → 0.46.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 +32 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-CCwFGICj.js} +2 -2
- package/server/activity-logger-CMthG6Vd.js +3 -0
- package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
- package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-De1L-Sb4.js} +6 -6
- package/server/{agent-gc-CHcnvonI.js → agent-gc-CBULruzm.js} +5 -5
- package/server/agent-state-VQk8fY9F.js +3 -0
- package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-BlnSkRFA.js} +5 -5
- package/server/{agent-state-service-D5UGKIJL.js → agent-state-service-hZpxIw1E.js} +1 -1
- package/server/agents-BKKkxKgK.js +3 -0
- package/server/{agents-EbI0zCJl.js → agents-C5rWYhb6.js} +4 -4
- package/server/archive-planning-0FJ6Xd3b.js +2 -0
- package/server/{archive-planning-Du25Jtst.js → archive-planning-C0lAbNB_.js} +16 -24
- package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
- package/server/{assemble-J2ZZ2C15.js → assemble-DnffNpOo.js} +2 -2
- package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
- package/server/{behavior-B3exJ42O.js → behavior-CfIg6pKp.js} +2 -2
- package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
- package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DHmCSLar.js} +2 -2
- package/server/{build-info-CZk_TITh.js → build-info-BP160gU7.js} +1 -1
- package/server/{build-info-Ie_D0_BT.js → build-info-CuFfxZxp.js} +5 -3
- package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DEWD82qK.js} +2 -2
- package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CQB1h765.js → checkpoints-CZvbtLnr.js} +2 -2
- package/server/{checkpoints-BJIs5QIA.js → checkpoints-DMTgXuLG.js} +1 -1
- package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-CN-xo-do.js} +1 -1
- package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
- package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CN0cSCPp.js} +2 -2
- package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
- package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-Dabi9slj.js} +1 -1
- package/server/cli-DmXETsw-.js +3 -0
- package/server/{cli-RoOx5DUf.js → cli-oCWYA1pE.js} +9 -9
- package/server/{cliproxy-C8a1vtTU.js → cliproxy-C8mB3KuB.js} +2 -2
- package/server/{cliproxy-fHfIeiGd.js → cliproxy-PGwTX_o8.js} +1 -1
- package/server/{close-issue-DoOifFIK.js → close-issue-D5MF5GqF.js} +5 -5
- package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
- package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-Cltx86x5.js} +37 -16
- package/server/{codex-GcHuUF-k.js → codex-BdEsUFWh.js} +1 -1
- package/server/{codex-BZXGhUVB.js → codex-Drlf5Xhf.js} +36 -7
- package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-DpB89Vqa.js} +2 -2
- package/server/compaction-continuation-K2AxQX4H.js +200 -0
- package/server/{config-CKxYiCmX.js → config-B2IMcBxx.js} +4 -3
- package/server/{config-DzV30TOm.js → config-DV-grfQc.js} +1 -1
- package/server/{config-BZ0sHTju.js → config-Dr3pW6w6.js} +2 -2
- package/server/{config-yaml-DySPNmKN.js → config-yaml-CmOPzmBb.js} +268 -14
- package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-B9cN3SBi.js} +4 -4
- package/server/{conflict-gate-BhAY7TUd.js → conflict-gate-Dh754uyA.js} +1 -1
- package/server/{context-layers-BrPmE__h.js → context-layers-D6LZo3l1.js} +2 -2
- package/server/{context-layers-igZ4FI4_.js → context-layers-dR5YxHYB.js} +3 -3
- package/server/{control-settings-BQp7_4uD.js → control-settings-C7DUehE1.js} +49 -19
- package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-BoqdDXWF.js} +8 -8
- package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
- package/server/{conversation-service-DPJ71F33.js → conversation-service-5aCnq1zR.js} +8 -7
- package/server/conversation-service-BCxl4f8Z.js +3 -0
- package/server/{conversations-6AfUfbwc.js → conversations-BUpYsOZg.js} +4 -4
- package/server/{conversations-CAsJF9kh.js → conversations-C34dyIb9.js} +1 -1
- package/server/{cost-B2ddP6wq.js → cost-Bgcub5kW.js} +12 -2
- package/server/{cost-R-m6Yi-W.js → cost-CvxRrucd.js} +3 -3
- package/server/{cost-sync-BsN6ER0n.js → cost-sync-Dv3LUaNW.js} +3 -3
- package/server/{dag-B1ucnjDU.js → dag-ombYYt4s.js} +2 -2
- package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/deacon-DrXqT9LQ.js +4 -0
- package/server/{deacon-CU_cAYSR.js → deacon-hi9KLPLT.js} +2933 -2704
- package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-BNBebzeL.js} +3 -3
- package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
- package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-DBxUaO-A.js} +13 -13
- package/server/deacon-swarm-I2JfX5Tg.js +2 -0
- package/server/deacon.js +14 -19
- package/server/dead-end-trip-CQcP70ND.js +13 -0
- package/server/delivery-Da0zEMY4.js +3 -0
- package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-Df-Tmaq0.js} +69 -18
- package/server/deploy-queue-9SrhZR63.js +3 -0
- package/server/deploy-queue-UjKGYsDe.js +169 -0
- package/server/deploy-window-jOiPRHL0.js +3 -0
- package/server/{deploy-window-C3F-tihF.js → deploy-window-rpqpWqHA.js} +40 -16
- package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-CC46Ig8q.js} +2 -2
- package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-68CSCRnu.js} +3 -3
- package/server/{dist-Cb_0uvpS.js → dist-CJy72uEg.js} +1 -1
- package/server/dist-DSlxIU1H.js +3 -0
- package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
- package/server/docker-BMVTSFL5.js +3 -0
- package/server/{docker-DcMTFTUC.js → docker-Dam7mbIB.js} +2 -2
- package/server/{dod-C6n9RV3G.js → dod-Dar-yheg.js} +8 -4
- package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
- package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
- package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-B057YA81.js} +4 -4
- package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-C98V8yW-.js} +1 -1
- package/server/{esm-shims-OSHAYaS1.js → esm-shims-Br9BPdkR.js} +1 -1
- package/server/{event-store-EV2cMiXj.js → event-store-ELqkVOn0.js} +1 -1
- package/server/{event-store-CQL6NeqB.js → event-store-zY5MJHgF.js} +23 -4
- package/server/{events-BTdrdEq8.js → events-D6pyqhzM.js} +1 -1
- package/server/{events-DTfAe4My.js → events-D9PR1IC0.js} +3 -3
- package/server/{factory-CFibJuaw.js → factory-CRoOpGsF.js} +5 -5
- package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population--YUXU999.js} +4 -4
- package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-BORBTo0y.js} +2 -2
- package/server/{features-ez2271oH.js → features--nFkJY8v.js} +2 -2
- package/server/{feedback-target-CoFDHiM8.js → feedback-target-C0ZzyHvU.js} +1 -1
- package/server/{feedback-target-7mqqwrX6.js → feedback-target-Dt9BsapX.js} +8 -8
- package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-BG0RUZiu.js} +5 -5
- package/server/{feedback-writer-D3a22RCd.js → feedback-writer-D1fm-5Z8.js} +1 -1
- package/server/{flywheel-SVF02Jpq.js → flywheel-BekukH4i.js} +1 -1
- package/server/{flywheel-DHrgCphM.js → flywheel-BiT3odRb.js} +23 -15
- package/server/{flywheel-DzGtWnJ1.js → flywheel-CLVB55Be.js} +16 -15
- package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
- package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
- package/server/forge-CZbSg6Ds.js +383 -0
- package/server/forge-DK3blQb_.js +3 -0
- package/server/{from-kNxT0bZC.js → from-D_4_dk7i.js} +1 -1
- package/server/{fts-db-CE46vDkZ.js → fts-db-BeOomFa-.js} +2 -2
- package/server/{fts-operations-CqY6zl-i.js → fts-operations-BdewJ_g9.js} +2 -2
- package/server/git-utils-CI6cwyyC.js +3 -0
- package/server/{git-utils-CRw2zLPC.js → git-utils-ameCgDdy.js} +30 -5
- package/server/{github-app-C3QrAUd0.js → github-app-CQ1Lo6LA.js} +3 -3
- package/server/{github-app-ClZ2lk8D.js → github-app-DtAsvwzK.js} +1 -1
- package/server/{github-client-BnIsSrEN.js → github-client-BfyDxuRN.js} +2 -2
- package/server/{github-client-DfQYVUaw.js → github-client-Cj0yl_07.js} +1 -1
- package/server/github-pr-lookup-BDq6Wznz.js +58 -0
- package/server/{harness-binary-DPUi-Pv8.js → harness-binary-DqkftwTb.js} +2 -2
- package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-CqMqM1Mb.js} +4 -4
- package/server/{health-events-BBcTYQKU.js → health-events-CazRxJUS.js} +2 -2
- package/server/{health-events-BDOHby5Q.js → health-events-_xfTaOUs.js} +1 -1
- package/server/{hooks-CKZgXlJb.js → hooks-BO3QT1sn.js} +2 -2
- package/server/{hooks-DPVX1rwQ.js → hooks-BnJsxlSq.js} +1 -1
- package/server/{hume-Cz8igP9E.js → hume-CDYJxqx-.js} +2 -2
- package/server/hume-Dq--7rOQ.js +3 -0
- package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-BYqERdkE.js} +1 -1
- package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
- package/server/in-flight-guard-Bq3epG58.js +45 -0
- package/server/{infra-BEqFxlJc.js → infra-BjuxvjdS.js} +70 -5
- package/server/{injection-CPUIqNhI.js → injection-DZxlV2al.js} +1 -1
- package/server/{injection-C8aiVJrF.js → injection-UCf8EsjX.js} +7 -7
- package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-6kylZnrm.js} +26 -25
- package/server/inspect-agent-BVwDrVrz.js +2 -0
- package/server/{internal-token-s0-oKybJ.js → internal-token-DvMTQSOS.js} +2 -2
- package/server/{internal-token-BrcU6qfe.js → internal-token-M9omeXM1.js} +1 -1
- package/server/{io-C9kF1wtJ.js → io-VHvc0Ssp.js} +43 -26
- package/server/{issue-closed-CDJk4pIp.js → issue-closed-B6KJkmHZ.js} +7 -7
- package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-9gk3fnXN.js} +1 -1
- package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
- package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-DmCh7EHj.js} +10 -10
- package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-PMx8F1jr.js} +1 -1
- package/server/{issues-BMmP_77e.js → issues-CgnQ1OGQ.js} +2 -2
- package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-DJOH_O-w.js} +5 -4
- package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dv7AV_R1.js} +3 -3
- package/server/{label-reconciler-B4iOAjlC.js → label-reconciler--F85rufp.js} +4 -4
- package/server/{lifecycle-yPd___5E.js → lifecycle-CTdOWYMi.js} +2 -2
- package/server/{lifecycle-xmBfK2GJ.js → lifecycle-DDN8ApVY.js} +6 -7
- package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-D-lGdzK3.js} +5 -5
- package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-D_zTLvP1.js} +1 -1
- package/server/{linear-client-BsuUvkdA.js → linear-client-BQU36QqE.js} +2 -2
- package/server/{linear-client-CTskEeT_.js → linear-client-CY4O_Tu3.js} +1 -1
- package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
- package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-CefQNAnq.js → merge-Bpx4jjht.js} +13 -11
- package/server/{merge-agent-4WOWlSYA.js → merge-agent-DdMVSV2Y.js} +233 -83
- package/server/{merge-agent-CKkgIBPB.js → merge-agent-DrXa1CpW.js} +1 -1
- package/server/{merge-batch-ClFn2T-y.js → merge-batch-C5q1c1GX.js} +1 -1
- package/server/merge-completeness-BMm8tMyZ.js +277 -0
- package/server/merge-completeness-D0ljXbk3.js +3 -0
- package/server/{merge-B1DiziGU.js → merge-idOG--29.js} +1 -1
- package/server/merge-ops-DdpTiEMt.js +2 -0
- package/server/merge-rebase-DGQpYJU3.js +2 -0
- package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-xLnMlw5h.js} +3 -3
- package/server/{merge-set-DJ8-UErs.js → merge-set-DH7ot3yz.js} +11 -5
- package/server/merge-set-DzsOTBg5.js +3 -0
- package/server/{merge-sync-VPV28g0g.js → merge-sync-CQ-LgZ1_.js} +406 -153
- package/server/merge-sync-Ca7F5JnQ.js +3 -0
- package/server/{merge-train-CHopycP0.js → merge-train-DTEMyIu4.js} +18 -8
- package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-CNPJzepw.js} +4 -4
- package/server/merge-verification-x3JO8Dtz.js +220 -0
- package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
- package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
- package/server/{multipart-parser-duPAfSBw.js → multipart-parser-IMSBfePV.js} +2 -2
- package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-C5ULAXwO.js} +1 -1
- package/server/node_modules/.package-lock.json +27 -27
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/@google-cloud/common/package.json +2 -2
- package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/package.json +1 -1
- package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
- package/server/node_modules/google-auth-library/package.json +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
- package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
- package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
- package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
- package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
- package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
- package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
- package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
- package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
- package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
- package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
- package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
- package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
- package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
- package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
- package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
- package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
- package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
- package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
- package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
- package/server/node_modules/google-gax/package.json +5 -5
- package/server/node_modules/retry-request/package.json +4 -4
- package/server/node_modules/teeny-request/package.json +5 -5
- package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/server/node_modules/undici/lib/core/request.js +12 -1
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/server/node_modules/undici/lib/global.js +36 -16
- package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
- package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/server/node_modules/undici/lib/util/cache.js +328 -66
- package/server/node_modules/undici/lib/util/date.js +23 -6
- package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
- package/server/node_modules/undici/package.json +1 -1
- package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
- package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
- package/server/package-lock.json +28 -28
- package/server/package.json +1 -1
- package/server/{pan-dir-B0c3w0Ya.js → pan-dir-ubraCiUg.js} +24 -10
- package/server/{paths-D-xWGHdh.js → paths-cXmOwSbh.js} +2 -2
- package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
- package/server/{pickup-DUCLWrJY.js → pickup-D8xtG1J2.js} +1 -1
- package/server/pipeline-membership-BGSvkT2M.js +3 -0
- package/server/pipeline-membership-CrAPLYtf.js +57 -0
- package/server/{pipeline-membership-mY3GprlK.js → pipeline-membership-gather-CET40frr.js} +177 -109
- package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
- package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
- package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-ImNXknf0.js} +1 -1
- package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
- package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-Bim6bThI.js} +2 -2
- package/server/{project-repos-B6GycDh9.js → project-repos-C0nuoBGv.js} +7 -3
- package/server/project-repos-CRE6Ykow.js +3 -0
- package/server/projects-B03Wr-xc.js +3 -0
- package/server/{prompts-DxzFXuLl.js → prompts-BEx08AIu.js} +2 -2
- package/server/{providers-u4Ga0jOr.js → providers-D7IluJe0.js} +1 -1
- package/server/{providers-qQAwGQDW.js → providers-evXhiQeg.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
- package/server/public/assets/{dist-D7zYSEA6.js → dist-CxAOHbil.js} +1 -1
- package/server/public/assets/{dist-ByIuzMQW.js → dist-DqDRYW6P.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
- package/server/public/assets/index-Cc7cnFC4.css +1 -0
- package/server/public/assets/index-K0hAYCgV.js +807 -0
- package/server/public/assets/{linear-BBbArIcK.js → linear-B4cuEFmO.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
- package/server/public/assets/{prod-B8vYiu52.js → prod-CN2nHBvX.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-7N8WKseP.js → pull-requests-Cv7LxzUN.js} +1 -1
- package/server/{pull-requests-_lHueOHW.js → pull-requests-DHWiKxo7.js} +19 -10
- package/server/{queries-CjNIf-Ub.js → queries-DHJm7bTd.js} +631 -110
- package/server/{rally-CyWT_lNO.js → rally-B71M9f4o.js} +3 -3
- package/server/rally-YDjU513q.js +3 -0
- package/server/{rally-api-ClOSd-Tt.js → rally-api-D5uXN08-.js} +1 -1
- package/server/{rally-api-C8e_1JRi.js → rally-api-Dkqmok65.js} +2 -2
- package/server/{rally-client-lc-nokqr.js → rally-client-Bfqm6XI4.js} +4 -4
- package/server/{rally-client-sgtVqzNU.js → rally-client-CxsA6ExK.js} +1 -1
- package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
- package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
- package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-0EEYReVZ.js} +16 -7
- package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-qeRqHZxH.js} +2 -2
- package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-BbYFsqLa.js} +7 -6
- package/server/record-CtroO946.js +3 -0
- package/server/record-update-DH6dLJID.js +3 -0
- package/server/{record-update-dE1Aw83j.js → record-update-Z0QCxmMp.js} +124 -34
- package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-eJe26h-f.js} +2 -2
- package/server/{release-engine-Cx48W7z8.js → release-engine-lPUp-MTd.js} +5 -5
- package/server/{release-set-CQfuN9-v.js → release-set-BwGeyZKX.js} +3 -3
- package/server/{remote-C_2hasl7.js → remote-BCd02Es1.js} +3 -3
- package/server/{remote-ChgimyYa.js → remote-CVGUhXMV.js} +3 -3
- package/server/{remote-agents-CA3Ihlxj.js → remote-agents-C1bssi41.js} +2 -2
- package/server/{remote-agents-By1ige5O.js → remote-agents-C_VxssLU.js} +300 -46
- package/server/{remote-completion-fVe9e_3u.js → remote-completion-DAB0P706.js} +12 -12
- package/server/resume-u9byntrq.js +3 -0
- package/server/{review-agent-DNboMyW4.js → review-agent-CD4RCI0Y.js} +1 -1
- package/server/{review-agent-CIGOQYBD.js → review-agent-CHhI66UP.js} +60 -47
- package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-DSMRIfuJ.js} +7 -6
- package/server/{review-context-2uj-YQ8J.js → review-context-oFuBbiEE.js} +8 -8
- package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
- package/server/review-status-BZH8h-6W.js +3 -0
- package/server/review-status-emit-CUExtHd5.js +50 -0
- package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-QV_hQkgS.js} +4 -4
- package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
- package/server/review-status-source-ylw5QZUR.js +3 -0
- package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-483sujRo.js} +2 -2
- package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-NaWvI9Xf.js} +1 -1
- package/server/review-status-yljtTd-q.js +7521 -0
- package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-BPDn4li_.js} +1 -1
- package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-CELeUinh.js} +48 -8
- package/server/{rollup-FGsKki9R.js → rollup-DTNvelz9.js} +8 -8
- package/server/{rollup-BKQC7jp4.js → rollup-DYZfq1c4.js} +1 -1
- package/server/{scanner-CnqEZeDy.js → scanner-CV35oSn4.js} +8 -7
- package/server/{sequence-io-D909zgeH.js → sequence-io-DF_8iuhV.js} +4 -4
- package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-B2WeCtGi.js} +5 -5
- package/server/server.js +1952 -578
- package/server/{service-CLeAoU6G.js → service-Br9rpBNA.js} +81 -64
- package/server/{session-fork-CHI1XvL9.js → session-fork-D0LY152N.js} +2 -2
- package/server/{session-history-BT3IvqhC.js → session-history-BUyK29eq.js} +4 -4
- package/server/{settings-BTMvpNFU.js → settings-Bse1Pdcj.js} +3 -3
- package/server/settings-CdvIF84R.js +2 -0
- package/server/{settings-C0zgxOGf.js → settings-CvVGqNEs.js} +3 -2
- package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-BWLa8ODz.js} +2 -2
- package/server/{shadow-state-7a-524T8.js → shadow-state-B4fpKxOO.js} +2 -2
- package/server/{shadow-state-DnDyjujH.js → shadow-state-FV6PHfEW.js} +1 -1
- package/server/{shadow-utils-Db3oroFG.js → shadow-utils-D7asqxOZ.js} +2 -2
- package/server/{ship-log-D9MlVzYU.js → ship-log-xplJ8t75.js} +1 -1
- package/server/{smart-compaction-CV2ukKND.js → smart-compaction-CPp2Ykf6.js} +1 -1
- package/server/{smart-compaction-KCYScAU1.js → smart-compaction-D3U_79f-.js} +8 -7
- package/server/{spawn-planning-session-qUC2VWu3.js → spawn-planning-session-1nFi3gfk.js} +1 -1
- package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-DGfZ5B8D.js} +17 -17
- package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-Br48eiDP.js} +1 -1
- package/server/{specialist-context-Bn3dCGS2.js → specialist-context-cVbGnTa3.js} +5 -5
- package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
- package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Cl5-hqT8.js} +3 -3
- package/server/{specialists-CC4r-c2s.js → specialists-CNfYO3G2.js} +975 -227
- package/server/{specialists-jiuuyVkp.js → specialists-Cicieuzu.js} +18 -18
- package/server/{specialists-CShuVGWT.js → specialists-JHsdU3pA.js} +1 -1
- package/server/{specialists-DM6bWjsi.js → specialists-Tdezg_6N.js} +1 -1
- package/server/specs-Bt7WJDoC.js +3 -0
- package/server/src-CRmCHlma.js +11408 -0
- package/server/{src-CXmtj0im.js → src-Ck028hjO.js} +6 -6
- package/server/{src-CdmnTM2m.js → src-UWcGe0Ix.js} +3 -3
- package/server/{stack-health-Bn3o8FBX.js → stack-health-CJLMrLBl.js} +1 -1
- package/server/{stack-health-DxSdG9cW.js → stack-health-DqSqx0zv.js} +7 -5
- package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-CYFOUNlT.js} +4 -4
- package/server/{staleness-CT34nwr9.js → staleness-BQ-0gMYK.js} +1 -1
- package/server/{staleness-DPm7ClwA.js → staleness-D47CUJok.js} +1 -1
- package/server/{state-home-Cn_Qu8IX.js → state-home-BYV7qZTW.js} +2 -2
- package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
- package/server/{state-migrate-BGg2ZaOt.js → state-migrate-CvvBtS0Y.js} +4 -4
- package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-Wt0UVvu1.js} +1 -1
- package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-mkLC6G_t.js} +79 -22
- package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
- package/server/{summary-fork-DpcxN9tf.js → summary-fork-CD7GOts0.js} +2 -2
- package/server/{summary-fork-D1RAk9rJ.js → summary-fork-xiXBnWG9.js} +8 -8
- package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-B5SbvDx2.js} +1 -1
- package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
- package/server/supervisor/pty-supervisor.js +49 -3
- package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-B7lp0ElT.js} +2 -2
- package/server/{supervisor-wM4ooB5O.js → supervisor-DL788vos.js} +3 -3
- package/server/supervisor-UWiQNK-y.js +2 -0
- package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-BV14DF5N.js} +3 -3
- package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-pdWG6ZQs.js} +2 -2
- package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-l2F4_zim.js} +15 -16
- package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-qakFIIGz.js} +6 -6
- package/server/{test-verdict-bWYBtqBg.js → test-verdict-BJYDggMm.js} +1 -1
- package/server/{test-verdict-gscuksPv.js → test-verdict-Gw-btEfb.js} +1 -1
- package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-BKOYB616.js} +1 -1
- package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-CBaWkV9k.js} +2 -2
- package/server/{tmux-R7N7y-Mh.js → tmux-B1Wbxz5o.js} +3 -3
- package/server/{tmux-B6z7h_vZ.js → tmux-DQ6jB76i.js} +1 -1
- package/server/{launcher-generator-BBWG_SiS.js → tmux-dedup-DbN6MGzM.js} +428 -9
- package/server/{token-BK6t8BIT.js → token-Cxbk023d.js} +2 -2
- package/server/{token-util-DxXu-vd1.js → token-util-CLq2MmQt.js} +1 -1
- package/server/token-util-zlz9U0ki.js +3 -0
- package/server/{tracker-config-G6latr8C.js → tracker-config-DZ8Zn2nQ.js} +2 -2
- package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-L0FKtjq2.js} +3 -3
- package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-bNX6jKkb.js} +1 -1
- package/server/{tunnel-CDVKJpRv.js → tunnel-BAm1XgjG.js} +3 -3
- package/server/{tunnel-DGdUkGoZ.js → tunnel-CjSnHdTc.js} +1 -1
- package/server/{types-5M0lupud.js → types-q67TYYg5.js} +1 -1
- package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
- package/server/uat-train-Cu-4nvbf.js +2 -0
- package/server/uat-train-D5UjcyAa.js +0 -0
- package/server/{validate-IfDGkaVR.js → validate-Cxsx5Uz1.js} +8 -6
- package/server/{validation-CC9OPqJZ.js → validation-DEaTZafj.js} +1 -1
- package/server/{validation-Dw1pzDzr.js → validation-VZgJxmqc.js} +4 -4
- package/server/{verification-artifact-B3itKTxu.js → verification-artifact-C85cRTc_.js} +1 -1
- package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-g3yuxQDL.js} +1 -1
- package/server/{verification-runner-BW4HOKAz.js → verification-runner-DlZI8yhw.js} +1 -1
- package/server/{verification-runner-CkgX6EtI.js → verification-runner-KDZIsBj4.js} +40 -18
- package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-Jr94BF3Y.js} +1 -1
- package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-C-vuP3_J.js} +20 -9
- package/server/workflows-CHrx_hcW.js +2 -0
- package/server/{workflows-mbQzh6mQ.js → workflows-D0oip4eV.js} +161 -78
- package/server/{workspace--8tnhDI0.js → workspace-BqFg__wH.js} +1 -1
- package/server/{workspace-BPUws1-_.js → workspace-C0fH3aek.js} +3 -3
- package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
- package/server/workspace-anchor-drift-CZKofakh.js +224 -0
- package/server/{workspace-config-CIVWZOQr.js → workspace-config-B123aZl-.js} +1 -1
- package/server/workspace-manager-CDTKjjdU.js +3 -0
- package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-CwO-Hek7.js} +156 -117
- package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-CQv00QwK.js} +2 -2
- package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-D4M8BM4W.js} +1 -1
- package/server/{workspaces-Do_9J0LQ.js → workspaces-j1e_6aAT.js} +719 -292
- package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
- package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
- package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
- package/sync-sources/skills/pan-close/SKILL.md +5 -3
- package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
- package/sync-sources/skills/pan-reload/SKILL.md +3 -3
- package/sync-sources/skills/pan-restart/SKILL.md +5 -4
- package/sync-sources/skills/pan-review/SKILL.md +7 -1
- package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
- package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
- package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
- package/server/activity-logger-OEUBdfZ8.js +0 -3
- package/server/agent-state-Bc3tzUC8.js +0 -3
- package/server/agents-wi9NWzs2.js +0 -3
- package/server/archive-planning-BZDgzoEj.js +0 -3
- package/server/cli-B86rejVV.js +0 -3
- package/server/conversation-service-BLd3MYsG.js +0 -3
- package/server/deacon-kiQrb4ZT.js +0 -4
- package/server/deacon-swarm-C-GwfjJy.js +0 -2
- package/server/deploy-window-DkZraDyj.js +0 -3
- package/server/dist-Bzy0y69j.js +0 -3
- package/server/flywheel-merge-order-UU0tiUld.js +0 -245
- package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
- package/server/forge-CNFnyqps.js +0 -270
- package/server/forge-DXnS_YFH.js +0 -2
- package/server/git-utils-D0_yhCgF.js +0 -3
- package/server/github-pr-lookup-D16NGsSO.js +0 -44
- package/server/hume-ccTf4wTX.js +0 -3
- package/server/inspect-agent-Brtz0URj.js +0 -2
- package/server/merge-ops-CR44oU9-.js +0 -2
- package/server/merge-set-bUqbm3yc.js +0 -3
- package/server/merge-sync-BJYeOODr.js +0 -3
- package/server/merge-verification-BkaOqPsw.js +0 -124
- package/server/project-repos-DXKQsc_m.js +0 -3
- package/server/projects-vjjcmiN8.js +0 -3
- package/server/public/assets/index-CWeMerGO.js +0 -804
- package/server/public/assets/index-CenuJ3Cw.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
- package/server/rally-zhhtXuDP.js +0 -3
- package/server/record-CN0pj4_5.js +0 -3
- package/server/record-update-bLJxAXH4.js +0 -3
- package/server/resume-BFv1PGpA.js +0 -3
- package/server/review-status-btEYlaxA.js +0 -3
- package/server/review-status-kZj_KyCk.js +0 -1470
- package/server/settings-66A6uvIA.js +0 -2
- package/server/specs-C8Wsn2XO.js +0 -3
- package/server/src-DtcUOZCq.js +0 -4826
- package/server/supervisor-FTJAIsAK.js +0 -2
- package/server/token-util-DuPuNriz.js +0 -3
- package/server/tracker-utils-B4ylXZQK.js +0 -3
- package/server/uat-train-B05BWkp-.js +0 -2
- package/server/uat-train-DDSrSoV1.js +0 -2152
- package/server/workflows-BQu4RFQ-.js +0 -2
- package/server/workspace-manager-CWT55qeI.js +0 -3
|
@@ -16,10 +16,12 @@ allowed-tools:
|
|
|
16
16
|
- Read
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
# Overdeck Dashboard Restart (production-safe
|
|
19
|
+
# Overdeck Dashboard Restart (production-safe)
|
|
20
20
|
|
|
21
21
|
The dashboard the browser talks to is the **pre-built `dist/dashboard/server.js` running under Node 22**, started from the **primary repo checkout** (NOT a `workspaces/feature-*` copy). It serves both the built frontend and the API on one port. **Never** run the production server via `npm run dev`, `tsx`, `vite`, or Bun — that violates the dashboard-node22-only rule (node-pty native addon + circular ESM). `pan dev` is the *development* path (vite HMR for the frontend + Node server); `pan up` is the *production* path.
|
|
22
22
|
|
|
23
|
+
The **supervisor sidecar** (`overdeck-supervisor.service`, port 3012) owns the dashboard lifecycle: it health-checks the server and respawns it as a systemd unit with the full env from `config.yaml`. Restart **through** it (`POST :3012/restart-dashboard`) — a manually spawned server is a duplicate it will replace, and racing it costs minutes of churn. The manual detached start below is the fallback for when the supervisor itself is down, and it must carry the Traefik env block (gotcha 7).
|
|
24
|
+
|
|
23
25
|
## When to use this skill
|
|
24
26
|
|
|
25
27
|
`pan up` / `pan restart` is the normal path. Reach for this manual procedure **only** when:
|
|
@@ -35,33 +37,53 @@ The dashboard the browser talks to is the **pre-built `dist/dashboard/server.js`
|
|
|
35
37
|
3. **Exactly ONE server.** Two servers = two deacons racing the same `~/.overdeck` state (the duel), and the PAN-1625 janitor reaps/churns extras. A single port-owner is left alone.
|
|
36
38
|
4. **Work-agent tmux sessions survive a dashboard restart** — they are separate processes on the `overdeck` socket. Restarting the dashboard does NOT kill agents; the new deacon reconciles them as running.
|
|
37
39
|
5. **Run from the primary repo**, not a workspace. If `readlink /proc/<pid>/cwd` is a `workspaces/feature-*` path, a workspace dashboard hijacked the port — kill it and restart from the primary checkout.
|
|
40
|
+
6. **The supervisor sidecar owns the dashboard lifecycle.** `overdeck-supervisor.service` (port 3012) health-checks the dashboard and respawns it as a systemd unit with the full env from `config.yaml`. A manual server you spawn yourself is a duplicate it will replace — so restart THROUGH the supervisor (below) instead of racing it, and never kill a systemd-parented server that carries `OVERDECK_TRAEFIK_*` env: that is the supervisor's correctly-configured replacement, not a stray.
|
|
41
|
+
7. **A bare `node dist/dashboard/server.js` launch 403s the domain on dists without the config fallback.** `getTrustedOrigins()` reads the launch env; no `OVERDECK_TRAEFIK_*` → only loopback is trusted → `/ws/*` 403s `https://overdeck.localhost` → the dashboard hangs on "Reconnecting to the dashboard…" while `localhost:3011` works. `/api/health` returns 200 the whole time because it does no origin validation. Newer dists fall back to `config.yaml` (commit `e86d125071`), but always launch WITH the env block below — it costs nothing and works on every dist.
|
|
38
42
|
|
|
39
43
|
## Procedure
|
|
40
44
|
|
|
41
45
|
```bash
|
|
42
46
|
cd ~/Projects/overdeck # the PRIMARY checkout
|
|
43
47
|
|
|
48
|
+
# 0. Domain comes from config.yaml — the same source pan up / the supervisor use
|
|
49
|
+
DOMAIN=$(awk '/^traefik:/{f=1} f && /^ domain:/{print $2; exit}' ~/.overdeck/config.yaml)
|
|
50
|
+
DOMAIN=${DOMAIN:-overdeck.localhost}
|
|
51
|
+
|
|
44
52
|
# 1. Rebuild ONLY if you changed server/lib source (the Node 22 dist is what runs)
|
|
45
53
|
npm run build
|
|
46
54
|
|
|
47
|
-
# 2.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
# 2. PREFERRED: restart through the supervisor (it owns the lifecycle, sets the
|
|
56
|
+
# correct env from config.yaml, and systemd-manages the result). Skip to step 3
|
|
57
|
+
# only when port 3012 refuses connections.
|
|
58
|
+
curl -s -X POST http://127.0.0.1:3012/restart-dashboard # → 202 Accepted
|
|
59
|
+
|
|
60
|
+
# 3. Supervisor down? Manual detached start — WITH the Traefik env block (gotcha 7).
|
|
61
|
+
# Kill the old server by EXPLICIT PID (never pkill -f self-matching).
|
|
62
|
+
OLD=$(ss -ltnp 2>/dev/null | grep -E ':3011\b' | grep node | grep -oE 'pid=[0-9]+' | head -1 | cut -d= -f2)
|
|
51
63
|
[ -n "$OLD" ] && kill -TERM "$OLD"
|
|
52
64
|
for i in $(seq 1 15); do { [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; } && sleep 1 || break; done
|
|
53
65
|
{ [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; } && kill -9 "$OLD"
|
|
54
66
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
setsid env \
|
|
68
|
+
DASHBOARD_URL="https://${DOMAIN}" OVERDECK_TRAEFIK_ENABLED=1 \
|
|
69
|
+
OVERDECK_TRAEFIK_DOMAIN="${DOMAIN}" OVERDECK_TRUSTED_ORIGINS="https://${DOMAIN}" \
|
|
70
|
+
DASHBOARD_PORT=3010 API_PORT=3011 PORT=3011 OVERDECK_MODE=production \
|
|
71
|
+
bash -c 'exec node dist/dashboard/server.js' > /tmp/pan-dash.log 2>&1 < /dev/null &
|
|
58
72
|
|
|
59
|
-
# 4. Verify health
|
|
73
|
+
# 4. Verify health AND the WebSocket origin path. /api/health does no origin
|
|
74
|
+
# validation — it returns 200 even while /ws/* 403s the domain (gotcha 7).
|
|
75
|
+
# The WS check is the only one that proves the browser can actually connect.
|
|
60
76
|
for i in $(seq 1 40); do
|
|
61
|
-
code=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 3 https
|
|
77
|
+
code=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 3 "https://${DOMAIN}/api/health" 2>/dev/null)
|
|
62
78
|
[ "$code" = 200 ] && { echo "healthy after ${i}s"; break; }
|
|
63
79
|
sleep 1
|
|
64
80
|
done
|
|
81
|
+
ws=$(curl -sk -o /dev/null -w '%{http_code}' --http1.1 --max-time 5 \
|
|
82
|
+
-H "Origin: https://${DOMAIN}" -H "Connection: Upgrade" -H "Upgrade: websocket" \
|
|
83
|
+
-H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
|
|
84
|
+
"https://${DOMAIN}/ws/rpc")
|
|
85
|
+
[ "$ws" = 101 ] && echo "WS origin OK" \
|
|
86
|
+
|| echo "WS origin FAILED (got $ws) — server does not trust the domain; relaunch with the env block (or a dist with the config fallback)"
|
|
65
87
|
|
|
66
88
|
# 5. Confirm SINGLE instance, correct dist path (primary repo, not a workspace)
|
|
67
89
|
ss -ltnp 2>/dev/null | grep -E ':(3010|3011)\b'
|
|
@@ -79,6 +101,7 @@ readlink -f /proc/$NEW/cwd # must be the primary repo path
|
|
|
79
101
|
## Verify success
|
|
80
102
|
|
|
81
103
|
- `overdeck.localhost/api/health` returns `{"status":"ok"}` and `curl http://localhost:<port>/api/health` returns 200.
|
|
104
|
+
- **The WebSocket origin check returns 101** (procedure step 4). Health alone is not success — a server missing its Traefik env is healthy on `/api/health` and dead to the browser at the same time.
|
|
82
105
|
- Exactly one **host-level** `node dist/dashboard/server.js` process; its `/proc/<pid>/cwd` is the primary repo.
|
|
83
106
|
**Do not count workspace-container servers.** Each running workspace devcontainer has its own `server` service whose `dist/dashboard/server.js` process is visible in host `ps` — those are legitimate read/UI peers (cwd `/workspaces/overdeck`, parent `containerd-shim`, `OVERDECK_DISABLE_DEACON=1`), NOT duplicate dashboards and NOT a single-deacon hazard. Seeing N+1 server processes with N containers up is the healthy state. Container-aware census:
|
|
84
107
|
```bash
|
|
@@ -89,6 +112,7 @@ readlink -f /proc/$NEW/cwd # must be the primary repo path
|
|
|
89
112
|
done
|
|
90
113
|
```
|
|
91
114
|
Exactly one `HOST` line, with cwd = the primary repo, is success. Multiple `HOST` lines = a real orphan (the deacon's orphan-server reaper, PAN-1625, will also catch it).
|
|
115
|
+
- **Do not kill the supervisor's server.** If a HOST server is parented to systemd and its env contains `OVERDECK_TRAEFIK_DOMAIN`, it is the supervisor's correctly-configured managed instance (gotcha 6). If you spawned a manual server and then see a second one appear, kill YOURS (the one without the Traefik env), never the supervisor's.
|
|
92
116
|
- Agent tmux sessions (`tmux -L overdeck list-sessions`) are intact.
|
|
93
117
|
- The deacon log (`/tmp/pan-dash.log` or the dashboard log) shows a single `Deacon started` and patrols advancing — no `received SIGTERM` loop.
|
|
94
118
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# PostToolUse + PostToolUseFailure hook for structured Linear MCP OAuth
|
|
3
|
+
# intervention events (PAN-2997). Registered with matcher mcp__linear__.* for
|
|
4
|
+
# both hook events: PostToolUse fires after a tool call SUCCEEDS, while a
|
|
5
|
+
# failed MCP call — the motivating OAuth-expired case — fires
|
|
6
|
+
# PostToolUseFailure with a top-level `error` field and no tool_response.
|
|
7
|
+
#
|
|
8
|
+
# Never breaks Claude Code: every failure exits 0 silently.
|
|
9
|
+
|
|
10
|
+
set +e
|
|
11
|
+
|
|
12
|
+
INPUT=$(cat 2>/dev/null || echo '{}')
|
|
13
|
+
command -v jq >/dev/null 2>&1 || exit 0
|
|
14
|
+
|
|
15
|
+
TOOL_NAME=$(printf '%s' "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null)
|
|
16
|
+
[[ "$TOOL_NAME" == mcp__linear__* ]] || exit 0
|
|
17
|
+
|
|
18
|
+
EVENT_NAME=$(printf '%s' "$INPUT" | jq -r '.hook_event_name // "PostToolUse"' 2>/dev/null)
|
|
19
|
+
|
|
20
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
21
|
+
# shellcheck source=pan-hook-lib.sh
|
|
22
|
+
. "$SCRIPT_DIR/pan-hook-lib.sh" 2>/dev/null || exit 0
|
|
23
|
+
declare -f pan_resolve_agent_id >/dev/null 2>&1 || exit 0
|
|
24
|
+
pan_resolve_agent_id || exit 0
|
|
25
|
+
declare -f pan_emit_event >/dev/null 2>&1 || exit 0
|
|
26
|
+
|
|
27
|
+
MARKER_DIR="${OVERDECK_HOME:-$HOME/.overdeck}/agents/$AGENT_ID"
|
|
28
|
+
MARKER="$MARKER_DIR/linear-mcp-auth-pending"
|
|
29
|
+
|
|
30
|
+
# Auth-failure classifier. The 401 alternative requires a non-identifier
|
|
31
|
+
# boundary on both sides so ordinary Linear data (MIN-401, "AUR-4015") can
|
|
32
|
+
# never match; prose phrases are matched as words.
|
|
33
|
+
is_auth_error_text() {
|
|
34
|
+
printf '%s' "$1" | grep -Eiq 'requires authentication|not authenticated|unauthorized|(^|[^0-9A-Za-z-])401([^0-9]|$)'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
emit_required() {
|
|
38
|
+
local auth_url="$1"
|
|
39
|
+
local body
|
|
40
|
+
body=$(jq -n --arg authUrl "$auth_url" '{
|
|
41
|
+
kind: "linear_mcp_auth_required",
|
|
42
|
+
authUrl: (if $authUrl == "" then null else $authUrl end)
|
|
43
|
+
}' 2>/dev/null) || return 0
|
|
44
|
+
pan_emit_event "$AGENT_ID" "$body" >/dev/null 2>&1 || true
|
|
45
|
+
mkdir -p "$MARKER_DIR" 2>/dev/null || true
|
|
46
|
+
: > "$MARKER" 2>/dev/null || true
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
emit_healthy_if_pending() {
|
|
50
|
+
[ -f "$MARKER" ] || return 0
|
|
51
|
+
local body
|
|
52
|
+
body=$(jq -n '{kind: "linear_mcp_auth_healthy"}' 2>/dev/null) || return 0
|
|
53
|
+
pan_emit_event "$AGENT_ID" "$body" >/dev/null 2>&1 || true
|
|
54
|
+
rm -f "$MARKER" 2>/dev/null || true
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if [ "$EVENT_NAME" = "PostToolUseFailure" ]; then
|
|
58
|
+
# Documented failure-event shape: top-level `error`, no tool_response.
|
|
59
|
+
ERROR_TEXT=$(printf '%s' "$INPUT" | jq -r '.error // ""' 2>/dev/null)
|
|
60
|
+
if is_auth_error_text "$ERROR_TEXT"; then
|
|
61
|
+
emit_required ''
|
|
62
|
+
fi
|
|
63
|
+
exit 0
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# PostToolUse — successful tool call.
|
|
67
|
+
RESPONSE=$(printf '%s' "$INPUT" | jq -r '
|
|
68
|
+
(.tool_response // .tool_result // "")
|
|
69
|
+
| if type == "string" then . else tojson end
|
|
70
|
+
' 2>/dev/null)
|
|
71
|
+
[ -n "$RESPONSE" ] || RESPONSE=''
|
|
72
|
+
|
|
73
|
+
if [ "$TOOL_NAME" = 'mcp__linear__authenticate' ]; then
|
|
74
|
+
AUTH_URL=$(printf '%s\n' "$RESPONSE" \
|
|
75
|
+
| grep -Eo 'https://linear\.app/oauth/authorize[^"[:space:]<>]*' 2>/dev/null \
|
|
76
|
+
| sed -n '1p')
|
|
77
|
+
emit_required "$AUTH_URL"
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# An MCP server can report a failure inside a successful hook event as an
|
|
82
|
+
# error-shaped payload (isError: true, or an `error` member). Only those
|
|
83
|
+
# payloads are auth-classified — ordinary successful result data (issue
|
|
84
|
+
# identifiers like MIN-401, titles mentioning 401s or "unauthorized") never
|
|
85
|
+
# reaches this check and simply clears any pending intervention below.
|
|
86
|
+
ERROR_SHAPED=$(printf '%s' "$INPUT" | jq -r '
|
|
87
|
+
(.tool_response // .tool_result // {})
|
|
88
|
+
| if type == "object" and ((.isError == true) or (.error != null)) then "yes" else "" end
|
|
89
|
+
' 2>/dev/null)
|
|
90
|
+
|
|
91
|
+
if [ -n "$ERROR_SHAPED" ] && is_auth_error_text "$RESPONSE"; then
|
|
92
|
+
emit_required ''
|
|
93
|
+
exit 0
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
emit_healthy_if_pending
|
|
97
|
+
exit 0
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
scope: universal
|
|
3
|
+
---
|
|
4
|
+
### Make every AskUserQuestion prompt self-contained
|
|
5
|
+
|
|
6
|
+
Every AskUserQuestion must stand alone because the operator may answer from a
|
|
7
|
+
dashboard dialog without the preceding transcript. State the situation in one
|
|
8
|
+
or two sentences, ask for the decision in plain language, and describe each
|
|
9
|
+
option by the consequence of choosing it rather than by a label alone.
|
|
@@ -35,15 +35,17 @@ Each overridable row has one explicit acceptance flag:
|
|
|
35
35
|
```text
|
|
36
36
|
--accept-review Row 1: review passed
|
|
37
37
|
--accept-tests Row 2: tests passed
|
|
38
|
-
--accept-verification Row 3: branch verification passed
|
|
38
|
+
--accept-verification Row 3: branch verification passed
|
|
39
39
|
--accept-merged Row 4: PR merged on the forge
|
|
40
40
|
--accept-post-merge Row 5: post-merge lifecycle completed
|
|
41
41
|
--accept-main-verify Row 6: merge commit verified on main
|
|
42
42
|
--accept-deploy Row 7: live dashboard build includes the merge
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
An acceptance records the flag, operator
|
|
46
|
-
|
|
45
|
+
An acceptance records the flag, operator identity, and timestamp in the issue
|
|
46
|
+
close-out record. The autonomous flywheel may run a clean close-out, but it cannot
|
|
47
|
+
use `--accept-*`; an operator must apply every override after reviewing the miss.
|
|
48
|
+
Use an override only when the missing evidence is understood:
|
|
47
49
|
|
|
48
50
|
```bash
|
|
49
51
|
pan close PAN-1234 --force
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pan-peer-review
|
|
3
|
+
description: "Workflow: spawn an independent adversarial reviewer on a different model to verify or refute your own findings. EXPENSIVE — invoke only when the operator explicitly asks for a peer/second-opinion review."
|
|
4
|
+
triggers:
|
|
5
|
+
- peer review my findings
|
|
6
|
+
- get independent feedback
|
|
7
|
+
- second opinion from another model
|
|
8
|
+
- have another model review this
|
|
9
|
+
- adversarial review of my analysis
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# pan peer-review — independent second opinion from another model
|
|
17
|
+
|
|
18
|
+
Spawn a conversation on a **different model family** to adversarially verify or
|
|
19
|
+
refute an analysis you produced, then read its findings back. Use it when a
|
|
20
|
+
conclusion is expensive to get wrong: a root-cause diagnosis about to become a
|
|
21
|
+
PRD, a refactor plan, a security claim, a "this is safe to merge" call.
|
|
22
|
+
|
|
23
|
+
## ⚠️ Operator-invoked only — never launch this on your own initiative
|
|
24
|
+
|
|
25
|
+
**Do not start a peer review because you think your work would benefit from
|
|
26
|
+
one.** A peer review spawns a second full agent that reads source, burns a
|
|
27
|
+
frontier-model context, and runs for many minutes. That cost is the operator's
|
|
28
|
+
call, not yours.
|
|
29
|
+
|
|
30
|
+
Launch only when the operator explicitly asks — "get a second opinion", "run
|
|
31
|
+
this by another model", "have K3 review it", "peer review this". If you believe
|
|
32
|
+
a review is warranted and they have not asked, say so in one sentence and let
|
|
33
|
+
them decide.
|
|
34
|
+
|
|
35
|
+
Corollary: never chain reviews. One reviewer, one pass. If the reviewer
|
|
36
|
+
disagrees with you, bring the disagreement back to the operator rather than
|
|
37
|
+
spawning a third model to break the tie.
|
|
38
|
+
|
|
39
|
+
## Why a different model, and what "independent" buys you
|
|
40
|
+
|
|
41
|
+
A reviewer on the same model as the author tends to agree — it reconstructs the
|
|
42
|
+
same reasoning from the same priors. The value comes from a different family
|
|
43
|
+
reading the same source: Opus/Fable reviewing GPT work, K3 reviewing Claude
|
|
44
|
+
work, GPT reviewing Claude work.
|
|
45
|
+
|
|
46
|
+
Pick the reviewer by contrast with whoever produced the analysis:
|
|
47
|
+
|
|
48
|
+
| Author | Good reviewer |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Claude (Opus/Fable/Sonnet) | `k3` (Kimi), `gpt-5.6-sol` |
|
|
51
|
+
| GPT | `claude-opus-5`, `k3` |
|
|
52
|
+
| Kimi | `claude-opus-5`, `gpt-5.6-sol` |
|
|
53
|
+
|
|
54
|
+
Never pass `--harness`. Harness routing is config-owned and the operator sets it
|
|
55
|
+
deliberately; `--model` is the only routing flag this workflow uses, and only
|
|
56
|
+
because the operator asked for a specific reviewer.
|
|
57
|
+
|
|
58
|
+
Leave reasoning effort alone. It inherits `high`, which is the right tier —
|
|
59
|
+
never raise it to `xhigh`/`max` for a review.
|
|
60
|
+
|
|
61
|
+
## The workflow
|
|
62
|
+
|
|
63
|
+
### 1. Write the brief to a file — never into the focus
|
|
64
|
+
|
|
65
|
+
The `pan handoff` focus is hard-capped at 500 characters. A real review brief is
|
|
66
|
+
thousands. Write it to a file in the reviewer's future cwd and let the focus
|
|
67
|
+
point at it.
|
|
68
|
+
|
|
69
|
+
A brief that produces a useful review has these parts:
|
|
70
|
+
|
|
71
|
+
- **Adversarial framing, stated first.** "Assume each claim may be wrong. A
|
|
72
|
+
claim that survives refutation is worth more than agreement. Do not soften
|
|
73
|
+
findings to be agreeable." Without this you get a politeness echo.
|
|
74
|
+
- **Read-only rules.** No edits to source, no commits, no `pan` commands, no
|
|
75
|
+
POST/DELETE. The reviewer writes exactly one file: its findings.
|
|
76
|
+
- **A glossary** of every term of art before you use it — the reviewer has none
|
|
77
|
+
of your conversation's context.
|
|
78
|
+
- **Absolute paths for evidence outside the worktree** — live workspaces, logs,
|
|
79
|
+
config, API endpoints. The reviewer cannot find them otherwise.
|
|
80
|
+
- **Each claim stated separately**, with the exact file:line it rests on, the
|
|
81
|
+
evidence you used, and the fix you propose.
|
|
82
|
+
- **Per-claim questions that invite refutation** — "does the fix actually
|
|
83
|
+
terminate the loop?", "what is the blast radius?", "would this regress the
|
|
84
|
+
monorepo path?". Generic "please review" produces generic output.
|
|
85
|
+
- **Cross-cutting questions**, including at least one that asks for things you
|
|
86
|
+
did *not* find: "search for every other site with this pattern and report any
|
|
87
|
+
beyond the ones named here."
|
|
88
|
+
- **An explicit output contract** — a verdict vocabulary (CONFIRMED /
|
|
89
|
+
PARTIALLY CONFIRMED / REFUTED / CANNOT VERIFY), where to write findings, and
|
|
90
|
+
a request to also summarize in-conversation.
|
|
91
|
+
|
|
92
|
+
### 2. Create a detached worktree
|
|
93
|
+
|
|
94
|
+
The reviewer needs the source, isolated from your working tree. Spawned agents
|
|
95
|
+
must never get the primary worktree as their cwd.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
git worktree add --detach /home/eltmon/Projects/hoff-<slug> main
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`--detach` is required: a plain `git worktree add <path> main` fails with
|
|
102
|
+
`fatal: 'main' is already used by worktree at ...` whenever main is checked out
|
|
103
|
+
somewhere, which on a dev machine is always. Detached HEAD is correct here —
|
|
104
|
+
the reviewer never commits.
|
|
105
|
+
|
|
106
|
+
Then write the brief into that worktree.
|
|
107
|
+
|
|
108
|
+
### 3. Launch the handoff
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
pan handoff --model <reviewer-model> --cwd /home/eltmon/Projects/hoff-<slug> self \
|
|
112
|
+
"Read REVIEW-BRIEF.md in your cwd FIRST and follow it exactly. You are an INDEPENDENT ADVERSARIAL reviewer — verify or refute each claim against real source and critique each proposed fix. Read-only. Write findings to FEEDBACK-<model>.md."
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`self` must come before the focus text. Omitting it makes the CLI read your
|
|
116
|
+
focus as a conversation name and fail with `Conversation not found`.
|
|
117
|
+
|
|
118
|
+
**The command can exceed a two-minute tool timeout while the handoff document is
|
|
119
|
+
authored — that is normal and does not mean it failed.** Either run it with
|
|
120
|
+
`run_in_background: true`, or let it time out and verify the spawn afterwards:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
tmux -L overdeck list-sessions | grep conv-
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 4. Correct the frame — the step everyone skips
|
|
127
|
+
|
|
128
|
+
`pan handoff` seeds the new conversation with an **authored handoff document
|
|
129
|
+
describing your session's state and open work**. It does not deliver your focus
|
|
130
|
+
as an instruction. The reviewer therefore wakes up believing it is *you,
|
|
131
|
+
continuing your work* — and if your open-work list said "launch a peer review",
|
|
132
|
+
it will try to launch one, recursively.
|
|
133
|
+
|
|
134
|
+
Check what it actually received before assuming it is reviewing:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
tmux -L overdeck capture-pane -t <conv-id> -p -S -30
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If it is acting as a continuation rather than as a reviewer, correct it with
|
|
141
|
+
`pan tell` (never raw tmux keystroke injection):
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pan tell <conv-id> "STOP. You are NOT continuing that conversation's work. You ARE the independent reviewer it wanted to spawn. Read <brief path> and follow it exactly. Read-only. Begin now."
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Budget for this step every time. Treat the handoff document as context the
|
|
148
|
+
reviewer happens to have, and your `pan tell` as the actual task assignment.
|
|
149
|
+
|
|
150
|
+
### 5. Wait on the artifact, not the pane
|
|
151
|
+
|
|
152
|
+
Poll for the findings file rather than watching output scroll:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
until [ -s /home/eltmon/Projects/hoff-<slug>/FEEDBACK-<model>.md ]; do sleep 20; done
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Run that in the background so you can keep working.
|
|
159
|
+
|
|
160
|
+
### 6. Read the findings critically, then report
|
|
161
|
+
|
|
162
|
+
The reviewer is not an oracle. Treat REFUTED verdicts as claims to check, the
|
|
163
|
+
same way you asked it to treat yours — a reviewer that misreads a call site can
|
|
164
|
+
be confidently wrong. Verify anything that would change what you do next.
|
|
165
|
+
|
|
166
|
+
Report back to the operator with: what the reviewer confirmed, what it refuted
|
|
167
|
+
and whether you agree, what it found that you missed, and where you still
|
|
168
|
+
disagree after checking. Never launder its output as consensus.
|
|
169
|
+
|
|
170
|
+
### 7. Clean up
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
git worktree remove /home/eltmon/Projects/hoff-<slug>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Keep the findings file if it is going into an issue or PRD — copy it out before
|
|
177
|
+
removing the worktree.
|
|
178
|
+
|
|
179
|
+
## Failure modes and what they mean
|
|
180
|
+
|
|
181
|
+
| Symptom | Cause | Fix |
|
|
182
|
+
| --- | --- | --- |
|
|
183
|
+
| `fatal: 'main' is already used by worktree at ...` | `git worktree add` without `--detach` | Add `--detach` |
|
|
184
|
+
| `Conversation not found` | Focus text passed without `self` first | `pan handoff ... self "<focus>"` |
|
|
185
|
+
| `Focus is N characters — the limit is 500`, no conversation created | Brief crammed into the focus | Put the brief in a file, point the focus at it |
|
|
186
|
+
| Handoff command times out at 2 minutes | Handoff document authoring is slow | Normal — verify the spawn with `tmux -L overdeck list-sessions` |
|
|
187
|
+
| Reviewer starts doing your open-work list, or tries to spawn its own review | It received the handoff doc, not your focus | `pan tell` it the real task (step 4) |
|
|
188
|
+
| Reviewer agrees with everything | Brief lacked adversarial framing, or reviewer shares the author's model family | Rewrite the framing; pick a different family |
|
|
189
|
+
| `state.json has no issueId` on `pan tell` | Informational — conversations have no issue | Ignore; the message still delivers |
|
|
190
|
+
|
|
191
|
+
## Related
|
|
192
|
+
|
|
193
|
+
- `/pan-handoff` — the underlying command and its full semantics
|
|
194
|
+
- `/pan-code-review` — reviewing a *diff*; this skill reviews an *analysis*
|
|
195
|
+
- `/pan-tell` — the sanctioned way to message a running conversation
|
|
@@ -11,17 +11,17 @@ Use this after code changes that should run in the local Overdeck dashboard.
|
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
pan reload
|
|
14
|
-
pan reload --force #
|
|
14
|
+
pan reload --force # explicit operator bypass of the deploy-window gate
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
`pan reload` runs `bun install`
|
|
17
|
+
`pan reload` fetches `origin/main`, creates a temporary detached worktree at that commit, and runs `bun install` followed by `npm run build` there — never in the primary working tree. If the primary tree has uncommitted changes or its `HEAD` differs from `origin/main`, the command notes that those changes are excluded and continues with the canonical build. If installation or build fails, it leaves the current dashboard running and exits non-zero; after a successful build, it keeps the detached worktree as the active deployment root and launches its `dist/dashboard/server.js` with its canonical runtime dependencies and workspace packages intact, leaves the primary checkout's `node_modules/` untouched, refreshes the primary `dist/` CLI mirror with a dependency link back to that deployment root, then restarts the dashboard and waits for `http://127.0.0.1:3011/api/health`. Deployments alternate between two fixed generation worktrees. A failure before the new process is left running restores the prior marker and primary `dist/` and removes the failed generation. A health timeout keeps the new deployment active because the dashboard is deliberately left running so a slow boot can finish or a failed boot can be inspected. Retries still reuse one of the two fixed slots, so failures cannot accumulate unbounded dependency trees.
|
|
18
18
|
|
|
19
19
|
`npm run build` already rebuilds the dashboard **server** bundle (via `build-post-cli.mjs` → `build:dashboard:server:bundle`), so `pan reload` picks up server/deacon code changes — you do **not** need a separate `npm run build:dashboard:server`. The `bun install` step runs first so a merge/rebase that added a runtime dependency (e.g. `chokidar`) can't produce a freshly-built server that boot-crashes with `ERR_MODULE_NOT_FOUND`.
|
|
20
20
|
|
|
21
21
|
## Options
|
|
22
22
|
|
|
23
23
|
- `--skip-build` — restart the current bundle without running `bun install` or `npm run build`.
|
|
24
|
-
- `--force` — bypass the deploy-window gate
|
|
24
|
+
- `--force` — explicitly bypass the deploy-window gate. Without it, a refused agent-issued reload queues the deploy, reports its age and distinct verification blockers, and self-fires at the next safe verification boundary. Do not retry-loop or use `--force` to interrupt healthy verification; reserve the bypass for exceptional operator recovery.
|
|
25
25
|
- `--health-timeout <ms>` — set the dashboard health-check budget. The default is `30000`.
|
|
26
26
|
- `--no-deacon` — restart without Cloister/Deacon auto-start.
|
|
27
27
|
|
|
@@ -34,7 +34,7 @@ pan restart --traefik
|
|
|
34
34
|
pan restart --full # nuclear — stops & restarts everything
|
|
35
35
|
|
|
36
36
|
# Explicit force cases
|
|
37
|
-
pan restart --force # bypass the
|
|
37
|
+
pan restart --force # explicit operator bypass of the deploy-window gate
|
|
38
38
|
pan restart --cliproxy --force # redownload the pinned CLIProxy binary
|
|
39
39
|
```
|
|
40
40
|
|
|
@@ -61,9 +61,10 @@ server is a failure, not a successful restart.
|
|
|
61
61
|
- `pan restart --dashboard` NEVER touches CLIProxy, Traefik, or TLDR — that
|
|
62
62
|
scope contract is enforced by tests.
|
|
63
63
|
- Agent-issued dashboard and full restarts consult the deploy-window gate before
|
|
64
|
-
acquiring the restart lock.
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
acquiring the restart lock. A refusal queues the deploy, reports its age and
|
|
65
|
+
distinct verification blockers, and self-fires at the next safe verification
|
|
66
|
+
boundary. Do not retry in a loop or use `--force` to interrupt healthy verification;
|
|
67
|
+
`--force` remains the explicit operator bypass for exceptional recovery.
|
|
67
68
|
- For `--cliproxy`, `--force` has a separate meaning: it redownloads the binary at
|
|
68
69
|
the pinned version before restarting it.
|
|
69
70
|
- If the dashboard restart fails, shared sidecars are left running so recovery
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pan-review
|
|
3
|
-
description: "pan review <subcommand> — manage the code review lifecycle: list pending work,
|
|
3
|
+
description: "pan review <subcommand> — manage the code review lifecycle: list pending work, re-request review, heal status drift, reset/abort/restart review cycles"
|
|
4
4
|
triggers:
|
|
5
5
|
- pan review
|
|
6
6
|
- review pending
|
|
7
7
|
- request review
|
|
8
8
|
- review mode
|
|
9
9
|
- reset review
|
|
10
|
+
- resync review
|
|
10
11
|
- restart review
|
|
11
12
|
- abort review
|
|
12
13
|
- code review lifecycle
|
|
@@ -30,6 +31,7 @@ pan review pending --blocked # List blocked review/test/me
|
|
|
30
31
|
pan review request <id> # Re-request review after fixing feedback
|
|
31
32
|
pan review mode <id> <quick|full> # Set this issue's review mode override
|
|
32
33
|
pan review reset <id> [--session] # Reset review/test/merge cycles (human override)
|
|
34
|
+
pan review resync <id> # Re-emit canonical status to heal dashboard drift
|
|
33
35
|
pan review abort <id> # Kill all running reviewers, leave worker idle
|
|
34
36
|
pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch a fresh review pipeline
|
|
35
37
|
```
|
|
@@ -54,6 +56,9 @@ pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch
|
|
|
54
56
|
pipeline can be re-dispatched from scratch. Use when the saved state is
|
|
55
57
|
inconsistent or corrupt. `--session` additionally clears the saved Claude
|
|
56
58
|
session for each reviewer so they restart with a clean conversation.
|
|
59
|
+
- **`resync <id>`** — Reads the canonical review status and re-emits it without
|
|
60
|
+
changing any verdict. Use when an issue passed review but is missing from
|
|
61
|
+
Awaiting Merge or its actions are wrongly gated by stale dashboard state.
|
|
57
62
|
- **`abort <id>`** — Kills any currently running reviewer sessions but
|
|
58
63
|
leaves the work agent alone. Use when reviewers are stuck or running
|
|
59
64
|
against the wrong commit and you want to halt without resetting state.
|
|
@@ -77,6 +82,7 @@ pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch
|
|
|
77
82
|
| This issue needs the full review convoy | `pan review mode <id> full` |
|
|
78
83
|
| Return an issue to default quick review | `pan review mode <id> quick` |
|
|
79
84
|
| Pipeline state is inconsistent, need a clean slate | `pan review reset <id>` |
|
|
85
|
+
| Issue passed but is missing from Awaiting Merge or actions are wrongly gated | `pan review resync <id>` |
|
|
80
86
|
| Same as above plus reviewer Claude sessions are bad | `pan review reset <id> --session` |
|
|
81
87
|
| Reviewer is hung, just kill it | `pan review abort <id>` |
|
|
82
88
|
| Reviewer crashed, want a fresh convoy with a different model | `pan review restart <id> --model gpt-5.4` |
|
|
@@ -30,12 +30,12 @@ curl -X POST http://localhost:3011/api/issues/PAN-XXX/sync-main
|
|
|
30
30
|
## What It Does
|
|
31
31
|
|
|
32
32
|
1. Checks for uncommitted changes (blocks if any — must commit, explicitly discard, or surface to the operator first; agents never `git stash`)
|
|
33
|
-
2.
|
|
34
|
-
3.
|
|
35
|
-
4.
|
|
36
|
-
5.
|
|
37
|
-
6. If
|
|
38
|
-
7.
|
|
33
|
+
2. Resolves the workspace's required git repos; monorepos produce one repo root
|
|
34
|
+
3. Cleans up stale git locks in each repo
|
|
35
|
+
4. Fetches and merges each repo's configured target branch sequentially in config order
|
|
36
|
+
5. Stops at the first failed or conflicted repo and marks later repos skipped
|
|
37
|
+
6. If clean: reports aggregate commit/file totals plus one result per repo
|
|
38
|
+
7. If conflicts remain: aborts that repo's merge and reports its conflict files
|
|
39
39
|
|
|
40
40
|
## Outcomes
|
|
41
41
|
|
|
@@ -44,14 +44,15 @@ curl -X POST http://localhost:3011/api/issues/PAN-XXX/sync-main
|
|
|
44
44
|
| Already up to date | Main has no new commits since last sync |
|
|
45
45
|
| Success (N commits) | Clean merge or agent-resolved conflicts |
|
|
46
46
|
| Uncommitted changes | Commit or discard workspace changes first |
|
|
47
|
-
| Conflict (unresolvable) |
|
|
47
|
+
| Conflict (unresolvable) | The failing repo's merge is aborted and its conflict files are reported |
|
|
48
|
+
| Per-repo / skipped | Polyrepo output shows each repo's result; repos after the first failure are skipped |
|
|
48
49
|
|
|
49
50
|
## Design Decisions
|
|
50
51
|
|
|
51
52
|
- **Merge, not rebase** — Rebase rewrites SHAs and requires force-push. Merge commits serve as audit markers.
|
|
52
53
|
- **No tests/builds** — Feature branch is WIP. Running tests after sync would fail on pre-existing issues.
|
|
53
54
|
- **No push to remote** — This is a local workspace operation only.
|
|
54
|
-
- **
|
|
55
|
+
- **Sequential polyrepo sync** — Required repos sync in config order. The first failure stops iteration; earlier merges remain, later repos are skipped, and output reports every repo's result.
|
|
55
56
|
|
|
56
57
|
## Examples
|
|
57
58
|
|
|
@@ -86,7 +86,11 @@ don't appear via `/api/issues` filtering.
|
|
|
86
86
|
### 1. Generate the table
|
|
87
87
|
|
|
88
88
|
Run this script. It gets the row universe from `GET /api/pipeline/membership`,
|
|
89
|
-
then joins issue titles, review status, tmux, and agent state as annotations.
|
|
89
|
+
then joins issue titles, review status, tmux, and agent state as annotations. A
|
|
90
|
+
bare array is a successful answer. An HTTP 200 object with
|
|
91
|
+
`status: "unavailable"` is a typed blind spot; show its `projectKey`, `reason`,
|
|
92
|
+
and `message`, then stop instead of deriving membership from another source.
|
|
93
|
+
HTTP 503 means the first snapshot is still loading and may be retried later.
|
|
90
94
|
|
|
91
95
|
```bash
|
|
92
96
|
python3 - <<'PY'
|
|
@@ -100,6 +104,11 @@ issues_data = json.loads(subprocess.check_output(['curl','-s','http://localhost:
|
|
|
100
104
|
membership = json.loads(subprocess.check_output([
|
|
101
105
|
'curl','-s','http://localhost:3011/api/pipeline/membership?project=overdeck'
|
|
102
106
|
]))
|
|
107
|
+
if isinstance(membership, dict) and membership.get('status') == 'unavailable':
|
|
108
|
+
raise SystemExit(
|
|
109
|
+
'PIPELINE MEMBERSHIP UNAVAILABLE: '
|
|
110
|
+
f"{membership.get('projectKey')} — {membership.get('reason')}: {membership.get('message')}"
|
|
111
|
+
)
|
|
103
112
|
issues_by_id = {(i.get('identifier') or '').upper(): i for i in issues_data}
|
|
104
113
|
panissues = []
|
|
105
114
|
for member in membership:
|
|
@@ -14,6 +14,7 @@ Run from the workspace root:
|
|
|
14
14
|
```bash
|
|
15
15
|
pan workspace add-repo <workspace-id> <repo-name> [repo-name...]
|
|
16
16
|
pan workspace add-repo <workspace-id> --group <group-name>
|
|
17
|
+
pan workspace add-repo <workspace-id> --new <git-url>
|
|
17
18
|
```
|
|
18
19
|
|
|
19
20
|
Examples:
|
|
@@ -25,8 +26,11 @@ pan workspace add-repo int-123 int-provider-a int-canonical-to-hs
|
|
|
25
26
|
# Add a named group
|
|
26
27
|
pan workspace add-repo int-123 --group simphony
|
|
27
28
|
|
|
28
|
-
# Add all repos
|
|
29
|
+
# Add all configured repos
|
|
29
30
|
pan workspace add-repo int-123 --group all
|
|
31
|
+
|
|
32
|
+
# Register a repo created as part of this issue
|
|
33
|
+
pan workspace add-repo int-123 --new git@github.com:acme/new-service.git
|
|
30
34
|
```
|
|
31
35
|
|
|
32
36
|
## How to decide which repos you need
|
|
@@ -40,7 +44,18 @@ pan workspace add-repo int-123 --group all
|
|
|
40
44
|
The new repos appear as subdirectories in the workspace with feature branches ready.
|
|
41
45
|
Run git commands inside each repo subdirectory.
|
|
42
46
|
|
|
47
|
+
## New deliverable repositories
|
|
48
|
+
|
|
49
|
+
Run `--new <git-url>` before cloning or committing in a repository created during the issue. Overdeck clones the project-level source repo, creates the issue feature worktree, and registers it so review, inspection, and merge include it.
|
|
50
|
+
|
|
51
|
+
If the repo name inferred from the URL is not suitable, pass the workspace directory name before `--new`:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pan workspace add-repo int-123 service --new git@github.com:acme/new-service.git
|
|
55
|
+
```
|
|
56
|
+
|
|
43
57
|
## Notes
|
|
44
58
|
|
|
59
|
+
- An unknown repo name without `--new` fails instead of silently reporting success
|
|
45
60
|
- Meta repos (symlinked) are readonly — do NOT commit changes to them
|
|
46
61
|
- Use `--dry-run` first to see what would be added without making changes
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { Bn as clearAgentPausedSync, Hn as clearAgentTroubledSync, Xn as init_agent_state, Yn as getAgentStateSync, dr as setAgentPausedSync } from "./queries-CjNIf-Ub.js";
|
|
2
|
-
init_agent_state();
|
|
3
|
-
export { clearAgentPausedSync, clearAgentTroubledSync, getAgentStateSync, setAgentPausedSync };
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { $ as appendActivity, $n as isRole, $t as OHMYPI_AGENT_READY_TIMEOUT_SECONDS, An as buildDefaultResumeContinueMessage, Ar as saveAgentRuntimeState, At as deliverAgentPermissionDecision, B as detectCrashedAgents, Bn as clearAgentPausedSync, Bt as assertWorkspaceStackHealthyForSpawn, C as replayCrashedStandingAgent, Cn as getProviderEnvForModel, Cr as normalizeAgentId, Dr as getAgentRuntimeState, Er as waitForReadySignal, Fn as writeChannelsBridgeMcpConfig, G as resumeAgent, Gn as getAgentDir, Gt as transitionIssueToInProgress, H as restartAgent, Hn as clearAgentTroubledSync, In as GOVERNOR_SLOT_PAUSE_REASON_PREFIX, Jn as getAgentStateFilePath, Kt as transitionIssueToInReview, Ln as SESSION_EXITED_BEFORE_KICKOFF, Mn as decideChannelsForWorkAgent, Mt as deliverResumeMessageWithTranscriptConfirmation, Nn as decideSupervisorForWorkAgent, Nt as setAgentDeliveryMethod, Or as getAgentRuntimeStateSync, Pn as dismissDevChannelsDialog, Qn as isAgentTroubled, Rn as __testInternals, S as contextWindowForModel, Sn as determineModel, Sr as isQualifiedAgentId, T as shouldReplayCompactAtTierRunBoundary, Tn as getProviderTmuxFlags, Tr as waitForAgentIdle, U as buildCompactRecoverySeed, Un as clearYieldForResumeSync, V as recoverAgent, Vn as clearAgentTroubled, Vt as buildAgentLaunchConfig, Wt as retrieveSpawnTimeMemoryContext, X as messageAgent, Yn as getAgentStateSync, Zn as isAgentPaused, a as listRunningAgentsSync, an as getProviderAuthMode, ar as recordAgentFailureSync, at as saveSessionId, b as init_agents, bn as buildCavemanExports, cn as injectPiConversationMemory, cr as saveAgentState, dn as waitForPromptReady, dr as setAgentPausedSync, en as describeOhmypiSpawnFailure, et as getActivity, fr as setAgentYieldedSync, ft as stopAgent, i as listRunningAgents, ir as recordAgentFailure, jn as buildResumeContinueMessage, jt as deliverInitialPromptWithRetry, kt as deliverAgentMessage, ln as roleAgentDefinitionPath, lr as saveAgentStateSync, lt as spawnAgent, mr as writeAgentStateJsonSync, nn as getAgentRuntimeBaseCommand, nr as markAgentStoppedState, nt as getLatestSessionIdSync, o as warnOnBareNumericIssueIds, on as getRoleRuntimeBaseCommand, pr as wipeAgentStateDirs, pt as stopAgentSync, qn as getAgentState, r as listAgentStates, rr as markAgentTroubled, rt as getSessionId, sr as resetAgentFailureCount, t as dropLegacyAgentStatesMissingRoleAsync, tr as markAgentRunningState, tt as getLatestSessionId, ur as setAgentPaused, ut as spawnRun, w as replayStandingAgent, wn as getProviderExportsForModel, wr as resolveAgentTargetSync, x as compactAtTierRunBoundary, xn as buildSpawnEnvForModel, xr as clearReadySignal, z as autoRecoverAgents, zn as clearAgentPaused } from "./queries-CjNIf-Ub.js";
|
|
2
|
-
init_agents();
|
|
3
|
-
export { GOVERNOR_SLOT_PAUSE_REASON_PREFIX, OHMYPI_AGENT_READY_TIMEOUT_SECONDS, SESSION_EXITED_BEFORE_KICKOFF, __testInternals, appendActivity, assertWorkspaceStackHealthyForSpawn, autoRecoverAgents, buildAgentLaunchConfig, buildCavemanExports, buildCompactRecoverySeed, buildDefaultResumeContinueMessage, buildResumeContinueMessage, buildSpawnEnvForModel, clearAgentPaused, clearAgentPausedSync, clearAgentTroubled, clearAgentTroubledSync, clearReadySignal, clearYieldForResumeSync, compactAtTierRunBoundary, contextWindowForModel, decideChannelsForWorkAgent, decideSupervisorForWorkAgent, deliverAgentMessage, deliverAgentPermissionDecision, deliverInitialPromptWithRetry, deliverResumeMessageWithTranscriptConfirmation, describeOhmypiSpawnFailure, detectCrashedAgents, determineModel, dismissDevChannelsDialog, dropLegacyAgentStatesMissingRoleAsync, getActivity, getAgentDir, getAgentRuntimeBaseCommand, getAgentRuntimeState, getAgentRuntimeStateSync, getAgentState, getAgentStateFilePath, getAgentStateSync, getLatestSessionId, getLatestSessionIdSync, getProviderAuthMode, getProviderEnvForModel, getProviderExportsForModel, getProviderTmuxFlags, getRoleRuntimeBaseCommand, getSessionId, injectPiConversationMemory, isAgentPaused, isAgentTroubled, isQualifiedAgentId, isRole, listAgentStates, listRunningAgents, listRunningAgentsSync, markAgentRunningState, markAgentStoppedState, markAgentTroubled, messageAgent, normalizeAgentId, recordAgentFailure, recordAgentFailureSync, recoverAgent, replayCrashedStandingAgent, replayStandingAgent, resetAgentFailureCount, resolveAgentTargetSync, restartAgent, resumeAgent, retrieveSpawnTimeMemoryContext, roleAgentDefinitionPath, saveAgentRuntimeState, saveAgentState, saveAgentStateSync, saveSessionId, setAgentDeliveryMethod, setAgentPaused, setAgentPausedSync, setAgentYieldedSync, shouldReplayCompactAtTierRunBoundary, spawnAgent, spawnRun, stopAgent, stopAgentSync, transitionIssueToInProgress, transitionIssueToInReview, waitForAgentIdle, waitForPromptReady, waitForReadySignal, warnOnBareNumericIssueIds, wipeAgentStateDirs, writeAgentStateJsonSync, writeChannelsBridgeMcpConfig };
|