@askexenow/exe-os 0.9.374 → 0.9.377
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/.env.customer.example +16 -1
- package/deploy/compose/.env.example +16 -1
- package/deploy/compose/docker-compose.yml +80 -18
- package/deploy/compose/gateway-watchdog.sh +17 -0
- package/deploy/compose/generate-env.ts +41 -1
- package/deploy/compose/sso-edge/default.conf.template +92 -64
- package/deploy/compose/sso-edge/error-pages/404.html +129 -0
- package/deploy/compose/sso-edge/error-pages/500.html +129 -0
- package/deploy/compose/sso-edge/error-pages/503.html +118 -0
- package/deploy/compose/sso-edge/sso-redirect.conf +115 -92
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-ONPPEWQV.js → active-agent-BOBBUJ74.js} +6 -6
- package/dist/{active-agent-UJKMG7LJ.js → active-agent-GFGEGK2U.js} +6 -6
- package/dist/{agent-defs-generator-ZWI6DXOE.js → agent-defs-generator-OX6UFPRX.js} +5 -5
- package/dist/{agent-loop-OYHJKNYH.js → agent-loop-7ZRH56EX.js} +1 -1
- package/dist/{agentic-ontology-WHFJ3QFS.js → agentic-ontology-DT3VOXBT.js} +1 -1
- package/dist/{backfill-metadata-3OUSQD5V.js → backfill-metadata-VRP6PTPP.js} +9 -9
- package/dist/{backup-verify-ZKTUYLTA.js → backup-verify-LWHKGOOV.js} +1 -1
- package/dist/behavior-injection-GMZKZ3BT.js +83 -0
- package/dist/behavior-promotion-QPC4AQ24.js +62 -0
- package/dist/{behaviors-ZJ45TFBJ.js → behaviors-GPI4BLTC.js} +16 -14
- package/dist/bin/agentic-ontology-backfill.js +10 -10
- package/dist/bin/agentic-reflection-backfill.js +11 -11
- package/dist/bin/agentic-semantic-label.js +10 -10
- package/dist/bin/backfill-conversations.js +14 -12
- package/dist/bin/backfill-responses.js +14 -12
- package/dist/bin/backfill-vectors.js +16 -14
- package/dist/bin/bulk-sync-postgres.js +21 -19
- package/dist/bin/cc-doctor.js +19 -11
- package/dist/bin/cleanup-stale-review-tasks.js +27 -26
- package/dist/bin/cli.js +83 -109
- package/dist/bin/daemon-restart-handoff.js +2 -1
- package/dist/bin/deferred-daemon-restart.js +118 -110
- package/dist/bin/exe-actions.js +176 -0
- package/dist/bin/exe-agent-config.js +5 -5
- package/dist/bin/exe-agent.js +23 -23
- package/dist/bin/exe-assign.js +16 -14
- package/dist/bin/exe-boot.js +91 -71
- package/dist/bin/exe-call.js +8 -8
- package/dist/bin/exe-cicd.js +1210 -0
- package/dist/bin/exe-cloud.js +70 -37
- package/dist/bin/exe-config-dump.js +5 -5
- package/dist/bin/exe-dispatch.js +28 -27
- package/dist/bin/exe-doctor.js +12 -11
- package/dist/bin/exe-export-behaviors.js +20 -18
- package/dist/bin/exe-forget.js +11 -11
- package/dist/bin/exe-gateway.js +10 -10
- package/dist/bin/exe-healthcheck.js +22 -10
- package/dist/bin/exe-heartbeat.js +33 -32
- package/dist/bin/exe-kill.js +32 -31
- package/dist/bin/exe-launch-agent.js +76 -54
- package/dist/bin/exe-mcp.js +10 -6
- package/dist/bin/exe-memory-reads.js +9 -9
- package/dist/bin/exe-model-supervisor.js +138 -0
- package/dist/bin/exe-new-employee.js +14 -14
- package/dist/bin/exe-os-mcp-proxy.js +10 -6
- package/dist/bin/exe-pending-messages.js +28 -27
- package/dist/bin/exe-pending-notifications.js +27 -26
- package/dist/bin/exe-pending-reviews.js +28 -27
- package/dist/bin/exe-rename.js +9 -9
- package/dist/bin/exe-repo-truth.js +1 -1
- package/dist/bin/exe-review.js +31 -30
- package/dist/bin/exe-search.js +10 -10
- package/dist/bin/exe-session-cleanup.js +32 -31
- package/dist/bin/exe-settings.js +21 -19
- package/dist/bin/exe-start-codex.js +31 -25
- package/dist/bin/exe-start-opencode.js +24 -22
- package/dist/bin/exe-start.sh +11 -2
- package/dist/bin/exe-status.js +29 -28
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +7 -7
- package/dist/bin/exe-timers.js +2 -1
- package/dist/bin/exe-watchdog.js +170 -16
- package/dist/bin/generate-hook-manifest.js +8 -41
- package/dist/bin/git-sweep.js +28 -27
- package/dist/bin/graph-backfill.js +11 -11
- package/dist/bin/graph-export.js +10 -10
- package/dist/bin/hooks-cli.js +289 -0
- package/dist/bin/import-history.js +14 -14
- package/dist/bin/install.js +130 -116
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -7
- package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +2 -2
- package/dist/bin/scan-tasks.js +52 -38
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +9 -9
- package/dist/bin/stack-update.js +10 -5
- package/dist/bin/verify-stack.js +3 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-JKVZ4ZAT.js → boot-generation-BN6GKASY.js} +6 -6
- package/dist/{boot-review-sections-2M6BTG73.js → boot-review-sections-OQ5JGSOD.js} +26 -25
- package/dist/{branch-hygiene-U5GFRSTP.js → branch-hygiene-QLD77IMJ.js} +1 -1
- package/dist/build-manifest.json +1186 -1106
- package/dist/{capability-cards-5IMJT6J7.js → capability-cards-EDZ62HKG.js} +5 -5
- package/dist/{capacity-monitor-SAXCQK7O.js → capacity-monitor-6GMTVILS.js} +28 -27
- package/dist/{catchup-brief-U2TXBLHD.js → catchup-brief-SGGBMDUP.js} +32 -31
- package/dist/{cc-binary-detect-6TNIY5JX.js → cc-binary-detect-ZR6WNOUU.js} +1 -3
- package/dist/{chunk-NKETJCB5.js → chunk-2ODXCCMR.js} +18 -3
- package/dist/{hook-integrity-KGAV6ZC2.js → chunk-3L72UBUH.js} +28 -15
- package/dist/chunk-3OX5S7KZ.js +273 -0
- package/dist/{chunk-W75GTHR3.js → chunk-3SRZNJKD.js} +1 -1
- package/dist/{chunk-I4DNJFDR.js → chunk-42IFYZUN.js} +4 -4
- package/dist/{chunk-JHI5WMK5.js → chunk-473JUDCT.js} +5 -5
- package/dist/{chunk-ANLFH23R.js → chunk-4F5CNI65.js} +1 -1
- package/dist/{chunk-AWWKRZMB.js → chunk-4KVSCQND.js} +87 -14
- package/dist/{chunk-ZCERWHY2.js → chunk-4M6RXJEY.js} +33 -23
- package/dist/{chunk-YTSXPJUQ.js → chunk-4YJEEOYT.js} +3 -3
- package/dist/{chunk-6RKKVPYF.js → chunk-4YUGB637.js} +1 -1
- package/dist/{chunk-XXOPG4BW.js → chunk-4ZSOKEDY.js} +3 -3
- package/dist/{chunk-55BEFF4V.js → chunk-5DF4Y6EC.js} +1 -1
- package/dist/{chunk-4QCFFW2H.js → chunk-5QCIWWFA.js} +46 -0
- package/dist/{chunk-3UUX5OY4.js → chunk-5QKLWJ4Z.js} +1 -1
- package/dist/{chunk-YSLGFPWX.js → chunk-5UBWBXLF.js} +3 -3
- package/dist/chunk-5WA4DG2A.js +117 -0
- package/dist/{chunk-4EN3IZ3Q.js → chunk-64ODONK2.js} +67 -1
- package/dist/{chunk-TAMDAOCU.js → chunk-66CGXQUA.js} +239 -39
- package/dist/{chunk-QHJR7IMX.js → chunk-6F3FQCAQ.js} +3 -3
- package/dist/{chunk-WMEYJT4R.js → chunk-6FG34V6D.js} +15 -14
- package/dist/{chunk-NMH5ZQPU.js → chunk-6KQ6WMTI.js} +1 -1
- package/dist/{chunk-IRVOXUSK.js → chunk-6WKBTZVL.js} +10 -4
- package/dist/{chunk-NOKJCF27.js → chunk-7INEFMVU.js} +9 -3
- package/dist/{chunk-GSJLB6JI.js → chunk-7THUQU44.js} +34 -8
- package/dist/{chunk-HDLAB7W3.js → chunk-7UH2JWBF.js} +1 -1
- package/dist/{chunk-KTCXJWJG.js → chunk-7UNMSF5O.js} +1 -1
- package/dist/{chunk-JTVIANUB.js → chunk-AEUGIJDO.js} +3 -1
- package/dist/{chunk-DSJI76XL.js → chunk-AHNVFBVB.js} +113 -16
- package/dist/{chunk-IBS2FAI4.js → chunk-AUKRBHHZ.js} +4 -1
- package/dist/{chunk-AKLJ4JH3.js → chunk-BBK2TSK3.js} +1 -1
- package/dist/{chunk-ZL4AGWAH.js → chunk-BNWWVYRN.js} +6 -5
- package/dist/{chunk-PY3FOMRN.js → chunk-BQEZPRUC.js} +4 -4
- package/dist/{chunk-DIXXEE3S.js → chunk-BQXYXJYC.js} +721 -309
- package/dist/{chunk-ORM7ZFKC.js → chunk-BZ546I4Q.js} +32 -0
- package/dist/{chunk-3KDCORDO.js → chunk-C2UN464N.js} +1 -1
- package/dist/{chunk-75H4R62K.js → chunk-CBPNZFSU.js} +0 -2
- package/dist/{chunk-YLXTKI6M.js → chunk-CHO5SNWR.js} +1 -1
- package/dist/{chunk-MXPNVSXI.js → chunk-CIEVY5TD.js} +11 -11
- package/dist/{chunk-UBK7HK3J.js → chunk-CKLJT2DH.js} +2 -2
- package/dist/{chunk-MOGA4Q7F.js → chunk-CKOJP7JI.js} +1 -1
- package/dist/{chunk-V3W3SATA.js → chunk-CL4J4757.js} +1 -1
- package/dist/{chunk-XNNECNDL.js → chunk-CQFWTWC6.js} +13 -13
- package/dist/{chunk-PDVXWXTL.js → chunk-CROVXJ4S.js} +3 -3
- package/dist/{chunk-WJG344NC.js → chunk-CWSLTSL6.js} +8 -8
- package/dist/{chunk-VMTZ4RUW.js → chunk-DDMGQ5Q3.js} +60 -26
- package/dist/{chunk-YKC7QDZH.js → chunk-DN24VTS5.js} +31 -6
- package/dist/{chunk-IN6CAM4F.js → chunk-EHAN752X.js} +7 -7
- package/dist/{chunk-EXTZSNWL.js → chunk-EPHSISMT.js} +2 -2
- package/dist/{chunk-6EZQUNE6.js → chunk-FCMQVEVL.js} +36 -3
- package/dist/{chunk-3L2QU5ZF.js → chunk-FS7XF7SE.js} +1 -1
- package/dist/{chunk-LGS2V2XD.js → chunk-FUKVP54K.js} +66 -19
- package/dist/{chunk-44TLJZJ5.js → chunk-FX2QRSRT.js} +1 -1
- package/dist/{chunk-PWRC5XZO.js → chunk-FXZ6VGFW.js} +16 -8
- package/dist/{chunk-NT7W4RXD.js → chunk-GKDAQL45.js} +1 -1
- package/dist/{chunk-EKE37MO4.js → chunk-GOT5ZHPX.js} +3 -3
- package/dist/{chunk-SLLLOOEI.js → chunk-GPJIBLP4.js} +1 -0
- package/dist/{chunk-EKYYMIVT.js → chunk-GPUOUUHA.js} +10 -1
- package/dist/{chunk-PB5S7YOF.js → chunk-GXNBPTPJ.js} +1 -1
- package/dist/{chunk-4SJ4LK4V.js → chunk-HE34XVD5.js} +5 -5
- package/dist/{chunk-6VHOQ3IM.js → chunk-HHAKXIKX.js} +12 -9
- package/dist/{chunk-TFKCERAK.js → chunk-HHT527PV.js} +38 -41
- package/dist/{chunk-ZSODLMFV.js → chunk-HIVOLPLD.js} +1 -40
- package/dist/{chunk-UCFC2AEI.js → chunk-I3LDTSWU.js} +1 -1
- package/dist/{chunk-Q3AXXKDF.js → chunk-IKXH4BFC.js} +5 -5
- package/dist/chunk-IMYGYIAI.js +23 -0
- package/dist/{chunk-GS7LIT34.js → chunk-IPHLUZ37.js} +1 -1
- package/dist/{chunk-M4IRPXSZ.js → chunk-IZA7XW2Q.js} +3 -3
- package/dist/{chunk-SEQIPGLU.js → chunk-IZLML47J.js} +1 -1
- package/dist/{chunk-4HKTO2SV.js → chunk-JRMHGO5B.js} +1 -1
- package/dist/{chunk-U73AC5AN.js → chunk-JSTTPYL3.js} +16 -16
- package/dist/{chunk-6SCGLHJ7.js → chunk-JVWLHBAV.js} +4 -4
- package/dist/{chunk-OVEQE6YS.js → chunk-K7UNIEB4.js} +254 -48
- package/dist/{chunk-HNWS7YHN.js → chunk-KBR5LIWD.js} +1 -1
- package/dist/{chunk-AKLQSC6W.js → chunk-KI7O64XV.js} +328 -98
- package/dist/{chunk-XXFKSJYA.js → chunk-KK3MIY5C.js} +5 -5
- package/dist/{chunk-U6SUKSZR.js → chunk-KO3OHI6V.js} +3 -3
- package/dist/{chunk-NJFJWQNN.js → chunk-L5CGXEZC.js} +27 -22
- package/dist/{chunk-NBXDXKLC.js → chunk-LK3XQDBP.js} +1 -1
- package/dist/{chunk-T3QUKNLI.js → chunk-LM443ORV.js} +1 -1
- package/dist/{chunk-BBSIEYF5.js → chunk-LNAFLXL7.js} +12 -4
- package/dist/{chunk-32YV32VA.js → chunk-LTUA5EYI.js} +122 -11
- package/dist/{chunk-23MVDXLY.js → chunk-MAXD5JQL.js} +11 -10
- package/dist/{chunk-GNUAL43X.js → chunk-MFASHRJ6.js} +5 -5
- package/dist/chunk-MFYMDGE7.js +37 -0
- package/dist/{chunk-VKJGHAZT.js → chunk-MGVILAYU.js} +57 -13
- package/dist/{chunk-DB55JZHU.js → chunk-MSLWRWTI.js} +1 -1
- package/dist/{chunk-C2L622QJ.js → chunk-NB5IRTC4.js} +52 -44
- package/dist/{chunk-2ZOEC4KC.js → chunk-ND75TGPR.js} +2 -2
- package/dist/{chunk-VRTCVZND.js → chunk-NE34MWVL.js} +142 -16
- package/dist/{chunk-S2WBS6BG.js → chunk-NMOFLWDY.js} +1 -1
- package/dist/{chunk-CRCB5S7I.js → chunk-NPXKGBVZ.js} +140 -23
- package/dist/{chunk-JSMDRKPJ.js → chunk-NRBGUIPE.js} +1 -1
- package/dist/{chunk-4LWBC7CM.js → chunk-NY6SBR4O.js} +1 -1
- package/dist/{chunk-UCUOGVDX.js → chunk-O3K2C22L.js} +13 -1
- package/dist/{chunk-R522MWAR.js → chunk-OATET4BV.js} +2 -2
- package/dist/chunk-OOZU5H3T.js +86 -0
- package/dist/{chunk-XFTEX77S.js → chunk-OQ4FNDRG.js} +28 -6
- package/dist/{chunk-VYQ7B7DI.js → chunk-OWVX52XF.js} +4 -4
- package/dist/{chunk-AETLDRZB.js → chunk-PEAAX6UA.js} +1 -1
- package/dist/{chunk-UM3N6VND.js → chunk-PFAVHC5N.js} +5 -5
- package/dist/chunk-PMVVUIHH.js +85 -0
- package/dist/chunk-PPMGQFLJ.js +2317 -0
- package/dist/{chunk-7TSBV3SD.js → chunk-PTY2N23C.js} +310 -2
- package/dist/{chunk-UKLN57Q5.js → chunk-PZ5SKYK6.js} +4 -4
- package/dist/{chunk-636LKCKE.js → chunk-Q6ZLQMP2.js} +1 -1
- package/dist/{chunk-N7VEP5B3.js → chunk-QFR5EKZG.js} +29 -7
- package/dist/{chunk-YMP2QSOP.js → chunk-QN56VQ6Z.js} +1 -1
- package/dist/{chunk-6YVUR3OU.js → chunk-QR3BUMOS.js} +2 -2
- package/dist/{chunk-XZ65ST2I.js → chunk-QV5CQLQH.js} +2 -2
- package/dist/{chunk-DJOIMFKV.js → chunk-REZIGNA6.js} +2 -2
- package/dist/{chunk-UQGSBM3U.js → chunk-RFPMXR6B.js} +11 -0
- package/dist/{chunk-DN4YVV4Z.js → chunk-RSABKW6B.js} +1 -1
- package/dist/{chunk-LP4GB656.js → chunk-RZNP35SI.js} +2 -2
- package/dist/{chunk-NUTZJZKW.js → chunk-SKTAZGFI.js} +10 -42
- package/dist/{chunk-TQAZTRQ3.js → chunk-SVXUT2DN.js} +4 -4
- package/dist/{chunk-DJ7YXOTU.js → chunk-T7EF5CQO.js} +3 -3
- package/dist/{chunk-QAEWWYHL.js → chunk-TDF2XKLK.js} +5 -1
- package/dist/{chunk-ZGYNKA3O.js → chunk-TT5BBVLX.js} +29 -31
- package/dist/{chunk-5H47VHB7.js → chunk-UWX6MMCX.js} +1 -1
- package/dist/{chunk-XL5MFGMR.js → chunk-V4YNN7PA.js} +10 -3
- package/dist/{chunk-SL6KQYDU.js → chunk-V5DDXXMP.js} +7 -7
- package/dist/{chunk-DZKPOSFD.js → chunk-VH6SPPNA.js} +1 -1
- package/dist/{chunk-LDNYSMPZ.js → chunk-VJUUI2VT.js} +1 -1
- package/dist/{chunk-CBCGDEJA.js → chunk-VN5WOOAQ.js} +42 -6
- package/dist/{chunk-EXDW3E2R.js → chunk-VPHJ2LUI.js} +165 -15
- package/dist/{chunk-GOMQ7PVQ.js → chunk-WJC6AAJN.js} +1 -1
- package/dist/{chunk-GJI77VDO.js → chunk-WVBVUVZB.js} +6 -5
- package/dist/{chunk-A6PDF4BO.js → chunk-XTQ7R2PA.js} +2 -2
- package/dist/{chunk-L6RXG36J.js → chunk-Y2HD2YB7.js} +1 -1
- package/dist/{chunk-KTU3EAWK.js → chunk-YAACLBZ7.js} +5 -5
- package/dist/{chunk-7GE2EQ23.js → chunk-YGVAKKGJ.js} +11 -6
- package/dist/chunk-YLHACCCB.js +166 -0
- package/dist/{chunk-PLZSZOZN.js → chunk-YP6UGVEY.js} +3 -3
- package/dist/{chunk-ULIBLJ6W.js → chunk-YYC553FO.js} +5 -5
- package/dist/{chunk-T35RCQFE.js → chunk-YZPEQW7H.js} +9 -8
- package/dist/{chunk-KI5PFRG6.js → chunk-ZKGWHT56.js} +60 -2
- package/dist/{chunk-NUK7EEN5.js → chunk-ZKJ5S23O.js} +33 -13
- package/dist/chunk-ZLPS3GR7.js +146 -0
- package/dist/{chunk-XH7YL7JM.js → chunk-ZMX22HSS.js} +50 -6
- package/dist/{chunk-JY5GAZYC.js → chunk-ZQEJ4IX2.js} +4 -0
- package/dist/{chunk-R4CBHKZ2.js → chunk-ZS5JO6QV.js} +7 -6
- package/dist/{cleanup-graph-garbage-DPJGO52H.js → cleanup-graph-garbage-LAPIZGFX.js} +12 -12
- package/dist/{cloud-sync-command-JPNTT4OQ.js → cloud-sync-command-QAZ2NWRA.js} +11 -2
- package/dist/{cloud-sync-db-init-V2LWIUQU.js → cloud-sync-db-init-HAGVF32Y.js} +1 -1
- package/dist/{cloud-sync-shutdown-BNALPWGX.js → cloud-sync-shutdown-DAEPCFVK.js} +5 -5
- package/dist/{co-activation-CMNSWS6B.js → co-activation-523TKQPZ.js} +5 -5
- package/dist/{co-occurrence-WRI2NAN6.js → co-occurrence-PQUCTENN.js} +36 -17
- package/dist/{code-context-index-NOJSHLPN.js → code-context-index-LIDOFKOR.js} +6 -4
- package/dist/{code-context-watcher-VZNZU3BO.js → code-context-watcher-4F7K2N3U.js} +6 -4
- package/dist/{content-extractor-NXYNEF5K.js → content-extractor-DJM5EUDA.js} +2 -2
- package/dist/{conversation-entity-extractor-74252CAO.js → conversation-entity-extractor-THGKQ5RD.js} +5 -5
- package/dist/{crdt-sync-B3JN6AIV.js → crdt-sync-32B55NOJ.js} +1 -1
- package/dist/{crm-webhook-GYWQRFET.js → crm-webhook-FHRISFYQ.js} +2 -2
- package/dist/{cto-delegation-gate-LQHVLEMW.js → cto-delegation-gate-O6XPGECP.js} +27 -26
- package/dist/{daemon-auth-QZHEO7IQ.js → daemon-auth-PNKHERLV.js} +6 -1
- package/dist/daemon-drift-N2GKUBAO.js +15 -0
- package/dist/{daemon-orchestration-5HIQALZH.js → daemon-orchestration-BWLSJG2X.js} +33 -30
- package/dist/{daemon-ready-P2BR2XP5.js → daemon-ready-BN6EZLTQ.js} +1 -1
- package/dist/{daemon-ready-signal-CKXPUMJ2.js → daemon-ready-signal-PNDMVKPJ.js} +3 -1
- package/dist/{daemon-restart-circuit-breaker-SMTWFX27.js → daemon-restart-circuit-breaker-CD4VMCU7.js} +1 -1
- package/dist/daemon-restart-report-FIO5HZTJ.js +15 -0
- package/dist/{daemon-timer-report-TNJH5SFY.js → daemon-timer-report-6UK5PSDP.js} +2 -1
- package/dist/{db-integrity-events-2DTFO37N.js → db-integrity-events-GYGANKZV.js} +1 -1
- package/dist/{destructive-data-guard-BVFWPPIS.js → destructive-data-guard-HHWUBIGS.js} +1 -1
- package/dist/{doc-graph-extractor-PQHDHQPQ.js → doc-graph-extractor-HOKOV7BE.js} +10 -10
- package/dist/{documents-C4SSPJMC.js → documents-HWEJMONR.js} +16 -14
- package/dist/{dreaming-XAO3FCBV.js → dreaming-FMNDODG2.js} +31 -30
- package/dist/{employee-boot-brief-W4OHUMRQ.js → employee-boot-brief-DBFROOQJ.js} +35 -34
- package/dist/{entity-boost-3UWGXG5O.js → entity-boost-5V4W6NFA.js} +1 -1
- package/dist/{exe-drift-AG2KMKD5.js → exe-drift-V55UAYRT.js} +6 -6
- package/dist/{exe-export-IC5BT335.js → exe-export-LHN42ZUS.js} +18 -16
- package/dist/{exe-import-A35ZLDPG.js → exe-import-M536BEZC.js} +18 -16
- package/dist/{exe-key-TCMJNYLA.js → exe-key-37XIR22X.js} +111 -107
- package/dist/{exe-org-JXCR3JYZ.js → exe-org-7TDIRNTE.js} +14 -14
- package/dist/{exe-snapshot-SV6SRIG6.js → exe-snapshot-EOUBCIQK.js} +34 -33
- package/dist/{fast-db-init-L2RGKJWH.js → fast-db-init-GWUZ746B.js} +1 -1
- package/dist/{founder-context-D4HFIESJ.js → founder-context-6LQKET4A.js} +2 -2
- package/dist/{fts-integrity-4YB34KWX.js → fts-integrity-PLAL6NMG.js} +1 -1
- package/dist/gateway/index.js +17 -17
- package/dist/{git-main-guard-VTW4N3CM.js → git-main-guard-BGICS25C.js} +1 -1
- package/dist/{git-staleness-TN7CYGFG.js → git-staleness-QNNXJK3W.js} +5 -5
- package/dist/{global-procedures-YFDEIOG7.js → global-procedures-NMQGF54V.js} +7 -7
- package/dist/{gotrue-session-ODZ2ERJX.js → gotrue-session-U4H3UGHL.js} +1 -3
- package/dist/{graph-auto-extract-3YR3TYRW.js → graph-auto-extract-7POGAKHM.js} +10 -10
- package/dist/{graph-query-AP5R6ZHO.js → graph-query-ZEDO4BDF.js} +1 -1
- package/dist/{graph-rag-Z2KCJTPK.js → graph-rag-JA7XN7NO.js} +5 -5
- package/dist/hook-integrity-6NLSNTXD.js +15 -0
- package/dist/{hook-prefetch-K5DN3TOQ.js → hook-prefetch-4KH3D4YU.js} +28 -26
- package/dist/hook-tamper-log-Z4PWC7N4.js +90 -0
- package/dist/hooks/bug-report-worker.js +31 -30
- package/dist/hooks/codex-stop-task-finalizer.js +33 -32
- package/dist/hooks/commit-complete.js +30 -29
- package/dist/hooks/error-recall.js +12 -12
- package/dist/hooks/exe-heartbeat-hook.js +7 -7
- package/dist/hooks/ingest-worker.js +17 -15
- package/dist/hooks/ingest.js +20 -20
- package/dist/hooks/instructions-loaded.js +9 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +8 -8
- package/dist/hooks/post-compact.js +7 -7
- package/dist/hooks/post-tool-combined.js +14 -14
- package/dist/hooks/pre-compact.js +30 -29
- package/dist/hooks/pre-tool-use.js +303 -489
- package/dist/hooks/prompt-submit.js +61 -54
- package/dist/hooks/session-end.js +35 -34
- package/dist/hooks/session-start.js +18 -18
- package/dist/hooks/stop.js +36 -35
- package/dist/hooks/subagent-stop.js +32 -31
- package/dist/hooks/summary-worker.js +36 -35
- package/dist/index.js +39 -38
- package/dist/{installer-LK35OX6R.js → installer-M34Q7LAS.js} +25 -10
- package/dist/{installer-54HTN5RE.js → installer-POV6TDQ5.js} +12 -8
- package/dist/{installer-LLWKZI2S.js → installer-S624ZOMB.js} +12 -8
- package/dist/{intercom-queue-5NOT2RKI.js → intercom-queue-MKDWAEUV.js} +26 -25
- package/dist/lib/cloud-sync.js +27 -19
- package/dist/lib/consolidation.js +12 -12
- package/dist/lib/database.js +5 -5
- package/dist/lib/db-backup.js +7 -1
- package/dist/lib/db-daemon-client.js +8 -6
- package/dist/lib/db-write-worker.js +4 -4
- package/dist/lib/db.js +5 -5
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +6 -4
- package/dist/lib/employee-templates.js +8 -8
- package/dist/lib/employees.js +5 -5
- package/dist/lib/exe-daemon-client.js +5 -3
- package/dist/lib/exe-daemon.js +333 -262
- package/dist/lib/hybrid-search.js +10 -10
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +17 -7
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +27 -26
- package/dist/lib/post-tool-memory.js +9 -9
- package/dist/lib/registry-proxy.js +3 -1
- package/dist/lib/reminders.js +6 -6
- package/dist/lib/schedules.js +11 -11
- package/dist/lib/session-registry.js +11 -7
- package/dist/lib/session-wrappers.js +1 -1
- package/dist/lib/skill-learning.js +17 -15
- package/dist/lib/status-brief.js +2 -1
- package/dist/lib/store.js +9 -9
- package/dist/lib/task-router.js +6 -6
- package/dist/lib/tasks.js +28 -27
- package/dist/lib/tmux-routing.js +26 -25
- package/dist/lib/tmux-status.js +5 -1
- package/dist/lib/token-spend.js +6 -6
- package/dist/{license-gate-JVMB6OFD.js → license-gate-2QNMBAZU.js} +3 -3
- package/dist/{license-sync-5VYS2F2W.js → license-sync-FEDKH5MD.js} +2 -2
- package/dist/{mailbox-inbox-4MEUOL3J.js → mailbox-inbox-XE72D3AX.js} +2 -2
- package/dist/{mailbox-outbox-J6WIF3UY.js → mailbox-outbox-DNDDP2HW.js} +1 -1
- package/dist/mcp/register-tools.js +110 -106
- package/dist/mcp/server.js +113 -109
- package/dist/mcp/tools/complete-reminder.js +7 -7
- package/dist/mcp/tools/create-reminder.js +7 -7
- package/dist/mcp/tools/create-task.js +30 -29
- package/dist/mcp/tools/deactivate-behavior.js +18 -16
- package/dist/mcp/tools/list-reminders.js +7 -7
- package/dist/mcp/tools/list-tasks.js +30 -29
- package/dist/mcp/tools/send-message.js +33 -30
- package/dist/mcp/tools/update-task.js +29 -28
- package/dist/{mcp-child-registry-OTG4MWO7.js → mcp-child-registry-DVHYAHPW.js} +2 -2
- package/dist/{mcp-health-HNVSWKFA.js → mcp-health-B5EKRCZG.js} +2 -2
- package/dist/{mcp-http-config-DQWL7U2Z.js → mcp-http-config-ZJ7XHWT7.js} +10 -6
- package/dist/{mcp-session-identity-277GASTQ.js → mcp-session-identity-PEVM7VIP.js} +26 -25
- package/dist/{memory-cards-3S2ZQPR7.js → memory-cards-VN5DEWPD.js} +9 -9
- package/dist/{memory-graph-extractor-A6DFEFIN.js → memory-graph-extractor-TMEB6WLA.js} +11 -11
- package/dist/{memory-poisoning-defense-ZVP4H6DY.js → memory-poisoning-defense-DYHARQ2G.js} +5 -5
- package/dist/{memory-pressure-watchdog-6W5F6R7H.js → memory-pressure-watchdog-J6Q3SIBL.js} +27 -26
- package/dist/{memory-queue-client-ADSDP6OX.js → memory-queue-client-QC2OTMJB.js} +6 -4
- package/dist/{memory-reflection-BKB2YOE6.js → memory-reflection-ZYJUOSFX.js} +9 -9
- package/dist/{message-queue-client-XQN7QABL.js → message-queue-client-OEQCGSWC.js} +1 -25
- package/dist/{notification-ledger-CLGM7ODF.js → notification-ledger-TG6EFYBP.js} +29 -28
- package/dist/{notifications-MACUZPYP.js → notifications-LGYY22W5.js} +26 -25
- package/dist/{orchestration-events-N7LYMUGA.js → orchestration-events-JPHB6NPY.js} +6 -6
- package/dist/{orchestrator-4X24EWHV.js → orchestrator-IC4WGP6L.js} +28 -27
- package/dist/{org-brief-session-FZOFMO5U.js → org-brief-session-DEPHWCQR.js} +9 -9
- package/dist/{org-consent-policy-O5E6HXBL.js → org-consent-policy-T27AO5OJ.js} +2 -2
- package/dist/{org-join-POWUG25F.js → org-join-A3YXC5RB.js} +2 -2
- package/dist/{org-key-admin-E7EMDOZZ.js → org-key-admin-SQFHCVP2.js} +3 -3
- package/dist/{org-partner-runtime-FODONVTM.js → org-partner-runtime-L7L2WWGN.js} +10 -10
- package/dist/{org-row-visibility-VX4AVV5Q.js → org-row-visibility-M54Z6ZH3.js} +1 -1
- package/dist/{pipeline-router-6GGT2ZW3.js → pipeline-router-NKYAUR3Y.js} +6 -6
- package/dist/{plan-limits-FUN76LYY.js → plan-limits-ISRRGF23.js} +8 -8
- package/dist/{platform-procedures-7YSCLF4Z.js → platform-procedures-Z7ZGBJWN.js} +1 -1
- package/dist/{project-boot-3Q65LCIP.js → project-boot-BLYGVUJH.js} +4 -1
- package/dist/{project-name-LJVFMYTQ.js → project-name-WKSNNKXK.js} +6 -6
- package/dist/{projection-worker-4OANGP5K.js → projection-worker-RNYPE46G.js} +2 -2
- package/dist/{prospective-memory-KR3P4T6N.js → prospective-memory-GEO6E3UL.js} +5 -5
- package/dist/{push-notifications-NCZLH6DI.js → push-notifications-EY6BXZUY.js} +27 -26
- package/dist/{reproject-worktree-memories-PWYKPB2U.js → reproject-worktree-memories-DAA5GWMH.js} +28 -27
- package/dist/{reranker-6V3C2AO4.js → reranker-7OADQPMG.js} +1 -1
- package/dist/{retrieval-health-5D7O6VH6.js → retrieval-health-FCEDWN2P.js} +2 -2
- package/dist/{review-polling-QW3LJ4KN.js → review-polling-G52BR4MC.js} +27 -26
- package/dist/runtime/index.js +39 -38
- package/dist/{session-events-T45SSTMF.js → session-events-P6E2373E.js} +27 -26
- package/dist/{session-kill-telemetry-QSPVJGBF.js → session-kill-telemetry-OHNJMIVT.js} +27 -26
- package/dist/{session-mcp-config-SC5BLWZG.js → session-mcp-config-WFZAH6R5.js} +2 -1
- package/dist/{session-scope-KRWE54C4.js → session-scope-DKOHPQPJ.js} +26 -25
- package/dist/{setup-wizard-GP3TBTPF.js → setup-wizard-RNU3RFBE.js} +1 -1
- package/dist/{skill-refinement-C7JTMLJG.js → skill-refinement-AKJTHFXC.js} +6 -6
- package/dist/{stack-generate-manifest-MFMDWRUP.js → stack-generate-manifest-7WJZWSPK.js} +163 -15
- package/dist/{stack-promote-EKSCYY63.js → stack-promote-OP2URGFF.js} +4 -4
- package/dist/{stack-release-2GZAAFO4.js → stack-release-MY6U2QIO.js} +31 -8
- package/dist/{stack-update-J6JXSTAZ.js → stack-update-QSHSLUTZ.js} +3 -3
- package/dist/{steward-gate-BFCCMCSW.js → steward-gate-KMLS5ECC.js} +6 -6
- package/dist/{subagent-brief-injection-ED36PLYY.js → subagent-brief-injection-HCKZQZBF.js} +37 -36
- package/dist/{support-inbox-YW47SYJF.js → support-inbox-UBXU5RKV.js} +11 -11
- package/dist/{support-outbox-HFJWG52M.js → support-outbox-G2NG2U5K.js} +2 -2
- package/dist/{sweep-budget-KMPJ7O5Z.js → sweep-budget-YGLCNXZZ.js} +9 -3
- package/dist/{task-enforcement-CECTQX4U.js → task-enforcement-2GR7HU6V.js} +27 -26
- package/dist/{task-request-inbox-Q5T4N5K7.js → task-request-inbox-ANCVK2VG.js} +2 -2
- package/dist/{task-scope-ERVEUEYU.js → task-scope-QANJJXXB.js} +30 -29
- package/dist/{tasks-crud-ZRQNJXQ2.js → tasks-crud-45WOIMIM.js} +44 -25
- package/dist/{tasks-notify-MIZH4C2O.js → tasks-notify-ZJS4MA3S.js} +29 -26
- package/dist/{tasks-review-Z7J2P6DG.js → tasks-review-ZVPKY47Z.js} +26 -25
- package/dist/{telemetry-upload-LVQUQYFP.js → telemetry-upload-VY3UWAEL.js} +10 -10
- package/dist/{token-budget-BU4NOVZF.js → token-budget-XHX6XFEC.js} +6 -6
- package/dist/{tool-capability-index-7F42MOJT.js → tool-capability-index-6HLZU437.js} +1 -1
- package/dist/{tool-telemetry-O27EVMBR.js → tool-telemetry-GBDI4AXR.js} +1 -1
- package/dist/tui/App.js +36 -35
- package/dist/{tui-data-TPWWBIUQ.js → tui-data-IQFE3UW3.js} +30 -29
- package/dist/{typed-messages-RCMPEKJN.js → typed-messages-P2HLLA62.js} +1 -1
- package/dist/{update-support-F2F5537B.js → update-support-BDN5AK4R.js} +25 -22
- package/dist/{work-claims-B73X5NE7.js → work-claims-PDQNLE5K.js} +7 -7
- package/dist/{work-state-heartbeat-P4YX6E2R.js → work-state-heartbeat-CH6BLQKV.js} +1 -1
- package/dist/{worker-gate-BEEIIVWA.js → worker-gate-NUUSQMBT.js} +1 -3
- package/dist/{workflow-engine-5X46PFCW.js → workflow-engine-RZ7QEI3Z.js} +2 -2
- package/dist/{worktree-W47CIMJ6.js → worktree-Q25PZST6.js} +11 -7
- package/dist/worktree-ownership-guard-4LKMW6PW.js +421 -0
- package/dist/{worktree-sweep-BNBD4RFX.js → worktree-sweep-EV5YQ2OB.js} +8 -8
- package/package.json +15 -3
- package/release-notes.json +13 -6
- package/src/commands/exe.md +16 -16
- package/stack.release.json +9 -8
- package/dist/behavior-injection-M6UYZCMW.js +0 -63
- package/dist/chunk-BJ7AVSY6.js +0 -50
- package/dist/daemon-restart-report-EIVD6WDJ.js +0 -10
- package/dist/worktree-ownership-guard-OUWJROW2.js +0 -88
- /package/dist/{chunk-GQOEWNVM.js → chunk-4EG4DT4F.js} +0 -0
- /package/dist/{chunk-AISULNGL.js → chunk-BRAIWGMF.js} +0 -0
- /package/dist/{chunk-NRG7KZIP.js → chunk-HQEAZDAC.js} +0 -0
- /package/dist/{chunk-VZAFWPAY.js → chunk-IK4344V5.js} +0 -0
- /package/dist/{chunk-GM7TLYOK.js → chunk-K3VDF6II.js} +0 -0
- /package/dist/{chunk-2AJGV5UL.js → chunk-KM7DAG5J.js} +0 -0
- /package/dist/{chunk-YO4BO2CL.js → chunk-QIEYJ4KZ.js} +0 -0
- /package/dist/{chunk-WSQASFLP.js → chunk-VCTK5HRA.js} +0 -0
- /package/dist/{chunk-KQ6RJWRW.js → chunk-VPT6VMBG.js} +0 -0
- /package/dist/{chunk-6WIFPD2P.js → chunk-YZ4AEMR7.js} +0 -0
- /package/dist/{core-memory-7I7RE2SJ.js → core-memory-UIZKCY4L.js} +0 -0
- /package/dist/{memory-isolation-2TUZ7Z4K.js → memory-isolation-3GJ6WLYX.js} +0 -0
- /package/dist/{oauth-server-AYM37SQ4.js → oauth-server-ZRHXIRXQ.js} +0 -0
- /package/dist/{wiki-acl-IBQLLBTS.js → wiki-acl-MFOYK5F4.js} +0 -0
|
@@ -4,12 +4,12 @@ import path from "path";
|
|
|
4
4
|
import os from "os";
|
|
5
5
|
var EXE_DIR = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path.join(os.homedir(), ".exe-os");
|
|
6
6
|
var SESSION_PATH = path.join(EXE_DIR, "gotrue-session.json");
|
|
7
|
-
var DEFAULT_GOTRUE_URL = "https://api.askexe.com/cloud/auth";
|
|
8
7
|
var REFRESH_MARGIN_S = 60;
|
|
9
8
|
var GOTRUE_TIMEOUT_MS = 1e4;
|
|
10
9
|
function resolveGoTrueUrl(session) {
|
|
11
|
-
return process.env.EXE_GOTRUE_URL ?? process.env.GOTRUE_URL ?? session?.gotrue_url
|
|
10
|
+
return process.env.EXE_GOTRUE_URL ?? process.env.GOTRUE_URL ?? session?.gotrue_url;
|
|
12
11
|
}
|
|
12
|
+
var NO_GOTRUE_URL_ERROR = "No GoTrue URL configured. Re-authenticate with: exe-os login --token <jwt> --gotrue-url <url>";
|
|
13
13
|
function getSession() {
|
|
14
14
|
try {
|
|
15
15
|
const raw = readFileSync(SESSION_PATH, "utf-8");
|
|
@@ -50,47 +50,15 @@ function decodeJwt(accessToken) {
|
|
|
50
50
|
return null;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
async function login(email, password, gotrueUrl) {
|
|
54
|
-
const url = gotrueUrl ?? resolveGoTrueUrl();
|
|
55
|
-
try {
|
|
56
|
-
const resp = await fetch(`${url.replace(/\/+$/, "")}/token?grant_type=password`, {
|
|
57
|
-
method: "POST",
|
|
58
|
-
headers: { "Content-Type": "application/json" },
|
|
59
|
-
body: JSON.stringify({ email, password }),
|
|
60
|
-
signal: AbortSignal.timeout(GOTRUE_TIMEOUT_MS)
|
|
61
|
-
});
|
|
62
|
-
if (!resp.ok) {
|
|
63
|
-
const body = await resp.text().catch(() => "");
|
|
64
|
-
let errorMsg = `HTTP ${resp.status}`;
|
|
65
|
-
try {
|
|
66
|
-
const parsed = JSON.parse(body);
|
|
67
|
-
errorMsg = parsed.error_description ?? parsed.msg ?? parsed.error ?? errorMsg;
|
|
68
|
-
} catch {
|
|
69
|
-
}
|
|
70
|
-
return { ok: false, error: errorMsg };
|
|
71
|
-
}
|
|
72
|
-
const data = await resp.json();
|
|
73
|
-
if (!data.access_token || !data.refresh_token) {
|
|
74
|
-
return { ok: false, error: "Response missing access_token or refresh_token" };
|
|
75
|
-
}
|
|
76
|
-
const session = {
|
|
77
|
-
access_token: data.access_token,
|
|
78
|
-
refresh_token: data.refresh_token,
|
|
79
|
-
expires_at: Math.floor(Date.now() / 1e3) + (data.expires_in || 3600),
|
|
80
|
-
email: data.user?.email ?? email,
|
|
81
|
-
user_id: data.user?.id,
|
|
82
|
-
gotrue_url: url !== DEFAULT_GOTRUE_URL ? url : void 0
|
|
83
|
-
};
|
|
84
|
-
saveSession(session);
|
|
85
|
-
return { ok: true, session };
|
|
86
|
-
} catch (err) {
|
|
87
|
-
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
53
|
async function refreshSession(session) {
|
|
91
54
|
const current = session ?? getSession();
|
|
92
55
|
if (!current?.refresh_token) return null;
|
|
93
56
|
const url = resolveGoTrueUrl(current);
|
|
57
|
+
if (!url) {
|
|
58
|
+
process.stderr.write(`${NO_GOTRUE_URL_ERROR}
|
|
59
|
+
`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
94
62
|
try {
|
|
95
63
|
const resp = await fetch(`${url.replace(/\/+$/, "")}/token?grant_type=refresh_token`, {
|
|
96
64
|
method: "POST",
|
|
@@ -116,6 +84,7 @@ async function refreshSession(session) {
|
|
|
116
84
|
}
|
|
117
85
|
}
|
|
118
86
|
function storeToken(accessToken, refreshToken, gotrueUrl) {
|
|
87
|
+
if (!gotrueUrl) return false;
|
|
119
88
|
const claims = decodeJwt(accessToken);
|
|
120
89
|
if (!claims?.exp) return false;
|
|
121
90
|
const session = {
|
|
@@ -124,7 +93,7 @@ function storeToken(accessToken, refreshToken, gotrueUrl) {
|
|
|
124
93
|
expires_at: claims.exp,
|
|
125
94
|
email: claims.email,
|
|
126
95
|
user_id: claims.sub,
|
|
127
|
-
gotrue_url: gotrueUrl
|
|
96
|
+
gotrue_url: gotrueUrl
|
|
128
97
|
};
|
|
129
98
|
saveSession(session);
|
|
130
99
|
return true;
|
|
@@ -152,7 +121,7 @@ function getSessionInfo() {
|
|
|
152
121
|
expiresAt: new Date(session.expires_at * 1e3).toISOString(),
|
|
153
122
|
expired,
|
|
154
123
|
plan: appMeta?.plan,
|
|
155
|
-
gotrueUrl: session.gotrue_url
|
|
124
|
+
gotrueUrl: session.gotrue_url
|
|
156
125
|
};
|
|
157
126
|
}
|
|
158
127
|
|
|
@@ -162,7 +131,6 @@ export {
|
|
|
162
131
|
clearSession,
|
|
163
132
|
isExpired,
|
|
164
133
|
decodeJwt,
|
|
165
|
-
login,
|
|
166
134
|
refreshSession,
|
|
167
135
|
storeToken,
|
|
168
136
|
getAuthHeader,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isExeSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KI7O64XV.js";
|
|
4
4
|
import {
|
|
5
5
|
recordOrchestrationEventBestEffort
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3SRZNJKD.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isCoordinatorName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-66CGXQUA.js";
|
|
11
11
|
import {
|
|
12
12
|
isDaemonAlive
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CL4J4757.js";
|
|
14
14
|
|
|
15
15
|
// src/lib/session-kill-telemetry.ts
|
|
16
16
|
import crypto from "crypto";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveClaudeBinaryPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CBPNZFSU.js";
|
|
4
4
|
import {
|
|
5
5
|
initStore
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CIEVY5TD.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isInitialized
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-66CGXQUA.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/schedules.ts
|
|
13
13
|
import crypto from "crypto";
|
|
@@ -25,6 +25,8 @@ function buildTaskResult(opts) {
|
|
|
25
25
|
decisions: opts.decisions ?? [],
|
|
26
26
|
open_questions: opts.open_questions ?? [],
|
|
27
27
|
pr_number: opts.pr_number,
|
|
28
|
+
pr_url: opts.pr_url,
|
|
29
|
+
pr_no_reason: opts.pr_no_reason,
|
|
28
30
|
commits: opts.commits ?? [],
|
|
29
31
|
tests: opts.tests ?? "none",
|
|
30
32
|
build: opts.build ?? "skip"
|
|
@@ -68,7 +70,9 @@ function formatTypedMessage(msg) {
|
|
|
68
70
|
if (p.commits.length > 0)
|
|
69
71
|
lines.push(`Commits: ${p.commits.join(", ")}`);
|
|
70
72
|
lines.push(`Tests: ${p.tests} | Build: ${p.build}`);
|
|
71
|
-
if (p.
|
|
73
|
+
if (p.pr_url) lines.push(`PR: ${p.pr_url}`);
|
|
74
|
+
else if (p.pr_number) lines.push(`PR: #${p.pr_number}`);
|
|
75
|
+
else if (p.pr_no_reason) lines.push(`PR: none (${p.pr_no_reason})`);
|
|
72
76
|
if (p.open_questions.length > 0)
|
|
73
77
|
lines.push(`Open questions: ${p.open_questions.join("; ")}`);
|
|
74
78
|
break;
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from "./chunk-L25OAFOU.js";
|
|
16
16
|
import {
|
|
17
17
|
loadLicense
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-Y2HD2YB7.js";
|
|
19
19
|
|
|
20
20
|
// src/lib/stack-update.ts
|
|
21
21
|
import { execFileSync, spawnSync } from "child_process";
|
|
@@ -1770,6 +1770,10 @@ ${details}
|
|
|
1770
1770
|
Fix registry authentication or publish the missing image(s), then re-run stack-update.`
|
|
1771
1771
|
);
|
|
1772
1772
|
}
|
|
1773
|
+
var defaultContainerCountSnapshot = () => {
|
|
1774
|
+
const snapshot = spawnSync("docker", ["ps", "--format", "json"], { encoding: "utf8", timeout: 1e4 });
|
|
1775
|
+
return snapshot.stdout?.split("\n").filter(Boolean).length ?? 0;
|
|
1776
|
+
};
|
|
1773
1777
|
var defaultImageLabelReader = (image, label) => {
|
|
1774
1778
|
try {
|
|
1775
1779
|
return readImageLabel(image, label);
|
|
@@ -2501,6 +2505,16 @@ var CRITICAL_VOLUMES = [
|
|
|
2501
2505
|
"clickhouse_data",
|
|
2502
2506
|
"erp_sites"
|
|
2503
2507
|
];
|
|
2508
|
+
var defaultVolumeExists = (volumeName) => spawnSync(
|
|
2509
|
+
"docker",
|
|
2510
|
+
["volume", "inspect", volumeName],
|
|
2511
|
+
{
|
|
2512
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
2513
|
+
timeout: 5e3,
|
|
2514
|
+
killSignal: "SIGKILL"
|
|
2515
|
+
// SIGTERM'd docker CLIs on a hung daemon linger as orphans
|
|
2516
|
+
}
|
|
2517
|
+
).status === 0;
|
|
2504
2518
|
function assertBindMountsExist(stackDir) {
|
|
2505
2519
|
const missing = [];
|
|
2506
2520
|
for (const mount of CRITICAL_BIND_MOUNTS) {
|
|
@@ -2515,16 +2529,10 @@ function assertBindMountsExist(stackDir) {
|
|
|
2515
2529
|
console.warn("[stack-update] These files contain customer config that will be lost if not present.");
|
|
2516
2530
|
}
|
|
2517
2531
|
}
|
|
2518
|
-
function assertVolumesIntact() {
|
|
2532
|
+
function assertVolumesIntact(volumeExists = defaultVolumeExists) {
|
|
2519
2533
|
const missing = [];
|
|
2520
2534
|
for (const vol of CRITICAL_VOLUMES) {
|
|
2521
|
-
|
|
2522
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
2523
|
-
timeout: 5e3,
|
|
2524
|
-
killSignal: "SIGKILL"
|
|
2525
|
-
// SIGTERM'd docker CLIs on a hung daemon linger as orphans
|
|
2526
|
-
});
|
|
2527
|
-
if (result.status !== 0) {
|
|
2535
|
+
if (!volumeExists(`exe-os_${vol}`)) {
|
|
2528
2536
|
missing.push(vol);
|
|
2529
2537
|
}
|
|
2530
2538
|
}
|
|
@@ -2533,20 +2541,10 @@ function assertVolumesIntact() {
|
|
|
2533
2541
|
console.warn("[stack-update] Data may have been lost. Check if 'docker compose down -v' was used.");
|
|
2534
2542
|
}
|
|
2535
2543
|
}
|
|
2536
|
-
function warnLegacyDaemonVolume() {
|
|
2537
|
-
const legacy =
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
killSignal: "SIGKILL"
|
|
2541
|
-
// SIGTERM'd docker CLIs on a hung daemon linger as orphans
|
|
2542
|
-
});
|
|
2543
|
-
const current = spawnSync("docker", ["volume", "inspect", "exe-os_exe_os_data"], {
|
|
2544
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
2545
|
-
timeout: 5e3,
|
|
2546
|
-
killSignal: "SIGKILL"
|
|
2547
|
-
// SIGTERM'd docker CLIs on a hung daemon linger as orphans
|
|
2548
|
-
});
|
|
2549
|
-
if (legacy.status === 0 && current.status === 0) {
|
|
2544
|
+
function warnLegacyDaemonVolume(volumeExists = defaultVolumeExists) {
|
|
2545
|
+
const legacy = volumeExists("exe-os_exed_data");
|
|
2546
|
+
const current = volumeExists("exe-os_exe_os_data");
|
|
2547
|
+
if (legacy && current) {
|
|
2550
2548
|
console.warn("[stack-update] \u26A0 Legacy volume exe-os_exed_data exists alongside exe-os_exe_os_data.");
|
|
2551
2549
|
console.warn("[stack-update] Keeping both volumes intact; after verifying exe_os_data has current daemon state, remove exed_data manually if desired.");
|
|
2552
2550
|
}
|
|
@@ -2607,7 +2605,7 @@ async function runStackUpdate(options) {
|
|
|
2607
2605
|
if (!options.dryRun) assertHostReadyForApply(report);
|
|
2608
2606
|
}
|
|
2609
2607
|
assertBindMountsExist(path.dirname(options.envFile));
|
|
2610
|
-
warnLegacyDaemonVolume();
|
|
2608
|
+
warnLegacyDaemonVolume(options.volumeExists);
|
|
2611
2609
|
if (!options.dryRun) {
|
|
2612
2610
|
try {
|
|
2613
2611
|
const endPhase = startPhase("preflight");
|
|
@@ -3125,8 +3123,8 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
3125
3123
|
...RESTART_ORDER.filter((service) => scopedComposeServices.includes(service)),
|
|
3126
3124
|
...scopedComposeServices.filter((service) => !RESTART_ORDER.includes(service))
|
|
3127
3125
|
];
|
|
3128
|
-
const
|
|
3129
|
-
const preContainerCount =
|
|
3126
|
+
const containerCountSnapshot = options.containerCountSnapshot ?? defaultContainerCountSnapshot;
|
|
3127
|
+
const preContainerCount = containerCountSnapshot();
|
|
3130
3128
|
console.log(`[stack-update] Pre-update snapshot: ${preContainerCount} containers`);
|
|
3131
3129
|
const bundledIsolation = Object.keys(plan.release.services).length > 1;
|
|
3132
3130
|
const failedManifestServices = /* @__PURE__ */ new Set();
|
|
@@ -3152,7 +3150,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
3152
3150
|
if (!serviceDefined) continue;
|
|
3153
3151
|
progress.logServiceStep(restartIndex, service, "Restarting");
|
|
3154
3152
|
if (service === "exe-wiki") {
|
|
3155
|
-
const guard = spawnSync(
|
|
3153
|
+
const guard = options.runWikiSchemaGuard ? { status: options.runWikiSchemaGuard() } : spawnSync(
|
|
3156
3154
|
"docker",
|
|
3157
3155
|
[...composeArgs, "run", "--rm", "--no-deps", "exe-wiki-schema-guard"],
|
|
3158
3156
|
{ encoding: "utf8", stdio: ["pipe", "inherit", "inherit"], timeout: 12e4 }
|
|
@@ -3222,8 +3220,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
3222
3220
|
if (!restartedAnyService) {
|
|
3223
3221
|
exec("docker", [...composeArgs, "up", "-d", "--remove-orphans"]);
|
|
3224
3222
|
}
|
|
3225
|
-
const
|
|
3226
|
-
const postContainerCount = postSnapshot.stdout?.split("\n").filter(Boolean).length ?? 0;
|
|
3223
|
+
const postContainerCount = containerCountSnapshot();
|
|
3227
3224
|
console.log(`[stack-update] Post-update snapshot: ${postContainerCount} containers (was ${preContainerCount})`);
|
|
3228
3225
|
if (postContainerCount < preContainerCount) {
|
|
3229
3226
|
console.warn(`[stack-update] \u26A0 Container count dropped from ${preContainerCount} to ${postContainerCount}`);
|
|
@@ -3352,7 +3349,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
3352
3349
|
}
|
|
3353
3350
|
console.warn("[stack-update] Health gate check skipped (module not available)");
|
|
3354
3351
|
}
|
|
3355
|
-
assertVolumesIntact();
|
|
3352
|
+
assertVolumesIntact(options.volumeExists);
|
|
3356
3353
|
try {
|
|
3357
3354
|
if (!options.verifyStack) {
|
|
3358
3355
|
throw new Error("verifyStack hook not provided");
|
|
@@ -3362,7 +3359,8 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
3362
3359
|
for (const r of verifyReport.results) {
|
|
3363
3360
|
if (r.status === "fail") {
|
|
3364
3361
|
console.warn(`[verify-stack] FAIL: ${r.check}: ${r.message}`);
|
|
3365
|
-
|
|
3362
|
+
const isTruncatedRun = r.check === "Total timeout";
|
|
3363
|
+
if (isTruncatedRun || /security|auth|signup|password|ssl|tls|bind|exposed/i.test(r.check)) {
|
|
3366
3364
|
securityFailures.push(`${r.check}: ${r.message}`);
|
|
3367
3365
|
}
|
|
3368
3366
|
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-4YNA3CM6.js";
|
|
6
6
|
import {
|
|
7
7
|
sessionScopeFilter
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KI7O64XV.js";
|
|
9
9
|
|
|
10
10
|
// src/shared/task-completion-gate.ts
|
|
11
11
|
var COMPLETION_CLAIM_STATUSES = ["done", "needs_review", "closed"];
|
|
@@ -130,7 +130,14 @@ function getRecentCommits(limit = DEFAULT_COMMIT_LIMIT) {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
function pushUnpushedCommits() {
|
|
133
|
-
const run = (args) => execSync(`git ${args}`, {
|
|
133
|
+
const run = (args) => execSync(`git ${args}`, {
|
|
134
|
+
encoding: "utf8",
|
|
135
|
+
timeout: 15e3,
|
|
136
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
137
|
+
// GIT_TERMINAL_PROMPT=0: fail fast instead of hanging on an interactive
|
|
138
|
+
// credential prompt — this runs from agent sessions with no TTY.
|
|
139
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
|
|
140
|
+
}).trim();
|
|
134
141
|
let branch;
|
|
135
142
|
try {
|
|
136
143
|
branch = run("rev-parse --abbrev-ref HEAD");
|
|
@@ -289,7 +296,7 @@ async function sweepTasks(projectName, options = {}) {
|
|
|
289
296
|
}
|
|
290
297
|
if (!dryRun) {
|
|
291
298
|
try {
|
|
292
|
-
const { updateTaskStatus } = await import("./tasks-crud-
|
|
299
|
+
const { updateTaskStatus } = await import("./tasks-crud-45WOIMIM.js");
|
|
293
300
|
await updateTaskStatus({
|
|
294
301
|
taskId: task.id,
|
|
295
302
|
status: "needs_review",
|
|
@@ -7,23 +7,23 @@ import {
|
|
|
7
7
|
resolveExeSession,
|
|
8
8
|
sendIntercom,
|
|
9
9
|
strictSessionScopeFilter
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
isValidSessionScope
|
|
13
|
-
} from "./chunk-BTSWFMEH.js";
|
|
10
|
+
} from "./chunk-KI7O64XV.js";
|
|
14
11
|
import {
|
|
15
12
|
parseMessage,
|
|
16
13
|
serializeMessage
|
|
17
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TDF2XKLK.js";
|
|
18
15
|
import {
|
|
19
16
|
recordOrchestrationEventBestEffort
|
|
20
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-3SRZNJKD.js";
|
|
21
18
|
import {
|
|
22
19
|
getSessionKey
|
|
23
20
|
} from "./chunk-CVYC6DUW.js";
|
|
21
|
+
import {
|
|
22
|
+
isValidSessionScope
|
|
23
|
+
} from "./chunk-BTSWFMEH.js";
|
|
24
24
|
import {
|
|
25
25
|
getClient
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-66CGXQUA.js";
|
|
27
27
|
|
|
28
28
|
// src/lib/messaging.ts
|
|
29
29
|
import crypto from "crypto";
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
employeeSessionName,
|
|
3
3
|
ensureEmployee,
|
|
4
|
+
getDispatchedBy,
|
|
5
|
+
liveSessionHoldingTask,
|
|
4
6
|
markAsReadByTaskFile,
|
|
5
7
|
notifyParentExe,
|
|
6
8
|
queryTaskRows,
|
|
7
9
|
resolveExeSession,
|
|
8
10
|
sendIntercom
|
|
9
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KI7O64XV.js";
|
|
10
12
|
import {
|
|
11
13
|
getTransport
|
|
12
14
|
} from "./chunk-VI4ATC6I.js";
|
|
13
15
|
import {
|
|
14
16
|
recordOrchestrationEventBestEffort
|
|
15
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-3SRZNJKD.js";
|
|
16
18
|
import {
|
|
17
19
|
releaseDispatchClaim,
|
|
18
20
|
tryAcquireDispatchClaim
|
|
@@ -27,7 +29,7 @@ import {
|
|
|
27
29
|
isCoordinatorName,
|
|
28
30
|
isMultiInstance,
|
|
29
31
|
shouldAutoInstance
|
|
30
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-66CGXQUA.js";
|
|
31
33
|
|
|
32
34
|
// src/lib/tasks-notify.ts
|
|
33
35
|
var VERIFY_DELAY_MS = 1e4;
|
|
@@ -89,7 +91,7 @@ async function dispatchTaskToEmployee(input) {
|
|
|
89
91
|
let crossProject = false;
|
|
90
92
|
if (input.projectName) {
|
|
91
93
|
try {
|
|
92
|
-
const { assertSessionScope } = await import("./session-scope-
|
|
94
|
+
const { assertSessionScope } = await import("./session-scope-DKOHPQPJ.js");
|
|
93
95
|
const check = assertSessionScope("dispatch_task", input.projectName);
|
|
94
96
|
if (check.reason === "cross_session_denied") {
|
|
95
97
|
crossProject = true;
|
|
@@ -107,6 +109,27 @@ async function dispatchTaskToEmployee(input) {
|
|
|
107
109
|
} catch {
|
|
108
110
|
}
|
|
109
111
|
}
|
|
112
|
+
if (input.taskId) {
|
|
113
|
+
const holder = await liveSessionHoldingTask(input.taskId, input.sessionScope ?? null);
|
|
114
|
+
if (holder) {
|
|
115
|
+
process.stderr.write(
|
|
116
|
+
`[dispatch-audit] SPAWN SUPPRESSED -> ${input.assignedTo} | task="${input.title}" [${input.priority}] | task ${input.taskId} already in_progress on live session ${holder}; not spawning a duplicate
|
|
117
|
+
`
|
|
118
|
+
);
|
|
119
|
+
recordOrchestrationEventBestEffort({
|
|
120
|
+
eventType: "dispatch.deduped",
|
|
121
|
+
source: "tasks-notify.dispatchTaskToEmployee",
|
|
122
|
+
severity: "info",
|
|
123
|
+
taskId: input.taskId,
|
|
124
|
+
agentId: input.assignedTo,
|
|
125
|
+
tmuxSession: holder,
|
|
126
|
+
runtime: dispatchRuntime,
|
|
127
|
+
result: "skipped",
|
|
128
|
+
payload: { reason: "task_held_by_live_session", holder }
|
|
129
|
+
});
|
|
130
|
+
return { dispatched: "skipped", session: holder, deduped: true, crossProject };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
110
133
|
let claimedDispatch = false;
|
|
111
134
|
if (input.taskId) {
|
|
112
135
|
claimedDispatch = tryAcquireDispatchClaim(input.taskId, input.assignedTo);
|
|
@@ -298,13 +321,25 @@ async function dispatchTaskToEmployee(input) {
|
|
|
298
321
|
return { dispatched: "session_missing" };
|
|
299
322
|
}
|
|
300
323
|
}
|
|
301
|
-
function
|
|
324
|
+
function resolveCompletionNudgeRecipient(reviewer, dispatcher) {
|
|
325
|
+
const r = reviewer == null ? "" : String(reviewer).trim();
|
|
326
|
+
if (r) return { agent: r, via: "reviewer" };
|
|
327
|
+
const d = dispatcher == null ? "" : String(dispatcher).trim();
|
|
328
|
+
if (d) return { agent: d, via: "dispatcher" };
|
|
329
|
+
return { agent: null, via: "none" };
|
|
330
|
+
}
|
|
331
|
+
function notifyTaskDone(reviewer) {
|
|
302
332
|
try {
|
|
303
333
|
const key = getSessionKey();
|
|
304
334
|
if (key && !process.env.VITEST) {
|
|
335
|
+
const dispatcher = getDispatchedBy(key);
|
|
336
|
+
const routing = resolveCompletionNudgeRecipient(reviewer, dispatcher);
|
|
337
|
+
if (routing.via !== "dispatcher") {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
305
340
|
notifyParentExe(key);
|
|
306
341
|
process.stderr.write(
|
|
307
|
-
`[dispatch-audit] notifyTaskDone \u2192
|
|
342
|
+
`[dispatch-audit] notifyTaskDone \u2192 dispatcher (session=${key})
|
|
308
343
|
`
|
|
309
344
|
);
|
|
310
345
|
}
|
|
@@ -321,6 +356,7 @@ async function markTaskNotificationsRead(taskFile) {
|
|
|
321
356
|
export {
|
|
322
357
|
verifyDispatch,
|
|
323
358
|
dispatchTaskToEmployee,
|
|
359
|
+
resolveCompletionNudgeRecipient,
|
|
324
360
|
notifyTaskDone,
|
|
325
361
|
markTaskNotificationsRead
|
|
326
362
|
};
|