@askexenow/exe-os 0.9.359 → 0.9.361
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 +113 -2
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-Y3DCBD7J.js → active-agent-5RXOXM47.js} +9 -8
- package/dist/{active-agent-DMKNHGSG.js → active-agent-UZAQUW7E.js} +9 -8
- package/dist/{agentic-ontology-3233PNKV.js → agentic-ontology-EHUWSJCG.js} +1 -1
- package/dist/{backfill-gate-DA7UT6UD.js → backfill-gate-LRX77SUD.js} +3 -2
- package/dist/{backfill-metadata-4DS4A5U3.js → backfill-metadata-CTSVPOC6.js} +12 -11
- package/dist/{background-jobs-XGTLESKM.js → background-jobs-Z6KHCWES.js} +3 -2
- package/dist/{backup-verify-JNYKXIU2.js → backup-verify-YJMSP24E.js} +5 -4
- package/dist/{behavior-injection-CGAMI552.js → behavior-injection-DTFGF6DT.js} +21 -13
- package/dist/{behaviors-57AMN5IP.js → behaviors-XW7ZZKHF.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 +131 -45
- package/dist/bin/customer-readiness.js +10 -1
- package/dist/bin/deferred-daemon-restart.js +125 -103
- package/dist/bin/exe-agent-config.js +9 -8
- package/dist/bin/exe-agent.js +13 -12
- 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 +11 -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 +314 -184
- 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-ALCHPQOK.js} +9 -8
- package/dist/{boot-review-sections-NDFE5443.js → boot-review-sections-E4QOMWZM.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 +1247 -1077
- package/dist/{capability-cards-OBB7BMMX.js → capability-cards-IE2DEJKT.js} +8 -7
- package/dist/{capacity-monitor-QLPEL6S5.js → capacity-monitor-3HVLTPQA.js} +32 -29
- package/dist/{catchup-brief-EN7QR6MP.js → catchup-brief-E2QZPNMH.js} +36 -33
- package/dist/{chunk-POZGQQEZ.js → chunk-2PIEDT3G.js} +1 -1
- package/dist/chunk-2PRAXZWM.js +261 -0
- package/dist/{chunk-MBULOZJF.js → chunk-32FEF5BW.js} +2 -2
- package/dist/{chunk-4FQIWAXA.js → chunk-34ABBEHN.js} +10 -10
- package/dist/{chunk-CVTWQZOR.js → chunk-3L2QU5ZF.js} +14 -2
- package/dist/{chunk-R6LNQAUG.js → chunk-3Q2YK6UT.js} +34 -1
- package/dist/{chunk-SNWV44E5.js → chunk-3TWIRKUD.js} +12 -5
- package/dist/{chunk-I5AVZOL2.js → chunk-3YBJ36UX.js} +2 -2
- package/dist/{chunk-OAYTQ4RY.js → chunk-4BI4YKHE.js} +55 -12
- package/dist/{chunk-OSID72CN.js → chunk-4L33OFU4.js} +25 -1
- package/dist/{chunk-A6VIK3SS.js → chunk-4P2BFNSB.js} +2 -2
- package/dist/{chunk-RFUTLZ2U.js → chunk-4UTSVUMY.js} +4 -4
- package/dist/chunk-5OPAUFLP.js +126 -0
- package/dist/{chunk-PDRIIEFV.js → chunk-5TKIVK3L.js} +1 -1
- package/dist/{chunk-6EOLGE7T.js → chunk-5XEKQJE5.js} +1 -1
- package/dist/chunk-63Z76YCI.js +218 -0
- package/dist/{chunk-XVTKJEI2.js → chunk-65WUZISK.js} +3 -3
- package/dist/{chunk-EHM4E62N.js → chunk-6DTALXOA.js} +1 -1
- package/dist/{chunk-DWKH2H7W.js → chunk-6EGNSEEX.js} +1 -1
- package/dist/chunk-6EM6USV7.js +1332 -0
- package/dist/{chunk-STFR72YH.js → chunk-6H44454F.js} +1 -1
- package/dist/{chunk-44WFVMZ5.js → chunk-6KVG6RTP.js} +1 -1
- package/dist/{chunk-SIGAQQHW.js → chunk-6LQGPGOS.js} +2 -2
- package/dist/{chunk-OY2PWHYR.js → chunk-6W5MDNLX.js} +2 -2
- package/dist/{chunk-QROIFRKI.js → chunk-7GPK2ANS.js} +5 -5
- package/dist/{chunk-GSVQBBE5.js → chunk-7N63G4JS.js} +2 -2
- package/dist/{chunk-2EAYZ3BK.js → chunk-A4EPO6F3.js} +9 -9
- package/dist/{chunk-QH2XAUZ5.js → chunk-A5544WYJ.js} +1 -1
- package/dist/{chunk-XV42EAVK.js → chunk-AQF6XMZ7.js} +1 -1
- package/dist/chunk-ARX6TAGN.js +102 -0
- package/dist/{chunk-JE34CB5H.js → chunk-ASQPFNLC.js} +2 -2
- package/dist/{chunk-WRP5AG4D.js → chunk-AUSKITKI.js} +2 -2
- package/dist/{chunk-YBX3G5OP.js → chunk-B3JV3F35.js} +1 -1
- package/dist/chunk-B6PFGUYJ.js +159 -0
- package/dist/{chunk-SHEWTDPC.js → chunk-BGMLECK5.js} +4 -4
- package/dist/{chunk-BCZF3AGJ.js → chunk-BRIZ6OZ3.js} +34 -44
- package/dist/{chunk-OMXJMOBD.js → chunk-BRZR76TS.js} +66 -0
- package/dist/{chunk-RJ67HG2P.js → chunk-BSPBWLUP.js} +4 -4
- package/dist/{chunk-WA2MJGPT.js → chunk-CC4I7337.js} +1 -1
- package/dist/{chunk-VY5VU7SX.js → chunk-CIXA5TXF.js} +2 -2
- package/dist/{chunk-MCNDZU5W.js → chunk-CKOMH7TL.js} +2 -2
- package/dist/{chunk-HLEZ5O5P.js → chunk-CY5RX7QR.js} +17 -15
- package/dist/{chunk-KIXNMTGC.js → chunk-DZLOUB4G.js} +5 -5
- package/dist/{chunk-VXL7PJ56.js → chunk-E3YI6FVJ.js} +5 -24
- package/dist/{chunk-IOEUAQWP.js → chunk-EEZOBN6X.js} +1 -1
- package/dist/{chunk-6SK4MM5B.js → chunk-EIBTRKUF.js} +1 -1
- package/dist/{chunk-EA5FVACM.js → chunk-ESGLOI6Q.js} +21 -17
- package/dist/{chunk-R62ITJDQ.js → chunk-EXAUIWUG.js} +1 -1
- package/dist/{chunk-3ZEVMZ4G.js → chunk-F4GLFLQK.js} +1 -1
- package/dist/{chunk-EX2SSLNU.js → chunk-FK3HX7VO.js} +9 -9
- package/dist/{chunk-HPHF5VTT.js → chunk-FU3CUTIA.js} +4 -4
- package/dist/{chunk-AHMUF6RO.js → chunk-G2M7WQ2M.js} +0 -2
- package/dist/{chunk-SKGMF2SO.js → chunk-GBNB4EWD.js} +22 -1
- package/dist/{chunk-HNPHPGGF.js → chunk-GIFXL4AC.js} +2 -2
- package/dist/{chunk-W5YV2PZE.js → chunk-GWBD5P7E.js} +16 -16
- package/dist/{chunk-VMR6M6GN.js → chunk-HISFWAAK.js} +1 -1
- package/dist/{chunk-LXG37RB2.js → chunk-HNB5IAVK.js} +1 -1
- package/dist/{chunk-QWVXN224.js → chunk-HPXFKUGU.js} +350 -65
- package/dist/{chunk-IQWAYXVF.js → chunk-HU4ZAYGH.js} +3 -3
- package/dist/{chunk-W3XUU36X.js → chunk-I4ILH2R6.js} +5 -5
- package/dist/chunk-IFJ4SVIP.js +197 -0
- package/dist/{chunk-TG7JYSEA.js → chunk-II5TSD4F.js} +5 -2
- package/dist/{chunk-2OVTGZYH.js → chunk-IM7PRQ27.js} +46 -3
- package/dist/{chunk-NE57GONM.js → chunk-INATSOZV.js} +1 -1
- package/dist/{chunk-GD7VXXW6.js → chunk-IXRNZ2Y2.js} +795 -174
- package/dist/chunk-J5KRIGHE.js +61 -0
- package/dist/{chunk-6WHYSLGF.js → chunk-J5QNK5VL.js} +1 -1
- package/dist/chunk-J6KMGEJW.js +238 -0
- package/dist/{chunk-XLEYCOHX.js → chunk-J73I53JO.js} +398 -58
- package/dist/{chunk-NP2Y7P3I.js → chunk-J7S2SOM2.js} +1 -1
- package/dist/{chunk-DQ75MEPU.js → chunk-JCICPQJV.js} +1 -1
- package/dist/chunk-JKKZGDLP.js +182 -0
- package/dist/{chunk-VAY6IXWY.js → chunk-KDMVVHZH.js} +1 -1
- package/dist/{chunk-G37RG543.js → chunk-LEZAPRMW.js} +1 -1
- package/dist/{chunk-3QWOO74G.js → chunk-LLZNPOGB.js} +97 -3
- package/dist/{chunk-SQBNN44X.js → chunk-LYEQZ7TW.js} +49 -15
- 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-X2F6Q7TW.js → chunk-NBVSBSMZ.js} +1 -1
- package/dist/{chunk-LRETL4I3.js → chunk-NE5ZMNHN.js} +3 -3
- package/dist/chunk-NGDXBN3M.js +254 -0
- package/dist/{chunk-A5WEEND7.js → chunk-NKP4S2G5.js} +3 -3
- package/dist/{chunk-HDSDXGLV.js → chunk-NO5KHKKB.js} +1 -1
- package/dist/chunk-NOKJCF27.js +437 -0
- package/dist/{chunk-6KREY2Q7.js → chunk-NVRUZOEW.js} +5 -5
- package/dist/chunk-NVWBZXDK.js +257 -0
- package/dist/chunk-NXTQAY7Z.js +2607 -0
- package/dist/{chunk-C5YZMYQH.js → chunk-OLIXPGWN.js} +1 -1
- package/dist/{chunk-4DYJ6NOK.js → chunk-OUUWGAH4.js} +2 -2
- package/dist/{chunk-UPM5JP6G.js → chunk-OZNCAMS3.js} +47 -4
- package/dist/{chunk-UZ5RJYL3.js → chunk-P3ACGGW6.js} +1 -1
- package/dist/{chunk-6LY3QSJA.js → chunk-PE4DEYIW.js} +11 -6
- package/dist/{chunk-HK7SQDKJ.js → chunk-PGXESCSL.js} +2 -2
- package/dist/{chunk-NKDKB2RT.js → chunk-PK5ATL23.js} +6 -6
- package/dist/{chunk-2KLVTRY2.js → chunk-PLLBBNMC.js} +1 -1
- package/dist/{chunk-Z2PAVJJ4.js → chunk-PRJBAIHV.js} +3 -3
- package/dist/{chunk-QX7RWICL.js → chunk-PU7UYQRC.js} +1 -1
- package/dist/{chunk-57GRYGDU.js → chunk-PWNPP727.js} +1 -1
- package/dist/{chunk-PLOEFBFW.js → chunk-Q556G3P2.js} +3 -3
- package/dist/{chunk-4JERP7NT.js → chunk-QAEWWYHL.js} +29 -1
- package/dist/{chunk-2YGAKBRG.js → chunk-QFQWHCOJ.js} +3 -3
- package/dist/chunk-QILQ5FCG.js +198 -0
- package/dist/{chunk-G2KK64UB.js → chunk-QNETW6LZ.js} +101 -19
- package/dist/{chunk-FASR2WLT.js → chunk-R6AJ6VIJ.js} +1 -1
- package/dist/{chunk-6JTKIXLU.js → chunk-RBWLUYTO.js} +1 -1
- package/dist/{chunk-QLFN3MUW.js → chunk-RCOIKTHM.js} +1 -1
- package/dist/{chunk-ITRKRKS7.js → chunk-RFKRCVGW.js} +1 -1
- package/dist/{chunk-APR556TY.js → chunk-RJJZH7Z7.js} +190 -29
- package/dist/{chunk-5UAMBMNR.js → chunk-RO326K57.js} +44 -34
- package/dist/{chunk-JBAMYKBL.js → chunk-SSZIGWIG.js} +1 -1
- package/dist/{chunk-2I23RPSI.js → chunk-TKDITWDN.js} +9 -0
- package/dist/{chunk-VCCZQDCU.js → chunk-U32RDCUB.js} +3 -3
- package/dist/{chunk-OIS5VIAH.js → chunk-UWEFIIEG.js} +6 -2
- package/dist/{chunk-LPKTGK7L.js → chunk-V3ORKXAU.js} +4 -4
- package/dist/{chunk-WCP4OQUL.js → chunk-V6T42AQN.js} +2 -2
- package/dist/chunk-VAOUB2TK.js +23 -0
- package/dist/{chunk-4WSUP4CC.js → chunk-VEGTALBX.js} +11 -11
- package/dist/{chunk-AL7JMA54.js → chunk-VEJKY5I6.js} +2 -2
- package/dist/{chunk-74R44E4S.js → chunk-VGWGXAHT.js} +198 -93
- package/dist/{chunk-YKRNH5LU.js → chunk-VQWRRXBD.js} +1 -1
- package/dist/{chunk-7QRMFYOV.js → chunk-VYFZVIWX.js} +1 -1
- package/dist/{chunk-CAEWPEBA.js → chunk-W6J25BU7.js} +1 -1
- package/dist/{chunk-EUQF3JOH.js → chunk-WBG7XYVR.js} +1 -1
- package/dist/chunk-WT4RI36X.js +23 -0
- package/dist/{chunk-46RPEWTH.js → chunk-WYETVNK4.js} +1 -1
- package/dist/{chunk-DKRSKC5R.js → chunk-XQDF2I4D.js} +1 -1
- package/dist/{chunk-HKK7LLS5.js → chunk-XTGR3LMF.js} +34 -3
- package/dist/{chunk-XWWNRFRF.js → chunk-YJJ7FRX5.js} +11 -11
- package/dist/{chunk-F3QTF4T7.js → chunk-YZLDE3XJ.js} +3 -3
- package/dist/chunk-YZUHSV24.js +277 -0
- package/dist/{chunk-5I3YC7ER.js → chunk-ZGYRQHQ3.js} +2 -2
- package/dist/{chunk-3ODATKWH.js → chunk-ZPW6FAEQ.js} +1 -1
- 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-SJHT3RXT.js} +13 -12
- package/dist/{cloud-sync-shutdown-XCOATIJW.js → cloud-sync-shutdown-43RY4ZBS.js} +8 -7
- package/dist/{co-activation-XNBLOGK3.js → co-activation-5GP2E54J.js} +8 -7
- package/dist/{co-occurrence-HO4PGQC4.js → co-occurrence-OXF6MLM6.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-YSXUBOXC.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-FKEQAOQL.js} +5 -4
- package/dist/{crm-webhook-WZAV5776.js → crm-webhook-K4ZOGKOO.js} +2 -2
- package/dist/{cto-delegation-gate-UHMYFM4D.js → cto-delegation-gate-TQIOXGNV.js} +30 -27
- package/dist/{daemon-auth-SXZHLUYS.js → daemon-auth-OCHW2U6B.js} +3 -2
- package/dist/{daemon-orchestration-DT5M2ZAR.js → daemon-orchestration-HSW7IOH4.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-W5KHZUL4.js} +11 -10
- package/dist/{documents-GKDZDUED.js → documents-SLQWZNOW.js} +18 -16
- package/dist/dreaming-E2M2O32J.js +63 -0
- package/dist/{exe-drift-QTKD2FHT.js → exe-drift-NUYEPGFR.js} +9 -8
- package/dist/{exe-export-ESJ6KP6J.js → exe-export-CFX2JAOJ.js} +21 -13
- package/dist/{exe-import-N4X3GEQB.js → exe-import-ZD5QMFN2.js} +21 -13
- package/dist/{exe-key-KZCCHX3W.js → exe-key-O4KHCKZZ.js} +114 -98
- package/dist/exe-org-TV7KW4D6.js +672 -0
- package/dist/{exe-snapshot-SCRPHCPZ.js → exe-snapshot-P4YW62MR.js} +38 -33
- package/dist/{fast-db-init-6H67K76Q.js → fast-db-init-YZNPKBNX.js} +1 -1
- package/dist/{founder-context-C7X7IRDA.js → founder-context-TU5G4AKR.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-CKSL73QX.js} +8 -7
- package/dist/{global-procedures-BR7WGSE7.js → global-procedures-X36SK7LZ.js} +9 -8
- package/dist/{graph-auto-extract-EOXWQRBZ.js → graph-auto-extract-OW7YWKRT.js} +11 -10
- package/dist/{graph-rag-5FVC5JXH.js → graph-rag-6GFTXM5O.js} +3 -3
- package/dist/{hook-integrity-TYGDD7OE.js → hook-integrity-AIDFKMTA.js} +1 -1
- package/dist/{hook-prefetch-2CN3MK4H.js → hook-prefetch-THLIXCLE.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 +44 -41
- package/dist/inrun-inbox-DRKVDPLY.js +29 -0
- package/dist/{installer-YDLSXGD2.js → installer-CBHPY3RI.js} +11 -10
- package/dist/{installer-7UV3CNWZ.js → installer-LORTXEPZ.js} +11 -10
- package/dist/{installer-VPNTM3X6.js → installer-R4EKAE7F.js} +11 -10
- package/dist/{intercom-queue-KHKJJYCQ.js → intercom-queue-QGXWXDYJ.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 +2 -2
- package/dist/lib/db-write-worker.js +3 -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 +262 -125
- 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-NO2WGZPU.js} +5 -4
- package/dist/{license-sync-XFDOXL3Z.js → license-sync-CVEMSX3H.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 +108 -93
- package/dist/mcp/server.js +111 -96
- 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-H4B5LHCL.js} +9 -8
- package/dist/{mcp-session-identity-RTNZ2ZLW.js → mcp-session-identity-MCIJPH7T.js} +30 -27
- package/dist/{memory-cards-KG4TPNKK.js → memory-cards-PX3ZU7WC.js} +12 -11
- package/dist/{memory-graph-extractor-6HTBLO2N.js → memory-graph-extractor-M5LHDSFC.js} +12 -11
- package/dist/{memory-poisoning-defense-3ZT57RSJ.js → memory-poisoning-defense-LORMP5QJ.js} +8 -7
- package/dist/{memory-pressure-watchdog-ZOZBIMKC.js → memory-pressure-watchdog-AXJKFOCO.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-XB6CE5MY.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-4JVPBNDO.js} +31 -28
- package/dist/{notifications-74YECZ4V.js → notifications-7EJE7FEP.js} +30 -27
- package/dist/{orchestration-events-KRQI4ED5.js → orchestration-events-GCMG4TBV.js} +9 -8
- package/dist/{orchestration-phase-KVF42ZKU.js → orchestration-phase-ZJ4XVNFO.js} +3 -2
- package/dist/orchestrator-W4PANW2L.js +55 -0
- package/dist/org-brief-session-65THKUUQ.js +45 -0
- package/dist/org-consent-policy-QE3TE273.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-VEQ2OQQM.js +44 -0
- package/dist/org-row-visibility-V2YHQMU7.js +18 -0
- package/dist/{pipeline-router-6ZZV7JMA.js → pipeline-router-HJSXQN2M.js} +9 -8
- package/dist/{plan-limits-B7AZKZ6U.js → plan-limits-GVLMARLS.js} +11 -10
- package/dist/{project-boot-WEQSKDD7.js → project-boot-YMHABZNL.js} +7 -2
- package/dist/{projection-worker-LRFFQ6JB.js → projection-worker-JUNR4VAH.js} +5 -4
- package/dist/{prospective-memory-A4GDTIWG.js → prospective-memory-NOGTSZC4.js} +8 -7
- package/dist/push-notifications-FIVZB27Y.js +60 -0
- package/dist/{reranker-YVTLJCFC.js → reranker-ZZYVYCQW.js} +3 -2
- package/dist/{retrieval-health-PK2ODTXM.js → retrieval-health-B7USNBNW.js} +1 -1
- package/dist/{review-polling-JFWRNQF6.js → review-polling-G7ZCVGXI.js} +31 -28
- package/dist/runtime/index.js +38 -35
- package/dist/{session-events-VMQBCUH3.js → session-events-HIULW2JW.js} +31 -28
- package/dist/{session-kill-telemetry-Z3W256T5.js → session-kill-telemetry-5FLZAMWE.js} +31 -28
- package/dist/session-lineage-AGOHSXIS.js +66 -0
- package/dist/{session-scope-2ADEVY3C.js → session-scope-64QIDBJS.js} +30 -27
- package/dist/setup-wizard-JHR2HYWC.js +35 -0
- package/dist/{shard-manager-DFLCDZT5.js → shard-manager-YEOHEOHL.js} +4 -3
- package/dist/{skill-refinement-APBYOSGX.js → skill-refinement-BYZNTHQJ.js} +9 -8
- package/dist/{stack-promote-SZYIPTFT.js → stack-promote-4WRGX5YI.js} +6 -5
- package/dist/{stack-release-EYRDEGPD.js → stack-release-HRUOH243.js} +93 -80
- package/dist/{stack-update-YWK2YXP6.js → stack-update-X5LCAIMH.js} +9 -4
- package/dist/{steward-gate-CIOBPNX6.js → steward-gate-LWTZRKBJ.js} +9 -8
- package/dist/{support-inbox-OAWGFRKW.js → support-inbox-HA7N3XFN.js} +5 -4
- package/dist/{task-enforcement-YAU6ZGDC.js → task-enforcement-4MFBYFXY.js} +37 -28
- package/dist/task-request-inbox-VSXZKKPQ.js +64 -0
- package/dist/{task-scope-44N7XP5N.js → task-scope-MWBLCI4L.js} +30 -27
- package/dist/{tasks-crud-IWVDREXG.js → tasks-crud-FXGSJNQG.js} +30 -27
- package/dist/tasks-notify-NHACVTKE.js +60 -0
- package/dist/{tasks-review-VDFWFETP.js → tasks-review-L3FTWM6K.js} +30 -27
- package/dist/{telemetry-upload-3X5ESEKM.js → telemetry-upload-OFC56N3C.js} +13 -12
- package/dist/{token-budget-WZGO22ME.js → token-budget-JHZJH2OU.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-MX4CODRA.js} +1 -1
- package/dist/tui/App.js +44 -41
- package/dist/{tui-data-KT7YGVQS.js → tui-data-OLCJT3X3.js} +30 -27
- package/dist/{typed-messages-TKDGVPHS.js → typed-messages-RCMPEKJN.js} +1 -1
- package/dist/{update-support-ZVRMECNQ.js → update-support-Q5QYK6TG.js} +21 -19
- package/dist/{work-state-heartbeat-CA4CN7DQ.js → work-state-heartbeat-FOF6RQSC.js} +1 -1
- package/dist/{worker-gate-52MVKYGZ.js → worker-gate-UEBG2QLF.js} +3 -2
- package/dist/{workflow-engine-ZAFBPVUP.js → workflow-engine-E7PG3R34.js} +2 -2
- package/dist/{worktree-NNVXVV6A.js → worktree-VOLK2GOS.js} +10 -9
- package/dist/{worktree-sweep-IM2ZQG6Z.js → worktree-sweep-AATRCA33.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-BGYCUZYK.js → chunk-3NPMPEAC.js} +0 -0
- /package/dist/{chunk-YL2JH3XV.js → chunk-6C4UAKMS.js} +0 -0
- /package/dist/{chunk-U7RZIY74.js → chunk-7AY76CBP.js} +0 -0
- /package/dist/{chunk-WTH4CSAP.js → chunk-DFQEUZSI.js} +0 -0
- /package/dist/{chunk-YMCIZCNK.js → chunk-J34U3NT2.js} +0 -0
- /package/dist/{chunk-FVWI2AR4.js → chunk-LRSBJCDL.js} +0 -0
- /package/dist/{chunk-COHHVCFA.js → chunk-Q2DLJR3C.js} +0 -0
- /package/dist/{chunk-ZMYXQU4L.js → chunk-STDYMMOX.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-BA7UCIR6.js} +0 -0
- /package/dist/{entity-boost-HLFG2CH3.js → entity-boost-VXXED26D.js} +0 -0
- /package/dist/{memory-isolation-CF6FYSXD.js → memory-isolation-3HQ6NNX3.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-H6EJUPEP.js} +0 -0
- /package/dist/{webhook-pipe-A4X4SCMW.js → webhook-pipe-QJRFZVKA.js} +0 -0
- /package/dist/{wiki-acl-GNIXYWHJ.js → wiki-acl-X67M7QT3.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-W6J25BU7.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveRowVisibility
|
|
6
|
+
} from "./chunk-J5KRIGHE.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-AQF6XMZ7.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-J5QNK5VL.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-ZPW6FAEQ.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-2PIEDT3G.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-YZLDE3XJ.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-ESGLOI6Q.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-IM7PRQ27.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-64QIDBJS.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-TU5G4AKR.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-3HVLTPQA.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-YZNPKBNX.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-YZNPKBNX.js");
|
|
5437
5453
|
const client = await fastDbInit();
|
|
5438
5454
|
const result = await client.execute(q);
|
|
5439
5455
|
const id = result.rows[0]?.id;
|
|
@@ -5553,7 +5569,7 @@ function sendIntercom(targetSession, opts) {
|
|
|
5553
5569
|
}
|
|
5554
5570
|
if ((process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase() === "shadow") {
|
|
5555
5571
|
const shadowScope = opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0;
|
|
5556
|
-
void import("./notification-ledger-
|
|
5572
|
+
void import("./notification-ledger-4JVPBNDO.js").then((m) => m.recordShadowNudge(targetSession, reason, shadowScope)).catch(() => {
|
|
5557
5573
|
});
|
|
5558
5574
|
}
|
|
5559
5575
|
if (!opts?.force && isDebounced(targetSession)) {
|
|
@@ -5689,7 +5705,7 @@ function scheduleDeferredSpawnNudge(input) {
|
|
|
5689
5705
|
return;
|
|
5690
5706
|
}
|
|
5691
5707
|
queueIntercom(input.sessionName, `spawn nudge failed after ${attempt} attempts: ${msg}`, "signal");
|
|
5692
|
-
void import("./notifications-
|
|
5708
|
+
void import("./notifications-7EJE7FEP.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
|
|
5693
5709
|
agentId: getCoordinatorName(),
|
|
5694
5710
|
agentRole: "COO",
|
|
5695
5711
|
event: "error_spike",
|
|
@@ -6126,7 +6142,7 @@ function ensureEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6126
6142
|
const emp = roster.find((e) => baseAgentName(e.name) === baseAgentName(employeeName));
|
|
6127
6143
|
if (emp && !COORDINATOR_ROLES.has(emp.role)) {
|
|
6128
6144
|
try {
|
|
6129
|
-
const collisions = checkWorktreeCollisions(projectDir);
|
|
6145
|
+
const collisions = spawnOpts.collisionGuardHandled ? [] : checkWorktreeCollisions(projectDir);
|
|
6130
6146
|
if (collisions.length > 0) {
|
|
6131
6147
|
for (const c of collisions) {
|
|
6132
6148
|
process.stderr.write(
|
|
@@ -6361,6 +6377,7 @@ async function ensureEmployeeAsync(employeeName, exeSession, projectDir, opts) {
|
|
|
6361
6377
|
`
|
|
6362
6378
|
);
|
|
6363
6379
|
}
|
|
6380
|
+
asyncOpts = { ...asyncOpts, collisionGuardHandled: true };
|
|
6364
6381
|
const result = ensureEmployee(employeeName, exeSession, projectDir, asyncOpts);
|
|
6365
6382
|
if (asyncOpts.spawnLockHeld && result.sessionName) {
|
|
6366
6383
|
releaseSpawnLock(result.sessionName);
|
|
@@ -6383,6 +6400,71 @@ function resolveSpawnCwd(requestedCwd, projectDir, dirExists = existsSync9) {
|
|
|
6383
6400
|
if (dirExists(projectDir)) return { cwd: projectDir, fellBack: true, requestedCwd };
|
|
6384
6401
|
return { cwd: null, fellBack: false, requestedCwd };
|
|
6385
6402
|
}
|
|
6403
|
+
function spawnExitMarkerPath(sessionName) {
|
|
6404
|
+
const safe = sessionName.replace(/[^A-Za-z0-9._-]/g, "_");
|
|
6405
|
+
return path8.join(SESSION_CACHE, `spawn-exit-${safe}`);
|
|
6406
|
+
}
|
|
6407
|
+
function buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix) {
|
|
6408
|
+
const list = `${launchCommand}; printf '%s' "$?" > "${exitMarkerPath}"${cleanupSuffix}`;
|
|
6409
|
+
return `/bin/sh -c '${list.replace(/'/g, `'\\''`)}'`;
|
|
6410
|
+
}
|
|
6411
|
+
function readSpawnExitMarker(markerPath, read = (p) => readFileSync6(p, "utf8")) {
|
|
6412
|
+
let raw;
|
|
6413
|
+
try {
|
|
6414
|
+
raw = read(markerPath);
|
|
6415
|
+
} catch {
|
|
6416
|
+
return null;
|
|
6417
|
+
}
|
|
6418
|
+
const trimmed = raw.trim();
|
|
6419
|
+
if (!/^\d+$/.test(trimmed)) return null;
|
|
6420
|
+
return Number(trimmed);
|
|
6421
|
+
}
|
|
6422
|
+
function paneShowsRuntimeBanner(pane, runtime) {
|
|
6423
|
+
if (runtime === "exe-agent") return pane.includes("[exe-agent]") || pane.includes("online");
|
|
6424
|
+
if (runtime === "codex") {
|
|
6425
|
+
return pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex");
|
|
6426
|
+
}
|
|
6427
|
+
return pane.includes("Claude Code") || pane.includes("\u276F");
|
|
6428
|
+
}
|
|
6429
|
+
function classifySpawnFailurePane(pane) {
|
|
6430
|
+
const paneLc = pane.toLowerCase();
|
|
6431
|
+
if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
|
|
6432
|
+
return "path_not_found";
|
|
6433
|
+
}
|
|
6434
|
+
if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
|
|
6435
|
+
paneLc.includes("unknown option") || paneLc.includes("enoent")) {
|
|
6436
|
+
return "claude_launch_failed";
|
|
6437
|
+
}
|
|
6438
|
+
return "timeout";
|
|
6439
|
+
}
|
|
6440
|
+
function resolveStartupWatchCapMs(input) {
|
|
6441
|
+
const explicit = Number(input.override) || Number(input.legacyOverride);
|
|
6442
|
+
if (explicit > 0) return explicit;
|
|
6443
|
+
if (input.useCodex) return 2500;
|
|
6444
|
+
return input.callerIsDaemon ? 2e3 : 3e3;
|
|
6445
|
+
}
|
|
6446
|
+
function watchSpawnStartup(probes, opts) {
|
|
6447
|
+
const interval = Math.max(1, opts.intervalMs);
|
|
6448
|
+
const iterations = Math.max(0, Math.ceil(Math.max(0, opts.capMs) / interval));
|
|
6449
|
+
const capture = () => {
|
|
6450
|
+
try {
|
|
6451
|
+
return probes.capturePane();
|
|
6452
|
+
} catch {
|
|
6453
|
+
return "";
|
|
6454
|
+
}
|
|
6455
|
+
};
|
|
6456
|
+
let polls = 0;
|
|
6457
|
+
for (let i = 0; i <= iterations; i++) {
|
|
6458
|
+
polls++;
|
|
6459
|
+
const exitCode = probes.readLauncherExit();
|
|
6460
|
+
if (exitCode !== null) return { outcome: "exited", exitCode, pane: capture(), polls };
|
|
6461
|
+
if (!probes.isAlive()) {
|
|
6462
|
+
return { outcome: "exited", exitCode: probes.readLauncherExit(), pane: capture(), polls };
|
|
6463
|
+
}
|
|
6464
|
+
if (i < iterations) probes.sleep(interval);
|
|
6465
|
+
}
|
|
6466
|
+
return { outcome: "running", polls };
|
|
6467
|
+
}
|
|
6386
6468
|
function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
6387
6469
|
const transport = getTransport();
|
|
6388
6470
|
const sessionName = employeeSessionName(employeeName, exeSession, opts?.instance);
|
|
@@ -6732,29 +6814,29 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6732
6814
|
}
|
|
6733
6815
|
}
|
|
6734
6816
|
}
|
|
6735
|
-
let
|
|
6817
|
+
let launchCommand;
|
|
6736
6818
|
if (useExeAgent) {
|
|
6737
|
-
|
|
6819
|
+
launchCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}`;
|
|
6738
6820
|
} else if (useCodex) {
|
|
6739
6821
|
process.stderr.write(
|
|
6740
6822
|
`[tmux-routing] agent-config: ${employeeName} \u2192 codex (${agentRtConfig.model})
|
|
6741
6823
|
`
|
|
6742
6824
|
);
|
|
6743
|
-
|
|
6825
|
+
launchCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}`;
|
|
6744
6826
|
} else if (useOpencode) {
|
|
6745
6827
|
const binName = `${employeeName}-opencode`;
|
|
6746
6828
|
process.stderr.write(
|
|
6747
6829
|
`[tmux-routing] agent-config: ${employeeName} \u2192 opencode (${agentRtConfig.model})
|
|
6748
6830
|
`
|
|
6749
6831
|
);
|
|
6750
|
-
|
|
6832
|
+
launchCommand = binName;
|
|
6751
6833
|
} else if (useBinSymlink) {
|
|
6752
6834
|
const binName = `${employeeName}-${ccProvider}`;
|
|
6753
6835
|
process.stderr.write(
|
|
6754
6836
|
`[tmux-routing] provider cascade: ${ccProvider} \u2192 spawning ${binName}
|
|
6755
6837
|
`
|
|
6756
6838
|
);
|
|
6757
|
-
|
|
6839
|
+
launchCommand = binName;
|
|
6758
6840
|
} else {
|
|
6759
6841
|
let launcherAbs = "";
|
|
6760
6842
|
try {
|
|
@@ -6762,8 +6844,18 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6762
6844
|
if (existsSync9(launcherJs)) launcherAbs = launcherJs;
|
|
6763
6845
|
} catch {
|
|
6764
6846
|
}
|
|
6765
|
-
|
|
6847
|
+
launchCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}` : `exe-launch-agent --agent ${employeeName}`;
|
|
6848
|
+
}
|
|
6849
|
+
const exitMarkerPath = spawnExitMarkerPath(sessionName);
|
|
6850
|
+
try {
|
|
6851
|
+
mkdirSync6(SESSION_CACHE, { recursive: true });
|
|
6852
|
+
} catch {
|
|
6853
|
+
}
|
|
6854
|
+
try {
|
|
6855
|
+
unlinkSync4(exitMarkerPath);
|
|
6856
|
+
} catch {
|
|
6766
6857
|
}
|
|
6858
|
+
const spawnCommand = buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix);
|
|
6767
6859
|
const tmuxEnvArgs = Object.entries(launchEnv).flatMap(([key, val]) => ["-e", `${key}=${val}`]);
|
|
6768
6860
|
let spawnResult;
|
|
6769
6861
|
try {
|
|
@@ -6818,6 +6910,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6818
6910
|
}
|
|
6819
6911
|
const callerIsDaemon = process.env.EXE_IS_DAEMON === "1";
|
|
6820
6912
|
const POLL_INTERVAL_MS = 500;
|
|
6913
|
+
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
|
|
6821
6914
|
const LIVENESS_CAP_MS = Number(process.env.EXE_SPAWN_LIVENESS_CAP_MS) || (callerIsDaemon ? 6e3 : 8e3);
|
|
6822
6915
|
const livenessIterations = Math.max(1, Math.ceil(LIVENESS_CAP_MS / POLL_INTERVAL_MS));
|
|
6823
6916
|
let sessionLive = false;
|
|
@@ -6831,22 +6924,12 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6831
6924
|
if (!sessionLive) sessionLive = transport.isAlive(sessionName);
|
|
6832
6925
|
if (!sessionLive) {
|
|
6833
6926
|
releaseSpawnLock(sessionName);
|
|
6834
|
-
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
|
|
6835
6927
|
let lastPane = "";
|
|
6836
6928
|
try {
|
|
6837
6929
|
lastPane = transport.capturePane(sessionName, 50);
|
|
6838
6930
|
} catch {
|
|
6839
6931
|
}
|
|
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
|
-
}
|
|
6932
|
+
const spawnFailureCause = classifySpawnFailurePane(lastPane);
|
|
6850
6933
|
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
6934
|
process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${spawnFailureCause}): ${errMsg2}
|
|
6852
6935
|
`);
|
|
@@ -6868,31 +6951,59 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6868
6951
|
});
|
|
6869
6952
|
return { sessionName, error: errMsg2 };
|
|
6870
6953
|
}
|
|
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 };
|
|
6954
|
+
const STARTUP_WATCH_MS = resolveStartupWatchCapMs({
|
|
6955
|
+
useCodex,
|
|
6956
|
+
callerIsDaemon,
|
|
6957
|
+
override: process.env.EXE_SPAWN_STARTUP_WATCH_MS,
|
|
6958
|
+
legacyOverride: process.env.EXE_SPAWN_STABILITY_MS
|
|
6959
|
+
});
|
|
6960
|
+
const STARTUP_WATCH_INTERVAL_MS = 250;
|
|
6961
|
+
const startupWatch = watchSpawnStartup(
|
|
6962
|
+
{
|
|
6963
|
+
readLauncherExit: () => readSpawnExitMarker(exitMarkerPath),
|
|
6964
|
+
isAlive: () => transport.isAlive(sessionName),
|
|
6965
|
+
capturePane: () => transport.capturePane(sessionName, 50),
|
|
6966
|
+
sleep: (ms) => {
|
|
6967
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
6968
|
+
}
|
|
6969
|
+
},
|
|
6970
|
+
{ capMs: STARTUP_WATCH_MS, intervalMs: STARTUP_WATCH_INTERVAL_MS }
|
|
6971
|
+
);
|
|
6972
|
+
if (startupWatch.outcome === "exited") {
|
|
6973
|
+
try {
|
|
6974
|
+
execFileSync3("tmux", ["kill-session", "-t", sessionName], { timeout: 3e3 });
|
|
6975
|
+
} catch {
|
|
6895
6976
|
}
|
|
6977
|
+
releaseSpawnLock(sessionName);
|
|
6978
|
+
const { exitCode } = startupWatch;
|
|
6979
|
+
const refused = exitCode === 78;
|
|
6980
|
+
const errorCode = refused ? "launch_refused" : "startup_exit";
|
|
6981
|
+
const paneCause = classifySpawnFailurePane(startupWatch.pane);
|
|
6982
|
+
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)"}`;
|
|
6983
|
+
process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${errorCode}): ${errMsg2}
|
|
6984
|
+
`);
|
|
6985
|
+
recordOrchestrationEventBestEffort({
|
|
6986
|
+
eventType: "tmux.spawn.completed",
|
|
6987
|
+
source: "tmux-routing.spawnEmployee",
|
|
6988
|
+
severity: "warn",
|
|
6989
|
+
agentId: employeeName,
|
|
6990
|
+
sessionScope: exeSession,
|
|
6991
|
+
instanceId: opts?.instance != null ? String(opts.instance) : null,
|
|
6992
|
+
tmuxSession: sessionName,
|
|
6993
|
+
runtime: runtimeLabel,
|
|
6994
|
+
durationMs: Date.now() - spawnStartedAt,
|
|
6995
|
+
result: "failed",
|
|
6996
|
+
errorCode,
|
|
6997
|
+
payload: {
|
|
6998
|
+
detail: "spawn_exited_during_startup",
|
|
6999
|
+
exitCode,
|
|
7000
|
+
spawnFailureCause: paneCause,
|
|
7001
|
+
watchCapMs: STARTUP_WATCH_MS,
|
|
7002
|
+
polls: startupWatch.polls,
|
|
7003
|
+
spawnCommand
|
|
7004
|
+
}
|
|
7005
|
+
});
|
|
7006
|
+
return { sessionName, error: errMsg2 };
|
|
6896
7007
|
}
|
|
6897
7008
|
if (useCodex) {
|
|
6898
7009
|
let pane = "";
|
|
@@ -6932,28 +7043,14 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
|
|
|
6932
7043
|
for (let i = 0; i < pollIterations; i++) {
|
|
6933
7044
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, POLL_INTERVAL_MS);
|
|
6934
7045
|
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
|
-
}
|
|
7046
|
+
if (paneShowsRuntimeBanner(transport.capturePane(sessionName), runtimeLabel)) {
|
|
7047
|
+
booted = true;
|
|
7048
|
+
break;
|
|
6951
7049
|
}
|
|
6952
7050
|
} catch {
|
|
6953
7051
|
}
|
|
6954
7052
|
}
|
|
6955
7053
|
if (!booted && !callerIsDaemon) {
|
|
6956
|
-
const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : "claude";
|
|
6957
7054
|
process.stderr.write(
|
|
6958
7055
|
`[tmux-routing] ${runtimeLabel} boot banner poll capped at ${POLL_CAP_MS / 1e3}s for ${sessionName} (session is live) \u2014 sending task nudge anyway
|
|
6959
7056
|
`
|
|
@@ -7272,6 +7369,7 @@ export {
|
|
|
7272
7369
|
getReviewChecklist,
|
|
7273
7370
|
createReviewForCompletedTask,
|
|
7274
7371
|
cleanupReviewFile,
|
|
7372
|
+
BUSY_PATTERN,
|
|
7275
7373
|
_resetExeBinDirCache,
|
|
7276
7374
|
buildSpawnPath,
|
|
7277
7375
|
acquireSpawnLock,
|
|
@@ -7322,5 +7420,12 @@ export {
|
|
|
7322
7420
|
ensureEmployeeAsync,
|
|
7323
7421
|
decideSpawnWorktreeDiscipline,
|
|
7324
7422
|
resolveSpawnCwd,
|
|
7423
|
+
spawnExitMarkerPath,
|
|
7424
|
+
buildSpawnCommand,
|
|
7425
|
+
readSpawnExitMarker,
|
|
7426
|
+
paneShowsRuntimeBanner,
|
|
7427
|
+
classifySpawnFailurePane,
|
|
7428
|
+
resolveStartupWatchCapMs,
|
|
7429
|
+
watchSpawnStartup,
|
|
7325
7430
|
spawnEmployee
|
|
7326
7431
|
};
|
|
@@ -89,7 +89,7 @@ async function getRetrievalHealth() {
|
|
|
89
89
|
const coveragePct = totalMemories > 0 ? Math.round(memoriesWithVectors / totalMemories * 100) : null;
|
|
90
90
|
let dbRestore = { hasEvents: false, count: 0, last: null, quarantineFiles: 0 };
|
|
91
91
|
try {
|
|
92
|
-
const { getDbRestoreHealth } = await import("./db-restore-events-
|
|
92
|
+
const { getDbRestoreHealth } = await import("./db-restore-events-TFCZ4CPM.js");
|
|
93
93
|
dbRestore = getDbRestoreHealth();
|
|
94
94
|
} catch {
|
|
95
95
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/lib/unforgeable.ts
|
|
2
|
+
function createRegistry(opts) {
|
|
3
|
+
const entries = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
const freeze = opts?.freeze ?? true;
|
|
5
|
+
return {
|
|
6
|
+
mint(value, meta) {
|
|
7
|
+
const registered = freeze ? Object.freeze(value) : value;
|
|
8
|
+
entries.set(registered, meta);
|
|
9
|
+
return registered;
|
|
10
|
+
},
|
|
11
|
+
metaOf(value) {
|
|
12
|
+
if (value === null || typeof value !== "object") return void 0;
|
|
13
|
+
return entries.get(value);
|
|
14
|
+
},
|
|
15
|
+
has(value) {
|
|
16
|
+
return value !== null && typeof value === "object" && entries.has(value);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
createRegistry
|
|
23
|
+
};
|