@askexenow/exe-os 0.9.359 → 0.9.362
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/deploy/compose/docker-compose.yml +7 -1
- package/deploy/compose/generate-env.ts +23 -4
- package/deploy/compose/sso-edge/default.conf.template +35 -0
- package/deploy/compose/sso-edge/sso-redirect.conf +23 -2
- package/deploy/stack-manifests/v0.9.json +228 -2
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-DMKNHGSG.js → active-agent-3FV5V7SS.js} +9 -8
- package/dist/{active-agent-Y3DCBD7J.js → active-agent-BPNEBKHI.js} +9 -8
- package/dist/{agentic-ontology-3233PNKV.js → agentic-ontology-RCVCJ6WB.js} +1 -1
- package/dist/{backfill-gate-DA7UT6UD.js → backfill-gate-LRX77SUD.js} +3 -2
- package/dist/{backfill-metadata-4DS4A5U3.js → backfill-metadata-Y3DGVCK5.js} +12 -11
- package/dist/{background-jobs-XGTLESKM.js → background-jobs-Z6KHCWES.js} +3 -2
- package/dist/{backup-verify-JNYKXIU2.js → backup-verify-TZPPUCLU.js} +5 -4
- package/dist/{behavior-injection-CGAMI552.js → behavior-injection-JMGGWCWG.js} +21 -13
- package/dist/{behaviors-57AMN5IP.js → behaviors-TT6CMEKC.js} +20 -12
- package/dist/bin/age-ontology-load.js +3 -2
- package/dist/bin/agentic-ontology-backfill.js +14 -13
- package/dist/bin/agentic-reflection-backfill.js +15 -14
- package/dist/bin/agentic-semantic-label.js +14 -13
- package/dist/bin/backfill-conversations.js +16 -14
- package/dist/bin/backfill-responses.js +16 -14
- package/dist/bin/backfill-vectors.js +20 -18
- package/dist/bin/bulk-sync-postgres.js +27 -24
- package/dist/bin/cc-doctor.js +13 -11
- package/dist/bin/cleanup-stale-review-tasks.js +31 -28
- package/dist/bin/cli.js +157 -47
- package/dist/bin/customer-readiness.js +10 -1
- package/dist/bin/deferred-daemon-restart.js +127 -104
- package/dist/bin/exe-agent-config.js +9 -8
- package/dist/bin/exe-agent.js +17 -16
- package/dist/bin/exe-assign.js +18 -16
- package/dist/bin/exe-boot.js +62 -49
- package/dist/bin/exe-call.js +10 -9
- package/dist/bin/exe-cloud.js +29 -26
- package/dist/bin/exe-config-dump.js +9 -8
- package/dist/bin/exe-dispatch.js +31 -28
- package/dist/bin/exe-doctor.js +14 -10
- package/dist/bin/exe-export-behaviors.js +22 -14
- package/dist/bin/exe-forget.js +14 -13
- package/dist/bin/exe-gateway.js +13 -12
- package/dist/bin/exe-grant.js +6 -6
- package/dist/bin/exe-healthcheck.js +13 -11
- package/dist/bin/exe-heartbeat.js +33 -30
- package/dist/bin/exe-kill.js +36 -33
- package/dist/bin/exe-launch-agent.js +126 -44
- package/dist/bin/exe-mcp.js +165 -1
- package/dist/bin/exe-memory-reads.js +12 -11
- package/dist/bin/exe-new-employee.js +20 -17
- package/dist/bin/exe-os-mcp-proxy.js +9 -8
- package/dist/bin/exe-pending-messages.js +32 -29
- package/dist/bin/exe-pending-notifications.js +31 -28
- package/dist/bin/exe-pending-reviews.js +31 -28
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +10 -9
- package/dist/bin/exe-review.js +35 -32
- package/dist/bin/exe-search.js +13 -12
- package/dist/bin/exe-session-cleanup.js +36 -33
- package/dist/bin/exe-settings.js +28 -25
- package/dist/bin/exe-start-codex.js +27 -19
- package/dist/bin/exe-start-opencode.js +23 -15
- package/dist/bin/exe-start.sh +11 -7
- package/dist/bin/exe-status.js +32 -29
- package/dist/bin/exe-support.js +5 -4
- package/dist/bin/exe-team.js +9 -8
- package/dist/bin/exe-watchdog.js +115 -30
- package/dist/bin/git-sweep.js +32 -29
- package/dist/bin/graph-backfill.js +14 -13
- package/dist/bin/graph-export.js +13 -12
- package/dist/bin/import-history.js +16 -15
- package/dist/bin/install.js +392 -201
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +10 -9
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +31 -28
- package/dist/bin/setup.js +7 -4
- package/dist/bin/shard-migrate.js +13 -12
- package/dist/bin/stack-update.js +45 -14
- package/dist/bin/update.js +4 -3
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-4D3CTT7X.js → boot-generation-XABYKF5P.js} +9 -8
- package/dist/{boot-review-sections-NDFE5443.js → boot-review-sections-2X5TFIGU.js} +30 -27
- package/dist/{branch-hygiene-HNSOUDJE.js → branch-hygiene-Z4IBWAOX.js} +2 -1
- package/dist/{branding-6FHWZQYQ.js → branding-7MZDHTKN.js} +3 -2
- package/dist/build-manifest.json +1249 -1069
- package/dist/{capability-cards-OBB7BMMX.js → capability-cards-O5UXDOOA.js} +8 -7
- package/dist/{capacity-monitor-QLPEL6S5.js → capacity-monitor-IPXM726A.js} +32 -29
- package/dist/{catchup-brief-EN7QR6MP.js → catchup-brief-EBIGDXOK.js} +36 -33
- package/dist/{chunk-WRP5AG4D.js → chunk-23KWUA7Z.js} +2 -2
- package/dist/{chunk-PDRIIEFV.js → chunk-2FA4PYYX.js} +1 -1
- package/dist/chunk-2PRAXZWM.js +261 -0
- package/dist/{chunk-R6LNQAUG.js → chunk-327Q53AS.js} +34 -1
- package/dist/{chunk-MBULOZJF.js → chunk-32FEF5BW.js} +2 -2
- package/dist/{chunk-2YGAKBRG.js → chunk-35FD67ZB.js} +3 -3
- package/dist/{chunk-R62ITJDQ.js → chunk-3C7NE4JE.js} +1 -1
- package/dist/{chunk-YBX3G5OP.js → chunk-3ICF4IAZ.js} +1 -1
- package/dist/{chunk-CVTWQZOR.js → chunk-3L2QU5ZF.js} +14 -2
- package/dist/{chunk-I5AVZOL2.js → chunk-3YBJ36UX.js} +2 -2
- package/dist/{chunk-NKDKB2RT.js → chunk-465RCKVI.js} +6 -6
- package/dist/{chunk-QROIFRKI.js → chunk-4AFD4R35.js} +5 -5
- package/dist/{chunk-OSID72CN.js → chunk-4L33OFU4.js} +25 -1
- package/dist/{chunk-A6VIK3SS.js → chunk-4P2BFNSB.js} +2 -2
- package/dist/{chunk-SIGAQQHW.js → chunk-4R2WD6T3.js} +2 -2
- package/dist/{chunk-HPHF5VTT.js → chunk-4U56FZ7B.js} +4 -4
- package/dist/{chunk-2KLVTRY2.js → chunk-54USDN5Q.js} +1 -1
- package/dist/{chunk-CAEWPEBA.js → chunk-5C6ZIJ7J.js} +1 -1
- package/dist/{chunk-46RPEWTH.js → chunk-5H3RHWRE.js} +1 -1
- package/dist/chunk-5OPAUFLP.js +126 -0
- package/dist/{chunk-EHM4E62N.js → chunk-6DTALXOA.js} +1 -1
- package/dist/chunk-6EM6USV7.js +1332 -0
- package/dist/{chunk-JE34CB5H.js → chunk-6N3HUOV3.js} +2 -2
- package/dist/{chunk-6KREY2Q7.js → chunk-6QJXFLNN.js} +5 -5
- package/dist/{chunk-G37RG543.js → chunk-6UZDGEGQ.js} +1 -1
- package/dist/{chunk-APR556TY.js → chunk-6Y3KUO7Q.js} +190 -29
- package/dist/{chunk-2EAYZ3BK.js → chunk-7H3AZNQ7.js} +9 -9
- package/dist/{chunk-C5YZMYQH.js → chunk-7SY2NOMQ.js} +1 -1
- package/dist/{chunk-OAYTQ4RY.js → chunk-AL4HXKDJ.js} +55 -12
- package/dist/{chunk-VY5VU7SX.js → chunk-AOMFYUPT.js} +2 -2
- package/dist/{chunk-EX2SSLNU.js → chunk-AQO3BT3I.js} +12 -12
- package/dist/chunk-ARX6TAGN.js +102 -0
- package/dist/chunk-B6PFGUYJ.js +159 -0
- package/dist/{chunk-FASR2WLT.js → chunk-BDLRTLXY.js} +1 -1
- package/dist/chunk-BJEQBKGH.js +218 -0
- package/dist/{chunk-BCZF3AGJ.js → chunk-BRIZ6OZ3.js} +34 -44
- package/dist/{chunk-OMXJMOBD.js → chunk-BRZR76TS.js} +66 -0
- package/dist/{chunk-XV42EAVK.js → chunk-BT2PUK3S.js} +1 -1
- package/dist/{chunk-6EOLGE7T.js → chunk-CVYDJ2TW.js} +1 -1
- package/dist/{chunk-WCP4OQUL.js → chunk-CXQ724WH.js} +2 -2
- package/dist/{chunk-F3QTF4T7.js → chunk-CY5NVDTH.js} +3 -3
- package/dist/{chunk-3ODATKWH.js → chunk-D5CY4E7I.js} +1 -1
- package/dist/{chunk-W5YV2PZE.js → chunk-DKRDU2AX.js} +16 -16
- package/dist/{chunk-SNWV44E5.js → chunk-DSKEYEL2.js} +12 -5
- package/dist/{chunk-VXL7PJ56.js → chunk-E3YI6FVJ.js} +5 -24
- package/dist/{chunk-6SK4MM5B.js → chunk-E7PL3T2U.js} +1 -1
- package/dist/{chunk-IOEUAQWP.js → chunk-EEZOBN6X.js} +1 -1
- package/dist/{chunk-AHMUF6RO.js → chunk-G2M7WQ2M.js} +0 -2
- package/dist/{chunk-SKGMF2SO.js → chunk-GBNB4EWD.js} +22 -1
- package/dist/{chunk-UZ5RJYL3.js → chunk-HAXCUCJC.js} +1 -1
- package/dist/{chunk-VMR6M6GN.js → chunk-HISFWAAK.js} +1 -1
- package/dist/{chunk-DKRSKC5R.js → chunk-HKQ7UTSE.js} +1 -1
- package/dist/chunk-HLQ4MS42.js +257 -0
- package/dist/{chunk-EA5FVACM.js → chunk-HLU52KTO.js} +29 -18
- package/dist/{chunk-QWVXN224.js → chunk-HPXFKUGU.js} +350 -65
- package/dist/{chunk-2OVTGZYH.js → chunk-HSKABJE6.js} +46 -3
- package/dist/{chunk-NE57GONM.js → chunk-I3SF6QGV.js} +1 -1
- package/dist/chunk-J6KMGEJW.js +238 -0
- package/dist/chunk-JKKZGDLP.js +182 -0
- package/dist/{chunk-3ZEVMZ4G.js → chunk-JYKZVAS6.js} +1 -1
- package/dist/{chunk-4DYJ6NOK.js → chunk-KA4WVDLX.js} +2 -2
- package/dist/{chunk-QH2XAUZ5.js → chunk-KBI4FVBZ.js} +1 -1
- package/dist/{chunk-VAY6IXWY.js → chunk-KDMVVHZH.js} +1 -1
- package/dist/{chunk-4FQIWAXA.js → chunk-KID6T2A4.js} +10 -10
- package/dist/{chunk-HNPHPGGF.js → chunk-KIKB6FY3.js} +2 -2
- package/dist/{chunk-STFR72YH.js → chunk-LCDW2HUL.js} +1 -1
- package/dist/{chunk-RFUTLZ2U.js → chunk-LG37UBBE.js} +4 -4
- package/dist/{chunk-3QWOO74G.js → chunk-LLZNPOGB.js} +97 -3
- package/dist/chunk-M67ARGXY.js +175 -0
- package/dist/chunk-MPVXHYD5.js +85 -0
- package/dist/{chunk-RXL7A7JH.js → chunk-MZYNW5OY.js} +1 -1
- package/dist/{chunk-DQ75MEPU.js → chunk-MZZN5GFC.js} +1 -1
- package/dist/{chunk-X2F6Q7TW.js → chunk-NAHCSQWT.js} +1 -1
- package/dist/{chunk-AL7JMA54.js → chunk-NE4QI2GX.js} +2 -2
- package/dist/chunk-NGDXBN3M.js +254 -0
- package/dist/{chunk-HDSDXGLV.js → chunk-NO5KHKKB.js} +1 -1
- package/dist/chunk-NOKJCF27.js +437 -0
- package/dist/{chunk-PLOEFBFW.js → chunk-O32HTNRX.js} +3 -3
- package/dist/{chunk-UPM5JP6G.js → chunk-OZNCAMS3.js} +47 -4
- package/dist/{chunk-XLEYCOHX.js → chunk-P7CV4SHQ.js} +398 -58
- package/dist/{chunk-G2KK64UB.js → chunk-PDJWHL63.js} +101 -19
- package/dist/{chunk-W3XUU36X.js → chunk-PF7EQSE5.js} +5 -5
- package/dist/{chunk-QX7RWICL.js → chunk-PU7UYQRC.js} +1 -1
- package/dist/{chunk-A5WEEND7.js → chunk-PUMH7JSB.js} +3 -3
- package/dist/{chunk-POZGQQEZ.js → chunk-PV5BIXT6.js} +1 -1
- package/dist/{chunk-TG7JYSEA.js → chunk-Q2VQNAPU.js} +5 -2
- package/dist/{chunk-Z2PAVJJ4.js → chunk-Q7J2SQJ6.js} +127 -29
- package/dist/{chunk-4JERP7NT.js → chunk-QAEWWYHL.js} +29 -1
- package/dist/{chunk-6JTKIXLU.js → chunk-QCJT265O.js} +1 -1
- package/dist/{chunk-OY2PWHYR.js → chunk-QI25QRUP.js} +2 -2
- package/dist/chunk-QILQ5FCG.js +198 -0
- package/dist/{chunk-LRETL4I3.js → chunk-QJBX3MBV.js} +3 -3
- package/dist/{chunk-57GRYGDU.js → chunk-QP53XLC5.js} +1 -1
- package/dist/{chunk-JBAMYKBL.js → chunk-QQMYD4M7.js} +1 -1
- package/dist/{chunk-SHEWTDPC.js → chunk-QY3TM2T3.js} +4 -4
- package/dist/{chunk-WA2MJGPT.js → chunk-QYRI25IP.js} +3 -3
- package/dist/{chunk-QLFN3MUW.js → chunk-RCOIKTHM.js} +1 -1
- package/dist/{chunk-ITRKRKS7.js → chunk-RFKRCVGW.js} +1 -1
- package/dist/{chunk-HK7SQDKJ.js → chunk-RNSAVQEU.js} +2 -2
- package/dist/{chunk-44WFVMZ5.js → chunk-RUUX2ZST.js} +1 -1
- package/dist/{chunk-DWKH2H7W.js → chunk-RWKX2TK5.js} +1 -1
- package/dist/{chunk-MCNDZU5W.js → chunk-RYRNY6IF.js} +2 -2
- package/dist/{chunk-5I3YC7ER.js → chunk-SC6WDF3Q.js} +2 -2
- package/dist/chunk-SLBOKYYQ.js +197 -0
- package/dist/{chunk-74R44E4S.js → chunk-SQM4ZTL2.js} +246 -96
- package/dist/{chunk-KIXNMTGC.js → chunk-SRFRUN66.js} +5 -5
- package/dist/chunk-SXKIGBNF.js +61 -0
- package/dist/chunk-T2RZU7JA.js +2607 -0
- package/dist/{chunk-2I23RPSI.js → chunk-TKDITWDN.js} +9 -0
- package/dist/{chunk-5UAMBMNR.js → chunk-TN2E6ZCM.js} +44 -34
- package/dist/{chunk-SQBNN44X.js → chunk-TP7RXGMP.js} +49 -15
- package/dist/{chunk-GSVQBBE5.js → chunk-TY4JLBFO.js} +2 -2
- package/dist/{chunk-7QRMFYOV.js → chunk-UHPMK6QZ.js} +17 -3
- package/dist/{chunk-LPKTGK7L.js → chunk-UO5QJ2RX.js} +4 -4
- package/dist/{chunk-VCCZQDCU.js → chunk-URNVIZXU.js} +3 -3
- package/dist/{chunk-OIS5VIAH.js → chunk-UWEFIIEG.js} +6 -2
- package/dist/{chunk-IQWAYXVF.js → chunk-V5I5N7NC.js} +3 -3
- package/dist/{chunk-GD7VXXW6.js → chunk-V6YLIDLK.js} +801 -180
- package/dist/chunk-VAOUB2TK.js +23 -0
- package/dist/{chunk-XVTKJEI2.js → chunk-VDMFVUSY.js} +3 -3
- package/dist/{chunk-RJ67HG2P.js → chunk-VWTUKKUF.js} +4 -4
- package/dist/{chunk-4WSUP4CC.js → chunk-W3LKIQJ2.js} +43 -17
- package/dist/{chunk-EUQF3JOH.js → chunk-WBG7XYVR.js} +1 -1
- package/dist/{chunk-YKRNH5LU.js → chunk-WH2VVEGD.js} +1 -1
- package/dist/{chunk-NP2Y7P3I.js → chunk-WP2TGH5R.js} +1 -1
- package/dist/chunk-WT4RI36X.js +23 -0
- package/dist/{chunk-LXG37RB2.js → chunk-XJIRUTGJ.js} +1 -1
- package/dist/chunk-XRCX6R5S.js +57 -0
- package/dist/{chunk-XWWNRFRF.js → chunk-XSYQ5EPE.js} +11 -11
- package/dist/{chunk-HKK7LLS5.js → chunk-XTGR3LMF.js} +34 -3
- package/dist/{chunk-HLEZ5O5P.js → chunk-XUB4GFPN.js} +17 -15
- package/dist/chunk-YZUHSV24.js +277 -0
- package/dist/{chunk-6WHYSLGF.js → chunk-Z67DIJKT.js} +1 -1
- package/dist/{chunk-6LY3QSJA.js → chunk-ZI3HA3XW.js} +11 -6
- package/dist/{chunk-YEOIPUFO.js → chunk-ZR4CQBAP.js} +1 -1
- package/dist/{chunk-VNK3MNZE.js → chunk-ZZEKOI2M.js} +1 -1
- package/dist/{cleanup-graph-garbage-XFGY4EEE.js → cleanup-graph-garbage-6F22Y5SD.js} +13 -12
- package/dist/{cloud-sync-shutdown-XCOATIJW.js → cloud-sync-shutdown-FWERMZB5.js} +8 -7
- package/dist/{co-activation-XNBLOGK3.js → co-activation-UEEDCM5U.js} +8 -7
- package/dist/{co-occurrence-HO4PGQC4.js → co-occurrence-W6OPFRSY.js} +11 -10
- package/dist/{code-context-index-5RY66SWZ.js → code-context-index-DWR6HS35.js} +7 -5
- package/dist/consent-passphrase-Z64GFJXK.js +23 -0
- package/dist/{conversation-entity-extractor-5G5DGRJU.js → conversation-entity-extractor-LWUIH3UB.js} +3 -3
- package/dist/{conversation-wiki-populator-RZKG6PK4.js → conversation-wiki-populator-5EGRW2UZ.js} +1 -1
- package/dist/{crdt-sync-6TD7LSZW.js → crdt-sync-NHJX3ZJD.js} +5 -4
- package/dist/{crm-webhook-WZAV5776.js → crm-webhook-OY467ATC.js} +2 -2
- package/dist/{cto-delegation-gate-UHMYFM4D.js → cto-delegation-gate-XH4YSQVC.js} +30 -27
- package/dist/{daemon-auth-SXZHLUYS.js → daemon-auth-OCHW2U6B.js} +3 -2
- package/dist/{daemon-orchestration-DT5M2ZAR.js → daemon-orchestration-7425ZVNH.js} +35 -32
- package/dist/{daemon-ready-56VAPZU6.js → daemon-ready-VGPSRI3Z.js} +1 -1
- package/dist/{daemon-restart-circuit-breaker-5V6B6NLS.js → daemon-restart-circuit-breaker-SMTWFX27.js} +25 -3
- package/dist/db-backend-ODVJ3Q3D.js +7 -0
- package/dist/{db-restore-events-ZLD2HRQV.js → db-restore-events-TFCZ4CPM.js} +2 -1
- package/dist/{doc-graph-extractor-FNCYPFKY.js → doc-graph-extractor-RR2VSO4W.js} +11 -10
- package/dist/{documents-GKDZDUED.js → documents-TRZ4R2ZW.js} +18 -16
- package/dist/dreaming-MAMZAPYW.js +63 -0
- package/dist/{exe-drift-QTKD2FHT.js → exe-drift-VBWB5E6S.js} +9 -8
- package/dist/{exe-export-ESJ6KP6J.js → exe-export-XJJTVVT7.js} +21 -13
- package/dist/{exe-import-N4X3GEQB.js → exe-import-G6O7JFNZ.js} +21 -13
- package/dist/{exe-key-KZCCHX3W.js → exe-key-A2WJLLTM.js} +116 -99
- package/dist/exe-org-HXF4XBB3.js +672 -0
- package/dist/{exe-snapshot-SCRPHCPZ.js → exe-snapshot-TL3TLKLR.js} +38 -33
- package/dist/{fast-db-init-6H67K76Q.js → fast-db-init-SO2XUQ7T.js} +1 -1
- package/dist/{founder-context-C7X7IRDA.js → founder-context-IOCADC66.js} +4 -3
- package/dist/{founder-monitor-envelope-DHSUMBWU.js → founder-monitor-envelope-SMILO4BT.js} +7 -5
- package/dist/gateway/index.js +23 -22
- package/dist/{gateway-client-7LMZKHTH.js → gateway-client-JA2BH7QO.js} +1 -1
- package/dist/{git-staleness-JCKVMWPO.js → git-staleness-I6WT7EXV.js} +8 -7
- package/dist/{global-procedures-BR7WGSE7.js → global-procedures-3RMO6C3C.js} +9 -8
- package/dist/{graph-auto-extract-EOXWQRBZ.js → graph-auto-extract-NKTYPD2I.js} +11 -10
- package/dist/{graph-rag-5FVC5JXH.js → graph-rag-EOGPZOYI.js} +3 -3
- package/dist/{hook-integrity-TYGDD7OE.js → hook-integrity-RTBF2BL2.js} +1 -1
- package/dist/{hook-prefetch-2CN3MK4H.js → hook-prefetch-V5KCGW2N.js} +31 -28
- package/dist/hooks/bug-report-worker.js +35 -32
- package/dist/hooks/codex-stop-task-finalizer.js +36 -33
- package/dist/hooks/commit-complete.js +34 -31
- package/dist/hooks/error-recall.js +16 -15
- package/dist/hooks/exe-heartbeat-hook.js +10 -9
- package/dist/hooks/ingest-worker.js +12 -10
- package/dist/hooks/ingest.js +19 -18
- package/dist/hooks/instructions-loaded.js +11 -10
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +11 -10
- package/dist/hooks/post-compact.js +11 -115
- package/dist/hooks/post-tool-combined.js +11 -11
- package/dist/hooks/pre-compact.js +38 -64
- package/dist/hooks/pre-tool-use.js +95 -36
- package/dist/hooks/prompt-submit.js +50 -47
- package/dist/hooks/session-end.js +39 -36
- package/dist/hooks/session-start.js +64 -18
- package/dist/hooks/stop.js +40 -37
- package/dist/hooks/subagent-stop.js +35 -32
- package/dist/hooks/summary-worker.js +41 -38
- package/dist/index.js +45 -42
- package/dist/inrun-inbox-DRKVDPLY.js +29 -0
- package/dist/{installer-VPNTM3X6.js → installer-G67M3DME.js} +11 -10
- package/dist/{installer-YDLSXGD2.js → installer-L3ZKMOPU.js} +11 -10
- package/dist/{installer-7UV3CNWZ.js → installer-QBWZSYDG.js} +11 -10
- package/dist/{intercom-queue-KHKJJYCQ.js → intercom-queue-R5LSXD3V.js} +30 -27
- package/dist/{key-backup-status-YMS7YGWO.js → key-backup-status-3RC6XTUX.js} +2 -1
- package/dist/lib/agent-config.js +3 -2
- package/dist/lib/cloud-sync.js +27 -24
- package/dist/lib/config.js +6 -1
- package/dist/lib/consolidation.js +14 -13
- package/dist/lib/crypto.js +4 -3
- package/dist/lib/database.js +8 -7
- package/dist/lib/db-backup.js +4 -3
- package/dist/lib/db-checkpoint-worker.js +1 -1
- package/dist/lib/db-daemon-client.js +7 -5
- package/dist/lib/db-read-worker-client.js +1 -1
- package/dist/lib/db-read-worker.js +1 -1
- package/dist/lib/db-write-worker-client.js +4 -2
- package/dist/lib/db-write-worker.js +21 -3
- package/dist/lib/db.js +8 -7
- package/dist/lib/device-registry.js +3 -2
- package/dist/lib/embed-worker.js +2 -1
- package/dist/lib/embedder.js +7 -5
- package/dist/lib/employee-templates.js +10 -9
- package/dist/lib/employees.js +8 -7
- package/dist/lib/error-detector.js +1 -1
- package/dist/lib/exe-daemon-client.js +16 -6
- package/dist/lib/exe-daemon.js +342 -168
- package/dist/lib/hybrid-search.js +13 -12
- package/dist/lib/identity-templates.js +3 -1
- package/dist/lib/identity.js +8 -7
- package/dist/lib/keychain.js +41 -3
- package/dist/lib/license.js +12 -3
- package/dist/lib/messaging.js +31 -28
- package/dist/lib/platform-support.js +25 -0
- package/dist/lib/post-tool-memory.js +6 -4
- package/dist/lib/preflight.js +29 -0
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +9 -8
- package/dist/lib/schedules.js +13 -12
- package/dist/lib/session-registry.js +10 -9
- package/dist/lib/session-wrappers.js +7 -3
- package/dist/lib/skill-learning.js +21 -13
- package/dist/lib/status-brief.js +8 -3
- package/dist/lib/store.js +12 -11
- package/dist/lib/task-router.js +9 -8
- package/dist/lib/tasks.js +32 -29
- package/dist/lib/tmux-routing.js +45 -29
- package/dist/lib/tmux-status.js +7 -3
- package/dist/lib/token-spend.js +9 -8
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-YXUSNA2I.js → license-gate-6R3F3NQR.js} +5 -4
- package/dist/{license-sync-XFDOXL3Z.js → license-sync-VBJCXBAP.js} +4 -3
- package/dist/linux-systemd-LRW3BYSS.js +38 -0
- package/dist/mailbox-inbox-CP2VRBXZ.js +10 -0
- package/dist/mailbox-outbox-HXI7DYNC.js +19 -0
- package/dist/mcp/register-tools.js +110 -94
- package/dist/mcp/server.js +113 -97
- package/dist/mcp/tools/complete-reminder.js +10 -9
- package/dist/mcp/tools/create-reminder.js +10 -9
- package/dist/mcp/tools/create-task.js +38 -31
- package/dist/mcp/tools/deactivate-behavior.js +22 -14
- package/dist/mcp/tools/list-reminders.js +10 -9
- package/dist/mcp/tools/list-tasks.js +34 -31
- package/dist/mcp/tools/send-message.js +33 -30
- package/dist/mcp/tools/update-task.js +33 -30
- package/dist/{mcp-http-config-HIP5CEDV.js → mcp-http-config-BWX7AMAZ.js} +9 -8
- package/dist/{mcp-session-identity-RTNZ2ZLW.js → mcp-session-identity-GOBGICLI.js} +30 -27
- package/dist/{memory-cards-KG4TPNKK.js → memory-cards-4EXX3BQS.js} +12 -11
- package/dist/{memory-graph-extractor-6HTBLO2N.js → memory-graph-extractor-OYVZIJ3R.js} +12 -11
- package/dist/{memory-poisoning-defense-3ZT57RSJ.js → memory-poisoning-defense-AHOD2EBX.js} +8 -7
- package/dist/{memory-pressure-watchdog-ZOZBIMKC.js → memory-pressure-watchdog-COJC3OYS.js} +31 -28
- package/dist/{memory-queue-W54BYW7V.js → memory-queue-4VN3DTOE.js} +3 -2
- package/dist/memory-queue-client-OI4LDT4W.js +18 -0
- package/dist/{memory-reflection-EQC4FXSW.js → memory-reflection-V2SNAUIB.js} +8 -7
- package/dist/{monitor-grants-BDLVFVDR.js → monitor-grants-W3ISOLMC.js} +6 -4
- package/dist/{monitor-identity-GLFZSEAH.js → monitor-identity-AN3B5QIN.js} +3 -2
- package/dist/{notification-ledger-NZ4HO3M5.js → notification-ledger-J6Q2GAYU.js} +117 -53
- package/dist/{notifications-74YECZ4V.js → notifications-56TP36IK.js} +30 -27
- package/dist/{orchestration-events-KRQI4ED5.js → orchestration-events-CKQ756NA.js} +9 -8
- package/dist/{orchestration-phase-KVF42ZKU.js → orchestration-phase-ZJ4XVNFO.js} +3 -2
- package/dist/orchestrator-ERSQ3KNT.js +55 -0
- package/dist/org-brief-session-FSZ3QJDN.js +45 -0
- package/dist/org-consent-policy-BN7MKCZ2.js +68 -0
- package/dist/org-join-HTQ57JYH.js +35 -0
- package/dist/org-key-admin-4W6LZ5KZ.js +242 -0
- package/dist/org-key-pin-OTOKAELD.js +37 -0
- package/dist/{org-membership-B32NS5NI.js → org-membership-SML6GCHP.js} +11 -7
- package/dist/org-partner-config-XQGOB7EJ.js +25 -0
- package/dist/org-partner-runtime-RNNUL5IN.js +44 -0
- package/dist/org-row-visibility-JZFJ3YRJ.js +18 -0
- package/dist/{pipeline-router-6ZZV7JMA.js → pipeline-router-IUENNTAY.js} +9 -8
- package/dist/{plan-limits-B7AZKZ6U.js → plan-limits-ZUII366B.js} +11 -10
- package/dist/postinstall-failure-A7WTAXD6.js +20 -0
- package/dist/{project-boot-WEQSKDD7.js → project-boot-3DFY5F35.js} +7 -2
- package/dist/{projection-worker-LRFFQ6JB.js → projection-worker-MBWUPB5O.js} +5 -4
- package/dist/{prospective-memory-A4GDTIWG.js → prospective-memory-GHE5ORN4.js} +8 -7
- package/dist/push-notifications-PTQ5DHCD.js +60 -0
- package/dist/{reranker-YVTLJCFC.js → reranker-NUIGAPA3.js} +3 -2
- package/dist/{retrieval-health-PK2ODTXM.js → retrieval-health-XHCERQPG.js} +1 -1
- package/dist/{review-polling-JFWRNQF6.js → review-polling-CYBCBHZA.js} +31 -28
- package/dist/runtime/index.js +41 -38
- package/dist/{session-events-VMQBCUH3.js → session-events-X33W4JNA.js} +31 -28
- package/dist/{session-kill-telemetry-Z3W256T5.js → session-kill-telemetry-I2F5PUIW.js} +31 -28
- package/dist/session-lineage-AGOHSXIS.js +66 -0
- package/dist/{session-scope-2ADEVY3C.js → session-scope-WXP4F7OF.js} +30 -27
- package/dist/setup-wizard-2CTVITIX.js +35 -0
- package/dist/{shard-manager-DFLCDZT5.js → shard-manager-YEOHEOHL.js} +4 -3
- package/dist/{skill-refinement-APBYOSGX.js → skill-refinement-VDR5OT4V.js} +9 -8
- package/dist/{stack-promote-SZYIPTFT.js → stack-promote-XVC7FRJW.js} +6 -5
- package/dist/{stack-release-EYRDEGPD.js → stack-release-6PWAACRM.js} +101 -80
- package/dist/{stack-update-YWK2YXP6.js → stack-update-24VRBQ3U.js} +9 -4
- package/dist/{steward-gate-CIOBPNX6.js → steward-gate-2ZNYDVFO.js} +9 -8
- package/dist/{support-inbox-OAWGFRKW.js → support-inbox-ZHKLDETT.js} +5 -4
- package/dist/{task-enforcement-YAU6ZGDC.js → task-enforcement-GQDUTIFY.js} +37 -28
- package/dist/task-request-inbox-BFXNUU44.js +64 -0
- package/dist/{task-scope-44N7XP5N.js → task-scope-ERHPHLUM.js} +30 -27
- package/dist/{tasks-crud-IWVDREXG.js → tasks-crud-NVNF3NRA.js} +30 -27
- package/dist/tasks-notify-DXLU5VCT.js +60 -0
- package/dist/{tasks-review-VDFWFETP.js → tasks-review-BST6N34P.js} +30 -27
- package/dist/{telemetry-upload-3X5ESEKM.js → telemetry-upload-NY3EKOGY.js} +13 -12
- package/dist/{token-budget-WZGO22ME.js → token-budget-CLB3GUIX.js} +9 -8
- package/dist/{tool-capability-index-IFNZ6QUS.js → tool-capability-index-WZWVBI2R.js} +1 -1
- package/dist/{tool-telemetry-F7RWUNVK.js → tool-telemetry-PALAZUXT.js} +1 -1
- package/dist/tui/App.js +44 -41
- package/dist/{tui-data-KT7YGVQS.js → tui-data-CNFSRZP7.js} +30 -27
- package/dist/{typed-messages-TKDGVPHS.js → typed-messages-RCMPEKJN.js} +1 -1
- package/dist/{update-support-ZVRMECNQ.js → update-support-ZVB3CNGY.js} +24 -22
- package/dist/{work-state-heartbeat-CA4CN7DQ.js → work-state-heartbeat-O7UMB6SE.js} +1 -1
- package/dist/{worker-gate-52MVKYGZ.js → worker-gate-6DQQWDNB.js} +3 -2
- package/dist/{workflow-engine-ZAFBPVUP.js → workflow-engine-5ZULFH7O.js} +2 -2
- package/dist/{worktree-NNVXVV6A.js → worktree-ZWA35PKW.js} +10 -9
- package/dist/{worktree-sweep-IM2ZQG6Z.js → worktree-sweep-5LCVT46V.js} +11 -10
- package/package.json +8 -20
- package/postinstall.mjs +124 -0
- package/release-notes.json +18 -16
- package/stack.release.schema.json +4 -0
- package/dist/chunk-AFNRE2RV.js +0 -408
- package/dist/chunk-OSKWCKUC.js +0 -6
- package/dist/chunk-S3FIQCSM.js +0 -232
- package/dist/chunk-W6UB2AWP.js +0 -656
- package/dist/dreaming-WPMQJAXW.js +0 -60
- package/dist/exe-org-UK77DUU4.js +0 -73
- package/dist/memory-queue-client-RRNW2IFZ.js +0 -16
- package/dist/orchestrator-WV2YCHTK.js +0 -52
- package/dist/push-notifications-GOFTDDWW.js +0 -15
- package/dist/setup-wizard-26B36FMC.js +0 -14
- package/dist/tasks-notify-WK5HA77D.js +0 -57
- /package/dist/{chunk-YL2JH3XV.js → chunk-6C4UAKMS.js} +0 -0
- /package/dist/{chunk-YMCIZCNK.js → chunk-BN26LSME.js} +0 -0
- /package/dist/{chunk-WTH4CSAP.js → chunk-DFQEUZSI.js} +0 -0
- /package/dist/{chunk-FVWI2AR4.js → chunk-FIPUVCKC.js} +0 -0
- /package/dist/{chunk-ZMYXQU4L.js → chunk-L4LPJMPV.js} +0 -0
- /package/dist/{chunk-COHHVCFA.js → chunk-UELGUVNL.js} +0 -0
- /package/dist/{chunk-U7RZIY74.js → chunk-X7LY3IOB.js} +0 -0
- /package/dist/{chunk-BGYCUZYK.js → chunk-YAZ5ECEG.js} +0 -0
- /package/dist/{chunk-DSGFX3RT.js → chunk-YWN3XMPU.js} +0 -0
- /package/dist/{chunk-YMUZWC33.js → chunk-YYB5PMTK.js} +0 -0
- /package/dist/{core-memory-AATZRQEY.js → core-memory-BZFPVS43.js} +0 -0
- /package/dist/{entity-boost-HLFG2CH3.js → entity-boost-VXXED26D.js} +0 -0
- /package/dist/{memory-isolation-CF6FYSXD.js → memory-isolation-3PIOWLYP.js} +0 -0
- /package/dist/{message-queue-client-AX6KQK7T.js → message-queue-client-5XW7ZOK2.js} +0 -0
- /package/dist/{oauth-server-VE5ELXTF.js → oauth-server-KW5M437C.js} +0 -0
- /package/dist/{webhook-pipe-A4X4SCMW.js → webhook-pipe-QJRFZVKA.js} +0 -0
- /package/dist/{wiki-acl-GNIXYWHJ.js → wiki-acl-RXFV5OEU.js} +0 -0
- /package/dist/{wiki-client-7RRYRSPS.js → wiki-client-57QWZIHQ.js} +0 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureAgentSymlink
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5C6ZIJ7J.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveRowVisibility
|
|
6
|
+
} from "./chunk-SXKIGBNF.js";
|
|
4
7
|
import {
|
|
5
8
|
ensureWorktree,
|
|
6
9
|
ensureWorktreeAsync,
|
|
@@ -8,14 +11,13 @@ import {
|
|
|
8
11
|
getMainRepoRoot,
|
|
9
12
|
isInsideGitRepo,
|
|
10
13
|
isWorktreeDirty
|
|
11
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BT2PUK3S.js";
|
|
12
15
|
import {
|
|
13
|
-
|
|
14
|
-
} from "./chunk-
|
|
16
|
+
runBudgetedSweep
|
|
17
|
+
} from "./chunk-KI5PFRG6.js";
|
|
15
18
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} from "./chunk-EIKATSE4.js";
|
|
19
|
+
incrementSkillSuccess
|
|
20
|
+
} from "./chunk-Z67DIJKT.js";
|
|
19
21
|
import {
|
|
20
22
|
LEASE_MINUTES,
|
|
21
23
|
isLeaseExpired,
|
|
@@ -24,20 +26,24 @@ import {
|
|
|
24
26
|
import {
|
|
25
27
|
buildTaskResult,
|
|
26
28
|
serializeMessage
|
|
27
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-QAEWWYHL.js";
|
|
30
|
+
import {
|
|
31
|
+
reviewSignalPath,
|
|
32
|
+
taskSignalDir
|
|
33
|
+
} from "./chunk-EIKATSE4.js";
|
|
28
34
|
import {
|
|
29
35
|
listSessions,
|
|
30
36
|
registerSession
|
|
31
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-D5CY4E7I.js";
|
|
32
38
|
import {
|
|
33
39
|
getTransport
|
|
34
40
|
} from "./chunk-UXLO7VHX.js";
|
|
35
41
|
import {
|
|
36
42
|
listTmuxSessions
|
|
37
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-GBNB4EWD.js";
|
|
38
44
|
import {
|
|
39
45
|
recordOrchestrationEventBestEffort
|
|
40
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-PV5BIXT6.js";
|
|
41
47
|
import {
|
|
42
48
|
appendDispatchJournalEvent,
|
|
43
49
|
releaseDispatchClaim,
|
|
@@ -49,23 +55,17 @@ import {
|
|
|
49
55
|
getAgentRuntime,
|
|
50
56
|
normalizeCcModelName,
|
|
51
57
|
resolveSpawnRuntimeConfig
|
|
52
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-KDMVVHZH.js";
|
|
53
59
|
import {
|
|
54
60
|
PlanLimitError,
|
|
55
61
|
assertEmployeeLimitSync
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import {
|
|
58
|
-
BUSY_PATTERN
|
|
59
|
-
} from "./chunk-OSKWCKUC.js";
|
|
60
|
-
import {
|
|
61
|
-
runBudgetedSweep
|
|
62
|
-
} from "./chunk-KI5PFRG6.js";
|
|
62
|
+
} from "./chunk-CY5NVDTH.js";
|
|
63
63
|
import {
|
|
64
64
|
getSessionKey
|
|
65
65
|
} from "./chunk-CVYC6DUW.js";
|
|
66
66
|
import {
|
|
67
67
|
writeMemoryViaDaemon
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-4P2BFNSB.js";
|
|
69
69
|
import {
|
|
70
70
|
getProjectName
|
|
71
71
|
} from "./chunk-OPU3NYOO.js";
|
|
@@ -89,16 +89,16 @@ import {
|
|
|
89
89
|
loadEmployeesSync,
|
|
90
90
|
offloadReadIfMain,
|
|
91
91
|
offloadReadQuery
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-HLU52KTO.js";
|
|
93
93
|
import {
|
|
94
94
|
RUNTIME_TABLE
|
|
95
95
|
} from "./chunk-WNBZJSQT.js";
|
|
96
96
|
import {
|
|
97
97
|
loadDeviceId
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-HSKABJE6.js";
|
|
99
99
|
import {
|
|
100
100
|
EXE_AI_DIR
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-BRIZ6OZ3.js";
|
|
102
102
|
import {
|
|
103
103
|
atomicWriteJsonSync,
|
|
104
104
|
atomicWriteSync
|
|
@@ -1302,7 +1302,7 @@ function checkLaneAffinity(title, context, assigneeName, employees = loadEmploye
|
|
|
1302
1302
|
const expectedRoles = Array.from(matchedRoles).join(" or ");
|
|
1303
1303
|
return `\u26A0\uFE0F Lane mismatch: task content suggests ${expectedRoles}, but assigned to ${assigneeName} (${assigneeRole}).`;
|
|
1304
1304
|
}
|
|
1305
|
-
async function resolveTask(client, identifier, scopeSession) {
|
|
1305
|
+
async function resolveTask(client, identifier, scopeSession, intent = "mutate") {
|
|
1306
1306
|
const scope = sessionScopeFilter(scopeSession);
|
|
1307
1307
|
const currentScope = typeof scope.args[0] === "string" ? String(scope.args[0]) : null;
|
|
1308
1308
|
const crossSessionError = (rows) => {
|
|
@@ -1317,6 +1317,11 @@ async function resolveTask(client, identifier, scopeSession) {
|
|
|
1317
1317
|
});
|
|
1318
1318
|
if (crossSessionRows.length === 0) return null;
|
|
1319
1319
|
const matches = crossSessionRows.slice(0, 5).map((row) => `${String(row.id).slice(0, 8)} "${String(row.title)}" [session:${String(row.session_scope)}]`).join(", ");
|
|
1320
|
+
if (intent === "read") {
|
|
1321
|
+
return new Error(
|
|
1322
|
+
`Cross-session task not in current session: "${identifier}" belongs to another coordinator session. Current session: ${currentScope}. Matching task(s): ${matches}. Use task(action="list", cross_session=true) for read-only diagnostics, or switch to the owning session to view it.`
|
|
1323
|
+
);
|
|
1324
|
+
}
|
|
1320
1325
|
return new Error(
|
|
1321
1326
|
`Cross-session task mutation blocked: "${identifier}" belongs to another coordinator session. Current session: ${currentScope}. Matching task(s): ${matches}. Use task(action="list", cross_session=true) for read-only diagnostics, or switch to the owning session to update/close.`
|
|
1322
1327
|
);
|
|
@@ -1471,6 +1476,7 @@ async function createTaskCore(input) {
|
|
|
1471
1476
|
const id = crypto2.randomUUID();
|
|
1472
1477
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
1473
1478
|
const slug = slugify(input.title);
|
|
1479
|
+
const rowVisibility = resolveRowVisibility(input.orgOrigin);
|
|
1474
1480
|
if (input.callerIsSidechain || input.assignedBy.startsWith("subagent:")) {
|
|
1475
1481
|
throw new Error(
|
|
1476
1482
|
`${TASK_SIDECHAIN_WRITE_BLOCKED_PREFIX}: sidechain contexts cannot create parent task rows. Report findings back to the owning session; the parent creates or updates tasks.`
|
|
@@ -1515,7 +1521,7 @@ async function createTaskCore(input) {
|
|
|
1515
1521
|
if (isCoordinatorSession) {
|
|
1516
1522
|
earlySessionScope = resolved;
|
|
1517
1523
|
} else {
|
|
1518
|
-
const { getSessionProject } = await import("./session-scope-
|
|
1524
|
+
const { getSessionProject } = await import("./session-scope-WXP4F7OF.js");
|
|
1519
1525
|
const sessionProject = getSessionProject(resolved);
|
|
1520
1526
|
if (sessionProject && sessionProject !== input.projectName) {
|
|
1521
1527
|
scopeMismatchWarning = `session/project mismatch: session "${resolved}" owns "${sessionProject}" but task targets "${input.projectName}". Routed to default scope.`;
|
|
@@ -1612,8 +1618,8 @@ ${scopeMismatchWarning}` : scopeMismatchWarning;
|
|
|
1612
1618
|
).digest("hex") : null;
|
|
1613
1619
|
try {
|
|
1614
1620
|
const res = await client.execute({
|
|
1615
|
-
sql: `INSERT INTO tasks (id, title, assigned_to, assigned_by, project_name, priority, status, task_file, blocked_by, parent_task_id, reviewer, context, complexity, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at, session_scope, spawn_runtime, spawn_model, device_id, founder_id, idempotency_key, created_at, updated_at)
|
|
1616
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1621
|
+
sql: `INSERT INTO tasks (id, title, assigned_to, assigned_by, project_name, priority, status, task_file, blocked_by, parent_task_id, reviewer, context, complexity, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at, session_scope, spawn_runtime, spawn_model, device_id, founder_id, idempotency_key, visibility, origin_org_id, created_at, updated_at)
|
|
1622
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1617
1623
|
ON CONFLICT(idempotency_key) WHERE idempotency_key IS NOT NULL DO NOTHING
|
|
1618
1624
|
RETURNING id`,
|
|
1619
1625
|
args: [
|
|
@@ -1640,6 +1646,13 @@ ${scopeMismatchWarning}` : scopeMismatchWarning;
|
|
|
1640
1646
|
loadDeviceId(),
|
|
1641
1647
|
input.founderId ?? null,
|
|
1642
1648
|
idempotencyKey,
|
|
1649
|
+
// §4.1 (B7). `rowVisibility` is 'private' for every write that carries
|
|
1650
|
+
// no org-origin stamp — i.e. every write in the product except an
|
|
1651
|
+
// accepted org task_request. It is resolved ONCE, above, and written
|
|
1652
|
+
// explicitly rather than left to the column default so the value in the
|
|
1653
|
+
// row is the value this code decided.
|
|
1654
|
+
rowVisibility.visibility,
|
|
1655
|
+
rowVisibility.originOrgId,
|
|
1643
1656
|
now,
|
|
1644
1657
|
now
|
|
1645
1658
|
]
|
|
@@ -1812,7 +1825,7 @@ async function buildTaskRowsStatement(opts) {
|
|
|
1812
1825
|
}
|
|
1813
1826
|
if (opts.founderId !== null) {
|
|
1814
1827
|
try {
|
|
1815
|
-
const { founderScopeFilter } = await import("./founder-context-
|
|
1828
|
+
const { founderScopeFilter } = await import("./founder-context-IOCADC66.js");
|
|
1816
1829
|
const founderFilter = founderScopeFilter(opts.founderId);
|
|
1817
1830
|
const cleaned = founderFilter.sql.replace(/^\s*AND\s+/, "");
|
|
1818
1831
|
conditions.push(cleaned);
|
|
@@ -3545,7 +3558,7 @@ async function getGroupResults(groupId) {
|
|
|
3545
3558
|
}));
|
|
3546
3559
|
}
|
|
3547
3560
|
async function getAggregatedGroupResults(groupId) {
|
|
3548
|
-
const { parseMessage, isTypedMessage } = await import("./typed-messages-
|
|
3561
|
+
const { parseMessage, isTypedMessage } = await import("./typed-messages-RCMPEKJN.js");
|
|
3549
3562
|
const client = getClient();
|
|
3550
3563
|
const groupCheck = await client.execute({
|
|
3551
3564
|
sql: "SELECT id FROM task_groups WHERE id = ?",
|
|
@@ -4498,6 +4511,9 @@ function sanitizeSessionScope(scope) {
|
|
|
4498
4511
|
return isValidSessionScope(scope) ? scope : null;
|
|
4499
4512
|
}
|
|
4500
4513
|
|
|
4514
|
+
// src/lib/session-busy-pattern.ts
|
|
4515
|
+
var BUSY_PATTERN = /[✻✽✶✳].*…|Running…|• Working|• Ran |• Explored|• Called|esc to interrupt|Waiting for \d+ background agents?/i;
|
|
4516
|
+
|
|
4501
4517
|
// src/lib/tmux-routing.ts
|
|
4502
4518
|
var _cachedExeBinDir;
|
|
4503
4519
|
function resolveExeBinDir() {
|
|
@@ -5144,7 +5160,7 @@ async function verifyPaneAtCapacity(sessionName) {
|
|
|
5144
5160
|
reason: `capture-pane failed: ${err instanceof Error ? err.message : String(err)}`
|
|
5145
5161
|
};
|
|
5146
5162
|
}
|
|
5147
|
-
const { isAtCapacity } = await import("./capacity-monitor-
|
|
5163
|
+
const { isAtCapacity } = await import("./capacity-monitor-IPXM726A.js");
|
|
5148
5164
|
if (!isAtCapacity(pane)) {
|
|
5149
5165
|
return {
|
|
5150
5166
|
atCapacity: false,
|
|
@@ -5378,7 +5394,7 @@ async function countScopedPendingReviews(targetSession, reviewer) {
|
|
|
5378
5394
|
}
|
|
5379
5395
|
async function countScopedOpenTasks(targetSession, agentId) {
|
|
5380
5396
|
try {
|
|
5381
|
-
const { fastDbInit } = await import("./fast-db-init-
|
|
5397
|
+
const { fastDbInit } = await import("./fast-db-init-SO2XUQ7T.js");
|
|
5382
5398
|
const client = await fastDbInit();
|
|
5383
5399
|
const scope = extractRootExe(targetSession);
|
|
5384
5400
|
if (!scope) return 0;
|
|
@@ -5433,7 +5449,7 @@ function buildScopedInProgressTaskQuery(targetSession) {
|
|
|
5433
5449
|
async function findScopedInProgressTaskId(targetSession) {
|
|
5434
5450
|
const q = buildScopedInProgressTaskQuery(targetSession);
|
|
5435
5451
|
if (!q) return null;
|
|
5436
|
-
const { fastDbInit } = await import("./fast-db-init-
|
|
5452
|
+
const { fastDbInit } = await import("./fast-db-init-SO2XUQ7T.js");
|
|
5437
5453
|
const client = await fastDbInit();
|
|
5438
5454
|
const result = await client.execute(q);
|
|
5439
5455
|
const id = result.rows[0]?.id;
|
|
@@ -5551,9 +5567,10 @@ function sendIntercom(targetSession, opts) {
|
|
|
5551
5567
|
}
|
|
5552
5568
|
} catch {
|
|
5553
5569
|
}
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5570
|
+
const ledgerEnv = (process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase();
|
|
5571
|
+
if (ledgerEnv === "shadow" || ledgerEnv === "on") {
|
|
5572
|
+
const ledgerScope = opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0;
|
|
5573
|
+
void import("./notification-ledger-J6Q2GAYU.js").then((m) => m.recordShadowNudge(targetSession, reason, ledgerScope, { force: opts?.force })).catch(() => {
|
|
5557
5574
|
});
|
|
5558
5575
|
}
|
|
5559
5576
|
if (!opts?.force && isDebounced(targetSession)) {
|
|
@@ -5689,7 +5706,7 @@ function scheduleDeferredSpawnNudge(input) {
|
|
|
5689
5706
|
return;
|
|
5690
5707
|
}
|
|
5691
5708
|
queueIntercom(input.sessionName, `spawn nudge failed after ${attempt} attempts: ${msg}`, "signal");
|
|
5692
|
-
void import("./notifications-
|
|
5709
|
+
void import("./notifications-56TP36IK.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
|
|
5693
5710
|
agentId: getCoordinatorName(),
|
|
5694
5711
|
agentRole: "COO",
|
|
5695
5712
|
event: "error_spike",
|
|
@@ -5779,7 +5796,47 @@ async function sendIntercomAsync(targetSession, opts) {
|
|
|
5779
5796
|
}
|
|
5780
5797
|
} catch {
|
|
5781
5798
|
}
|
|
5782
|
-
|
|
5799
|
+
const authoritativeLedger = (process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase() === "on";
|
|
5800
|
+
let ledgerClaim = null;
|
|
5801
|
+
if (authoritativeLedger) {
|
|
5802
|
+
try {
|
|
5803
|
+
const { claimAuthoritativeNudge } = await import("./notification-ledger-J6Q2GAYU.js");
|
|
5804
|
+
const claim2 = await claimAuthoritativeNudge(
|
|
5805
|
+
targetSession,
|
|
5806
|
+
reason,
|
|
5807
|
+
opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0,
|
|
5808
|
+
void 0,
|
|
5809
|
+
void 0,
|
|
5810
|
+
{ force: opts?.force }
|
|
5811
|
+
);
|
|
5812
|
+
if (claim2 && !claim2.claimed) {
|
|
5813
|
+
logIntercom(`DEBOUNCE \u2192 ${targetSession} (durable notification ledger dedup)`);
|
|
5814
|
+
recordResult("debounced", "durable_ledger_dedup");
|
|
5815
|
+
return "debounced";
|
|
5816
|
+
}
|
|
5817
|
+
if (claim2) ledgerClaim = { id: claim2.row.id, sessionScope: claim2.row.sessionScope };
|
|
5818
|
+
} catch (err) {
|
|
5819
|
+
process.stderr.write(`[intercom] notification ledger claim failed; falling back to legacy routing: ${err instanceof Error ? err.message : String(err)}
|
|
5820
|
+
`);
|
|
5821
|
+
}
|
|
5822
|
+
}
|
|
5823
|
+
const markLedgerDelivered = async () => {
|
|
5824
|
+
if (!ledgerClaim) return;
|
|
5825
|
+
try {
|
|
5826
|
+
const { markNudgeDelivered } = await import("./notification-ledger-J6Q2GAYU.js");
|
|
5827
|
+
await markNudgeDelivered(ledgerClaim.id, ledgerClaim.sessionScope);
|
|
5828
|
+
} catch {
|
|
5829
|
+
}
|
|
5830
|
+
};
|
|
5831
|
+
const markLedgerFailed = async (error) => {
|
|
5832
|
+
if (!ledgerClaim) return;
|
|
5833
|
+
try {
|
|
5834
|
+
const { markNudgeDeliveryFailed } = await import("./notification-ledger-J6Q2GAYU.js");
|
|
5835
|
+
await markNudgeDeliveryFailed(ledgerClaim.id, error, ledgerClaim.sessionScope);
|
|
5836
|
+
} catch {
|
|
5837
|
+
}
|
|
5838
|
+
};
|
|
5839
|
+
if (!authoritativeLedger && !opts?.force && isDebounced(targetSession)) {
|
|
5783
5840
|
logIntercom(`DEBOUNCE \u2192 ${targetSession} (nudge batched, task safe in DB)`);
|
|
5784
5841
|
recordResult("debounced");
|
|
5785
5842
|
return "debounced";
|
|
@@ -5789,6 +5846,7 @@ async function sendIntercomAsync(targetSession, opts) {
|
|
|
5789
5846
|
const sessions = stdout.trim().split("\n").filter(Boolean);
|
|
5790
5847
|
if (!sessions.includes(targetSession)) {
|
|
5791
5848
|
logIntercom(`SKIP \u2192 ${targetSession} (session not found)`);
|
|
5849
|
+
await markLedgerFailed("session_not_found");
|
|
5792
5850
|
recordResult("failed", "session_not_found");
|
|
5793
5851
|
return "failed";
|
|
5794
5852
|
}
|
|
@@ -5827,6 +5885,7 @@ async function sendIntercomAsync(targetSession, opts) {
|
|
|
5827
5885
|
if (sessionState === "idle" && isEmployeePane && await confirmNudgeSubmittedAsync(targetSession, resolveSessionRuntime(targetSession))) {
|
|
5828
5886
|
const batched3 = recordDebounce(targetSession);
|
|
5829
5887
|
logIntercom(`RESUBMITTED \u2192 ${targetSession} (completed half-delivered nudge \u2014 pressed Enter)${batched3 > 0 ? ` [${batched3} batched]` : ""}`);
|
|
5888
|
+
await markLedgerDelivered();
|
|
5830
5889
|
recordResult("delivered", "resubmit_pending_input");
|
|
5831
5890
|
return "delivered";
|
|
5832
5891
|
}
|
|
@@ -5847,11 +5906,13 @@ async function sendIntercomAsync(targetSession, opts) {
|
|
|
5847
5906
|
}
|
|
5848
5907
|
const batched = recordDebounce(targetSession);
|
|
5849
5908
|
logIntercom(`DELIVERED \u2192 ${targetSession}${batched > 0 ? ` [${batched} nudges batched during debounce]` : ""} (async fire-and-forget)`);
|
|
5909
|
+
await markLedgerDelivered();
|
|
5850
5910
|
recordResult("delivered");
|
|
5851
5911
|
return "delivered";
|
|
5852
5912
|
} catch (e) {
|
|
5853
5913
|
process.stderr.write("[tmux-routing] sendIntercomAsync to " + targetSession + ": " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
5854
5914
|
logIntercom(`FAIL \u2192 ${targetSession}`);
|
|
5915
|
+
await markLedgerFailed(e instanceof Error ? e.message : String(e));
|
|
5855
5916
|
recordResult("failed", e instanceof Error ? e.name : "send_error");
|
|
5856
5917
|
return "failed";
|
|
5857
5918
|
}
|
|
@@ -6126,7 +6187,7 @@ function ensureEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6126
6187
|
const emp = roster.find((e) => baseAgentName(e.name) === baseAgentName(employeeName));
|
|
6127
6188
|
if (emp && !COORDINATOR_ROLES.has(emp.role)) {
|
|
6128
6189
|
try {
|
|
6129
|
-
const collisions = checkWorktreeCollisions(projectDir);
|
|
6190
|
+
const collisions = spawnOpts.collisionGuardHandled ? [] : checkWorktreeCollisions(projectDir);
|
|
6130
6191
|
if (collisions.length > 0) {
|
|
6131
6192
|
for (const c of collisions) {
|
|
6132
6193
|
process.stderr.write(
|
|
@@ -6361,6 +6422,7 @@ async function ensureEmployeeAsync(employeeName, exeSession, projectDir, opts) {
|
|
|
6361
6422
|
`
|
|
6362
6423
|
);
|
|
6363
6424
|
}
|
|
6425
|
+
asyncOpts = { ...asyncOpts, collisionGuardHandled: true };
|
|
6364
6426
|
const result = ensureEmployee(employeeName, exeSession, projectDir, asyncOpts);
|
|
6365
6427
|
if (asyncOpts.spawnLockHeld && result.sessionName) {
|
|
6366
6428
|
releaseSpawnLock(result.sessionName);
|
|
@@ -6383,6 +6445,71 @@ function resolveSpawnCwd(requestedCwd, projectDir, dirExists = existsSync9) {
|
|
|
6383
6445
|
if (dirExists(projectDir)) return { cwd: projectDir, fellBack: true, requestedCwd };
|
|
6384
6446
|
return { cwd: null, fellBack: false, requestedCwd };
|
|
6385
6447
|
}
|
|
6448
|
+
function spawnExitMarkerPath(sessionName) {
|
|
6449
|
+
const safe = sessionName.replace(/[^A-Za-z0-9._-]/g, "_");
|
|
6450
|
+
return path8.join(SESSION_CACHE, `spawn-exit-${safe}`);
|
|
6451
|
+
}
|
|
6452
|
+
function buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix) {
|
|
6453
|
+
const list = `${launchCommand}; printf '%s' "$?" > "${exitMarkerPath}"${cleanupSuffix}`;
|
|
6454
|
+
return `/bin/sh -c '${list.replace(/'/g, `'\\''`)}'`;
|
|
6455
|
+
}
|
|
6456
|
+
function readSpawnExitMarker(markerPath, read = (p) => readFileSync6(p, "utf8")) {
|
|
6457
|
+
let raw;
|
|
6458
|
+
try {
|
|
6459
|
+
raw = read(markerPath);
|
|
6460
|
+
} catch {
|
|
6461
|
+
return null;
|
|
6462
|
+
}
|
|
6463
|
+
const trimmed = raw.trim();
|
|
6464
|
+
if (!/^\d+$/.test(trimmed)) return null;
|
|
6465
|
+
return Number(trimmed);
|
|
6466
|
+
}
|
|
6467
|
+
function paneShowsRuntimeBanner(pane, runtime) {
|
|
6468
|
+
if (runtime === "exe-agent") return pane.includes("[exe-agent]") || pane.includes("online");
|
|
6469
|
+
if (runtime === "codex") {
|
|
6470
|
+
return pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex");
|
|
6471
|
+
}
|
|
6472
|
+
return pane.includes("Claude Code") || pane.includes("\u276F");
|
|
6473
|
+
}
|
|
6474
|
+
function classifySpawnFailurePane(pane) {
|
|
6475
|
+
const paneLc = pane.toLowerCase();
|
|
6476
|
+
if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
|
|
6477
|
+
return "path_not_found";
|
|
6478
|
+
}
|
|
6479
|
+
if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
|
|
6480
|
+
paneLc.includes("unknown option") || paneLc.includes("enoent")) {
|
|
6481
|
+
return "claude_launch_failed";
|
|
6482
|
+
}
|
|
6483
|
+
return "timeout";
|
|
6484
|
+
}
|
|
6485
|
+
function resolveStartupWatchCapMs(input) {
|
|
6486
|
+
const explicit = Number(input.override) || Number(input.legacyOverride);
|
|
6487
|
+
if (explicit > 0) return explicit;
|
|
6488
|
+
if (input.useCodex) return 2500;
|
|
6489
|
+
return input.callerIsDaemon ? 2e3 : 3e3;
|
|
6490
|
+
}
|
|
6491
|
+
function watchSpawnStartup(probes, opts) {
|
|
6492
|
+
const interval = Math.max(1, opts.intervalMs);
|
|
6493
|
+
const iterations = Math.max(0, Math.ceil(Math.max(0, opts.capMs) / interval));
|
|
6494
|
+
const capture = () => {
|
|
6495
|
+
try {
|
|
6496
|
+
return probes.capturePane();
|
|
6497
|
+
} catch {
|
|
6498
|
+
return "";
|
|
6499
|
+
}
|
|
6500
|
+
};
|
|
6501
|
+
let polls = 0;
|
|
6502
|
+
for (let i = 0; i <= iterations; i++) {
|
|
6503
|
+
polls++;
|
|
6504
|
+
const exitCode = probes.readLauncherExit();
|
|
6505
|
+
if (exitCode !== null) return { outcome: "exited", exitCode, pane: capture(), polls };
|
|
6506
|
+
if (!probes.isAlive()) {
|
|
6507
|
+
return { outcome: "exited", exitCode: probes.readLauncherExit(), pane: capture(), polls };
|
|
6508
|
+
}
|
|
6509
|
+
if (i < iterations) probes.sleep(interval);
|
|
6510
|
+
}
|
|
6511
|
+
return { outcome: "running", polls };
|
|
6512
|
+
}
|
|
6386
6513
|
function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
6387
6514
|
const transport = getTransport();
|
|
6388
6515
|
const sessionName = employeeSessionName(employeeName, exeSession, opts?.instance);
|
|
@@ -6732,29 +6859,29 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6732
6859
|
}
|
|
6733
6860
|
}
|
|
6734
6861
|
}
|
|
6735
|
-
let
|
|
6862
|
+
let launchCommand;
|
|
6736
6863
|
if (useExeAgent) {
|
|
6737
|
-
|
|
6864
|
+
launchCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}`;
|
|
6738
6865
|
} else if (useCodex) {
|
|
6739
6866
|
process.stderr.write(
|
|
6740
6867
|
`[tmux-routing] agent-config: ${employeeName} \u2192 codex (${agentRtConfig.model})
|
|
6741
6868
|
`
|
|
6742
6869
|
);
|
|
6743
|
-
|
|
6870
|
+
launchCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}`;
|
|
6744
6871
|
} else if (useOpencode) {
|
|
6745
6872
|
const binName = `${employeeName}-opencode`;
|
|
6746
6873
|
process.stderr.write(
|
|
6747
6874
|
`[tmux-routing] agent-config: ${employeeName} \u2192 opencode (${agentRtConfig.model})
|
|
6748
6875
|
`
|
|
6749
6876
|
);
|
|
6750
|
-
|
|
6877
|
+
launchCommand = binName;
|
|
6751
6878
|
} else if (useBinSymlink) {
|
|
6752
6879
|
const binName = `${employeeName}-${ccProvider}`;
|
|
6753
6880
|
process.stderr.write(
|
|
6754
6881
|
`[tmux-routing] provider cascade: ${ccProvider} \u2192 spawning ${binName}
|
|
6755
6882
|
`
|
|
6756
6883
|
);
|
|
6757
|
-
|
|
6884
|
+
launchCommand = binName;
|
|
6758
6885
|
} else {
|
|
6759
6886
|
let launcherAbs = "";
|
|
6760
6887
|
try {
|
|
@@ -6762,8 +6889,18 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6762
6889
|
if (existsSync9(launcherJs)) launcherAbs = launcherJs;
|
|
6763
6890
|
} catch {
|
|
6764
6891
|
}
|
|
6765
|
-
|
|
6892
|
+
launchCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}` : `exe-launch-agent --agent ${employeeName}`;
|
|
6893
|
+
}
|
|
6894
|
+
const exitMarkerPath = spawnExitMarkerPath(sessionName);
|
|
6895
|
+
try {
|
|
6896
|
+
mkdirSync6(SESSION_CACHE, { recursive: true });
|
|
6897
|
+
} catch {
|
|
6898
|
+
}
|
|
6899
|
+
try {
|
|
6900
|
+
unlinkSync4(exitMarkerPath);
|
|
6901
|
+
} catch {
|
|
6766
6902
|
}
|
|
6903
|
+
const spawnCommand = buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix);
|
|
6767
6904
|
const tmuxEnvArgs = Object.entries(launchEnv).flatMap(([key, val]) => ["-e", `${key}=${val}`]);
|
|
6768
6905
|
let spawnResult;
|
|
6769
6906
|
try {
|
|
@@ -6818,6 +6955,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6818
6955
|
}
|
|
6819
6956
|
const callerIsDaemon = process.env.EXE_IS_DAEMON === "1";
|
|
6820
6957
|
const POLL_INTERVAL_MS = 500;
|
|
6958
|
+
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
|
|
6821
6959
|
const LIVENESS_CAP_MS = Number(process.env.EXE_SPAWN_LIVENESS_CAP_MS) || (callerIsDaemon ? 6e3 : 8e3);
|
|
6822
6960
|
const livenessIterations = Math.max(1, Math.ceil(LIVENESS_CAP_MS / POLL_INTERVAL_MS));
|
|
6823
6961
|
let sessionLive = false;
|
|
@@ -6831,22 +6969,12 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6831
6969
|
if (!sessionLive) sessionLive = transport.isAlive(sessionName);
|
|
6832
6970
|
if (!sessionLive) {
|
|
6833
6971
|
releaseSpawnLock(sessionName);
|
|
6834
|
-
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
|
|
6835
6972
|
let lastPane = "";
|
|
6836
6973
|
try {
|
|
6837
6974
|
lastPane = transport.capturePane(sessionName, 50);
|
|
6838
6975
|
} catch {
|
|
6839
6976
|
}
|
|
6840
|
-
const
|
|
6841
|
-
let spawnFailureCause;
|
|
6842
|
-
if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
|
|
6843
|
-
spawnFailureCause = "path_not_found";
|
|
6844
|
-
} else if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
|
|
6845
|
-
paneLc.includes("unknown option") || paneLc.includes("enoent")) {
|
|
6846
|
-
spawnFailureCause = "claude_launch_failed";
|
|
6847
|
-
} else {
|
|
6848
|
-
spawnFailureCause = "timeout";
|
|
6849
|
-
}
|
|
6977
|
+
const spawnFailureCause = classifySpawnFailurePane(lastPane);
|
|
6850
6978
|
const errMsg2 = `spawn did not start: tmux session "${sessionName}" never came alive within ${LIVENESS_CAP_MS / 1e3}s (${runtimeLabel} process failed to launch or exited immediately; cause=${spawnFailureCause}). Check ~/.exe-os/session-logs/${instanceLabel}-*.log \u2014 common cause: installed Claude Code does not support a launch flag, or the daemon PATH excludes the node/launcher bin dir (cause=path_not_found).`;
|
|
6851
6979
|
process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${spawnFailureCause}): ${errMsg2}
|
|
6852
6980
|
`);
|
|
@@ -6868,31 +6996,59 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6868
6996
|
});
|
|
6869
6997
|
return { sessionName, error: errMsg2 };
|
|
6870
6998
|
}
|
|
6871
|
-
const
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
|
|
6875
|
-
|
|
6876
|
-
|
|
6877
|
-
|
|
6878
|
-
|
|
6879
|
-
|
|
6880
|
-
|
|
6881
|
-
|
|
6882
|
-
|
|
6883
|
-
|
|
6884
|
-
|
|
6885
|
-
|
|
6886
|
-
|
|
6887
|
-
|
|
6888
|
-
|
|
6889
|
-
|
|
6890
|
-
|
|
6891
|
-
|
|
6892
|
-
|
|
6893
|
-
});
|
|
6894
|
-
return { sessionName, error: errMsg2 };
|
|
6999
|
+
const STARTUP_WATCH_MS = resolveStartupWatchCapMs({
|
|
7000
|
+
useCodex,
|
|
7001
|
+
callerIsDaemon,
|
|
7002
|
+
override: process.env.EXE_SPAWN_STARTUP_WATCH_MS,
|
|
7003
|
+
legacyOverride: process.env.EXE_SPAWN_STABILITY_MS
|
|
7004
|
+
});
|
|
7005
|
+
const STARTUP_WATCH_INTERVAL_MS = 250;
|
|
7006
|
+
const startupWatch = watchSpawnStartup(
|
|
7007
|
+
{
|
|
7008
|
+
readLauncherExit: () => readSpawnExitMarker(exitMarkerPath),
|
|
7009
|
+
isAlive: () => transport.isAlive(sessionName),
|
|
7010
|
+
capturePane: () => transport.capturePane(sessionName, 50),
|
|
7011
|
+
sleep: (ms) => {
|
|
7012
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
7013
|
+
}
|
|
7014
|
+
},
|
|
7015
|
+
{ capMs: STARTUP_WATCH_MS, intervalMs: STARTUP_WATCH_INTERVAL_MS }
|
|
7016
|
+
);
|
|
7017
|
+
if (startupWatch.outcome === "exited") {
|
|
7018
|
+
try {
|
|
7019
|
+
execFileSync3("tmux", ["kill-session", "-t", sessionName], { timeout: 3e3 });
|
|
7020
|
+
} catch {
|
|
6895
7021
|
}
|
|
7022
|
+
releaseSpawnLock(sessionName);
|
|
7023
|
+
const { exitCode } = startupWatch;
|
|
7024
|
+
const refused = exitCode === 78;
|
|
7025
|
+
const errorCode = refused ? "launch_refused" : "startup_exit";
|
|
7026
|
+
const paneCause = classifySpawnFailurePane(startupWatch.pane);
|
|
7027
|
+
const errMsg2 = refused ? `spawn refused: ${runtimeLabel} launcher for "${sessionName}" exited 78 (refusal) within ${STARTUP_WATCH_MS / 1e3}s \u2014 it declined to start the agent. Most common cause: running as root (uid 0), where Claude Code rejects --dangerously-skip-permissions / bypassPermissions. Run the daemon as a non-root user. Check ~/.exe-os/session-logs/${instanceLabel}-*.log. Pane tail: ${startupWatch.pane.trim().slice(-500) || "(empty)"}` : `spawn died during startup: ${runtimeLabel} launcher for "${sessionName}" ` + (exitCode === null ? `disappeared within ${STARTUP_WATCH_MS / 1e3}s of launch` : `exited ${exitCode} within ${STARTUP_WATCH_MS / 1e3}s of launch`) + ` (cause=${paneCause}). Check ~/.exe-os/session-logs/${instanceLabel}-*.log. Pane tail: ${startupWatch.pane.trim().slice(-500) || "(empty)"}`;
|
|
7028
|
+
process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${errorCode}): ${errMsg2}
|
|
7029
|
+
`);
|
|
7030
|
+
recordOrchestrationEventBestEffort({
|
|
7031
|
+
eventType: "tmux.spawn.completed",
|
|
7032
|
+
source: "tmux-routing.spawnEmployee",
|
|
7033
|
+
severity: "warn",
|
|
7034
|
+
agentId: employeeName,
|
|
7035
|
+
sessionScope: exeSession,
|
|
7036
|
+
instanceId: opts?.instance != null ? String(opts.instance) : null,
|
|
7037
|
+
tmuxSession: sessionName,
|
|
7038
|
+
runtime: runtimeLabel,
|
|
7039
|
+
durationMs: Date.now() - spawnStartedAt,
|
|
7040
|
+
result: "failed",
|
|
7041
|
+
errorCode,
|
|
7042
|
+
payload: {
|
|
7043
|
+
detail: "spawn_exited_during_startup",
|
|
7044
|
+
exitCode,
|
|
7045
|
+
spawnFailureCause: paneCause,
|
|
7046
|
+
watchCapMs: STARTUP_WATCH_MS,
|
|
7047
|
+
polls: startupWatch.polls,
|
|
7048
|
+
spawnCommand
|
|
7049
|
+
}
|
|
7050
|
+
});
|
|
7051
|
+
return { sessionName, error: errMsg2 };
|
|
6896
7052
|
}
|
|
6897
7053
|
if (useCodex) {
|
|
6898
7054
|
let pane = "";
|
|
@@ -6932,28 +7088,14 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6932
7088
|
for (let i = 0; i < pollIterations; i++) {
|
|
6933
7089
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, POLL_INTERVAL_MS);
|
|
6934
7090
|
try {
|
|
6935
|
-
|
|
6936
|
-
|
|
6937
|
-
|
|
6938
|
-
booted = true;
|
|
6939
|
-
break;
|
|
6940
|
-
}
|
|
6941
|
-
} else if (useCodex) {
|
|
6942
|
-
if (pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex")) {
|
|
6943
|
-
booted = true;
|
|
6944
|
-
break;
|
|
6945
|
-
}
|
|
6946
|
-
} else {
|
|
6947
|
-
if (pane.includes("Claude Code") || pane.includes("\u276F")) {
|
|
6948
|
-
booted = true;
|
|
6949
|
-
break;
|
|
6950
|
-
}
|
|
7091
|
+
if (paneShowsRuntimeBanner(transport.capturePane(sessionName), runtimeLabel)) {
|
|
7092
|
+
booted = true;
|
|
7093
|
+
break;
|
|
6951
7094
|
}
|
|
6952
7095
|
} catch {
|
|
6953
7096
|
}
|
|
6954
7097
|
}
|
|
6955
7098
|
if (!booted && !callerIsDaemon) {
|
|
6956
|
-
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : "claude";
|
|
6957
7099
|
process.stderr.write(
|
|
6958
7100
|
`[tmux-routing] ${runtimeLabel} boot banner poll capped at ${POLL_CAP_MS / 1e3}s for ${sessionName} (session is live) \u2014 sending task nudge anyway
|
|
6959
7101
|
`
|
|
@@ -7272,6 +7414,7 @@ export {
|
|
|
7272
7414
|
getReviewChecklist,
|
|
7273
7415
|
createReviewForCompletedTask,
|
|
7274
7416
|
cleanupReviewFile,
|
|
7417
|
+
BUSY_PATTERN,
|
|
7275
7418
|
_resetExeBinDirCache,
|
|
7276
7419
|
buildSpawnPath,
|
|
7277
7420
|
acquireSpawnLock,
|
|
@@ -7322,5 +7465,12 @@ export {
|
|
|
7322
7465
|
ensureEmployeeAsync,
|
|
7323
7466
|
decideSpawnWorktreeDiscipline,
|
|
7324
7467
|
resolveSpawnCwd,
|
|
7468
|
+
spawnExitMarkerPath,
|
|
7469
|
+
buildSpawnCommand,
|
|
7470
|
+
readSpawnExitMarker,
|
|
7471
|
+
paneShowsRuntimeBanner,
|
|
7472
|
+
classifySpawnFailurePane,
|
|
7473
|
+
resolveStartupWatchCapMs,
|
|
7474
|
+
watchSpawnStartup,
|
|
7325
7475
|
spawnEmployee
|
|
7326
7476
|
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildSystemStateMemoryTypeExclusion
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DKRDU2AX.js";
|
|
4
4
|
import {
|
|
5
5
|
sessionScopeFilter
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SQM4ZTL2.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
getIdentity
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HLU52KTO.js";
|
|
11
11
|
import {
|
|
12
12
|
getEmotionalBaseline
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-BRZR76TS.js";
|
|
14
14
|
|
|
15
15
|
// src/lib/dreaming.ts
|
|
16
16
|
var DreamingEngine = class {
|
|
@@ -646,7 +646,7 @@ var DreamingEngine = class {
|
|
|
646
646
|
}
|
|
647
647
|
let overdueProspective = [];
|
|
648
648
|
try {
|
|
649
|
-
const { getOverdueProspective, completeProspective } = await import("./prospective-memory-
|
|
649
|
+
const { getOverdueProspective, completeProspective } = await import("./prospective-memory-GHE5ORN4.js");
|
|
650
650
|
const overdue = await getOverdueProspective(agentId);
|
|
651
651
|
overdueProspective = overdue.map((o) => ({
|
|
652
652
|
id: o.id,
|