@askexenow/exe-os 0.9.340 → 0.9.342
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/README.md +159 -196
- package/deploy/compose/.env.customer.example +1 -0
- package/deploy/compose/.env.example +1 -0
- package/deploy/compose/docker-compose.yml +13 -4
- package/deploy/compose/generate-env.ts +4 -0
- package/dist/{active-agent-EC6M7KTX.js → active-agent-PVGE57FY.js} +5 -5
- package/dist/{active-agent-WHIUCHLA.js → active-agent-TNIO6IY3.js} +5 -5
- package/dist/{agentic-ontology-RNSXGXW4.js → agentic-ontology-3FXYMHKW.js} +1 -1
- package/dist/{backfill-gate-J7UXFNXU.js → backfill-gate-65LSYVE5.js} +3 -3
- package/dist/{backfill-metadata-MFY6BHKE.js → backfill-metadata-ZSMZC45J.js} +8 -8
- package/dist/{background-jobs-STURKDCS.js → background-jobs-EXR5RVGG.js} +3 -3
- package/dist/backup-verify-3Y2FHGZU.js +425 -0
- package/dist/{behaviors-HLZUJSMP.js → behaviors-KYRB3NGJ.js} +9 -9
- package/dist/bin/age-ontology-load.js +3 -3
- 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 +10 -10
- package/dist/bin/backfill-responses.js +10 -10
- package/dist/bin/backfill-vectors.js +14 -14
- package/dist/bin/bulk-sync-postgres.js +19 -19
- package/dist/bin/cc-doctor.js +10 -8
- package/dist/bin/cleanup-stale-review-tasks.js +26 -24
- package/dist/bin/cli.js +111 -25
- package/dist/bin/customer-readiness.js +1 -1
- package/dist/bin/deferred-daemon-restart.js +97 -90
- package/dist/bin/exe-agent-config.js +9 -8
- package/dist/bin/exe-agent.js +20 -20
- package/dist/bin/exe-assign.js +12 -12
- package/dist/bin/exe-boot.js +201 -68
- package/dist/bin/exe-call.js +7 -7
- package/dist/bin/exe-cloud.js +20 -20
- package/dist/bin/exe-config-dump.js +9 -8
- package/dist/bin/exe-dispatch.js +26 -24
- package/dist/bin/exe-doctor.js +10 -6
- package/dist/bin/exe-export-behaviors.js +11 -11
- package/dist/bin/exe-forget.js +12 -10
- package/dist/bin/exe-gateway.js +15 -10
- package/dist/bin/exe-grant.js +5 -5
- package/dist/bin/exe-healthcheck.js +14 -8
- package/dist/bin/exe-heartbeat.js +29 -28
- package/dist/bin/exe-kill.js +31 -29
- package/dist/bin/exe-launch-agent.js +129 -68
- package/dist/bin/exe-memory-reads.js +257 -0
- package/dist/bin/exe-new-employee.js +12 -11
- package/dist/bin/exe-pending-messages.js +27 -25
- package/dist/bin/exe-pending-notifications.js +26 -24
- package/dist/bin/exe-pending-reviews.js +26 -24
- package/dist/bin/exe-rename.js +7 -7
- package/dist/bin/exe-review.js +30 -28
- package/dist/bin/exe-search.js +11 -9
- package/dist/bin/exe-session-cleanup.js +116 -86
- package/dist/bin/exe-settings.js +24 -23
- package/dist/bin/exe-start-codex.js +163 -41
- package/dist/bin/exe-start-opencode.js +15 -15
- package/dist/bin/exe-status.js +27 -25
- package/dist/bin/exe-support.js +5 -5
- package/dist/bin/exe-team.js +5 -5
- package/dist/bin/exe-timers.js +32 -213
- package/dist/bin/exe-watchdog.js +6 -5
- package/dist/bin/git-sweep.js +27 -25
- package/dist/bin/graph-backfill.js +9 -9
- package/dist/bin/graph-export.js +9 -9
- package/dist/bin/import-history.js +11 -11
- package/dist/bin/install.js +102 -95
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +6 -6
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
- package/dist/bin/postgres-agentic-semantic-backfill.js +7 -7
- package/dist/bin/pre-publish.js +5 -3
- package/dist/bin/reconcile-backlog.js +484 -0
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +26 -24
- package/dist/bin/setup.js +6 -5
- package/dist/bin/shard-migrate.js +9 -9
- package/dist/bin/stack-update.js +15 -9
- package/dist/bin/update.js +1 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/boot-generation-BL2ISK4U.js +22 -0
- package/dist/boot-review-sections-DBMQJT5N.js +107 -0
- package/dist/branch-hygiene-TZWK6QCF.js +224 -0
- package/dist/{branding-JTEOF4ZV.js → branding-DVXBGVDH.js} +3 -3
- package/dist/{browser-session-store-CXQMOSEC.js → browser-session-store-B2NR3LIX.js} +2 -1
- package/dist/{capability-cards-YOKVMMOL.js → capability-cards-DN5UIKVN.js} +4 -4
- package/dist/{capacity-monitor-S54IOWRL.js → capacity-monitor-ZG5GGFR2.js} +27 -25
- package/dist/{catchup-brief-DRRQCMKA.js → catchup-brief-D6HH6DWS.js} +32 -29
- package/dist/{support-outbox-MGUVVGHT.js → chunk-25X4JD2V.js} +28 -12
- package/dist/{chunk-IYB2NIW3.js → chunk-2KZNGDSW.js} +1 -1
- package/dist/{chunk-FUIIVSW6.js → chunk-2WAVZ5UJ.js} +1 -1
- package/dist/{chunk-K5WFKEXQ.js → chunk-2ZYO73KO.js} +4 -3
- package/dist/{chunk-CLAYNAXC.js → chunk-3EUMUSLE.js} +1 -1
- package/dist/{chunk-BVV6NHKQ.js → chunk-3SW4OEHB.js} +5 -5
- package/dist/{task-enforcement-VI7L43DC.js → chunk-4CMVFVFC.js} +173 -69
- package/dist/{chunk-BU2QQWBQ.js → chunk-4J4PMPXZ.js} +3 -2
- package/dist/{chunk-JD5S5AAV.js → chunk-4N2NRGCM.js} +2 -2
- package/dist/chunk-4QCFFW2H.js +378 -0
- package/dist/{chunk-7EA7LYW4.js → chunk-4VSV5P4D.js} +4 -4
- package/dist/{chunk-52KNOQMK.js → chunk-4ZCD2UWW.js} +39 -10
- package/dist/{chunk-DZ6OQM67.js → chunk-5ERDIOV3.js} +2 -2
- package/dist/chunk-5H47VHB7.js +30 -0
- package/dist/{chunk-UCQITDLM.js → chunk-5TY4FPH6.js} +1 -1
- package/dist/{chunk-R44Z32O2.js → chunk-6CH3TPHR.js} +2 -2
- package/dist/{chunk-WYLV4S6A.js → chunk-6WQ3NNCE.js} +3 -3
- package/dist/{chunk-HHIBOU3P.js → chunk-6XWTQUO4.js} +1 -1
- package/dist/chunk-76CJBM36.js +88 -0
- package/dist/{chunk-H2L4PHGH.js → chunk-7CTRGNLW.js} +2 -2
- package/dist/{chunk-XUKPALWT.js → chunk-7V4JADD6.js} +2 -2
- package/dist/{chunk-RMOBQ6A5.js → chunk-AD2VCHSS.js} +1 -1
- package/dist/{chunk-QXSBB26A.js → chunk-AJYCFKJR.js} +1 -1
- package/dist/chunk-AM7S2TY6.js +54 -0
- package/dist/{chunk-HEPR6QTL.js → chunk-AOHXREB7.js} +334 -66
- package/dist/{chunk-FNZR3B7U.js → chunk-ASAFVDVR.js} +1 -1
- package/dist/{chunk-TALWBVZE.js → chunk-BUCXNV32.js} +1 -1
- package/dist/{chunk-SHIICYJW.js → chunk-BYTDMAGB.js} +4 -2
- package/dist/{chunk-32SXNM3G.js → chunk-C5QAPURN.js} +1 -1
- package/dist/{chunk-XCTGRD4S.js → chunk-CE7F6RHG.js} +587 -77
- package/dist/{chunk-7WPOJDTA.js → chunk-CNVBKDEY.js} +21 -15
- package/dist/{chunk-KPIN44GZ.js → chunk-CWXVH7WV.js} +1 -1
- package/dist/chunk-D74XYSA3.js +621 -0
- package/dist/{chunk-A47MXY2I.js → chunk-EQHQF5IM.js} +50 -32
- package/dist/{chunk-AOO77BDE.js → chunk-EUS4QUKP.js} +1 -1
- package/dist/{chunk-RLRT2BVM.js → chunk-EV46QTD3.js} +1 -1
- package/dist/{chunk-PAEXYFMY.js → chunk-F27XXN6C.js} +1 -1
- package/dist/{chunk-XQNNB5GY.js → chunk-F55P3H4S.js} +37 -2
- package/dist/{chunk-MWZFF3Q7.js → chunk-F5O7V7UK.js} +1 -1
- package/dist/{chunk-LMZISHSJ.js → chunk-FPFPLPUY.js} +6 -6
- package/dist/{chunk-7TS64TBG.js → chunk-G4RGKBCA.js} +8 -3
- package/dist/{chunk-4IYSBPX3.js → chunk-G5T6KDG4.js} +1 -1
- package/dist/{chunk-7WDXEKUL.js → chunk-GBTTBXAF.js} +4 -4
- package/dist/{chunk-6MRWJMI5.js → chunk-GDIJE6D7.js} +1 -1
- package/dist/{chunk-AVKXCSBI.js → chunk-GG5NDQNN.js} +2 -2
- package/dist/{chunk-I3XKO3KQ.js → chunk-GJ26DULE.js} +2 -2
- package/dist/chunk-GL57PO3K.js +104 -0
- package/dist/chunk-GWDSB25T.js +6 -0
- package/dist/{chunk-F55JF43M.js → chunk-H6BV5TKD.js} +39 -24
- package/dist/{chunk-HCJCW7X4.js → chunk-H7I47RS5.js} +34 -1
- package/dist/{chunk-65SVQELL.js → chunk-HA5R6USD.js} +31 -5
- package/dist/{chunk-VJHUVFIW.js → chunk-HAF2DJYV.js} +3 -3
- package/dist/chunk-HJ447YER.js +224 -0
- package/dist/chunk-HV4KESRY.js +395 -0
- package/dist/{chunk-B76TSEP3.js → chunk-I26FWCSP.js} +216 -9
- package/dist/{chunk-X2FHTDIU.js → chunk-IBYL4DHM.js} +1 -1
- package/dist/{chunk-JCBKARSK.js → chunk-IOEUAQWP.js} +1 -1
- package/dist/{chunk-MW2GJJ53.js → chunk-JGIPOUIK.js} +3 -3
- package/dist/{chunk-2233TQCA.js → chunk-JLZ4RYSD.js} +2 -2
- package/dist/{chunk-Q7L6G6KV.js → chunk-JMYHW3AL.js} +2 -2
- package/dist/{chunk-OJTJYEMX.js → chunk-JPUZPAAF.js} +4 -4
- package/dist/{chunk-XWHE4LZK.js → chunk-JTBIS4R5.js} +21 -2
- package/dist/{chunk-5Z5NATNS.js → chunk-K7KFGDWF.js} +1 -1
- package/dist/{chunk-UIV2WPBT.js → chunk-KGWRTRKC.js} +2 -2
- package/dist/{chunk-KTPG4XKI.js → chunk-KP3U5QGJ.js} +1 -1
- package/dist/{chunk-TLYAEISW.js → chunk-KW2SD2FL.js} +2 -2
- package/dist/{chunk-X7H3HMFH.js → chunk-KWZMQACA.js} +11 -7
- package/dist/{chunk-OFX5B2S7.js → chunk-L2R3LN2P.js} +1 -1
- package/dist/{chunk-T4KZ2Z2N.js → chunk-L4A5DL6Z.js} +3 -3
- package/dist/{chunk-X425OEYF.js → chunk-LU2FALL6.js} +3 -3
- package/dist/{chunk-6M36JFFD.js → chunk-MKYFAKDW.js} +4 -4
- package/dist/{chunk-I5RLNOFK.js → chunk-MOPUCPXK.js} +12 -4
- package/dist/{chunk-ZIVEA3NB.js → chunk-MR6LHP4F.js} +1 -1
- package/dist/chunk-MVYB76QG.js +341 -0
- package/dist/{chunk-2SG2UGCH.js → chunk-MZM6EJCU.js} +4 -4
- package/dist/{chunk-ZREGOV2Q.js → chunk-N7QJKQMX.js} +258 -14
- package/dist/{chunk-QLFRCA6I.js → chunk-NBZL5CGA.js} +93 -12
- package/dist/{chunk-QFPTDSY2.js → chunk-NN2B2QKU.js} +1 -1
- package/dist/chunk-NX5INHHG.js +40 -0
- package/dist/{chunk-B75BOKEI.js → chunk-NXUSDL37.js} +2 -2
- package/dist/{chunk-TPHCZDE3.js → chunk-O5V57XYE.js} +1 -1
- package/dist/chunk-O7LWR36Z.js +269 -0
- package/dist/{chunk-ATOU6CYR.js → chunk-OLMQ4UOF.js} +57 -11
- package/dist/{chunk-6HBURYON.js → chunk-OTF44GXL.js} +4 -4
- package/dist/{chunk-DILD54TU.js → chunk-OZEBAGKR.js} +277 -137
- package/dist/{chunk-DADMPMYX.js → chunk-P5HIWY2E.js} +1 -1
- package/dist/{chunk-EIF2LQHZ.js → chunk-PDWS3E22.js} +55 -4
- package/dist/{chunk-KTY7I7UH.js → chunk-PPCDBE6Z.js} +1 -1
- package/dist/{chunk-XACL67CS.js → chunk-PQIDGXSG.js} +13 -4
- package/dist/chunk-PWUFMX75.js +186 -0
- package/dist/{chunk-UPWE5NOG.js → chunk-QDGZJ653.js} +3 -3
- package/dist/{chunk-MQRFKSLI.js → chunk-QOO5RW3K.js} +6 -5
- package/dist/{chunk-KCC5A7YL.js → chunk-QQ4E2RYW.js} +95 -18
- package/dist/{chunk-BPC5LZ6Y.js → chunk-QRYVCDWS.js} +2 -2
- package/dist/{chunk-Z42MXYWW.js → chunk-QWVXN224.js} +110 -28
- package/dist/{chunk-542EWGY3.js → chunk-QYZJHTNE.js} +26 -27
- package/dist/{chunk-I7Z6KTGF.js → chunk-R2NN3JKH.js} +43 -6
- package/dist/{chunk-3OBWSCJN.js → chunk-RACAOE2Z.js} +14 -14
- package/dist/{chunk-5RACW3LX.js → chunk-RAXVPNMR.js} +1 -1
- package/dist/{chunk-2HZY3ECT.js → chunk-RHWZUUS4.js} +6 -6
- package/dist/{chunk-RNAYCUNM.js → chunk-S3THSOWV.js} +1 -1
- package/dist/{chunk-W7DHFGCB.js → chunk-S7QUM2UK.js} +2 -2
- package/dist/{chunk-SSTLTIF3.js → chunk-SKGMF2SO.js} +25 -2
- package/dist/{chunk-GN45PBWI.js → chunk-SQKXKV2Y.js} +2 -2
- package/dist/{chunk-QZLIZAS7.js → chunk-TLT7NZCW.js} +4 -4
- package/dist/chunk-TTCUG2CF.js +91 -0
- package/dist/chunk-UEA3LXOB.js +40 -0
- package/dist/{chunk-DRCRZIIJ.js → chunk-UNXQBELK.js} +1 -1
- package/dist/{chunk-PLRIJALF.js → chunk-UP75Z5X7.js} +921 -176
- package/dist/{chunk-TNJRWUCE.js → chunk-USSB56WK.js} +1 -1
- package/dist/{chunk-KMBEL7VB.js → chunk-UUEKJDK6.js} +90 -10
- package/dist/{chunk-XJI7Z6LZ.js → chunk-UUQBZPJJ.js} +1 -1
- package/dist/{chunk-RRWDYOQS.js → chunk-V3EEVY4L.js} +1 -1
- package/dist/{chunk-N5I7RL3I.js → chunk-VPZHJCKW.js} +2 -2
- package/dist/chunk-VRAQTFD6.js +265 -0
- package/dist/{chunk-H37HHX3E.js → chunk-VSRPS3J7.js} +14 -14
- package/dist/{chunk-5ZNY7IZI.js → chunk-WMESXBJM.js} +37 -3
- package/dist/{chunk-54QCG45Y.js → chunk-WOYADZF5.js} +56 -5
- package/dist/{chunk-7Y5UDEVM.js → chunk-WZHZCDDO.js} +6 -5
- package/dist/{chunk-3NGZ4PL7.js → chunk-X2Q5NLUL.js} +11 -2
- package/dist/{chunk-YE7NH53A.js → chunk-X33NYQYJ.js} +2 -2
- package/dist/{chunk-UXBD22CD.js → chunk-XHK3FS3W.js} +3 -2
- package/dist/{chunk-3QDSCJ3F.js → chunk-XZXBB3TN.js} +2 -2
- package/dist/{chunk-JSKBHUR7.js → chunk-YCANDMI2.js} +2 -2
- package/dist/{chunk-JBSCL2XT.js → chunk-YLXTKI6M.js} +1 -1
- package/dist/{chunk-G7WO77Z2.js → chunk-YTCFACP4.js} +812 -896
- package/dist/{chunk-LTVCRHHD.js → chunk-Z6RSN7KS.js} +7 -6
- package/dist/{cleanup-graph-garbage-KUABW6LS.js → cleanup-graph-garbage-XWUFAMFO.js} +6 -6
- package/dist/{co-activation-XMPHKGHR.js → co-activation-ZCHPLLP6.js} +4 -4
- package/dist/{co-occurrence-SHKSJ6CV.js → co-occurrence-KG3LKALN.js} +4 -4
- package/dist/{code-context-index-EXXDY3QZ.js → code-context-index-WSOJQ72R.js} +5 -5
- package/dist/{content-extractor-RHITF2KM.js → content-extractor-NXYNEF5K.js} +2 -2
- package/dist/{conversation-wiki-populator-WU4HEQ7C.js → conversation-wiki-populator-WQN3IUU6.js} +1 -1
- package/dist/{crdt-sync-UJELKSNX.js → crdt-sync-4PFGPZXV.js} +8 -1
- package/dist/{crm-webhook-HHNBS7LY.js → crm-webhook-II7Z45Q6.js} +2 -2
- package/dist/cto-delegation-gate-JWWOJPNC.js +669 -0
- package/dist/{daemon-auth-7IFSV5FG.js → daemon-auth-3FEAHFWC.js} +5 -3
- package/dist/{daemon-orchestration-7QB6QOXT.js → daemon-orchestration-FX4XZDR5.js} +46 -27
- package/dist/{daemon-ready-5XI5BIJD.js → daemon-ready-4JTSFKAY.js} +1 -1
- package/dist/{daemon-ready-signal-E7VMIQ6I.js → daemon-ready-signal-LPAZWQOV.js} +5 -1
- package/dist/daemon-restart-circuit-breaker-PEGEIP6H.js +35 -0
- package/dist/daemon-timer-report-NM44WQRH.js +25 -0
- package/dist/{db-backup-DLD4QZBO.js → db-backup-W2QFSYQC.js} +15 -5
- package/dist/{db-restore-events-JVEEP52Z.js → db-restore-events-MQ2DBGEQ.js} +2 -2
- package/dist/dispatch-ack-VYH3ONSS.js +27 -0
- package/dist/{doc-graph-extractor-3TRLGD7M.js → doc-graph-extractor-F6ODFIID.js} +4 -4
- package/dist/{documents-FHIBU7KJ.js → documents-23WX2FPQ.js} +12 -12
- package/dist/dreaming-NWD22UQ5.js +46 -0
- package/dist/{exe-drift-KY2KHZEL.js → exe-drift-CW72FBGE.js} +5 -5
- package/dist/{exe-export-SP6G3QF6.js → exe-export-AUJ7CV7G.js} +11 -11
- package/dist/{exe-import-KJU7FBVQ.js → exe-import-JX4I52VE.js} +11 -11
- package/dist/{exe-key-M6TYHNUW.js → exe-key-2N6LY2BU.js} +241 -226
- package/dist/{exe-org-BGZNNE4H.js → exe-org-X4CSNCKS.js} +3 -3
- package/dist/{exe-snapshot-ZNPGUKRZ.js → exe-snapshot-XZ7FVCYZ.js} +31 -29
- package/dist/{fast-db-init-QQB6IVWV.js → fast-db-init-4CWHSOOR.js} +1 -1
- package/dist/{founder-context-PQR3BUS7.js → founder-context-7L3CFPYN.js} +4 -4
- package/dist/gateway/index.js +14 -14
- package/dist/{gateway-client-GRBOJQYC.js → gateway-client-7LMZKHTH.js} +1 -1
- package/dist/git-main-guard-UZP3KXYI.js +39 -0
- package/dist/{git-staleness-UGB5J3K7.js → git-staleness-CI2R4QOJ.js} +4 -4
- package/dist/{global-procedures-R7KRREEK.js → global-procedures-XQX3LUH6.js} +6 -6
- package/dist/{graph-auto-extract-LKIQ57PL.js → graph-auto-extract-OURWMGBS.js} +4 -4
- package/dist/{hook-integrity-WURH6DS3.js → hook-integrity-XY47IM7G.js} +1 -1
- package/dist/hook-prefetch-PHRRKY4C.js +137 -0
- package/dist/hooks/bug-report-worker.js +32 -28
- package/dist/hooks/codex-stop-task-finalizer.js +32 -28
- package/dist/hooks/commit-complete.js +29 -27
- package/dist/hooks/error-recall.js +12 -11
- package/dist/hooks/exe-heartbeat-hook.js +6 -6
- package/dist/hooks/ingest-worker.js +11 -11
- package/dist/hooks/ingest.js +18 -18
- package/dist/hooks/instructions-loaded.js +7 -7
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +7 -7
- package/dist/hooks/post-compact.js +28 -26
- package/dist/hooks/post-tool-combined.js +12 -12
- package/dist/hooks/pre-compact.js +29 -27
- package/dist/hooks/pre-tool-use.js +180 -47
- package/dist/hooks/prompt-submit.js +324 -273
- package/dist/hooks/session-end.js +35 -33
- package/dist/hooks/session-start.js +28 -21
- package/dist/hooks/stop.js +35 -33
- package/dist/hooks/subagent-stop.js +28 -26
- package/dist/hooks/summary-worker.js +36 -34
- package/dist/index.js +39 -37
- package/dist/{installer-SB2N5NKH.js → installer-G3JAO3NT.js} +9 -9
- package/dist/{installer-MZWWBXM6.js → installer-JND3RJ6Q.js} +9 -9
- package/dist/{installer-MNPXDLGG.js → installer-L7EVH5U5.js} +9 -9
- package/dist/{intercom-queue-VU2G6F5R.js → intercom-queue-ZFEQALR3.js} +25 -23
- package/dist/{key-backup-status-TNEHXA2X.js → key-backup-status-LOSMVATJ.js} +2 -2
- package/dist/lib/agent-config.js +4 -3
- package/dist/lib/cloud-sync.js +19 -19
- package/dist/lib/config.js +2 -2
- package/dist/lib/consolidation.js +9 -9
- package/dist/lib/crypto.js +3 -3
- package/dist/lib/database.js +6 -4
- package/dist/lib/db-daemon-client.js +5 -5
- package/dist/lib/db-read-worker-client.js +9 -3
- package/dist/lib/db.js +6 -4
- package/dist/lib/device-registry.js +3 -3
- package/dist/lib/embed-worker.js +2 -2
- package/dist/lib/embedder.js +5 -5
- package/dist/lib/employee-templates.js +7 -7
- package/dist/lib/employees.js +10 -4
- package/dist/lib/exe-daemon-client.js +4 -4
- package/dist/lib/exe-daemon.js +651 -158
- package/dist/lib/hybrid-search.js +11 -9
- package/dist/lib/identity.js +4 -4
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +4 -4
- package/dist/lib/messaging.js +28 -24
- package/dist/lib/post-tool-memory.js +3 -3
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +15 -7
- package/dist/lib/schedules.js +9 -9
- package/dist/lib/session-registry.js +6 -6
- package/dist/lib/skill-learning.js +10 -10
- package/dist/lib/status-brief.js +4 -4
- package/dist/lib/store.js +8 -8
- package/dist/lib/task-router.js +5 -5
- package/dist/lib/tasks.js +29 -25
- package/dist/lib/tmux-routing.js +56 -25
- package/dist/lib/tmux-status.js +9 -3
- package/dist/lib/tmux-transport.js +1 -1
- package/dist/lib/token-spend.js +5 -5
- package/dist/lib/transport.js +2 -2
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-BYDMFMFT.js → license-gate-QTRQHV4F.js} +5 -5
- package/dist/{license-sync-N3RNYVP2.js → license-sync-N3UJFWAW.js} +4 -4
- package/dist/mcp/register-tools.js +96 -89
- package/dist/mcp/server.js +98 -91
- package/dist/mcp/tools/complete-reminder.js +6 -6
- package/dist/mcp/tools/create-reminder.js +6 -6
- package/dist/mcp/tools/create-task.js +37 -28
- package/dist/mcp/tools/deactivate-behavior.js +11 -11
- package/dist/mcp/tools/list-reminders.js +6 -6
- package/dist/mcp/tools/list-tasks.js +35 -29
- package/dist/mcp/tools/send-message.js +28 -26
- package/dist/mcp/tools/update-task.js +34 -28
- package/dist/{mcp-http-config-EMAVS2JI.js → mcp-http-config-BDL36JZ3.js} +6 -6
- package/dist/{mcp-port-config-FFAMMLLE.js → mcp-port-config-6HYY6J7K.js} +2 -2
- package/dist/mcp-session-identity-T7H2EKFQ.js +177 -0
- package/dist/{memory-cards-TQRLZI4D.js → memory-cards-ZRDW7QBX.js} +8 -8
- package/dist/{memory-graph-extractor-IWGNVAFU.js → memory-graph-extractor-QLXDMHRS.js} +5 -5
- package/dist/{memory-poisoning-defense-T4ITBGSG.js → memory-poisoning-defense-HJTXYCWH.js} +4 -4
- package/dist/{memory-pressure-watchdog-RRIAXPXQ.js → memory-pressure-watchdog-HN5X7AVN.js} +76 -37
- package/dist/{memory-queue-X2CSEAKE.js → memory-queue-2UOOF27L.js} +5 -3
- package/dist/{memory-queue-client-BKQHTYTH.js → memory-queue-client-O5U6F6XP.js} +6 -6
- package/dist/{memory-reflection-6N4J2FL7.js → memory-reflection-WVNFBJAA.js} +4 -4
- package/dist/{monitor-grants-RZOVSYVO.js → monitor-grants-E3ELDEWD.js} +5 -5
- package/dist/{monitor-identity-MOXISYNG.js → monitor-identity-GLFZSEAH.js} +2 -2
- package/dist/notification-ledger-SZEPGJQ7.js +409 -0
- package/dist/{notifications-KONB3C62.js → notifications-4UT53CDG.js} +25 -23
- package/dist/{orchestration-events-5SIJOE4H.js → orchestration-events-WV4NWKZH.js} +5 -5
- package/dist/{orchestration-phase-CXRCBCK7.js → orchestration-phase-AWBXPO52.js} +3 -3
- package/dist/orchestrator-UAC3RW2T.js +47 -0
- package/dist/{pipeline-router-O6HU7DKH.js → pipeline-router-LM53NMWJ.js} +5 -5
- package/dist/{plan-limits-GRNBOBB3.js → plan-limits-2FEY2GOS.js} +7 -7
- package/dist/platform-procedures-X5DFJFV7.js +13 -0
- package/dist/{preferences-TYTGDXQZ.js → preferences-TWIXZBKS.js} +2 -2
- package/dist/{project-boot-SD7GM24K.js → project-boot-4NUH5FRU.js} +2 -2
- package/dist/{projection-worker-ZVOFHTXT.js → projection-worker-FZ7YSN3G.js} +5 -5
- package/dist/{prospective-memory-W6S67LZZ.js → prospective-memory-6D2ASWM3.js} +4 -4
- package/dist/{push-notifications-W5JRXLKJ.js → push-notifications-U6FIBQRW.js} +3 -3
- package/dist/{reranker-QATGTAPC.js → reranker-GYYRPANK.js} +3 -3
- package/dist/{retrieval-health-TWHKYCRK.js → retrieval-health-4Z242P3B.js} +1 -1
- package/dist/{review-polling-PCMD5BFN.js → review-polling-HXAFJZDA.js} +26 -24
- package/dist/runtime/index.js +37 -35
- package/dist/{session-events-3LCVQEL7.js → session-events-O3BV56ZX.js} +26 -24
- package/dist/{session-kill-telemetry-CZSPN5V6.js → session-kill-telemetry-AELE4JDK.js} +26 -24
- package/dist/session-mcp-config-YKNXG5DW.js +50 -0
- package/dist/{session-scope-CFHVSVAQ.js → session-scope-5EAPUT45.js} +25 -23
- package/dist/setup-wizard-NB6R4QVS.js +14 -0
- package/dist/{shard-manager-MBWQEYNG.js → shard-manager-35PWFR3B.js} +3 -3
- package/dist/{skill-refinement-74T6VDFM.js → skill-refinement-DVSYXBBP.js} +5 -5
- package/dist/stack-promote-RSOWO6EY.js +130 -0
- package/dist/{stack-release-XXMV7SPX.js → stack-release-HGFFFCGC.js} +112 -22
- package/dist/{stack-update-E2TKHHSQ.js → stack-update-ATCJFOEK.js} +7 -5
- package/dist/{steward-gate-WT7WXQIE.js → steward-gate-3GQ5XKMJ.js} +5 -5
- package/dist/support-inbox-4L62P4EP.js +33 -0
- package/dist/support-outbox-WHGPUYL2.js +16 -0
- package/dist/task-enforcement-IPIZX2MM.js +90 -0
- package/dist/{task-scope-CQEG5SSJ.js → task-scope-FOIW25HR.js} +27 -23
- package/dist/{tasks-crud-UGK5A25L.js → tasks-crud-HBDKE6C5.js} +35 -23
- package/dist/tasks-notify-G2U2U2YA.js +53 -0
- package/dist/{tasks-review-JKBRACII.js → tasks-review-27SFX5XN.js} +27 -23
- package/dist/{telemetry-upload-7LBYGPCB.js → telemetry-upload-ZOXHRWR5.js} +9 -9
- package/dist/tmux-command-guard-KSJKIX3C.js +117 -0
- package/dist/{token-budget-QBRJR4M5.js → token-budget-5Y4YPDO3.js} +5 -5
- package/dist/{tool-capability-index-Q6YQDL7I.js → tool-capability-index-VYF5GNJ2.js} +1 -1
- package/dist/{tool-telemetry-ULIDUK3P.js → tool-telemetry-KBXSBDTK.js} +1 -1
- package/dist/tui/App.js +40 -38
- package/dist/{tui-data-NPTGKT37.js → tui-data-NLFMBIQI.js} +25 -23
- package/dist/{update-check-HFO4VHO4.js → update-check-3FHAWIG2.js} +7 -3
- package/dist/update-support-UVUSZG7R.js +355 -0
- package/dist/{whatsapp-accounts-BWRZUY23.js → whatsapp-accounts-BFIOXYW5.js} +1 -1
- package/dist/{whatsapp-config-GOSELKTE.js → whatsapp-config-FAX6EA5K.js} +20 -13
- package/dist/{worker-gate-MXUQUG4M.js → worker-gate-3KUBAU32.js} +3 -3
- package/dist/{workflow-engine-EWCOLD47.js → workflow-engine-YITHXZR5.js} +2 -2
- package/dist/{working-memory-PY4AG577.js → working-memory-NUVB5SFV.js} +1 -1
- package/dist/worktree-LL62PLQB.js +47 -0
- package/dist/{worktree-sweep-ZAG3V24E.js → worktree-sweep-WTK3MTKH.js} +7 -7
- package/package.json +3 -2
- package/release-notes.json +86 -76
- package/dist/branch-hygiene-R5NVTRAY.js +0 -138
- package/dist/chunk-6IRVGOUL.js +0 -30
- package/dist/chunk-HMP5VT6A.js +0 -118
- package/dist/chunk-PVYR4FCQ.js +0 -113
- package/dist/chunk-UFAXZ2PY.js +0 -138
- package/dist/chunk-Y25OJWOQ.js +0 -45
- package/dist/chunk-YGAAZN3E.js +0 -47
- package/dist/cto-delegation-gate-DXNF5HVW.js +0 -290
- package/dist/dispatch-ack-4S44HBWB.js +0 -15
- package/dist/dreaming-OMFUEUCQ.js +0 -44
- package/dist/orchestrator-DUUX7FQV.js +0 -45
- package/dist/setup-wizard-TOFEJPLF.js +0 -13
- package/dist/tasks-notify-SMLDFBWM.js +0 -50
- package/dist/worktree-GVF2I5FP.js +0 -31
- /package/dist/{chunk-FLNSJ2TC.js → chunk-GIBYNT6W.js} +0 -0
- /package/dist/{chunk-NQBRGXYR.js → chunk-JRM4TAGS.js} +0 -0
- /package/dist/{chunk-WHRTDN5J.js → chunk-MGGOSFCR.js} +0 -0
- /package/dist/{chunk-D3QASX2W.js → chunk-QIFYLIUF.js} +0 -0
- /package/dist/{chunk-OADURIIN.js → chunk-WTH4CSAP.js} +0 -0
- /package/dist/{core-memory-VO5ZIBKH.js → core-memory-GAC6EWOQ.js} +0 -0
- /package/dist/{entity-boost-DNI4A5I7.js → entity-boost-NT6UO2Z3.js} +0 -0
- /package/dist/{message-queue-client-Q5BW3O5W.js → message-queue-client-4EOQRUXW.js} +0 -0
- /package/dist/{oauth-server-ROQFOEMM.js → oauth-server-67YBDP32.js} +0 -0
- /package/dist/{webhook-pipe-FZYLO6RR.js → webhook-pipe-LEXMUQ5B.js} +0 -0
- /package/dist/{wiki-acl-JA5UCQZ4.js → wiki-acl-74BLWG6J.js} +0 -0
- /package/dist/{wiki-client-VNDOBK63.js → wiki-client-EAN7F5LV.js} +0 -0
|
@@ -25,18 +25,17 @@ var PLATFORM_PROCEDURES = [
|
|
|
25
25
|
priority: "p1",
|
|
26
26
|
content: "exe-os supports three tools: Claude Code (Anthropic), Codex (OpenAI), OpenCode (open source, 75+ providers). Each agent can use a different tool and model. COO uses set_agent_config MCP tool to view/change settings. No args = show all agents. agent_id + runtime + model = change. Claude models: claude-sonnet-4.6, claude-opus-4.6, claude-sonnet-4.8, claude-opus-4.8, claude-opus-4.8-1m, fable (claude-fable-5). Interactive selection: `exe-os settings` from terminal."
|
|
27
27
|
},
|
|
28
|
-
// ---
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
title: "First install \u2014 setup wizard and license activation",
|
|
28
|
+
// --- Reference pointer (boot-perf audit 2026-07-06 §P1) ---
|
|
29
|
+
// The heavy reference sections (update lifecycle, first-install wizard, full
|
|
30
|
+
// MCP tool reference, cognition features, platform capabilities) were moved OUT
|
|
31
|
+
// of the always-injected block into PLATFORM_REFERENCE_PROCEDURES (read on
|
|
32
|
+
// demand) to cut the per-session token cost. This one compact pointer stays
|
|
33
|
+
// inline so agents know the reference exists and how to reach it.
|
|
34
|
+
{
|
|
35
|
+
title: "Platform reference \u2014 read on demand, not injected",
|
|
37
36
|
domain: "operations",
|
|
38
37
|
priority: "p1",
|
|
39
|
-
content: "
|
|
38
|
+
content: "Reference-heavy platform docs are NOT injected into every session (token budget). Read them on demand from ~/.exe-os/reference/platform-reference.md (auto-written at COO boot), which covers: the full MCP tool reference (all domains + key actions); how to update exe-os (channels, CLI vs stack, `exe-os update`); the first-install setup wizard + license activation; cognition features (dreaming, reflexes, baselines, hot-path summary); and platform capabilities (watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders). For LIVE MCP tool discovery use diagnostics(action='tool_search'); for update status use diagnostics(action='check_update'). When a task needs these details, read the file or recall \u2014 never guess update/setup steps."
|
|
40
39
|
},
|
|
41
40
|
// --- Project boundary ---
|
|
42
41
|
{
|
|
@@ -275,27 +274,6 @@ var PLATFORM_PROCEDURES = [
|
|
|
275
274
|
priority: "p0",
|
|
276
275
|
content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no tmux send-keys. MCP is the ONLY data interface AND dispatch path. When down, you cannot create tasks, send messages, or coordinate agents. Ask once, wait, proceed when reconnected."
|
|
277
276
|
},
|
|
278
|
-
// --- MCP Tool Reference (consolidated from 8 procedures) ---
|
|
279
|
-
{
|
|
280
|
-
title: "MCP tool reference \u2014 all domains and key actions",
|
|
281
|
-
domain: "tool-use",
|
|
282
|
-
priority: "p1",
|
|
283
|
-
content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, spawn_runtime, spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health."
|
|
284
|
-
},
|
|
285
|
-
// --- Cognition features (consolidated from reflex, baselines, hot-path) ---
|
|
286
|
-
{
|
|
287
|
-
title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
|
|
288
|
-
domain: "cognition",
|
|
289
|
-
priority: "p1",
|
|
290
|
-
content: "DREAMING: Analyzes recent work for patterns \u2014 mistakes, strategies, knowledge gaps. `dreaming(action='run')` triggers manually; `config(action='closeout')` runs as session closeout. Returns: patterns, behavior proposals (review before adopting), drift score (0-1, >0.8 triggers steward gate). status/history actions show past cycles. REFLEXES: Store trigger->action suggestions via behavior(action='store', domain='reflex', trigger='...', trigger_action='...'). Agent always decides \u2014 prominent suggestions, not auto-execution. EMOTIONAL BASELINES: Each role has target tone and anti-patterns. Dreaming tracks emotional drift. Baselines in identity files. HOT-PATH SUMMARY: ~200-token compressed last-session summary injected at boot before any recall. Don't re-search for context already in your session summary."
|
|
291
|
-
},
|
|
292
|
-
// --- Platform capabilities (consolidated from watchdog, diagnostics, doc-graph, attachments, reminders, discovery, roster) ---
|
|
293
|
-
{
|
|
294
|
-
title: "Platform capabilities \u2014 watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders",
|
|
295
|
-
domain: "operations",
|
|
296
|
-
priority: "p2",
|
|
297
|
-
content: "WATCHDOG: Out-of-process, pings daemon every 10s. After 3 failures (30s), force-restarts via SIGTERM->SIGKILL->launchd. MCP outages bounded to ~30-40s. Wait and retry before telling user to /mcp. DIAGNOSTICS: mcp_ping/cloud_status/memory_audit report embed daemon status, search mode, query router, vector backfill, graph coverage, event loop lag (degraded when >5s). DOC-GRAPH: ingest_document auto-extracts concepts/relationships to knowledge graph. Manual: graph(action='extract_from_document', document_id='...'). ATTACHMENTS: support(action='create_bug/create_feature') accepts attachments=[{filename, content}] (4KB truncated). REMINDERS: Auto-sync to cloud (Cloudflare KV). Created on Mac, visible on VPS. Dedup by text+due_date. DISCOVERY: Compact tool catalog injected at boot (~300 tokens). Per-prompt contextual hints (max 3, ~150 tokens). ROSTER: Team roster injected at boot (name+role). Don't recall for team info. Use config(action='capability_cards') for full agent manifests."
|
|
298
|
-
},
|
|
299
277
|
// --- Engineering discipline (coding agents) ---
|
|
300
278
|
{
|
|
301
279
|
title: "Engineering discipline \u2014 lazy ladder, surgical diffs, named failure modes",
|
|
@@ -318,11 +296,51 @@ var PLATFORM_PROCEDURES = [
|
|
|
318
296
|
content: "Your plan (free / pro / team / agency / enterprise) governs your limits \u2014 including how many agents/employees you can run. Enterprise = unlimited. HOW VALIDATION WORKS: your instance validates your license key (or login) against the cloud (api.askexe.com), which reads the users store \u2014 the SINGLE SOURCE OF TRUTH \u2014 and returns your plan as a signed token, cached locally at ~/.exe-os/license-cache.json (works fast, and offline within a grace window). That cached token is what your limits run on day-to-day. IF YOUR PLAN WAS CHANGED (e.g. upgraded to enterprise for more agents): the change lands on the SERVER first; your instance keeps the OLD cached plan until it re-validates \u2014 so nothing changes for you until you refresh. To pick it up IMMEDIATELY, do one of: (1) run the `refresh_license` MCP action, or (2) run the `exe-os license refresh` CLI. Either forces a re-check against the cloud, caches the new plan, and lifts your agent limit on the spot (shows old plan -> new plan + new limits). AUTOMATIC: on your next boot, your instance auto-detects a plan change (cheap cloud check, gated to ~10-min cache freshness) and announces it \u2014 e.g. 'Plan changed: pro -> enterprise. Employee limit now unlimited.' No cache-file editing, ever. ASKEXE ADMINS ONLY: to change a CUSTOMER's plan, use the admin-gated set-customer-plan path (requires the AskExe admin token \u2014 customers can never change their own or anyone's plan). It writes the users store (source of truth); the hourly license sync then reflects it into billing, and the customer runs `refresh_license` to pick it up. (Self-serve refresh available in exe-os 0.9.322+.)"
|
|
319
297
|
}
|
|
320
298
|
];
|
|
299
|
+
var PLATFORM_REFERENCE_PROCEDURES = [
|
|
300
|
+
{
|
|
301
|
+
title: "How to update exe-os \u2014 channels, versions, and lifecycle",
|
|
302
|
+
domain: "operations",
|
|
303
|
+
priority: "p0",
|
|
304
|
+
content: "TWO-STEP UPDATE: (1) CLI: `npm install -g @askexenow/exe-os@latest` \u2014 updates tools, MCP, procedures. Must happen first. (2) Stack (VPS only): `exe-os stack-update --target <version> --yes` \u2014 pulls new Docker images. CLI MUST precede stack \u2014 the stack-update command itself may have fixes. `exe-os update` is the recommended interactive path (runs npm install + install --global + daemon restart). Agents should NEVER run npm install or stack-update autonomously \u2014 confirm with user first. THREE CHANNELS: stable (default, @latest on npm), canary (@canary, experimental), pinned (blocks updates unless --force). View: `exe-os channel`. Change: `exe-os channel <name>`. TWO VERSION TRACKS: CLI version (e.g. 0.9.90) updates frequently; stack version (e.g. 0.9.8) updates rarely. CLI > stack is normal \u2014 do NOT attempt to make them match. Only update stack when boot brief says so or `exe-os stack-update --check` shows pending changes. WHAT PICKS UP NEW CODE: postinstall restarts daemon automatically. MCP picks up new code on next /mcp reconnect. Hooks pick up on next session (fresh processes). `npm run deploy` is dev-only (build + install + daemon restart). Never run from a worktree. NEVER confuse `exe-os setup` (first-time wizard) with `exe-os update` (replace code + restart). If stack-update fails with EACCES: `sudo mkdir -p /opt/exe-stack && sudo chown $(whoami) /opt/exe-stack`."
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
title: "First install \u2014 setup wizard and license activation",
|
|
308
|
+
domain: "operations",
|
|
309
|
+
priority: "p1",
|
|
310
|
+
content: "Fresh install: `npm install -g @askexenow/exe-os` then run `exe` to start the setup wizard. Wizard prompts for: encryption passphrase (creates master key), license key (exe_sk_*), COO name, optional team members. No license key = free tier (1 employee, 5K memories). After setup: hooks auto-install, MCP registers in ~/.claude.json, daemon starts. Verify: `exe-os healthcheck` or mcp_ping()."
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
title: "MCP tool reference \u2014 all domains and key actions",
|
|
314
|
+
domain: "tool-use",
|
|
315
|
+
priority: "p1",
|
|
316
|
+
content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, spawn_runtime, spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health."
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
|
|
320
|
+
domain: "cognition",
|
|
321
|
+
priority: "p1",
|
|
322
|
+
content: "DREAMING: Analyzes recent work for patterns \u2014 mistakes, strategies, knowledge gaps. `dreaming(action='run')` triggers manually; `config(action='closeout')` runs as session closeout. Returns: patterns, behavior proposals (review before adopting), drift score (0-1, >0.8 triggers steward gate). status/history actions show past cycles. REFLEXES: Store trigger->action suggestions via behavior(action='store', domain='reflex', trigger='...', trigger_action='...'). Agent always decides \u2014 prominent suggestions, not auto-execution. EMOTIONAL BASELINES: Each role has target tone and anti-patterns. Dreaming tracks emotional drift. Baselines in identity files. HOT-PATH SUMMARY: ~200-token compressed last-session summary injected at boot before any recall. Don't re-search for context already in your session summary."
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
title: "Platform capabilities \u2014 watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders",
|
|
326
|
+
domain: "operations",
|
|
327
|
+
priority: "p2",
|
|
328
|
+
content: "WATCHDOG: Out-of-process, pings daemon every 10s. After 3 failures (30s), force-restarts via SIGTERM->SIGKILL->launchd. MCP outages bounded to ~30-40s. Wait and retry before telling user to /mcp. DIAGNOSTICS: mcp_ping/cloud_status/memory_audit report embed daemon status, search mode, query router, vector backfill, graph coverage, event loop lag (degraded when >5s). DOC-GRAPH: ingest_document auto-extracts concepts/relationships to knowledge graph. Manual: graph(action='extract_from_document', document_id='...'). ATTACHMENTS: support(action='create_bug/create_feature') accepts attachments=[{filename, content}] (4KB truncated). REMINDERS: Auto-sync to cloud (Cloudflare KV). Created on Mac, visible on VPS. Dedup by text+due_date. DISCOVERY: Compact tool catalog injected at boot (~300 tokens). Per-prompt contextual hints (max 3, ~150 tokens). ROSTER: Team roster injected at boot (name+role). Don't recall for team info. Use config(action='capability_cards') for full agent manifests."
|
|
329
|
+
}
|
|
330
|
+
];
|
|
331
|
+
function getPlatformReferenceMarkdown() {
|
|
332
|
+
const body = PLATFORM_REFERENCE_PROCEDURES.map((p) => `## ${p.title}
|
|
333
|
+
|
|
334
|
+
${p.content}`).join("\n\n");
|
|
335
|
+
return "# exe-os Platform Reference (read on demand)\n\nAuto-generated at COO boot from the installed exe-os version. These sections are intentionally NOT injected into every session's system prompt \u2014 read them here when a task needs them.\n\n" + body + "\n";
|
|
336
|
+
}
|
|
321
337
|
var PLATFORM_PROCEDURE_TITLES = new Set(
|
|
322
|
-
PLATFORM_PROCEDURES.map((p) => p.title)
|
|
338
|
+
[...PLATFORM_PROCEDURES, ...PLATFORM_REFERENCE_PROCEDURES].map((p) => p.title)
|
|
323
339
|
);
|
|
324
340
|
|
|
325
341
|
export {
|
|
326
342
|
PLATFORM_PROCEDURES,
|
|
343
|
+
PLATFORM_REFERENCE_PROCEDURES,
|
|
344
|
+
getPlatformReferenceMarkdown,
|
|
327
345
|
PLATFORM_PROCEDURE_TITLES
|
|
328
346
|
};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// src/lib/update-check.ts
|
|
2
|
-
import { execSync } from "child_process";
|
|
2
|
+
import { execFile, execSync } from "child_process";
|
|
3
3
|
import { readFileSync } from "fs";
|
|
4
4
|
import path from "path";
|
|
5
|
+
import { promisify } from "util";
|
|
6
|
+
var execFileAsync = promisify(execFile);
|
|
5
7
|
function getLocalVersion(packageRoot) {
|
|
6
8
|
const pkgPath = path.join(packageRoot, "package.json");
|
|
7
9
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
@@ -20,6 +22,19 @@ function getRemoteVersion(tag) {
|
|
|
20
22
|
return null;
|
|
21
23
|
}
|
|
22
24
|
}
|
|
25
|
+
async function getRemoteVersionAsync(tag) {
|
|
26
|
+
try {
|
|
27
|
+
const distTag = tag ?? "latest";
|
|
28
|
+
const { stdout } = await execFileAsync(
|
|
29
|
+
"npm",
|
|
30
|
+
["view", `@askexenow/exe-os@${distTag}`, "version"],
|
|
31
|
+
{ encoding: "utf-8", timeout: 15e3 }
|
|
32
|
+
);
|
|
33
|
+
return String(stdout ?? "").trim() || null;
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
23
38
|
function channelToDistTag(channel) {
|
|
24
39
|
switch (channel) {
|
|
25
40
|
case "canary":
|
|
@@ -51,6 +66,24 @@ function checkForUpdate(packageRoot, channel) {
|
|
|
51
66
|
}
|
|
52
67
|
const distTag = channelToDistTag(effectiveChannel);
|
|
53
68
|
const remoteVersion = getRemoteVersion(distTag);
|
|
69
|
+
return buildUpdateResult(localVersion, remoteVersion, effectiveChannel);
|
|
70
|
+
}
|
|
71
|
+
async function checkForUpdateAsync(packageRoot, channel) {
|
|
72
|
+
const effectiveChannel = channel ?? "stable";
|
|
73
|
+
const localVersion = getLocalVersion(packageRoot);
|
|
74
|
+
if (effectiveChannel === "pinned") {
|
|
75
|
+
return {
|
|
76
|
+
updateAvailable: false,
|
|
77
|
+
localVersion,
|
|
78
|
+
channel: effectiveChannel,
|
|
79
|
+
error: "Updates pinned. Run with --force to override."
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const distTag = channelToDistTag(effectiveChannel);
|
|
83
|
+
const remoteVersion = await getRemoteVersionAsync(distTag);
|
|
84
|
+
return buildUpdateResult(localVersion, remoteVersion, effectiveChannel);
|
|
85
|
+
}
|
|
86
|
+
function buildUpdateResult(localVersion, remoteVersion, effectiveChannel) {
|
|
54
87
|
if (!remoteVersion) {
|
|
55
88
|
return {
|
|
56
89
|
updateAvailable: false,
|
|
@@ -68,7 +101,9 @@ function checkForUpdate(packageRoot, channel) {
|
|
|
68
101
|
export {
|
|
69
102
|
getLocalVersion,
|
|
70
103
|
getRemoteVersion,
|
|
104
|
+
getRemoteVersionAsync,
|
|
71
105
|
channelToDistTag,
|
|
72
106
|
channelToInstallTag,
|
|
73
|
-
checkForUpdate
|
|
107
|
+
checkForUpdate,
|
|
108
|
+
checkForUpdateAsync
|
|
74
109
|
};
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
recordSessionKill
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-L4A5DL6Z.js";
|
|
4
4
|
import {
|
|
5
5
|
sessionScopeFilter,
|
|
6
6
|
verifyPaneAtCapacity,
|
|
7
7
|
writeNotification
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-UP75Z5X7.js";
|
|
9
9
|
import {
|
|
10
10
|
listSessions
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KGWRTRKC.js";
|
|
12
12
|
import {
|
|
13
13
|
getTransport
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-AD2VCHSS.js";
|
|
15
15
|
import {
|
|
16
16
|
recordOrchestrationEventBestEffort
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2WAVZ5UJ.js";
|
|
18
18
|
import {
|
|
19
19
|
getClient,
|
|
20
20
|
isCoordinatorName
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-AOHXREB7.js";
|
|
22
22
|
|
|
23
23
|
// src/lib/capacity-monitor.ts
|
|
24
24
|
var CAPACITY_PATTERNS = [
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
ensureDaemonToken,
|
|
6
6
|
readDaemonToken
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-X2Q5NLUL.js";
|
|
8
8
|
import {
|
|
9
9
|
computeDaemonHeapCapMb
|
|
10
10
|
} from "./chunk-NLEW62VC.js";
|
|
11
11
|
import {
|
|
12
12
|
EXE_AI_DIR
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WZHZCDDO.js";
|
|
14
14
|
|
|
15
15
|
// src/lib/exe-daemon-client.ts
|
|
16
16
|
import net from "net";
|
|
@@ -42,6 +42,7 @@ function isBootFast() {
|
|
|
42
42
|
var _socket = null;
|
|
43
43
|
var _connected = false;
|
|
44
44
|
var _autoReconnecting = false;
|
|
45
|
+
var _intentionalDisconnect = false;
|
|
45
46
|
var _autoReconnectTimer = null;
|
|
46
47
|
var _buffer = "";
|
|
47
48
|
var _requestCount = 0;
|
|
@@ -359,6 +360,7 @@ function connectToSocket() {
|
|
|
359
360
|
_socket = socket;
|
|
360
361
|
_connected = true;
|
|
361
362
|
_buffer = "";
|
|
363
|
+
_intentionalDisconnect = false;
|
|
362
364
|
socket.on("data", handleData);
|
|
363
365
|
socket.on("close", () => {
|
|
364
366
|
_connected = false;
|
|
@@ -368,7 +370,9 @@ function connectToSocket() {
|
|
|
368
370
|
_pending.delete(id);
|
|
369
371
|
entry.resolve({ error: "Connection closed" });
|
|
370
372
|
}
|
|
371
|
-
|
|
373
|
+
const wasIntentional = _intentionalDisconnect;
|
|
374
|
+
_intentionalDisconnect = false;
|
|
375
|
+
if (!wasIntentional && !_autoReconnecting && !isBootFast()) {
|
|
372
376
|
startAutoReconnectLoop();
|
|
373
377
|
}
|
|
374
378
|
});
|
|
@@ -586,6 +590,7 @@ async function embedBatchViaClient(texts, priority = "high") {
|
|
|
586
590
|
function disconnectClient() {
|
|
587
591
|
clearAutoReconnectTimer();
|
|
588
592
|
_autoReconnecting = false;
|
|
593
|
+
_intentionalDisconnect = true;
|
|
589
594
|
if (_socket) {
|
|
590
595
|
_socket.destroy();
|
|
591
596
|
_socket = null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AOHXREB7.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/pipeline-router.ts
|
|
6
6
|
import crypto from "crypto";
|
|
@@ -116,12 +116,12 @@ async function sinkCRM(msg, agentResponse, agentName) {
|
|
|
116
116
|
}
|
|
117
117
|
async function sinkWiki(msg, agentResponse) {
|
|
118
118
|
try {
|
|
119
|
-
const { createWikiClient } = await import("./wiki-client-
|
|
119
|
+
const { createWikiClient } = await import("./wiki-client-EAN7F5LV.js");
|
|
120
120
|
const client = await createWikiClient();
|
|
121
121
|
if (!client) return false;
|
|
122
122
|
const content = msg.text ?? "";
|
|
123
123
|
if (content.length < 50) return false;
|
|
124
|
-
const { chatInWorkspace } = await import("./wiki-client-
|
|
124
|
+
const { chatInWorkspace } = await import("./wiki-client-EAN7F5LV.js");
|
|
125
125
|
const ingestText = [
|
|
126
126
|
`[${msg.platform}] Message from ${msg.senderName ?? msg.senderId} (${msg.timestamp}):`,
|
|
127
127
|
content,
|
|
@@ -149,7 +149,7 @@ async function sinkEntityExtraction(msg, agentResponse, agentName) {
|
|
|
149
149
|
const client = getClient();
|
|
150
150
|
const memoryId = `conv:${msg.messageId}`;
|
|
151
151
|
await storeExtraction(client, extraction, memoryId, msg.timestamp);
|
|
152
|
-
import("./conversation-wiki-populator-
|
|
152
|
+
import("./conversation-wiki-populator-WQN3IUU6.js").then(
|
|
153
153
|
({ populateWikiFromExtraction }) => populateWikiFromExtraction(extraction, msg, agentResponse, agentName)
|
|
154
154
|
).catch((err) => {
|
|
155
155
|
process.stderr.write(
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sanitizePort
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IBYL4DHM.js";
|
|
4
4
|
import {
|
|
5
5
|
loadEmployeesSync
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AOHXREB7.js";
|
|
7
7
|
|
|
8
8
|
// src/adapters/mcp-http-config.ts
|
|
9
9
|
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLATFORM_PROCEDURES,
|
|
3
3
|
PLATFORM_PROCEDURE_TITLES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-EQHQF5IM.js";
|
|
5
5
|
import {
|
|
6
6
|
getClient
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-AOHXREB7.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/global-procedures.ts
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// src/gateway/whatsapp-accounts.ts
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
var CONFIG_PATH = join(homedir(), ".exe-os", "whatsapp-accounts.json");
|
|
6
|
+
var GATEWAY_CONFIG_PATH = join(homedir(), ".exe-os", "gateway.json");
|
|
7
|
+
var cachedAccounts = null;
|
|
8
|
+
function loadLegacyGatewayAccounts() {
|
|
9
|
+
try {
|
|
10
|
+
const raw = readFileSync(GATEWAY_CONFIG_PATH, "utf8");
|
|
11
|
+
const cfg = JSON.parse(raw);
|
|
12
|
+
const legacy = cfg?.adapters?.whatsapp?.accounts;
|
|
13
|
+
if (!Array.isArray(legacy)) return [];
|
|
14
|
+
const out = [];
|
|
15
|
+
for (const a of legacy) {
|
|
16
|
+
const name = typeof a?.name === "string" ? a.name : void 0;
|
|
17
|
+
if (!name) continue;
|
|
18
|
+
out.push({
|
|
19
|
+
name,
|
|
20
|
+
phoneNumberId: typeof a.phoneNumberId === "string" ? a.phoneNumberId : "",
|
|
21
|
+
accessToken: typeof a.accessToken === "string" ? a.accessToken : "",
|
|
22
|
+
businessAccountId: typeof a.businessAccountId === "string" ? a.businessAccountId : "",
|
|
23
|
+
verifyToken: typeof a.verifyToken === "string" ? a.verifyToken : "",
|
|
24
|
+
...typeof a.defaultAgent === "string" ? { defaultAgent: a.defaultAgent } : {}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
} catch (err) {
|
|
29
|
+
if (err.code !== "ENOENT") {
|
|
30
|
+
console.warn("[whatsapp] Failed to load legacy gateway.json accounts:", err.message);
|
|
31
|
+
}
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function loadPrimaryAccounts() {
|
|
36
|
+
try {
|
|
37
|
+
const raw = readFileSync(CONFIG_PATH, "utf8");
|
|
38
|
+
const parsed = JSON.parse(raw);
|
|
39
|
+
if (!Array.isArray(parsed)) {
|
|
40
|
+
console.warn("[whatsapp] Config is not an array, ignoring");
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
return parsed.filter((a) => a && typeof a.name === "string");
|
|
44
|
+
} catch (err) {
|
|
45
|
+
if (err.code !== "ENOENT") {
|
|
46
|
+
console.warn("[whatsapp] Failed to load accounts config:", err.message);
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function hasCredentials(a) {
|
|
52
|
+
return Boolean(a.phoneNumberId && a.accessToken);
|
|
53
|
+
}
|
|
54
|
+
function sameCredentials(a, b) {
|
|
55
|
+
return a.phoneNumberId === b.phoneNumberId && a.accessToken === b.accessToken;
|
|
56
|
+
}
|
|
57
|
+
function loadAccounts() {
|
|
58
|
+
if (cachedAccounts !== null) return cachedAccounts;
|
|
59
|
+
const byName = /* @__PURE__ */ new Map();
|
|
60
|
+
for (const a of loadPrimaryAccounts()) byName.set(a.name, a);
|
|
61
|
+
for (const legacy of loadLegacyGatewayAccounts()) {
|
|
62
|
+
const existing = byName.get(legacy.name);
|
|
63
|
+
if (!existing) {
|
|
64
|
+
byName.set(legacy.name, legacy);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const existingHasCreds = hasCredentials(existing);
|
|
68
|
+
const legacyHasCreds = hasCredentials(legacy);
|
|
69
|
+
if (existingHasCreds && !legacyHasCreds) continue;
|
|
70
|
+
if (!existingHasCreds && legacyHasCreds) {
|
|
71
|
+
byName.set(legacy.name, legacy);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (existingHasCreds && legacyHasCreds && !sameCredentials(existing, legacy)) {
|
|
75
|
+
console.warn(
|
|
76
|
+
`[whatsapp] account "${legacy.name}" has CONFLICTING credentials in whatsapp-accounts.json and gateway.json (phoneNumberId "${existing.phoneNumberId}" vs "${legacy.phoneNumberId}"). Using whatsapp-accounts.json (validated store). Reconcile via gateway(action='configure_whatsapp').`
|
|
77
|
+
);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
cachedAccounts = Array.from(byName.values());
|
|
82
|
+
return cachedAccounts;
|
|
83
|
+
}
|
|
84
|
+
function getAccountByName(name) {
|
|
85
|
+
return loadAccounts().find((a) => a.name === name);
|
|
86
|
+
}
|
|
87
|
+
function getAccountByPhoneNumberId(phoneNumberId) {
|
|
88
|
+
return loadAccounts().find((a) => a.phoneNumberId === phoneNumberId);
|
|
89
|
+
}
|
|
90
|
+
function getDefaultAccount() {
|
|
91
|
+
const accounts = loadAccounts();
|
|
92
|
+
return accounts[0];
|
|
93
|
+
}
|
|
94
|
+
function _resetCache() {
|
|
95
|
+
cachedAccounts = null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export {
|
|
99
|
+
loadAccounts,
|
|
100
|
+
getAccountByName,
|
|
101
|
+
getAccountByPhoneNumberId,
|
|
102
|
+
getDefaultAccount,
|
|
103
|
+
_resetCache
|
|
104
|
+
};
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getBrandAsciiArt,
|
|
3
3
|
getBrandName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-O5V57XYE.js";
|
|
5
5
|
import {
|
|
6
6
|
getMasterKey,
|
|
7
7
|
setMasterKey
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QWVXN224.js";
|
|
9
|
+
import {
|
|
10
|
+
RUNTIME_TABLE
|
|
11
|
+
} from "./chunk-NGP6LSV2.js";
|
|
9
12
|
import {
|
|
10
13
|
EXE_AI_DIR,
|
|
11
14
|
LEGACY_LANCE_PATH,
|
|
12
15
|
MODELS_DIR,
|
|
13
16
|
loadConfig,
|
|
14
17
|
saveConfig
|
|
15
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-WZHZCDDO.js";
|
|
16
19
|
import {
|
|
17
20
|
atomicWriteJsonSync,
|
|
18
21
|
atomicWriteSync
|
|
19
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-BYTDMAGB.js";
|
|
20
23
|
|
|
21
24
|
// src/lib/setup-wizard.ts
|
|
22
25
|
import crypto from "crypto";
|
|
@@ -204,7 +207,7 @@ function clearSetupState() {
|
|
|
204
207
|
}
|
|
205
208
|
async function probeDaemonHealthAfterInstall() {
|
|
206
209
|
try {
|
|
207
|
-
const { waitForDaemonReady } = await import("./daemon-ready-
|
|
210
|
+
const { waitForDaemonReady } = await import("./daemon-ready-4JTSFKAY.js");
|
|
208
211
|
return await waitForDaemonReady(4, 500);
|
|
209
212
|
} catch {
|
|
210
213
|
return false;
|
|
@@ -488,7 +491,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
488
491
|
log(" The old directory will not be modified or deleted.");
|
|
489
492
|
log("");
|
|
490
493
|
}
|
|
491
|
-
const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-
|
|
494
|
+
const { getKeyBackupStatus, markKeyBackupConfirmed } = await import("./key-backup-status-LOSMVATJ.js");
|
|
492
495
|
const keyBackupBeforeStep1 = getKeyBackupStatus();
|
|
493
496
|
const mustRunKeyCeremony = !state.completedSteps.includes(1) || !keyBackupBeforeStep1.exists;
|
|
494
497
|
if (mustRunKeyCeremony) {
|
|
@@ -509,20 +512,22 @@ async function runSetupWizard(opts = {}) {
|
|
|
509
512
|
log("");
|
|
510
513
|
const { exportMnemonic } = await import("./lib/keychain.js");
|
|
511
514
|
const mnemonic = await exportMnemonic(key);
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
515
|
+
if (!nonInteractive) {
|
|
516
|
+
log("=============================================================");
|
|
517
|
+
log(" YOUR 24-WORD RECOVERY PHRASE");
|
|
518
|
+
log("=============================================================");
|
|
519
|
+
log("");
|
|
520
|
+
log(" " + mnemonic);
|
|
521
|
+
log("");
|
|
522
|
+
log(" SAVE THIS NOW before continuing.");
|
|
523
|
+
log(" Best: put it in your password manager, or write it down and keep it safe.");
|
|
524
|
+
log(" This phrase is the ONLY way to decrypt your memories if you lose this computer.");
|
|
525
|
+
log(" We cannot recover it for you.");
|
|
526
|
+
log("");
|
|
527
|
+
log(" Like a Bitcoin wallet \u2014 lose the phrase, lose everything.");
|
|
528
|
+
log("=============================================================");
|
|
529
|
+
log("");
|
|
530
|
+
}
|
|
526
531
|
const confirmation = nonInteractive ? "" : await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ', true);
|
|
527
532
|
if (nonInteractive) {
|
|
528
533
|
const recoveryPath = path2.join(EXE_AI_DIR, "recovery-phrase.txt");
|
|
@@ -530,6 +535,16 @@ async function runSetupWizard(opts = {}) {
|
|
|
530
535
|
writeFileSync(recoveryPath, mnemonic + "\n", { mode: 384 });
|
|
531
536
|
chmodSync(recoveryPath, 384);
|
|
532
537
|
log(`[headless] Recovery phrase written to ${recoveryPath} (0600). It is not marked as confirmed.`);
|
|
538
|
+
log("");
|
|
539
|
+
log(" ============================================================");
|
|
540
|
+
log(" \u26A0 SECURITY: recovery-phrase.txt is PLAINTEXT on disk.");
|
|
541
|
+
log(" Record the 24-word phrase in a password manager or offline");
|
|
542
|
+
log(" vault, then DELETE the file \u2014 it is not deleted for you:");
|
|
543
|
+
log(" exe-os doctor --delete-local-secret-residue");
|
|
544
|
+
log(" Leaving it on disk defeats end-to-end encryption if this");
|
|
545
|
+
log(" machine is compromised.");
|
|
546
|
+
log(" ============================================================");
|
|
547
|
+
log("");
|
|
533
548
|
}
|
|
534
549
|
if (!nonInteractive && confirmation.toUpperCase().trim() !== "I SAVED MY RECOVERY PHRASE") {
|
|
535
550
|
throw new Error(
|
|
@@ -711,7 +726,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
711
726
|
if (cloudConfig) {
|
|
712
727
|
config.cloud = cloudConfig;
|
|
713
728
|
}
|
|
714
|
-
const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-
|
|
729
|
+
const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-AWBXPO52.js");
|
|
715
730
|
applyDefaultOrchestrationPhase(config);
|
|
716
731
|
await saveConfig(config);
|
|
717
732
|
log("");
|
|
@@ -737,7 +752,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
737
752
|
log("Step 5 already complete \u2014 skipping.");
|
|
738
753
|
}
|
|
739
754
|
if (!state.completedSteps.includes(55)) {
|
|
740
|
-
const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-
|
|
755
|
+
const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-TWIXZBKS.js");
|
|
741
756
|
const existingPrefs = loadPrefs();
|
|
742
757
|
const prefs = { ...existingPrefs };
|
|
743
758
|
if (!fast) {
|
|
@@ -808,7 +823,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
808
823
|
}
|
|
809
824
|
const rtMap = {
|
|
810
825
|
"1": { runtime: "claude", defaultModel: "claude-sonnet-4.6" },
|
|
811
|
-
"2": { runtime: "codex", defaultModel:
|
|
826
|
+
"2": { runtime: "codex", defaultModel: RUNTIME_TABLE.codex.defaultModel },
|
|
812
827
|
"3": { runtime: "opencode", defaultModel: "anthropic/claude-sonnet-4-6" }
|
|
813
828
|
};
|
|
814
829
|
const selected = rtMap[rtChoice.trim()] ?? rtMap["1"];
|
|
@@ -1097,7 +1112,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
1097
1112
|
log("");
|
|
1098
1113
|
unlockExecutives = (await askOrEnv("Unlock Phase 2 executives now? (y/N): ", void 0, "n")).toLowerCase() === "y";
|
|
1099
1114
|
}
|
|
1100
|
-
const { setOrchestrationPhase } = await import("./orchestration-phase-
|
|
1115
|
+
const { setOrchestrationPhase } = await import("./orchestration-phase-AWBXPO52.js");
|
|
1101
1116
|
if (!unlockExecutives) {
|
|
1102
1117
|
await setOrchestrationPhase("phase_1_coo", "setup-wizard");
|
|
1103
1118
|
log("");
|