@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
|
@@ -2,7 +2,12 @@ import {
|
|
|
2
2
|
SUPPORT_REPORT_SENT_MARKER,
|
|
3
3
|
markSupportReportSentSync
|
|
4
4
|
} from "./chunk-MMRUBN3I.js";
|
|
5
|
-
import
|
|
5
|
+
import {
|
|
6
|
+
isTelemetryRedactionEnabled,
|
|
7
|
+
sanitizeSupportEndpointPath,
|
|
8
|
+
sanitizeUpstreamId,
|
|
9
|
+
sanitizeUpstreamPayload
|
|
10
|
+
} from "./chunk-4QCFFW2H.js";
|
|
6
11
|
|
|
7
12
|
// src/lib/support-outbox.ts
|
|
8
13
|
import { mkdirSync, readdirSync, readFileSync, writeFileSync, existsSync } from "fs";
|
|
@@ -72,7 +77,8 @@ function normalizeBaseEndpoint(value, fallback) {
|
|
|
72
77
|
}
|
|
73
78
|
return raw.replace(/\/+$/, "").replace(/\/(bug-reports|feature-requests)\/?$/, "");
|
|
74
79
|
}
|
|
75
|
-
function buildStatusUpdateEndpoint(
|
|
80
|
+
function buildStatusUpdateEndpoint(rawEndpointPath, adminToken) {
|
|
81
|
+
const endpointPath = sanitizeSupportEndpointPath(rawEndpointPath);
|
|
76
82
|
const config = loadConfigFile();
|
|
77
83
|
const support = config?.support;
|
|
78
84
|
const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
|
|
@@ -115,8 +121,9 @@ function findExistingUnsentStatusUpdate(kind, id) {
|
|
|
115
121
|
return void 0;
|
|
116
122
|
}
|
|
117
123
|
function queueSupportStatusUpdateSync(input) {
|
|
118
|
-
const id = input.id.trim();
|
|
124
|
+
const id = sanitizeUpstreamId(input.id.trim());
|
|
119
125
|
if (!id) return void 0;
|
|
126
|
+
const endpointPath = sanitizeSupportEndpointPath(input.endpointPath);
|
|
120
127
|
try {
|
|
121
128
|
mkdirSync(STATUS_UPDATE_DIR, { recursive: true });
|
|
122
129
|
const existingPath = findExistingUnsentStatusUpdate(input.kind, id);
|
|
@@ -134,7 +141,7 @@ function queueSupportStatusUpdateSync(input) {
|
|
|
134
141
|
const record = {
|
|
135
142
|
id,
|
|
136
143
|
kind: input.kind,
|
|
137
|
-
endpointPath
|
|
144
|
+
endpointPath,
|
|
138
145
|
method: input.method ?? "PATCH",
|
|
139
146
|
payload: input.payload,
|
|
140
147
|
created_at: existingPath ? JSON.parse(readFileSync(existingPath, "utf-8")).created_at : createdAt,
|
|
@@ -350,6 +357,13 @@ ${DUPLICATE_MARKER}: ${dedupeHash}
|
|
|
350
357
|
skipped++;
|
|
351
358
|
continue;
|
|
352
359
|
}
|
|
360
|
+
let outboundBody;
|
|
361
|
+
if (isTelemetryRedactionEnabled()) {
|
|
362
|
+
outboundBody = JSON.stringify(sanitizeUpstreamPayload(payload).payload);
|
|
363
|
+
} else {
|
|
364
|
+
console.error("[support-outbox] WARNING: EXE_TELEMETRY_REDACT=off \u2014 sending UNREDACTED payload upstream");
|
|
365
|
+
outboundBody = JSON.stringify(payload);
|
|
366
|
+
}
|
|
353
367
|
try {
|
|
354
368
|
const resp = await fetch(endpoint, {
|
|
355
369
|
method: "POST",
|
|
@@ -363,7 +377,7 @@ ${DUPLICATE_MARKER}: ${dedupeHash}
|
|
|
363
377
|
...!gotrueAuth && licenseToken ? { "x-exe-license-token": licenseToken } : {},
|
|
364
378
|
...adminToken ? { "x-askexe-admin-token": adminToken } : {}
|
|
365
379
|
},
|
|
366
|
-
body:
|
|
380
|
+
body: outboundBody,
|
|
367
381
|
signal: AbortSignal.timeout(5e3)
|
|
368
382
|
});
|
|
369
383
|
if (resp.ok || resp.status === 409) {
|
|
@@ -396,7 +410,9 @@ async function sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken
|
|
|
396
410
|
...!adminToken && !gotrueAuth && licenseKey ? { "x-exe-license-key": licenseKey } : {},
|
|
397
411
|
...!adminToken && !gotrueAuth && licenseToken ? { "x-exe-license-token": licenseToken } : {}
|
|
398
412
|
},
|
|
399
|
-
|
|
413
|
+
// Egress redaction gate — queued status updates may contain free-text
|
|
414
|
+
// notes/comments; redact before the retry PATCH reaches the network.
|
|
415
|
+
body: isTelemetryRedactionEnabled() ? JSON.stringify(sanitizeUpstreamPayload(record.payload).payload) : JSON.stringify(record.payload),
|
|
400
416
|
signal: AbortSignal.timeout(5e3)
|
|
401
417
|
});
|
|
402
418
|
if (resp.ok) {
|
|
@@ -502,7 +518,7 @@ async function reconcileUpstreamStatus() {
|
|
|
502
518
|
for (const file of files) {
|
|
503
519
|
const filePath = path.join(dir, file);
|
|
504
520
|
const content = readFileSync(filePath, "utf-8");
|
|
505
|
-
const idMatch = content.match(/^id:\s*([0-9a-f-]{
|
|
521
|
+
const idMatch = content.match(/^id:\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*$/mi);
|
|
506
522
|
if (!idMatch) continue;
|
|
507
523
|
const id = idMatch[1];
|
|
508
524
|
const statusMatch = content.match(/^status:\s*(\S+)\s*$/m);
|
|
@@ -510,7 +526,7 @@ async function reconcileUpstreamStatus() {
|
|
|
510
526
|
if (localStatus === "closed" || localStatus === "shipped") continue;
|
|
511
527
|
try {
|
|
512
528
|
const resp = await fetch(
|
|
513
|
-
`https://api.askexe.com/admin/support/${kind}/${encodeURIComponent(id)}`,
|
|
529
|
+
`https://api.askexe.com/admin/support/${kind}/${encodeURIComponent(sanitizeUpstreamId(id))}`,
|
|
514
530
|
{
|
|
515
531
|
headers: { authorization: `Bearer ${adminToken}` },
|
|
516
532
|
signal: AbortSignal.timeout(5e3)
|
|
@@ -590,10 +606,10 @@ function scanStatusDir(dir) {
|
|
|
590
606
|
}
|
|
591
607
|
return { total: files.length, unsent, oldest };
|
|
592
608
|
}
|
|
609
|
+
|
|
593
610
|
export {
|
|
594
|
-
flushSupportOutbox as flushBugReportOutbox,
|
|
595
|
-
flushSupportOutbox,
|
|
596
|
-
getOutboxStatus,
|
|
597
611
|
queueSupportStatusUpdateSync,
|
|
598
|
-
|
|
612
|
+
flushSupportOutbox,
|
|
613
|
+
reconcileUpstreamStatus,
|
|
614
|
+
getOutboxStatus
|
|
599
615
|
};
|
|
@@ -89,7 +89,7 @@ async function getRetrievalHealth() {
|
|
|
89
89
|
const coveragePct = totalMemories > 0 ? Math.round(memoriesWithVectors / totalMemories * 100) : null;
|
|
90
90
|
let dbRestore = { hasEvents: false, count: 0, last: null, quarantineFiles: 0 };
|
|
91
91
|
try {
|
|
92
|
-
const { getDbRestoreHealth } = await import("./db-restore-events-
|
|
92
|
+
const { getDbRestoreHealth } = await import("./db-restore-events-MQ2DBGEQ.js");
|
|
93
93
|
dbRestore = getDbRestoreHealth();
|
|
94
94
|
} catch {
|
|
95
95
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getGitRoot,
|
|
3
|
-
isWorktreeDirty
|
|
4
|
-
|
|
3
|
+
isWorktreeDirty,
|
|
4
|
+
isWorktreeDirtyAsync
|
|
5
|
+
} from "./chunk-I26FWCSP.js";
|
|
5
6
|
|
|
6
7
|
// src/lib/worktree-sweep.ts
|
|
7
8
|
import { execFile } from "child_process";
|
|
@@ -403,7 +404,7 @@ async function cleanupAgentWorktree(repoRoot, agentName) {
|
|
|
403
404
|
if (baseName !== agentBase) continue;
|
|
404
405
|
const wtPath = path.join(worktreesDir, entry);
|
|
405
406
|
const branch = await getWorktreeBranch(repoRoot, wtPath);
|
|
406
|
-
if (
|
|
407
|
+
if (await isWorktreeDirtyAsync(wtPath)) {
|
|
407
408
|
notes.push(`Worktree .worktrees/${entry} has uncommitted changes \u2014 preserved`);
|
|
408
409
|
continue;
|
|
409
410
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadConfigSync
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WZHZCDDO.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/push-notifications.ts
|
|
6
|
-
import { execSync } from "child_process";
|
|
6
|
+
import { execSync, execFileSync } from "child_process";
|
|
7
7
|
import nodemailer from "nodemailer";
|
|
8
8
|
var TELEGRAM_TIMEOUT_MS = 1e4;
|
|
9
9
|
var SMTP_TIMEOUT_MS = 15e3;
|
|
@@ -29,8 +29,8 @@ function _resetPushConfig() {
|
|
|
29
29
|
}
|
|
30
30
|
function sendDesktopNotification(title, body, sessionScope) {
|
|
31
31
|
try {
|
|
32
|
-
const safeTitle = title.replace(/["\\\n]/g, " ").slice(0, 100);
|
|
33
|
-
const safeBody = body.replace(/["\\\n]/g, " ").slice(0, 200);
|
|
32
|
+
const safeTitle = title.replace(/["\\\n$`!]/g, " ").slice(0, 100);
|
|
33
|
+
const safeBody = body.replace(/["\\\n$`!]/g, " ").slice(0, 200);
|
|
34
34
|
try {
|
|
35
35
|
const osc9 = `\x1B]9;${safeTitle}: ${safeBody}\x07`;
|
|
36
36
|
let coordinatorSession;
|
|
@@ -47,7 +47,7 @@ function sendDesktopNotification(title, body, sessionScope) {
|
|
|
47
47
|
} catch {
|
|
48
48
|
}
|
|
49
49
|
if (process.platform === "linux") {
|
|
50
|
-
|
|
50
|
+
execFileSync("notify-send", [safeTitle, safeBody], {
|
|
51
51
|
timeout: DESKTOP_TIMEOUT_MS,
|
|
52
52
|
stdio: "ignore"
|
|
53
53
|
});
|
|
@@ -1,56 +1,128 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isExploreMode
|
|
3
|
-
} from "./chunk-PVYR4FCQ.js";
|
|
4
1
|
import {
|
|
5
2
|
sendIntercom,
|
|
6
3
|
updateTaskStatus
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-OFX5B2S7.js";
|
|
9
|
-
import "./chunk-B76TSEP3.js";
|
|
10
|
-
import "./chunk-RLRT2BVM.js";
|
|
11
|
-
import "./chunk-4JERP7NT.js";
|
|
12
|
-
import "./chunk-EIKATSE4.js";
|
|
13
|
-
import "./chunk-E23LNUWJ.js";
|
|
14
|
-
import "./chunk-UIV2WPBT.js";
|
|
15
|
-
import "./chunk-SSTLTIF3.js";
|
|
16
|
-
import "./chunk-RMOBQ6A5.js";
|
|
17
|
-
import "./chunk-54QCG45Y.js";
|
|
4
|
+
} from "./chunk-UP75Z5X7.js";
|
|
18
5
|
import {
|
|
19
6
|
recordOrchestrationEventBestEffort
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
import "./chunk-CVYC6DUW.js";
|
|
25
|
-
import "./chunk-2233TQCA.js";
|
|
26
|
-
import "./chunk-HCJCW7X4.js";
|
|
27
|
-
import "./chunk-OPU3NYOO.js";
|
|
28
|
-
import "./chunk-7TS64TBG.js";
|
|
29
|
-
import "./chunk-AFNRE2RV.js";
|
|
30
|
-
import "./chunk-3NGZ4PL7.js";
|
|
31
|
-
import "./chunk-NLEW62VC.js";
|
|
32
|
-
import "./chunk-HYZV25LY.js";
|
|
33
|
-
import "./chunk-GJV3WDWM.js";
|
|
34
|
-
import "./chunk-MP2AFCGL.js";
|
|
7
|
+
} from "./chunk-2WAVZ5UJ.js";
|
|
8
|
+
import {
|
|
9
|
+
BUSY_PATTERN
|
|
10
|
+
} from "./chunk-GWDSB25T.js";
|
|
35
11
|
import {
|
|
12
|
+
baseAgentName,
|
|
36
13
|
getCoordinatorName,
|
|
37
14
|
isCoordinatorName
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
import "
|
|
42
|
-
import "
|
|
43
|
-
import "
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
15
|
+
} from "./chunk-AOHXREB7.js";
|
|
16
|
+
|
|
17
|
+
// src/lib/play-mode.ts
|
|
18
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
19
|
+
import { join, dirname } from "path";
|
|
20
|
+
import { homedir } from "os";
|
|
21
|
+
var PLAY_MODE_FILE = join(homedir(), ".exe-os", "play-modes.json");
|
|
22
|
+
function resolvePlayModeFile() {
|
|
23
|
+
return process.env.EXE_PLAY_MODE_FILE ?? PLAY_MODE_FILE;
|
|
24
|
+
}
|
|
25
|
+
var DEFAULT_EXPLORE_DURATION_MS = 60 * 60 * 1e3;
|
|
26
|
+
function playModeKey(agentId, sessionScope) {
|
|
27
|
+
return `${agentId}:${sessionScope}`;
|
|
28
|
+
}
|
|
29
|
+
function readStore() {
|
|
30
|
+
try {
|
|
31
|
+
const filePath = resolvePlayModeFile();
|
|
32
|
+
if (!existsSync(filePath)) return {};
|
|
33
|
+
const raw = readFileSync(filePath, "utf8");
|
|
34
|
+
return JSON.parse(raw);
|
|
35
|
+
} catch {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function writeStore(store) {
|
|
40
|
+
const filePath = resolvePlayModeFile();
|
|
41
|
+
const dir = dirname(filePath);
|
|
42
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
43
|
+
writeFileSync(filePath, JSON.stringify(store, null, 2), "utf8");
|
|
44
|
+
}
|
|
45
|
+
function setPlayMode(agentId, sessionScope, mode, options = {}) {
|
|
46
|
+
const key = playModeKey(agentId, sessionScope);
|
|
47
|
+
const store = readStore();
|
|
48
|
+
if (mode === "task") {
|
|
49
|
+
delete store[key];
|
|
50
|
+
writeStore(store);
|
|
51
|
+
return {
|
|
52
|
+
mode: "task",
|
|
53
|
+
agentId,
|
|
54
|
+
sessionScope,
|
|
55
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
56
|
+
expiresAt: new Date(Date.now() + 1).toISOString()
|
|
57
|
+
// immediate
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const durationMs = options.durationMs ?? DEFAULT_EXPLORE_DURATION_MS;
|
|
61
|
+
const now = /* @__PURE__ */ new Date();
|
|
62
|
+
const entry = {
|
|
63
|
+
mode: "explore",
|
|
64
|
+
agentId,
|
|
65
|
+
sessionScope,
|
|
66
|
+
startedAt: now.toISOString(),
|
|
67
|
+
expiresAt: new Date(now.getTime() + durationMs).toISOString(),
|
|
68
|
+
notes: options.notes
|
|
69
|
+
};
|
|
70
|
+
store[key] = entry;
|
|
71
|
+
writeStore(store);
|
|
72
|
+
return entry;
|
|
73
|
+
}
|
|
74
|
+
function getPlayMode(agentId, sessionScope) {
|
|
75
|
+
const key = playModeKey(agentId, sessionScope);
|
|
76
|
+
const store = readStore();
|
|
77
|
+
const entry = store[key];
|
|
78
|
+
if (!entry) return null;
|
|
79
|
+
if (new Date(entry.expiresAt).getTime() <= Date.now()) {
|
|
80
|
+
delete store[key];
|
|
81
|
+
try {
|
|
82
|
+
writeStore(store);
|
|
83
|
+
} catch {
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return entry;
|
|
88
|
+
}
|
|
89
|
+
function isExploreMode(agentId, sessionScope) {
|
|
90
|
+
try {
|
|
91
|
+
const entry = getPlayMode(agentId, sessionScope);
|
|
92
|
+
return entry?.mode === "explore";
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function listExploreSessions() {
|
|
98
|
+
try {
|
|
99
|
+
const store = readStore();
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
const active = [];
|
|
102
|
+
let pruned = false;
|
|
103
|
+
for (const [key, entry] of Object.entries(store)) {
|
|
104
|
+
if (new Date(entry.expiresAt).getTime() <= now) {
|
|
105
|
+
delete store[key];
|
|
106
|
+
pruned = true;
|
|
107
|
+
} else {
|
|
108
|
+
active.push(entry);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (pruned) {
|
|
112
|
+
try {
|
|
113
|
+
writeStore(store);
|
|
114
|
+
} catch {
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return active;
|
|
118
|
+
} catch {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
50
122
|
|
|
51
123
|
// src/lib/task-enforcement.ts
|
|
52
124
|
import { appendFile, readdir, readFile, writeFile } from "fs/promises";
|
|
53
|
-
import { existsSync } from "fs";
|
|
125
|
+
import { existsSync as existsSync2 } from "fs";
|
|
54
126
|
import path from "path";
|
|
55
127
|
import os from "os";
|
|
56
128
|
var TASK_ENFORCEMENT_INTERVAL_MS = 6e4;
|
|
@@ -115,7 +187,7 @@ function decideWorkerAction(taskCount, isIdle, nudgeEcho) {
|
|
|
115
187
|
function isIdlePane(paneText) {
|
|
116
188
|
return IDLE_PATTERNS.some((p) => paneText.includes(p));
|
|
117
189
|
}
|
|
118
|
-
var WORKER_BUSY_PATTERN =
|
|
190
|
+
var WORKER_BUSY_PATTERN = BUSY_PATTERN;
|
|
119
191
|
function isPaneBusy(paneText) {
|
|
120
192
|
const tail = paneText.split("\n").map((line) => line.trim()).filter(Boolean).slice(-6).join("\n");
|
|
121
193
|
return WORKER_BUSY_PATTERN.test(tail);
|
|
@@ -204,7 +276,7 @@ function scopeFromEmployeeSession(sessionName) {
|
|
|
204
276
|
}
|
|
205
277
|
async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs = STALE_DISPATCH_PENDING_THRESHOLD_MS) {
|
|
206
278
|
const dir = dispatchAckDir();
|
|
207
|
-
if (!
|
|
279
|
+
if (!existsSync2(dir)) return 0;
|
|
208
280
|
const allowedScopes = new Set(scopeList);
|
|
209
281
|
let surfaced = 0;
|
|
210
282
|
let files = [];
|
|
@@ -220,7 +292,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
|
|
|
220
292
|
const staleMarkerPath = path.join(dir, `${taskId}.stale`);
|
|
221
293
|
const ackPath = path.join(dir, `${taskId}.ack`);
|
|
222
294
|
const failedPath = path.join(dir, `${taskId}.failed`);
|
|
223
|
-
if (
|
|
295
|
+
if (existsSync2(staleMarkerPath) || existsSync2(ackPath) || existsSync2(failedPath)) continue;
|
|
224
296
|
let signal;
|
|
225
297
|
try {
|
|
226
298
|
signal = JSON.parse(await readFile(pendingPath, "utf8"));
|
|
@@ -233,7 +305,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
|
|
|
233
305
|
const sessionScope = signalScope ?? (scopeList.length === 1 ? scopeList[0] : null);
|
|
234
306
|
if (allowedScopes.size > 0 && sessionScope && !allowedScopes.has(sessionScope)) continue;
|
|
235
307
|
try {
|
|
236
|
-
const { writeNotification } = await import("./notifications-
|
|
308
|
+
const { writeNotification } = await import("./notifications-4UT53CDG.js");
|
|
237
309
|
await writeNotification({
|
|
238
310
|
agentId: getCoordinatorName(),
|
|
239
311
|
agentRole: "COO",
|
|
@@ -296,12 +368,20 @@ async function transitionCompletedDelegatedParents(client, scopeList, now) {
|
|
|
296
368
|
await updateTaskStatus({
|
|
297
369
|
taskId: parentId,
|
|
298
370
|
status: "needs_review",
|
|
299
|
-
|
|
371
|
+
// Blocker 4 (liveness-hardening): this is an AUTOMATED rollup. If the
|
|
372
|
+
// parent already carries a real deliverable in `result`, preserve it —
|
|
373
|
+
// the rollup string is only a fallback for an empty result. Atomic in SQL,
|
|
374
|
+
// so a concurrently-written deliverable is never clobbered.
|
|
375
|
+
result: "All delegated child tasks are complete; parent rolled up for review by task enforcement.",
|
|
376
|
+
preserveResultIfPresent: true
|
|
300
377
|
});
|
|
301
378
|
} catch {
|
|
302
379
|
await client.execute({
|
|
303
|
-
sql: `UPDATE tasks SET status = 'needs_review',
|
|
304
|
-
|
|
380
|
+
sql: `UPDATE tasks SET status = 'needs_review',
|
|
381
|
+
result = CASE WHEN result IS NULL OR trim(result, char(32)||char(9)||char(10)||char(13)) = '' THEN ? ELSE result END,
|
|
382
|
+
updated_at = ?
|
|
383
|
+
WHERE id = ? AND status IN ('open', 'in_progress')`,
|
|
384
|
+
args: ["All delegated child tasks are complete; parent rolled up for review by task enforcement.", nowIso, parentId]
|
|
305
385
|
});
|
|
306
386
|
}
|
|
307
387
|
transitioned++;
|
|
@@ -365,7 +445,8 @@ async function runTaskEnforcementTick(deps) {
|
|
|
365
445
|
const allowedScope = hasScopeRestriction && deps.scopeFilter.args.length > 0 ? String(deps.scopeFilter.args[deps.scopeFilter.args.length - 1]) : null;
|
|
366
446
|
for (const session of sessions) {
|
|
367
447
|
if (!session.includes("-")) continue;
|
|
368
|
-
const
|
|
448
|
+
const rawAgent = session.split("-")[0];
|
|
449
|
+
const agentName = rawAgent ? baseAgentName(rawAgent, employees) : void 0;
|
|
369
450
|
if (!agentName) continue;
|
|
370
451
|
if (allowedScope) {
|
|
371
452
|
const sessionSuffix = session.slice(session.indexOf("-") + 1);
|
|
@@ -581,7 +662,7 @@ async function runTaskEnforcementTick(deps) {
|
|
|
581
662
|
);
|
|
582
663
|
}
|
|
583
664
|
}
|
|
584
|
-
if (processedAnyEmployee && deps.reviewerSpawn) {
|
|
665
|
+
if (processedAnyEmployee && (deps.reviewerSpawn || deps.reviewerNudge)) {
|
|
585
666
|
try {
|
|
586
667
|
const scopeList = allowedScope ? [...processedScopes].filter((s) => s === allowedScope) : [...processedScopes];
|
|
587
668
|
const reviewerRows = scopeList.length === 0 ? { rows: [] } : await client.execute({
|
|
@@ -597,15 +678,33 @@ async function runTaskEnforcementTick(deps) {
|
|
|
597
678
|
const reviewerName = String(row.reviewer ?? "");
|
|
598
679
|
const sessionScope = row.session_scope ? String(row.session_scope) : null;
|
|
599
680
|
if (!reviewerName || !sessionScope) continue;
|
|
600
|
-
|
|
681
|
+
const isCoord = isCoordinatorName(reviewerName, employees);
|
|
682
|
+
const reviewerSession = isCoord ? sessionScope : `${reviewerName}-${sessionScope}`;
|
|
683
|
+
if (liveSessionSet.has(reviewerSession)) {
|
|
684
|
+
if (deps.reviewerNudge) {
|
|
685
|
+
try {
|
|
686
|
+
deps.reviewerNudge(reviewerSession, sessionScope);
|
|
687
|
+
process.stderr.write(
|
|
688
|
+
`[exed] Reviewer wake: nudged live ${reviewerSession} (has needs_review tasks)
|
|
689
|
+
`
|
|
690
|
+
);
|
|
691
|
+
} catch (nudgeErr) {
|
|
692
|
+
process.stderr.write(
|
|
693
|
+
`[exed] Reviewer wake error for ${reviewerSession}: ${nudgeErr instanceof Error ? nudgeErr.message : String(nudgeErr)}
|
|
694
|
+
`
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
continue;
|
|
699
|
+
}
|
|
700
|
+
if (isCoord) {
|
|
601
701
|
process.stderr.write(
|
|
602
|
-
`[exed] Reviewer auto-spawn: skipping ${reviewerName} (coordinator,
|
|
702
|
+
`[exed] Reviewer auto-spawn: skipping ${reviewerName} (coordinator, no live session to nudge)
|
|
603
703
|
`
|
|
604
704
|
);
|
|
605
705
|
continue;
|
|
606
706
|
}
|
|
607
|
-
|
|
608
|
-
if (liveSessionSet.has(reviewerSession)) continue;
|
|
707
|
+
if (!deps.reviewerSpawn) continue;
|
|
609
708
|
try {
|
|
610
709
|
const result = deps.reviewerSpawn(reviewerName, sessionScope);
|
|
611
710
|
if (!result) continue;
|
|
@@ -677,28 +776,33 @@ async function runTaskEnforcementTick(deps) {
|
|
|
677
776
|
payload: { sessionCount: sessions.length, processedSessions, nudgesSent }
|
|
678
777
|
});
|
|
679
778
|
}
|
|
779
|
+
|
|
680
780
|
export {
|
|
681
|
-
|
|
781
|
+
DEFAULT_EXPLORE_DURATION_MS,
|
|
782
|
+
setPlayMode,
|
|
783
|
+
getPlayMode,
|
|
784
|
+
listExploreSessions,
|
|
785
|
+
TASK_ENFORCEMENT_INTERVAL_MS,
|
|
786
|
+
TASK_ENFORCEMENT_DEBOUNCE_MS,
|
|
682
787
|
MANAGER_GRACE_PERIOD_MS,
|
|
683
|
-
MANAGER_ROLES,
|
|
684
|
-
MCP_ZOMBIE_PATTERNS,
|
|
685
|
-
NUDGE_ECHO_PATTERNS,
|
|
686
|
-
STALE_DISPATCH_PENDING_THRESHOLD_MS,
|
|
687
788
|
STUCK_TASK_THRESHOLD_MS,
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
789
|
+
IDLE_PATTERNS,
|
|
790
|
+
NUDGE_ECHO_PATTERNS,
|
|
791
|
+
MCP_ZOMBIE_PATTERNS,
|
|
792
|
+
MANAGER_ROLES,
|
|
691
793
|
decideManagerAction,
|
|
692
794
|
decideWorkerAction,
|
|
693
|
-
findStuckTasks,
|
|
694
|
-
isCurrentlyIdle,
|
|
695
795
|
isIdlePane,
|
|
696
|
-
isMcpZombiePane,
|
|
697
|
-
isNudgeEcho,
|
|
698
796
|
isPaneBusy,
|
|
699
797
|
isWorkerPaneIdle,
|
|
700
|
-
|
|
798
|
+
isCurrentlyIdle,
|
|
799
|
+
isNudgeEcho,
|
|
800
|
+
isMcpZombiePane,
|
|
701
801
|
sendNudge,
|
|
802
|
+
_resetNudgeState,
|
|
803
|
+
STALE_DISPATCH_PENDING_THRESHOLD_MS,
|
|
702
804
|
surfaceStaleDispatchPendingSignals,
|
|
703
|
-
transitionCompletedDelegatedParents
|
|
805
|
+
transitionCompletedDelegatedParents,
|
|
806
|
+
findStuckTasks,
|
|
807
|
+
runTaskEnforcementTick
|
|
704
808
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listReminders
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UUEKJDK6.js";
|
|
4
4
|
|
|
5
5
|
// src/mcp/tools/list-reminders.ts
|
|
6
6
|
import { z } from "zod";
|
|
@@ -23,8 +23,9 @@ function registerListReminders(server) {
|
|
|
23
23
|
}
|
|
24
24
|
const lines = reminders.map((r) => {
|
|
25
25
|
const due = r.dueDate ? ` (due: ${r.dueDate})` : "";
|
|
26
|
+
const push = r.dailyPush ? ` (daily push: ${r.dailyPush})` : "";
|
|
26
27
|
const done = r.completedAt ? " [DONE]" : "";
|
|
27
|
-
return `\u2022 ${r.text}${due}${done} [id: ${r.id.slice(0, 8)}]`;
|
|
28
|
+
return `\u2022 ${r.text}${due}${push}${done} [id: ${r.id.slice(0, 8)}]`;
|
|
28
29
|
});
|
|
29
30
|
return {
|
|
30
31
|
content: [{ type: "text", text: lines.join("\n") }]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extractSemanticText
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YLXTKI6M.js";
|
|
4
4
|
import {
|
|
5
5
|
detectError
|
|
6
6
|
} from "./chunk-AHMUF6RO.js";
|
|
7
7
|
import {
|
|
8
8
|
redactSecrets
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4QCFFW2H.js";
|
|
10
10
|
import {
|
|
11
11
|
getProjectName
|
|
12
12
|
} from "./chunk-OPU3NYOO.js";
|