@askexenow/exe-os 0.9.341 → 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-AIQP4DFL.js → active-agent-PVGE57FY.js} +5 -5
- package/dist/{active-agent-LW45DSJ4.js → active-agent-TNIO6IY3.js} +5 -5
- package/dist/{agentic-ontology-RVUNRCQY.js → agentic-ontology-3FXYMHKW.js} +1 -1
- package/dist/{backfill-gate-J7UXFNXU.js → backfill-gate-65LSYVE5.js} +3 -3
- package/dist/{backfill-metadata-ZSDJ4O2T.js → backfill-metadata-ZSMZC45J.js} +8 -8
- package/dist/{background-jobs-STURKDCS.js → background-jobs-EXR5RVGG.js} +3 -3
- package/dist/{backup-verify-ZAJLEL4X.js → backup-verify-3Y2FHGZU.js} +4 -4
- package/dist/{behaviors-EO7KCP3H.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 +25 -23
- package/dist/bin/cli.js +79 -25
- package/dist/bin/customer-readiness.js +1 -1
- package/dist/bin/deferred-daemon-restart.js +98 -92
- package/dist/bin/exe-agent-config.js +9 -8
- package/dist/bin/exe-agent.js +17 -17
- package/dist/bin/exe-assign.js +12 -12
- package/dist/bin/exe-boot.js +200 -67
- 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 +25 -23
- 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 +28 -27
- package/dist/bin/exe-kill.js +30 -28
- package/dist/bin/exe-launch-agent.js +128 -67
- 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 +26 -24
- package/dist/bin/exe-pending-notifications.js +25 -23
- package/dist/bin/exe-pending-reviews.js +25 -23
- package/dist/bin/exe-rename.js +7 -7
- package/dist/bin/exe-review.js +29 -27
- package/dist/bin/exe-search.js +11 -9
- package/dist/bin/exe-session-cleanup.js +115 -85
- 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 +26 -24
- 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 +26 -24
- package/dist/bin/graph-backfill.js +11 -11
- package/dist/bin/graph-export.js +9 -9
- package/dist/bin/import-history.js +13 -13
- package/dist/bin/install.js +103 -97
- 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 +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +25 -23
- package/dist/bin/setup.js +6 -5
- package/dist/bin/shard-migrate.js +9 -9
- package/dist/bin/stack-update.js +6 -6
- package/dist/bin/update.js +1 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-GSMPJOWM.js → boot-generation-BL2ISK4U.js} +5 -5
- 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-OBYQNAKZ.js → capability-cards-DN5UIKVN.js} +4 -4
- package/dist/{capacity-monitor-MG3FTUD5.js → capacity-monitor-ZG5GGFR2.js} +26 -24
- package/dist/{catchup-brief-BVJOF3GL.js → catchup-brief-D6HH6DWS.js} +31 -28
- package/dist/{chunk-Q5AIPSSC.js → chunk-25X4JD2V.js} +10 -6
- package/dist/{chunk-6MVI4QH2.js → chunk-2KZNGDSW.js} +1 -1
- package/dist/{chunk-WH7XN5ER.js → chunk-2WAVZ5UJ.js} +1 -1
- package/dist/{chunk-PTJBWC77.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-X5QVL6RE.js → chunk-4CMVFVFC.js} +173 -69
- package/dist/{chunk-2YCFNBC4.js → chunk-4J4PMPXZ.js} +3 -2
- package/dist/{chunk-EDOO23B2.js → chunk-4N2NRGCM.js} +2 -2
- package/dist/chunk-4QCFFW2H.js +378 -0
- package/dist/{chunk-6MVC43X7.js → chunk-4VSV5P4D.js} +2 -2
- package/dist/{chunk-HJX6NCJF.js → chunk-4ZCD2UWW.js} +39 -10
- package/dist/{chunk-C445WRUX.js → chunk-5ERDIOV3.js} +2 -2
- package/dist/chunk-5H47VHB7.js +30 -0
- package/dist/{chunk-BJ23BNED.js → chunk-5TY4FPH6.js} +1 -1
- package/dist/{chunk-WD55PEBM.js → chunk-6CH3TPHR.js} +3 -3
- package/dist/{chunk-TIXTHUVJ.js → chunk-6WQ3NNCE.js} +3 -3
- package/dist/{chunk-7LF5DS3A.js → chunk-6XWTQUO4.js} +1 -1
- package/dist/chunk-76CJBM36.js +88 -0
- package/dist/{chunk-NFBW7N4D.js → chunk-7CTRGNLW.js} +2 -2
- package/dist/{chunk-ITMEE7PQ.js → chunk-7V4JADD6.js} +3 -3
- package/dist/{chunk-RMOBQ6A5.js → chunk-AD2VCHSS.js} +1 -1
- package/dist/{chunk-DNVFWFYF.js → chunk-AJYCFKJR.js} +1 -1
- package/dist/chunk-AM7S2TY6.js +54 -0
- package/dist/{chunk-RWSLVYTE.js → chunk-AOHXREB7.js} +295 -67
- package/dist/{chunk-DGGDUKH6.js → chunk-ASAFVDVR.js} +1 -1
- package/dist/{chunk-NTI22F3R.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-BMHQPIJ2.js → chunk-CE7F6RHG.js} +585 -75
- package/dist/{chunk-YWQMWFYR.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-YHUNDGVV.js → chunk-EUS4QUKP.js} +1 -1
- package/dist/{chunk-6D2PI4QD.js → chunk-EV46QTD3.js} +1 -1
- package/dist/{chunk-N7A5D25S.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-MC4ATFJV.js → chunk-FPFPLPUY.js} +6 -6
- package/dist/{chunk-UU4UINUX.js → chunk-G4RGKBCA.js} +2 -2
- package/dist/{chunk-HAZO7TRD.js → chunk-G5T6KDG4.js} +1 -1
- package/dist/{chunk-TWXZM34M.js → chunk-GBTTBXAF.js} +6 -6
- package/dist/{chunk-LA2Z6RMS.js → chunk-GDIJE6D7.js} +1 -1
- package/dist/{chunk-4QSJVMMT.js → chunk-GG5NDQNN.js} +2 -2
- package/dist/{chunk-6BQG7EKO.js → chunk-GJ26DULE.js} +2 -2
- package/dist/chunk-GL57PO3K.js +104 -0
- package/dist/chunk-GWDSB25T.js +6 -0
- package/dist/{chunk-HSYJ6DZ2.js → chunk-H6BV5TKD.js} +39 -24
- package/dist/{chunk-HCJCW7X4.js → chunk-H7I47RS5.js} +34 -1
- package/dist/{chunk-GFDGDFBF.js → chunk-HA5R6USD.js} +22 -5
- package/dist/{chunk-L2YGXJGF.js → chunk-HAF2DJYV.js} +3 -3
- package/dist/chunk-HJ447YER.js +224 -0
- package/dist/{chunk-6QW6JHRE.js → chunk-HV4KESRY.js} +59 -32
- package/dist/{chunk-BJOBR6P2.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-2UGGBIDL.js → chunk-JGIPOUIK.js} +3 -3
- package/dist/{chunk-LLU6WZLK.js → chunk-JLZ4RYSD.js} +2 -2
- package/dist/{chunk-WWNQFOSP.js → chunk-JMYHW3AL.js} +2 -2
- package/dist/{chunk-KP4PY2Z2.js → chunk-JPUZPAAF.js} +4 -4
- package/dist/{chunk-4LWV633D.js → chunk-JTBIS4R5.js} +1 -1
- package/dist/{chunk-PPZOWQHP.js → chunk-K7KFGDWF.js} +1 -1
- package/dist/{chunk-HNLXMD2V.js → chunk-KGWRTRKC.js} +2 -2
- package/dist/{chunk-IB336P52.js → chunk-KP3U5QGJ.js} +1 -1
- package/dist/{chunk-OUEFW4RK.js → chunk-KW2SD2FL.js} +2 -2
- package/dist/{chunk-2P4WJNN5.js → chunk-KWZMQACA.js} +11 -7
- package/dist/{chunk-ATKW3SYL.js → chunk-L2R3LN2P.js} +1 -1
- package/dist/{chunk-IELUDZAA.js → chunk-L4A5DL6Z.js} +3 -3
- package/dist/{chunk-2C455MU3.js → chunk-LU2FALL6.js} +3 -3
- package/dist/{chunk-LOBCQXV5.js → chunk-MKYFAKDW.js} +4 -4
- package/dist/{chunk-3BRVLPPA.js → chunk-MOPUCPXK.js} +4 -0
- package/dist/{chunk-BR4423AS.js → chunk-MR6LHP4F.js} +1 -1
- package/dist/chunk-MVYB76QG.js +341 -0
- package/dist/{chunk-ZNE6H2JO.js → chunk-MZM6EJCU.js} +4 -4
- package/dist/{chunk-FOV57K47.js → chunk-N7QJKQMX.js} +258 -14
- package/dist/{chunk-AYLNJGCS.js → chunk-NBZL5CGA.js} +93 -12
- package/dist/{chunk-YLQXP7T7.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-BV6GBSRP.js → chunk-OLMQ4UOF.js} +42 -10
- package/dist/{chunk-UIU2DGRV.js → chunk-OTF44GXL.js} +4 -4
- package/dist/{chunk-GOGSWXNZ.js → chunk-OZEBAGKR.js} +277 -137
- package/dist/{chunk-NDSNM5OH.js → chunk-P5HIWY2E.js} +1 -1
- package/dist/{chunk-MJB5ZFQM.js → chunk-PDWS3E22.js} +55 -4
- package/dist/{chunk-4FJZ6SO7.js → chunk-PPCDBE6Z.js} +1 -1
- package/dist/{chunk-7SEC2AG5.js → chunk-PQIDGXSG.js} +13 -4
- package/dist/chunk-PWUFMX75.js +186 -0
- package/dist/{chunk-GPW32HVB.js → chunk-QDGZJ653.js} +3 -3
- package/dist/{chunk-CYA5S5OD.js → chunk-QOO5RW3K.js} +6 -5
- package/dist/{chunk-IXBIVKWZ.js → chunk-QQ4E2RYW.js} +95 -18
- package/dist/{chunk-2WMTTIAZ.js → chunk-QRYVCDWS.js} +2 -2
- package/dist/{chunk-Z42MXYWW.js → chunk-QWVXN224.js} +110 -28
- package/dist/{chunk-XSMRR4IW.js → chunk-QYZJHTNE.js} +26 -27
- package/dist/{chunk-I7ECEP3W.js → chunk-R2NN3JKH.js} +43 -6
- package/dist/{chunk-B7CUBLF7.js → chunk-RACAOE2Z.js} +13 -13
- package/dist/{chunk-5RACW3LX.js → chunk-RAXVPNMR.js} +1 -1
- package/dist/{chunk-CMR64RYM.js → chunk-RHWZUUS4.js} +17 -17
- package/dist/{chunk-RNAYCUNM.js → chunk-S3THSOWV.js} +1 -1
- package/dist/{chunk-U2MREVXQ.js → chunk-S7QUM2UK.js} +2 -2
- package/dist/{chunk-SSTLTIF3.js → chunk-SKGMF2SO.js} +25 -2
- package/dist/{chunk-J6SEDDOR.js → chunk-SQKXKV2Y.js} +2 -2
- package/dist/{chunk-DPFQ2WQX.js → chunk-TLT7NZCW.js} +4 -4
- package/dist/chunk-TTCUG2CF.js +91 -0
- package/dist/{chunk-W6K4XB6G.js → chunk-UEA3LXOB.js} +1 -1
- package/dist/{chunk-WNKVKNOM.js → chunk-UNXQBELK.js} +1 -1
- package/dist/{chunk-KKOLHBNC.js → chunk-UP75Z5X7.js} +904 -167
- package/dist/{chunk-Y3S4H77G.js → chunk-USSB56WK.js} +1 -1
- package/dist/{chunk-PVIH3ZGV.js → chunk-UUEKJDK6.js} +90 -10
- package/dist/{chunk-T2PYVVZ5.js → chunk-UUQBZPJJ.js} +1 -1
- package/dist/{chunk-32YHCHWW.js → chunk-V3EEVY4L.js} +1 -1
- package/dist/{chunk-2IWBY7XK.js → chunk-VPZHJCKW.js} +2 -2
- package/dist/chunk-VRAQTFD6.js +265 -0
- package/dist/{chunk-EDH54E5A.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-CCIEIRV2.js → chunk-X33NYQYJ.js} +2 -2
- package/dist/{chunk-K6KRBXQP.js → chunk-XHK3FS3W.js} +3 -2
- package/dist/{chunk-AP455LBW.js → chunk-XZXBB3TN.js} +2 -2
- package/dist/{chunk-JSKBHUR7.js → chunk-YCANDMI2.js} +2 -2
- package/dist/{chunk-YIIME2OW.js → chunk-YLXTKI6M.js} +1 -1
- package/dist/{chunk-LEJ25726.js → chunk-YTCFACP4.js} +650 -434
- package/dist/{chunk-HUSVERE6.js → chunk-Z6RSN7KS.js} +7 -6
- package/dist/{cleanup-graph-garbage-MXQ4Q2MA.js → cleanup-graph-garbage-XWUFAMFO.js} +8 -8
- package/dist/{co-activation-QI5BK4RT.js → co-activation-ZCHPLLP6.js} +4 -4
- package/dist/{co-occurrence-BYSQNZSV.js → co-occurrence-KG3LKALN.js} +6 -6
- package/dist/{code-context-index-BNBHDXHW.js → code-context-index-WSOJQ72R.js} +5 -5
- package/dist/{content-extractor-JRJDNIHP.js → content-extractor-NXYNEF5K.js} +2 -2
- package/dist/{conversation-entity-extractor-FPAMTL3C.js → conversation-entity-extractor-D3EFTLT4.js} +2 -2
- package/dist/{conversation-wiki-populator-WU4HEQ7C.js → conversation-wiki-populator-WQN3IUU6.js} +1 -1
- package/dist/{crdt-sync-ETPKNBCU.js → crdt-sync-4PFGPZXV.js} +8 -1
- package/dist/{crm-webhook-M566ZMZS.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-XV5GN73R.js → daemon-orchestration-FX4XZDR5.js} +45 -26
- package/dist/{daemon-ready-RKKB4P6K.js → daemon-ready-4JTSFKAY.js} +1 -1
- package/dist/{daemon-ready-signal-WKEJQNRA.js → daemon-ready-signal-LPAZWQOV.js} +3 -1
- package/dist/daemon-restart-circuit-breaker-PEGEIP6H.js +35 -0
- package/dist/daemon-timer-report-NM44WQRH.js +25 -0
- package/dist/{db-backup-MX2G3CEK.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-LR5KMPH7.js → doc-graph-extractor-F6ODFIID.js} +6 -6
- package/dist/{documents-FA6N7QDA.js → documents-23WX2FPQ.js} +12 -12
- package/dist/dreaming-NWD22UQ5.js +46 -0
- package/dist/{exe-drift-TUKTCXZE.js → exe-drift-CW72FBGE.js} +5 -5
- package/dist/{exe-export-ZLHBXMZC.js → exe-export-AUJ7CV7G.js} +11 -11
- package/dist/{exe-import-VVKBZWSA.js → exe-import-JX4I52VE.js} +11 -11
- package/dist/{exe-key-QJXFBF6G.js → exe-key-2N6LY2BU.js} +242 -228
- package/dist/{exe-org-BGZNNE4H.js → exe-org-X4CSNCKS.js} +3 -3
- package/dist/{exe-snapshot-JRLUO645.js → exe-snapshot-XZ7FVCYZ.js} +30 -28
- package/dist/{fast-db-init-JKJEEHUI.js → fast-db-init-4CWHSOOR.js} +1 -1
- package/dist/{founder-context-HWPLMZVR.js → founder-context-7L3CFPYN.js} +4 -4
- package/dist/gateway/index.js +25 -25
- 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-X5XZONX3.js → git-staleness-CI2R4QOJ.js} +4 -4
- package/dist/{global-procedures-VIIVWB6R.js → global-procedures-XQX3LUH6.js} +6 -6
- package/dist/{graph-auto-extract-HCQQF5AG.js → graph-auto-extract-OURWMGBS.js} +6 -6
- package/dist/{graph-rag-WAK2BRJH.js → graph-rag-JZZAB7PC.js} +2 -2
- 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 +31 -27
- package/dist/hooks/codex-stop-task-finalizer.js +31 -27
- package/dist/hooks/commit-complete.js +28 -26
- 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 +27 -25
- package/dist/hooks/post-tool-combined.js +12 -12
- package/dist/hooks/pre-compact.js +28 -26
- package/dist/hooks/pre-tool-use.js +179 -46
- package/dist/hooks/prompt-submit.js +323 -272
- package/dist/hooks/session-end.js +34 -32
- package/dist/hooks/session-start.js +28 -21
- package/dist/hooks/stop.js +34 -32
- package/dist/hooks/subagent-stop.js +27 -25
- package/dist/hooks/summary-worker.js +35 -33
- package/dist/index.js +40 -38
- package/dist/{installer-6IFVEQI4.js → installer-G3JAO3NT.js} +9 -9
- package/dist/{installer-NX2CLNV5.js → installer-JND3RJ6Q.js} +9 -9
- package/dist/{installer-T2LGHZKL.js → installer-L7EVH5U5.js} +9 -9
- package/dist/{intercom-queue-KYHXXZCQ.js → intercom-queue-ZFEQALR3.js} +24 -22
- 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 +11 -11
- 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 +588 -164
- 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 +27 -23
- 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 +28 -24
- package/dist/lib/tmux-routing.js +55 -24
- 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-MGDR4YNI.js → license-gate-QTRQHV4F.js} +5 -5
- package/dist/{license-sync-UWE6GEB4.js → license-sync-N3UJFWAW.js} +4 -4
- package/dist/mcp/register-tools.js +97 -91
- package/dist/mcp/server.js +99 -93
- 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 +36 -27
- 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 +34 -28
- package/dist/mcp/tools/send-message.js +27 -25
- package/dist/mcp/tools/update-task.js +33 -27
- package/dist/{mcp-http-config-RQLYEPTL.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-VYQ5DPMR.js → memory-cards-ZRDW7QBX.js} +8 -8
- package/dist/{memory-graph-extractor-GX2HNYLU.js → memory-graph-extractor-QLXDMHRS.js} +7 -7
- package/dist/{memory-poisoning-defense-TX7627BD.js → memory-poisoning-defense-HJTXYCWH.js} +4 -4
- package/dist/{memory-pressure-watchdog-MLNNH26B.js → memory-pressure-watchdog-HN5X7AVN.js} +75 -36
- package/dist/{memory-queue-X2CSEAKE.js → memory-queue-2UOOF27L.js} +5 -3
- package/dist/{memory-queue-client-YRL6XTGU.js → memory-queue-client-O5U6F6XP.js} +6 -6
- package/dist/{memory-reflection-KIGEFSI4.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-B6AVEGMV.js → notification-ledger-SZEPGJQ7.js} +25 -23
- package/dist/{notifications-DWXV7SVL.js → notifications-4UT53CDG.js} +24 -22
- package/dist/{orchestration-events-ZG7O4HRY.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-RTLAGZTA.js → pipeline-router-LM53NMWJ.js} +5 -5
- package/dist/{plan-limits-WLQZTCSF.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-6CGQ3EAH.js → project-boot-4NUH5FRU.js} +2 -2
- package/dist/{projection-worker-44SEKTZ5.js → projection-worker-FZ7YSN3G.js} +5 -5
- package/dist/{prospective-memory-UACFTYXK.js → prospective-memory-6D2ASWM3.js} +4 -4
- package/dist/{push-notifications-W5JRXLKJ.js → push-notifications-U6FIBQRW.js} +3 -3
- package/dist/{reranker-NL4YAV6R.js → reranker-GYYRPANK.js} +3 -3
- package/dist/{retrieval-health-4C2PO6HH.js → retrieval-health-4Z242P3B.js} +1 -1
- package/dist/{review-polling-W5AMHNLT.js → review-polling-HXAFJZDA.js} +25 -23
- package/dist/runtime/index.js +35 -33
- package/dist/{session-events-PGL5GJEB.js → session-events-O3BV56ZX.js} +25 -23
- package/dist/{session-kill-telemetry-6YDGEF27.js → session-kill-telemetry-AELE4JDK.js} +25 -23
- package/dist/session-mcp-config-YKNXG5DW.js +50 -0
- package/dist/{session-scope-3MEOO557.js → session-scope-5EAPUT45.js} +24 -22
- package/dist/setup-wizard-NB6R4QVS.js +14 -0
- package/dist/{shard-manager-MBWQEYNG.js → shard-manager-35PWFR3B.js} +3 -3
- package/dist/{skill-refinement-EOROTBPX.js → skill-refinement-DVSYXBBP.js} +5 -5
- package/dist/{stack-release-PR2XKJ4Q.js → stack-release-HGFFFCGC.js} +90 -15
- package/dist/{stack-update-LMDM27ZW.js → stack-update-ATCJFOEK.js} +5 -5
- package/dist/{steward-gate-4A2XHYFD.js → steward-gate-3GQ5XKMJ.js} +5 -5
- package/dist/{support-inbox-Z77ACQUY.js → support-inbox-4L62P4EP.js} +7 -6
- package/dist/{support-outbox-GB5SQFRJ.js → support-outbox-WHGPUYL2.js} +2 -2
- package/dist/task-enforcement-IPIZX2MM.js +90 -0
- package/dist/{task-scope-EKYDCVUF.js → task-scope-FOIW25HR.js} +26 -22
- package/dist/{tasks-crud-6LBNU43G.js → tasks-crud-HBDKE6C5.js} +34 -22
- package/dist/tasks-notify-G2U2U2YA.js +53 -0
- package/dist/{tasks-review-PBIUYXAL.js → tasks-review-27SFX5XN.js} +26 -22
- package/dist/{telemetry-upload-WQDFABTF.js → telemetry-upload-ZOXHRWR5.js} +9 -9
- package/dist/tmux-command-guard-KSJKIX3C.js +117 -0
- package/dist/{token-budget-KWGL5DY7.js → token-budget-5Y4YPDO3.js} +5 -5
- package/dist/{tool-capability-index-EH3HQVHU.js → tool-capability-index-VYF5GNJ2.js} +1 -1
- package/dist/{tool-telemetry-UC55LSIH.js → tool-telemetry-KBXSBDTK.js} +1 -1
- package/dist/tui/App.js +39 -37
- package/dist/{tui-data-M3RBSJL3.js → tui-data-NLFMBIQI.js} +24 -22
- package/dist/{update-check-HFO4VHO4.js → update-check-3FHAWIG2.js} +7 -3
- package/dist/{update-support-VPBD5SD2.js → update-support-UVUSZG7R.js} +93 -93
- 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-4QLLMXZM.js → worker-gate-3KUBAU32.js} +3 -3
- package/dist/{workflow-engine-MMEHKUN4.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-5WKBU7E6.js → worktree-sweep-WTK3MTKH.js} +7 -7
- package/package.json +3 -2
- package/release-notes.json +75 -43
- package/dist/branch-hygiene-R5NVTRAY.js +0 -138
- package/dist/chunk-7YORGTXC.js +0 -138
- package/dist/chunk-CCPHEPLU.js +0 -30
- package/dist/chunk-HMP5VT6A.js +0 -118
- package/dist/chunk-PVYR4FCQ.js +0 -113
- package/dist/chunk-RP5GETX5.js +0 -140
- package/dist/chunk-YGAAZN3E.js +0 -47
- package/dist/cto-delegation-gate-S734XDXT.js +0 -290
- package/dist/dispatch-ack-4S44HBWB.js +0 -15
- package/dist/dreaming-UKGTQT6I.js +0 -44
- package/dist/orchestrator-PGHJDUUT.js +0 -45
- package/dist/setup-wizard-CJIYDSSP.js +0 -13
- package/dist/tasks-notify-TFJLSQ3B.js +0 -50
- package/dist/worktree-YXBDRYOC.js +0 -31
- package/dist/{chunk-7UMCQQWS.js → chunk-A4DVMPYB.js} +3 -3
- /package/dist/{chunk-2KLAYDFB.js → chunk-GIBYNT6W.js} +0 -0
- /package/dist/{chunk-MC6VPZKS.js → chunk-JRM4TAGS.js} +0 -0
- /package/dist/{chunk-3NCZKWPO.js → chunk-MGGOSFCR.js} +0 -0
- /package/dist/{chunk-C2SRRCRK.js → chunk-QIFYLIUF.js} +0 -0
- /package/dist/{chunk-OADURIIN.js → chunk-WTH4CSAP.js} +0 -0
- /package/dist/{core-memory-3IBWM4WR.js → core-memory-GAC6EWOQ.js} +0 -0
- /package/dist/{entity-boost-DWAWXFKN.js → entity-boost-NT6UO2Z3.js} +0 -0
- /package/dist/{message-queue-client-3PTHPG5Q.js → message-queue-client-4EOQRUXW.js} +0 -0
- /package/dist/{oauth-server-M5TGXT6D.js → oauth-server-67YBDP32.js} +0 -0
- /package/dist/{webhook-pipe-FZYLO6RR.js → webhook-pipe-LEXMUQ5B.js} +0 -0
- /package/dist/{wiki-acl-7CROE3MJ.js → wiki-acl-74BLWG6J.js} +0 -0
- /package/dist/{wiki-client-VNDOBK63.js → wiki-client-EAN7F5LV.js} +0 -0
package/release-notes.json
CHANGED
|
@@ -1,26 +1,88 @@
|
|
|
1
1
|
{
|
|
2
|
-
"current": "0.9.
|
|
2
|
+
"current": "0.9.342",
|
|
3
3
|
"notes": {
|
|
4
|
+
"0.9.342": {
|
|
5
|
+
"version": "0.9.342",
|
|
6
|
+
"date": "2026-07-13",
|
|
7
|
+
"features": [
|
|
8
|
+
"log every memory READ, joined to task outcome (455be5c7)",
|
|
9
|
+
"timer health dashboard — per-timer blocking risk (9ddc55b2)",
|
|
10
|
+
"additive daily_push schedule + pusher hook (feature 433fc7a1)",
|
|
11
|
+
"surface pending-review + blocked sections in employee boot brief",
|
|
12
|
+
"dedup license prompt in setup wizard + wire codex-reviewd CLI subcommand"
|
|
13
|
+
],
|
|
14
|
+
"fixes": [
|
|
15
|
+
"align the scope-import heuristic with the per-query check",
|
|
16
|
+
"a neighbouring command's flags are not git's flags",
|
|
17
|
+
"move fast-db-init to src/lib + close the boundary rule's blind spot",
|
|
18
|
+
"close raw product query-param exfil on the feature-list path + refresh fs mock",
|
|
19
|
+
"split LIVENESS from READINESS — end the daemon kill-loop (bug 679aeb69)",
|
|
20
|
+
"feature requests carry product end-to-end (bug b8e990ed)",
|
|
21
|
+
"async kill on the session-TTL timer — final sync-on-timer, closes 1c870c78",
|
|
22
|
+
"round-4 — thrown-release on all spawn paths + gate close-task fallthrough (final)",
|
|
23
|
+
"candidate detection must prefix-match --force-create= (6aaea78f)",
|
|
24
|
+
"close 3 long-option main-rewrite bypasses (6aaea78f)",
|
|
25
|
+
"async-ify the session-TTL timer path — closes 1c870c78",
|
|
26
|
+
"round-3 — kernel-atomic bucketed-mkdir claim + gate ALL spawn paths (codex audit)",
|
|
27
|
+
"restore hardened argv-aware main guard; tighten stub cleanup",
|
|
28
|
+
"de5d9fe8 final — 3 guarantee controls + paused-human & legacy-branch docs",
|
|
29
|
+
"round 3 — default bind escalation + 64KiB PEM cap",
|
|
30
|
+
"round-2 — async cleanup-signal path + intercom capture; revert-proof reaper test (bug 1c870c78)",
|
|
31
|
+
"de5d9fe8 round 2 — buffer-stability wedge signal + non-destructive recovery + single-capture",
|
|
32
|
+
"round 2 — cto2 bind escalation + PEM DoS/pattern misses",
|
|
33
|
+
"clean up legacy plaintext SQLite stubs on init (bug 7a334eda)",
|
|
34
|
+
"scope destructive reset guard to actual main risk (bug 6aaea78f)",
|
|
35
|
+
"wake live reviewers + kill remaining timer sync-subprocess (bugs 018aaf31, 1c870c78)",
|
|
36
|
+
"round-2 — claim-gate BOTH dispatch paths + generation-exclusive stale takeover (codex audit)",
|
|
37
|
+
"dwell-gated wedged-input recovery + phantom-injection controls",
|
|
38
|
+
"redactor pattern gaps + initial-bind identity gate",
|
|
39
|
+
"task-keyed scope-independent spawn dedup (bugs 03bffd00 / f2f7bf19)"
|
|
40
|
+
],
|
|
41
|
+
"security": [],
|
|
42
|
+
"other": [
|
|
43
|
+
"v0.9.342 — bug-zero wave",
|
|
44
|
+
"size the multi-process race for a shared CI runner",
|
|
45
|
+
"keep each race trial inside one time bucket (CI flake, not a dedup hole)",
|
|
46
|
+
"mock execFile — wake-daemon's promisify(execFile) runs at module load",
|
|
47
|
+
"stop the triage note from becoming a finding of its own",
|
|
48
|
+
"triage the 6 redaction-test fixtures that were failing gitleaks",
|
|
49
|
+
"stop the prompt hook burning 35s of CPU and returning zero bytes (bug 9b81ea43)",
|
|
50
|
+
"batch task reconcile, memoize tmux session, index task_file + null vectors (bug 4b2d2d10)",
|
|
51
|
+
"bound daemon boot probe, gate doomed DB fallback, take behaviors export off the critical path (bug 96a28cf2)",
|
|
52
|
+
"honesty cleanup for coo_restart guard — narrow claim, surface follow-up, pin failedAt reset (bug 45d94865 round 3)",
|
|
53
|
+
"mirror idempotency_key column + partial unique index in fixture",
|
|
54
|
+
"behavioral self-heal routing guards, replacing fake source-string ones (bug e7003d6f)",
|
|
55
|
+
"Reapply \"Merge branch 'fix/oom-20260710' into integration/bug-zero-v2\"",
|
|
56
|
+
"Revert \"Merge branch 'fix/oom-20260710' into integration/bug-zero-v2\"",
|
|
57
|
+
"precise scale-boundedness accounting for memory audit (bug d5a7a1b2)",
|
|
58
|
+
"worktree discipline round-2: fail-closed empty roster + full lock ownership (audit B1+B2)",
|
|
59
|
+
"wire async worktree-collision guard on the daemon path (bug 1c870c78)",
|
|
60
|
+
"resolveProjectDir round-2: symlink containment, exact match, strict scope, sibling ownership (audit B3+B4)",
|
|
61
|
+
"add regression tests for wedged picker-session kill",
|
|
62
|
+
"stop daemon event-loop block in worktree collision guard + cap auto-wake spawns",
|
|
63
|
+
"scale regression for bounded memory audit (bug d5a7a1b2)",
|
|
64
|
+
"strengthen resolver tests: force step-6/cwd path so no-fabrication + cross-scope are real revert-proofs (audit)",
|
|
65
|
+
"harden worktree-discipline tests: assert NO tmux spawn on refusal + roster/lock cases (audit)",
|
|
66
|
+
"resolveProjectDir: validate input, deterministic, no fabrication, scope-isolated (audit BLOCKER 3+4)",
|
|
67
|
+
"release spawn lock on sync ensureEmployee gate refusal (audit BLOCKER 2)"
|
|
68
|
+
],
|
|
69
|
+
"migration_notes": []
|
|
70
|
+
},
|
|
4
71
|
"0.9.341": {
|
|
5
72
|
"version": "0.9.341",
|
|
6
73
|
"date": "2026-07-06",
|
|
7
74
|
"features": [
|
|
8
|
-
"
|
|
9
|
-
"durable notification ledger (default-OFF
|
|
10
|
-
"
|
|
11
|
-
"telemetry/bug-report egress redaction (dc16fee4) (#348)",
|
|
12
|
-
"automated backup restore-verify harness + manifest sidecar (4d83e9a4) (#349)"
|
|
75
|
+
"automated backup restore-verify harness + manifest sidecar (#349)",
|
|
76
|
+
"durable notification ledger (default-OFF) (#350)",
|
|
77
|
+
"backlog auto-reconcile CLI — detect already-shipped records (report-only default, --apply gated) (#352)"
|
|
13
78
|
],
|
|
14
79
|
"fixes": [
|
|
15
|
-
"reject invalid agent model ids + fail-loud spawn (no silent zombie) (
|
|
16
|
-
"don't re-arm auto-reconnect on intentional disconnect (#323)"
|
|
80
|
+
"reject invalid agent model ids + fail-loud spawn (no silent zombie) (#351)"
|
|
17
81
|
],
|
|
18
|
-
"security": [
|
|
19
|
-
|
|
20
|
-
"bump v0.9.341 (#353)",
|
|
21
|
-
"de-flake + promote 4 quarantined tests into the required gate (#317)",
|
|
22
|
-
"merge-queue/PR-only pilot proof marker (#314)"
|
|
82
|
+
"security": [
|
|
83
|
+
"telemetry/bug-report egress redaction — redact secrets/mnemonics before outbound telemetry and bug reports (#348)"
|
|
23
84
|
],
|
|
85
|
+
"other": [],
|
|
24
86
|
"migration_notes": []
|
|
25
87
|
},
|
|
26
88
|
"0.9.340": {
|
|
@@ -55,36 +117,6 @@
|
|
|
55
117
|
"security": [],
|
|
56
118
|
"other": [],
|
|
57
119
|
"migration_notes": []
|
|
58
|
-
},
|
|
59
|
-
"0.9.337": {
|
|
60
|
-
"version": "0.9.337",
|
|
61
|
-
"date": "2026-07-05",
|
|
62
|
-
"features": [
|
|
63
|
-
"monitoring-grant envelope MVP (Model B, default-OFF) (#340)",
|
|
64
|
-
"add xAI/Grok models to opencode whitelist (feature 6e59b416) (#315)",
|
|
65
|
-
"escalate + auto-cancel tasks blocked >48h (feature 638f8611) (#321)",
|
|
66
|
-
"load persistent ~/.exe-os/daemon.env at boot as env fallback (feature ed0e3449) (#316)",
|
|
67
|
-
"auto-clone missing stack repos on build VPS (feature 77a7792d) (#320)"
|
|
68
|
-
],
|
|
69
|
-
"fixes": [
|
|
70
|
-
"harden daemon recovery and task routing (#339)",
|
|
71
|
-
"codex review — bypass broken bwrap sandbox, gate on [P0]/[P1], skip drafts",
|
|
72
|
-
"codex review --base cannot take a custom prompt (mutually exclusive) — use --base alone",
|
|
73
|
-
"quarantine Docker-dependent stack-update.test.ts out of required gate (unblocks merges) (#331)",
|
|
74
|
-
"repair codex-review workflow YAML — move prompt to file, fix multi-line body (startup failure)",
|
|
75
|
-
"make Claude 1M context opt-in",
|
|
76
|
-
"bound prompt hook and setup daemon health",
|
|
77
|
-
"resolve worktrees from main repo root",
|
|
78
|
-
"refuse ambiguous session-scope fallback",
|
|
79
|
-
"isolate parallel task instance claims",
|
|
80
|
-
"non-chat/non-build open bug batch"
|
|
81
|
-
],
|
|
82
|
-
"security": [],
|
|
83
|
-
"other": [
|
|
84
|
-
"release: bump exe-os to 0.9.331 (#324)",
|
|
85
|
-
"add Codex PR review workflow (self-hosted, no App/webhook)"
|
|
86
|
-
],
|
|
87
|
-
"migration_notes": []
|
|
88
120
|
}
|
|
89
121
|
}
|
|
90
122
|
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import "./chunk-MLKGABMK.js";
|
|
2
|
-
|
|
3
|
-
// src/lib/branch-hygiene.ts
|
|
4
|
-
import { execFile } from "child_process";
|
|
5
|
-
import { promisify } from "util";
|
|
6
|
-
var execFileAsync = promisify(execFile);
|
|
7
|
-
var GIT_TIMEOUT_MS = 4e3;
|
|
8
|
-
var MAX_BRANCHES_SCANNED = 60;
|
|
9
|
-
var DEFAULT_LISTING_CAP = 10;
|
|
10
|
-
async function git(repoRoot, args) {
|
|
11
|
-
const { stdout } = await execFileAsync("git", args, {
|
|
12
|
-
cwd: repoRoot,
|
|
13
|
-
encoding: "utf8",
|
|
14
|
-
timeout: GIT_TIMEOUT_MS
|
|
15
|
-
});
|
|
16
|
-
return stdout.trim();
|
|
17
|
-
}
|
|
18
|
-
async function detectRemoteBase(repoRoot) {
|
|
19
|
-
for (const candidate of ["main", "master"]) {
|
|
20
|
-
try {
|
|
21
|
-
await git(repoRoot, ["rev-parse", "--verify", `refs/remotes/origin/${candidate}`]);
|
|
22
|
-
return `origin/${candidate}`;
|
|
23
|
-
} catch {
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
function parseRefLine(line) {
|
|
29
|
-
const [name, committedAt] = line.split("");
|
|
30
|
-
if (!name) return null;
|
|
31
|
-
return { name: name.replace(/^origin\//, ""), committedAt: committedAt ?? "" };
|
|
32
|
-
}
|
|
33
|
-
async function scanUnmergedBranches(repoRoot, options = {}) {
|
|
34
|
-
const staleHours = options.staleHours ?? 24;
|
|
35
|
-
const listingCap = options.listingCap ?? DEFAULT_LISTING_CAP;
|
|
36
|
-
const empty = { branches: [], total: 0, staleCount: 0, truncated: false };
|
|
37
|
-
let base;
|
|
38
|
-
try {
|
|
39
|
-
base = await detectRemoteBase(repoRoot);
|
|
40
|
-
} catch {
|
|
41
|
-
return empty;
|
|
42
|
-
}
|
|
43
|
-
if (!base) return empty;
|
|
44
|
-
let lines;
|
|
45
|
-
try {
|
|
46
|
-
const raw = await git(repoRoot, [
|
|
47
|
-
"for-each-ref",
|
|
48
|
-
`--no-merged=${base}`,
|
|
49
|
-
"--sort=-committerdate",
|
|
50
|
-
"--format=%(refname:short)%(committerdate:iso-strict)",
|
|
51
|
-
"refs/remotes/origin"
|
|
52
|
-
]);
|
|
53
|
-
lines = raw ? raw.split("\n") : [];
|
|
54
|
-
} catch {
|
|
55
|
-
return empty;
|
|
56
|
-
}
|
|
57
|
-
const baseShort = base.replace(/^origin\//, "");
|
|
58
|
-
const now = Date.now();
|
|
59
|
-
const out = [];
|
|
60
|
-
let scanned = 0;
|
|
61
|
-
let truncated = false;
|
|
62
|
-
for (const line of lines) {
|
|
63
|
-
const parsed = parseRefLine(line);
|
|
64
|
-
if (!parsed) continue;
|
|
65
|
-
if (parsed.name === baseShort || parsed.name === "HEAD") continue;
|
|
66
|
-
if (scanned >= MAX_BRANCHES_SCANNED) {
|
|
67
|
-
truncated = true;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
scanned++;
|
|
71
|
-
let ahead = 0;
|
|
72
|
-
try {
|
|
73
|
-
const cnt = await git(repoRoot, ["rev-list", "--count", `${base}..origin/${parsed.name}`]);
|
|
74
|
-
ahead = parseInt(cnt, 10) || 0;
|
|
75
|
-
} catch {
|
|
76
|
-
ahead = 0;
|
|
77
|
-
}
|
|
78
|
-
if (ahead <= 0) continue;
|
|
79
|
-
let filesChanged = 0;
|
|
80
|
-
try {
|
|
81
|
-
const diff = await git(repoRoot, ["diff", "--name-only", `${base}...origin/${parsed.name}`]);
|
|
82
|
-
filesChanged = diff ? diff.split("\n").filter(Boolean).length : 0;
|
|
83
|
-
} catch {
|
|
84
|
-
filesChanged = 0;
|
|
85
|
-
}
|
|
86
|
-
const committedMs = parsed.committedAt ? Date.parse(parsed.committedAt) : NaN;
|
|
87
|
-
const ageHours = Number.isFinite(committedMs) ? Math.max(0, (now - committedMs) / 36e5) : 0;
|
|
88
|
-
out.push({
|
|
89
|
-
name: parsed.name,
|
|
90
|
-
ahead,
|
|
91
|
-
committedAt: parsed.committedAt,
|
|
92
|
-
ageHours,
|
|
93
|
-
filesChanged
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
const staleCount = out.filter((b) => b.ageHours >= staleHours).length;
|
|
97
|
-
return {
|
|
98
|
-
branches: out.slice(0, listingCap),
|
|
99
|
-
total: out.length,
|
|
100
|
-
staleCount,
|
|
101
|
-
truncated
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function slugForMatch(input) {
|
|
105
|
-
return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
106
|
-
}
|
|
107
|
-
async function findMatchingBranches(repoRoot, opts) {
|
|
108
|
-
const result = [];
|
|
109
|
-
const scan = await scanUnmergedBranches(repoRoot, { listingCap: MAX_BRANCHES_SCANNED });
|
|
110
|
-
if (scan.branches.length === 0) return result;
|
|
111
|
-
const idToken = opts.id ? slugForMatch(opts.id) : "";
|
|
112
|
-
const shortId = idToken ? idToken.replace(/-/g, "").slice(0, 8) : "";
|
|
113
|
-
const titleSlug = opts.title ? slugForMatch(opts.title) : "";
|
|
114
|
-
const titleTokens = new Set(titleSlug.split("-").filter((t) => t.length >= 4));
|
|
115
|
-
for (const b of scan.branches) {
|
|
116
|
-
const branchSlug = slugForMatch(b.name);
|
|
117
|
-
const branchCompact = branchSlug.replace(/-/g, "");
|
|
118
|
-
let matched = false;
|
|
119
|
-
if (idToken && (branchSlug.includes(idToken) || shortId && branchCompact.includes(shortId))) {
|
|
120
|
-
matched = true;
|
|
121
|
-
} else if (titleTokens.size > 0) {
|
|
122
|
-
const branchTokens = new Set(branchSlug.split("-"));
|
|
123
|
-
let overlap = 0;
|
|
124
|
-
for (const t of titleTokens) if (branchTokens.has(t)) overlap++;
|
|
125
|
-
if (overlap >= 2) matched = true;
|
|
126
|
-
}
|
|
127
|
-
if (matched) {
|
|
128
|
-
result.push({ name: b.name, ahead: b.ahead, ageHours: b.ageHours });
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return result;
|
|
132
|
-
}
|
|
133
|
-
export {
|
|
134
|
-
DEFAULT_LISTING_CAP,
|
|
135
|
-
findMatchingBranches,
|
|
136
|
-
scanUnmergedBranches,
|
|
137
|
-
slugForMatch
|
|
138
|
-
};
|
package/dist/chunk-7YORGTXC.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
// src/bin/fast-db-init.ts
|
|
2
|
-
function makeNoopClient() {
|
|
3
|
-
const emptyResult = {
|
|
4
|
-
columns: [],
|
|
5
|
-
columnTypes: [],
|
|
6
|
-
rows: [],
|
|
7
|
-
rowsAffected: 0,
|
|
8
|
-
lastInsertRowid: void 0,
|
|
9
|
-
toJSON() {
|
|
10
|
-
return {};
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
return {
|
|
14
|
-
async execute() {
|
|
15
|
-
return emptyResult;
|
|
16
|
-
},
|
|
17
|
-
async batch(stmts) {
|
|
18
|
-
return stmts.map(() => emptyResult);
|
|
19
|
-
},
|
|
20
|
-
async transaction() {
|
|
21
|
-
throw new Error("Transactions not supported in daemon-down no-op mode");
|
|
22
|
-
},
|
|
23
|
-
async executeMultiple() {
|
|
24
|
-
},
|
|
25
|
-
async migrate() {
|
|
26
|
-
return [];
|
|
27
|
-
},
|
|
28
|
-
sync() {
|
|
29
|
-
return Promise.resolve(void 0);
|
|
30
|
-
},
|
|
31
|
-
close() {
|
|
32
|
-
},
|
|
33
|
-
get closed() {
|
|
34
|
-
return false;
|
|
35
|
-
},
|
|
36
|
-
get protocol() {
|
|
37
|
-
return "file";
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
async function fastDbInit(opts) {
|
|
42
|
-
const { isInitialized, getClient, setExternalClient } = await import("./lib/database.js");
|
|
43
|
-
if (isInitialized()) {
|
|
44
|
-
return getClient();
|
|
45
|
-
}
|
|
46
|
-
let effectiveDaemonOnly = opts?.daemonOnly;
|
|
47
|
-
if (effectiveDaemonOnly === void 0) {
|
|
48
|
-
try {
|
|
49
|
-
const { loadConfigSync } = await import("./lib/config.js");
|
|
50
|
-
effectiveDaemonOnly = loadConfigSync().hookDaemonOnly === true;
|
|
51
|
-
} catch {
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (effectiveDaemonOnly) {
|
|
55
|
-
const { isDaemonReady } = await import("./daemon-ready-signal-WKEJQNRA.js");
|
|
56
|
-
if (!isDaemonReady()) return makeNoopClient();
|
|
57
|
-
}
|
|
58
|
-
const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
|
|
59
|
-
if (!forceDirect) {
|
|
60
|
-
try {
|
|
61
|
-
const { connectEmbedDaemon, sendDaemonRequest, isClientConnected, disconnectClient } = await import("./lib/exe-daemon-client.js");
|
|
62
|
-
const { deserializeResultSet } = await import("./daemon-protocol-XW2OLNBS.js");
|
|
63
|
-
await Promise.race([
|
|
64
|
-
connectEmbedDaemon(),
|
|
65
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error("Daemon socket timeout (2s)")), 2e3))
|
|
66
|
-
]);
|
|
67
|
-
if (isClientConnected()) {
|
|
68
|
-
const daemonClient = {
|
|
69
|
-
async execute(stmt) {
|
|
70
|
-
const sql = typeof stmt === "string" ? stmt : stmt.sql;
|
|
71
|
-
const args = typeof stmt === "string" ? [] : Array.isArray(stmt.args) ? stmt.args : [];
|
|
72
|
-
const resp = await sendDaemonRequest({ type: "db-execute", sql, args });
|
|
73
|
-
if (resp.error) throw new Error(String(resp.error));
|
|
74
|
-
if (resp.db) return deserializeResultSet(resp.db);
|
|
75
|
-
throw new Error("Unexpected daemon response");
|
|
76
|
-
},
|
|
77
|
-
async batch(stmts, mode) {
|
|
78
|
-
const statements = stmts.map((s) => {
|
|
79
|
-
const sql = typeof s === "string" ? s : s.sql;
|
|
80
|
-
const args = typeof s === "string" ? [] : Array.isArray(s.args) ? s.args : [];
|
|
81
|
-
return { sql, args };
|
|
82
|
-
});
|
|
83
|
-
const resp = await sendDaemonRequest({ type: "db-batch", statements, mode: mode ?? "deferred" });
|
|
84
|
-
if (resp.error) throw new Error(String(resp.error));
|
|
85
|
-
const batchResults = resp["db-batch"];
|
|
86
|
-
if (batchResults) return batchResults.map(deserializeResultSet);
|
|
87
|
-
throw new Error("Unexpected daemon batch response");
|
|
88
|
-
},
|
|
89
|
-
async transaction(_mode) {
|
|
90
|
-
throw new Error("Transactions not supported via daemon socket");
|
|
91
|
-
},
|
|
92
|
-
async executeMultiple(_sql) {
|
|
93
|
-
throw new Error("executeMultiple not supported via daemon socket");
|
|
94
|
-
},
|
|
95
|
-
async migrate(_stmts) {
|
|
96
|
-
throw new Error("migrate not supported via daemon socket");
|
|
97
|
-
},
|
|
98
|
-
sync() {
|
|
99
|
-
return Promise.resolve(void 0);
|
|
100
|
-
},
|
|
101
|
-
close() {
|
|
102
|
-
},
|
|
103
|
-
get closed() {
|
|
104
|
-
return false;
|
|
105
|
-
},
|
|
106
|
-
get protocol() {
|
|
107
|
-
return "file";
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
try {
|
|
111
|
-
await daemonClient.execute("SELECT 1");
|
|
112
|
-
} catch {
|
|
113
|
-
try {
|
|
114
|
-
disconnectClient();
|
|
115
|
-
} catch {
|
|
116
|
-
}
|
|
117
|
-
throw new Error("Daemon socket validation failed");
|
|
118
|
-
}
|
|
119
|
-
setExternalClient(daemonClient);
|
|
120
|
-
return daemonClient;
|
|
121
|
-
}
|
|
122
|
-
} catch {
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (effectiveDaemonOnly) {
|
|
126
|
-
return makeNoopClient();
|
|
127
|
-
}
|
|
128
|
-
if (opts?.socketOnly) {
|
|
129
|
-
throw new Error("Daemon socket unavailable and socketOnly=true \u2014 skipping slow DB fallback");
|
|
130
|
-
}
|
|
131
|
-
const { initStore } = await import("./lib/store.js");
|
|
132
|
-
await initStore({ lightweight: true });
|
|
133
|
-
return getClient();
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export {
|
|
137
|
-
fastDbInit
|
|
138
|
-
};
|
package/dist/chunk-CCPHEPLU.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createReminder
|
|
3
|
-
} from "./chunk-PVIH3ZGV.js";
|
|
4
|
-
|
|
5
|
-
// src/mcp/tools/create-reminder.ts
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
function registerCreateReminder(server) {
|
|
8
|
-
server.registerTool(
|
|
9
|
-
"create_reminder",
|
|
10
|
-
{
|
|
11
|
-
title: "Create Reminder",
|
|
12
|
-
description: "Set a reminder for the founder. Shown in the boot brief every session.",
|
|
13
|
-
inputSchema: {
|
|
14
|
-
text: z.string().describe("What to remind about"),
|
|
15
|
-
due_date: z.string().optional().describe("Optional due date \u2014 ISO date (2026-04-01) or null for persistent")
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
async ({ text, due_date }) => {
|
|
19
|
-
const reminder = await createReminder(text, due_date);
|
|
20
|
-
const dueStr = reminder.dueDate ? ` (due: ${reminder.dueDate})` : "";
|
|
21
|
-
return {
|
|
22
|
-
content: [{ type: "text", text: `Reminder set: "${reminder.text}"${dueStr}` }]
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export {
|
|
29
|
-
registerCreateReminder
|
|
30
|
-
};
|
package/dist/chunk-HMP5VT6A.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
// src/lib/dispatch-ack.ts
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "fs";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import os from "os";
|
|
5
|
-
var ACK_DIR = path.join(os.homedir(), ".exe-os", "dispatch-acks");
|
|
6
|
-
function ensureAckDir() {
|
|
7
|
-
if (!existsSync(ACK_DIR)) mkdirSync(ACK_DIR, { recursive: true });
|
|
8
|
-
}
|
|
9
|
-
function writeDispatchPending(taskId, assignedTo, sessionName) {
|
|
10
|
-
ensureAckDir();
|
|
11
|
-
const signal = {
|
|
12
|
-
taskId,
|
|
13
|
-
assignedTo,
|
|
14
|
-
dispatchedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
15
|
-
sessionName
|
|
16
|
-
};
|
|
17
|
-
writeFileSync(path.join(ACK_DIR, `${taskId}.pending`), JSON.stringify(signal), "utf-8");
|
|
18
|
-
}
|
|
19
|
-
function writeDispatchAck(taskId, agentId) {
|
|
20
|
-
ensureAckDir();
|
|
21
|
-
const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
|
|
22
|
-
const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
|
|
23
|
-
let signal;
|
|
24
|
-
try {
|
|
25
|
-
signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
|
|
26
|
-
} catch {
|
|
27
|
-
signal = { taskId, assignedTo: agentId, dispatchedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
28
|
-
}
|
|
29
|
-
signal.ackedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
30
|
-
writeFileSync(ackPath, JSON.stringify(signal), "utf-8");
|
|
31
|
-
try {
|
|
32
|
-
unlinkSync(pendingPath);
|
|
33
|
-
} catch {
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function writeDispatchFailed(taskId, assignedTo, error, sessionName) {
|
|
37
|
-
ensureAckDir();
|
|
38
|
-
const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
|
|
39
|
-
let signal;
|
|
40
|
-
try {
|
|
41
|
-
signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
|
|
42
|
-
} catch {
|
|
43
|
-
signal = { taskId, assignedTo, dispatchedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
44
|
-
}
|
|
45
|
-
signal.failedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
46
|
-
signal.error = error;
|
|
47
|
-
if (sessionName) signal.sessionName = sessionName;
|
|
48
|
-
writeFileSync(path.join(ACK_DIR, `${taskId}.failed`), JSON.stringify(signal), "utf-8");
|
|
49
|
-
try {
|
|
50
|
-
unlinkSync(pendingPath);
|
|
51
|
-
} catch {
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function checkDispatchStatus(taskId) {
|
|
55
|
-
ensureAckDir();
|
|
56
|
-
const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
|
|
57
|
-
const failedPath = path.join(ACK_DIR, `${taskId}.failed`);
|
|
58
|
-
const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
|
|
59
|
-
if (existsSync(ackPath)) {
|
|
60
|
-
try {
|
|
61
|
-
const signal = JSON.parse(readFileSync(ackPath, "utf-8"));
|
|
62
|
-
return { status: "acked", signal };
|
|
63
|
-
} catch {
|
|
64
|
-
return { status: "acked" };
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (existsSync(failedPath)) {
|
|
68
|
-
try {
|
|
69
|
-
const signal = JSON.parse(readFileSync(failedPath, "utf-8"));
|
|
70
|
-
return { status: "failed", signal };
|
|
71
|
-
} catch {
|
|
72
|
-
return { status: "failed" };
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (existsSync(pendingPath)) {
|
|
76
|
-
try {
|
|
77
|
-
const signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
|
|
78
|
-
return { status: "pending", signal };
|
|
79
|
-
} catch {
|
|
80
|
-
return { status: "pending" };
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return { status: "unknown" };
|
|
84
|
-
}
|
|
85
|
-
function cleanStaleDispatchAcks(maxAgeMs = 60 * 60 * 1e3) {
|
|
86
|
-
ensureAckDir();
|
|
87
|
-
const now = Date.now();
|
|
88
|
-
let cleaned = 0;
|
|
89
|
-
try {
|
|
90
|
-
for (const file of readdirSync(ACK_DIR)) {
|
|
91
|
-
const fullPath = path.join(ACK_DIR, file);
|
|
92
|
-
try {
|
|
93
|
-
const signal = JSON.parse(readFileSync(fullPath, "utf-8"));
|
|
94
|
-
const ts = signal.ackedAt ?? signal.dispatchedAt;
|
|
95
|
-
if (now - new Date(ts).getTime() > maxAgeMs) {
|
|
96
|
-
unlinkSync(fullPath);
|
|
97
|
-
cleaned++;
|
|
98
|
-
}
|
|
99
|
-
} catch {
|
|
100
|
-
try {
|
|
101
|
-
unlinkSync(fullPath);
|
|
102
|
-
cleaned++;
|
|
103
|
-
} catch {
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
} catch {
|
|
108
|
-
}
|
|
109
|
-
return cleaned;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export {
|
|
113
|
-
writeDispatchPending,
|
|
114
|
-
writeDispatchAck,
|
|
115
|
-
writeDispatchFailed,
|
|
116
|
-
checkDispatchStatus,
|
|
117
|
-
cleanStaleDispatchAcks
|
|
118
|
-
};
|
package/dist/chunk-PVYR4FCQ.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
// src/lib/play-mode.ts
|
|
2
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
3
|
-
import { join, dirname } from "path";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
var PLAY_MODE_FILE = join(homedir(), ".exe-os", "play-modes.json");
|
|
6
|
-
function resolvePlayModeFile() {
|
|
7
|
-
return process.env.EXE_PLAY_MODE_FILE ?? PLAY_MODE_FILE;
|
|
8
|
-
}
|
|
9
|
-
var DEFAULT_EXPLORE_DURATION_MS = 60 * 60 * 1e3;
|
|
10
|
-
function playModeKey(agentId, sessionScope) {
|
|
11
|
-
return `${agentId}:${sessionScope}`;
|
|
12
|
-
}
|
|
13
|
-
function readStore() {
|
|
14
|
-
try {
|
|
15
|
-
const filePath = resolvePlayModeFile();
|
|
16
|
-
if (!existsSync(filePath)) return {};
|
|
17
|
-
const raw = readFileSync(filePath, "utf8");
|
|
18
|
-
return JSON.parse(raw);
|
|
19
|
-
} catch {
|
|
20
|
-
return {};
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function writeStore(store) {
|
|
24
|
-
const filePath = resolvePlayModeFile();
|
|
25
|
-
const dir = dirname(filePath);
|
|
26
|
-
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
27
|
-
writeFileSync(filePath, JSON.stringify(store, null, 2), "utf8");
|
|
28
|
-
}
|
|
29
|
-
function setPlayMode(agentId, sessionScope, mode, options = {}) {
|
|
30
|
-
const key = playModeKey(agentId, sessionScope);
|
|
31
|
-
const store = readStore();
|
|
32
|
-
if (mode === "task") {
|
|
33
|
-
delete store[key];
|
|
34
|
-
writeStore(store);
|
|
35
|
-
return {
|
|
36
|
-
mode: "task",
|
|
37
|
-
agentId,
|
|
38
|
-
sessionScope,
|
|
39
|
-
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
40
|
-
expiresAt: new Date(Date.now() + 1).toISOString()
|
|
41
|
-
// immediate
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const durationMs = options.durationMs ?? DEFAULT_EXPLORE_DURATION_MS;
|
|
45
|
-
const now = /* @__PURE__ */ new Date();
|
|
46
|
-
const entry = {
|
|
47
|
-
mode: "explore",
|
|
48
|
-
agentId,
|
|
49
|
-
sessionScope,
|
|
50
|
-
startedAt: now.toISOString(),
|
|
51
|
-
expiresAt: new Date(now.getTime() + durationMs).toISOString(),
|
|
52
|
-
notes: options.notes
|
|
53
|
-
};
|
|
54
|
-
store[key] = entry;
|
|
55
|
-
writeStore(store);
|
|
56
|
-
return entry;
|
|
57
|
-
}
|
|
58
|
-
function getPlayMode(agentId, sessionScope) {
|
|
59
|
-
const key = playModeKey(agentId, sessionScope);
|
|
60
|
-
const store = readStore();
|
|
61
|
-
const entry = store[key];
|
|
62
|
-
if (!entry) return null;
|
|
63
|
-
if (new Date(entry.expiresAt).getTime() <= Date.now()) {
|
|
64
|
-
delete store[key];
|
|
65
|
-
try {
|
|
66
|
-
writeStore(store);
|
|
67
|
-
} catch {
|
|
68
|
-
}
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
return entry;
|
|
72
|
-
}
|
|
73
|
-
function isExploreMode(agentId, sessionScope) {
|
|
74
|
-
try {
|
|
75
|
-
const entry = getPlayMode(agentId, sessionScope);
|
|
76
|
-
return entry?.mode === "explore";
|
|
77
|
-
} catch {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function listExploreSessions() {
|
|
82
|
-
try {
|
|
83
|
-
const store = readStore();
|
|
84
|
-
const now = Date.now();
|
|
85
|
-
const active = [];
|
|
86
|
-
let pruned = false;
|
|
87
|
-
for (const [key, entry] of Object.entries(store)) {
|
|
88
|
-
if (new Date(entry.expiresAt).getTime() <= now) {
|
|
89
|
-
delete store[key];
|
|
90
|
-
pruned = true;
|
|
91
|
-
} else {
|
|
92
|
-
active.push(entry);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (pruned) {
|
|
96
|
-
try {
|
|
97
|
-
writeStore(store);
|
|
98
|
-
} catch {
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return active;
|
|
102
|
-
} catch {
|
|
103
|
-
return [];
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export {
|
|
108
|
-
DEFAULT_EXPLORE_DURATION_MS,
|
|
109
|
-
setPlayMode,
|
|
110
|
-
getPlayMode,
|
|
111
|
-
isExploreMode,
|
|
112
|
-
listExploreSessions
|
|
113
|
-
};
|