@askexenow/exe-os 0.9.342 → 0.9.343
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/dist/{active-agent-TNIO6IY3.js → active-agent-MDGDKGCL.js} +4 -4
- package/dist/{active-agent-PVGE57FY.js → active-agent-SNVSJFI5.js} +4 -4
- package/dist/{agentic-ontology-3FXYMHKW.js → agentic-ontology-SCG6UUHK.js} +1 -1
- package/dist/{backfill-gate-65LSYVE5.js → backfill-gate-HARARX5F.js} +2 -2
- package/dist/{backfill-metadata-ZSMZC45J.js → backfill-metadata-SCQ5FPDR.js} +5 -5
- package/dist/{background-jobs-EXR5RVGG.js → background-jobs-KKRO3QRO.js} +2 -2
- package/dist/{backup-verify-3Y2FHGZU.js → backup-verify-KDLOT4RP.js} +3 -3
- package/dist/{behaviors-KYRB3NGJ.js → behaviors-MICGF3H3.js} +6 -6
- package/dist/bin/age-ontology-load.js +2 -2
- package/dist/bin/agentic-ontology-backfill.js +7 -7
- package/dist/bin/agentic-reflection-backfill.js +8 -8
- package/dist/bin/agentic-semantic-label.js +7 -7
- package/dist/bin/backfill-conversations.js +7 -7
- package/dist/bin/backfill-responses.js +7 -7
- package/dist/bin/backfill-vectors.js +16 -16
- package/dist/bin/bulk-sync-postgres.js +15 -15
- package/dist/bin/cc-doctor.js +8 -8
- package/dist/bin/cleanup-stale-review-tasks.js +20 -19
- package/dist/bin/cli.js +23 -23
- package/dist/bin/daemon-restart-handoff.js +27 -0
- package/dist/bin/deferred-daemon-restart.js +116 -89
- package/dist/bin/exe-agent-config.js +4 -4
- package/dist/bin/exe-agent.js +13 -13
- package/dist/bin/exe-assign.js +9 -9
- package/dist/bin/exe-boot.js +34 -33
- package/dist/bin/exe-call.js +6 -6
- package/dist/bin/exe-cloud.js +16 -16
- package/dist/bin/exe-config-dump.js +4 -4
- package/dist/bin/exe-dispatch.js +20 -19
- package/dist/bin/exe-doctor.js +6 -6
- package/dist/bin/exe-export-behaviors.js +10 -10
- package/dist/bin/exe-forget.js +9 -9
- package/dist/bin/exe-gateway.js +8 -8
- package/dist/bin/exe-grant.js +4 -4
- package/dist/bin/exe-healthcheck.js +8 -8
- package/dist/bin/exe-heartbeat.js +20 -19
- package/dist/bin/exe-kill.js +25 -24
- package/dist/bin/exe-launch-agent.js +46 -31
- package/dist/bin/exe-memory-reads.js +5 -5
- package/dist/bin/exe-new-employee.js +10 -10
- package/dist/bin/exe-os-mcp-proxy.js +365 -0
- package/dist/bin/exe-pending-messages.js +21 -20
- package/dist/bin/exe-pending-notifications.js +20 -19
- package/dist/bin/exe-pending-reviews.js +20 -19
- package/dist/bin/exe-rename.js +6 -6
- package/dist/bin/exe-review.js +24 -23
- package/dist/bin/exe-search.js +6 -6
- package/dist/bin/exe-session-cleanup.js +23 -22
- package/dist/bin/exe-settings.js +16 -16
- package/dist/bin/exe-start-codex.js +17 -17
- package/dist/bin/exe-start-opencode.js +9 -9
- package/dist/bin/exe-status.js +21 -20
- package/dist/bin/exe-support.js +4 -4
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/git-sweep.js +21 -20
- package/dist/bin/graph-backfill.js +6 -6
- package/dist/bin/graph-export.js +8 -8
- package/dist/bin/import-history.js +8 -8
- package/dist/bin/install.js +87 -86
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +5 -5
- package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +20 -19
- package/dist/bin/setup.js +3 -3
- package/dist/bin/shard-migrate.js +6 -6
- package/dist/bin/stack-update.js +5 -5
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-BL2ISK4U.js → boot-generation-CFA5NKSK.js} +4 -4
- package/dist/{boot-review-sections-DBMQJT5N.js → boot-review-sections-FX2FYZJQ.js} +19 -18
- package/dist/{branch-hygiene-TZWK6QCF.js → branch-hygiene-PILXQQDF.js} +1 -1
- package/dist/{branding-DVXBGVDH.js → branding-ZSC6YN63.js} +2 -2
- package/dist/{capability-cards-DN5UIKVN.js → capability-cards-O27UB3J5.js} +3 -3
- package/dist/{capacity-monitor-ZG5GGFR2.js → capacity-monitor-5DVZY3SM.js} +21 -20
- package/dist/{catchup-brief-D6HH6DWS.js → catchup-brief-3GYI6AKV.js} +23 -22
- package/dist/{chunk-YTCFACP4.js → chunk-25ORSHR7.js} +137 -137
- package/dist/{chunk-PDWS3E22.js → chunk-2F7WGH5K.js} +6 -6
- package/dist/{chunk-JLZ4RYSD.js → chunk-2VZMLKNS.js} +2 -2
- package/dist/{chunk-CNVBKDEY.js → chunk-2YPCD2UH.js} +12 -12
- package/dist/{chunk-HAF2DJYV.js → chunk-34RULPS2.js} +3 -3
- package/dist/{chunk-JPUZPAAF.js → chunk-3MLSM77R.js} +3 -3
- package/dist/{chunk-JTBIS4R5.js → chunk-3OO34BOT.js} +1 -1
- package/dist/{chunk-L4A5DL6Z.js → chunk-3OR54BBE.js} +3 -3
- package/dist/{chunk-USSB56WK.js → chunk-3PFP7GV2.js} +1 -1
- package/dist/{chunk-TLT7NZCW.js → chunk-4AA2HRIM.js} +3 -3
- package/dist/{chunk-PQIDGXSG.js → chunk-4E3SZEEI.js} +2 -2
- package/dist/chunk-4EI5AHHR.js +37 -0
- package/dist/{chunk-6XWTQUO4.js → chunk-4MLSFZLY.js} +19 -8
- package/dist/{chunk-AJYCFKJR.js → chunk-4UIYLTA3.js} +1 -1
- package/dist/{chunk-I26FWCSP.js → chunk-4VUAG6DN.js} +1 -1
- package/dist/{chunk-V3EEVY4L.js → chunk-54O2FWRM.js} +1 -1
- package/dist/{chunk-TTCUG2CF.js → chunk-5DSVWSL5.js} +2 -2
- package/dist/{chunk-4J4PMPXZ.js → chunk-5ERB3AWT.js} +1 -1
- package/dist/{chunk-SQKXKV2Y.js → chunk-5GDTZOVS.js} +2 -2
- package/dist/{chunk-BUCXNV32.js → chunk-5HQHHQUR.js} +1 -1
- package/dist/chunk-5MLYU6I2.js +76 -0
- package/dist/{chunk-X2Q5NLUL.js → chunk-5VV2YMMB.js} +1 -1
- package/dist/{chunk-XZXBB3TN.js → chunk-62MYX7G4.js} +2 -2
- package/dist/{chunk-X33NYQYJ.js → chunk-6CYVBLZW.js} +2 -2
- package/dist/{chunk-GJ26DULE.js → chunk-6IK2ME5X.js} +2 -2
- package/dist/{chunk-4ZCD2UWW.js → chunk-6JMRRJD6.js} +3 -3
- package/dist/{chunk-EQHQF5IM.js → chunk-6L6SXVTP.js} +32 -16
- package/dist/{chunk-MR6LHP4F.js → chunk-6ST7ZWTV.js} +1 -1
- package/dist/{chunk-WMESXBJM.js → chunk-6TJLBXR5.js} +30 -5
- package/dist/{chunk-PPCDBE6Z.js → chunk-6XKIMGHA.js} +1 -1
- package/dist/{chunk-5ERDIOV3.js → chunk-7M5AWCR3.js} +2 -2
- package/dist/{chunk-MKYFAKDW.js → chunk-7MESPFOK.js} +4 -4
- package/dist/{chunk-RACAOE2Z.js → chunk-7S3A4TOL.js} +15 -15
- package/dist/{chunk-LU2FALL6.js → chunk-7UNIYLGV.js} +28 -4
- package/dist/{chunk-N7QJKQMX.js → chunk-AGHKOBA6.js} +10 -10
- package/dist/{chunk-OZEBAGKR.js → chunk-B4LOFZLB.js} +10 -10
- package/dist/{chunk-GDIJE6D7.js → chunk-BUI2CHLQ.js} +1 -1
- package/dist/{chunk-JMYHW3AL.js → chunk-BVURFD5R.js} +2 -2
- package/dist/{chunk-7V4JADD6.js → chunk-BXSC34Y2.js} +2 -2
- package/dist/{chunk-YCANDMI2.js → chunk-BZA4N43B.js} +1 -1
- package/dist/{chunk-QDGZJ653.js → chunk-C24F7SOO.js} +4 -4
- package/dist/{chunk-5TY4FPH6.js → chunk-CBD64QQG.js} +1 -1
- package/dist/{chunk-QRYVCDWS.js → chunk-DHW4DIGK.js} +2 -2
- package/dist/{chunk-2KZNGDSW.js → chunk-DLGEQJ6E.js} +1 -1
- package/dist/{chunk-GBTTBXAF.js → chunk-DT6LX4SV.js} +4 -4
- package/dist/{chunk-R2NN3JKH.js → chunk-E4FGXPHB.js} +5 -5
- package/dist/{chunk-UEA3LXOB.js → chunk-FCKYJSVY.js} +1 -1
- package/dist/{chunk-FPFPLPUY.js → chunk-FQEBVYVE.js} +5 -5
- package/dist/{chunk-AOHXREB7.js → chunk-GD7FA6IP.js} +70 -66
- package/dist/{chunk-6WQ3NNCE.js → chunk-GGQMX4IU.js} +3 -3
- package/dist/{chunk-H6BV5TKD.js → chunk-H6BVQIAF.js} +6 -6
- package/dist/{chunk-CWXVH7WV.js → chunk-H6WLWIPN.js} +1 -1
- package/dist/{chunk-UP75Z5X7.js → chunk-HDL7CXQ4.js} +73 -67
- package/dist/{chunk-RHWZUUS4.js → chunk-HENPNYGY.js} +11 -11
- package/dist/{chunk-C5QAPURN.js → chunk-HRBTW62M.js} +1 -1
- package/dist/{chunk-OLMQ4UOF.js → chunk-IKAGAKAI.js} +209 -20
- package/dist/{chunk-UUEKJDK6.js → chunk-IPB5QM4S.js} +2 -2
- package/dist/{chunk-NXUSDL37.js → chunk-IRUWKANS.js} +1 -1
- package/dist/{chunk-EUS4QUKP.js → chunk-JBMIIBPS.js} +1 -1
- package/dist/{chunk-VPZHJCKW.js → chunk-JLLJ3ER3.js} +2 -2
- package/dist/{chunk-F27XXN6C.js → chunk-JMMF3PPQ.js} +1 -1
- package/dist/{chunk-UNXQBELK.js → chunk-K2G3VDCV.js} +1 -1
- package/dist/{chunk-3SW4OEHB.js → chunk-KIUNO3JP.js} +1 -1
- package/dist/{chunk-KW2SD2FL.js → chunk-KRRZNASS.js} +2 -2
- package/dist/{chunk-HV4KESRY.js → chunk-LSAH73QD.js} +1 -1
- package/dist/chunk-LUQ57SRM.js +127 -0
- package/dist/{sweep-budget-WB2FKPYN.js → chunk-M6DZYWZH.js} +8 -3
- package/dist/{chunk-JGIPOUIK.js → chunk-MNIA3IOU.js} +3 -3
- package/dist/{chunk-XHK3FS3W.js → chunk-MTFSD6DH.js} +1 -1
- package/dist/{chunk-2ZYO73KO.js → chunk-MVWFY7IO.js} +1 -1
- package/dist/{chunk-ASAFVDVR.js → chunk-NDJASAXP.js} +1 -1
- package/dist/{chunk-K7KFGDWF.js → chunk-NG2ABIDX.js} +1 -1
- package/dist/{chunk-O5V57XYE.js → chunk-NPFU2NPG.js} +1 -1
- package/dist/{chunk-UUQBZPJJ.js → chunk-NUVP4CCD.js} +1 -1
- package/dist/{chunk-NX5INHHG.js → chunk-O5VMAZZH.js} +1 -1
- package/dist/{chunk-WZHZCDDO.js → chunk-OL4JFQ2T.js} +1 -0
- package/dist/{chunk-Z6RSN7KS.js → chunk-OZUQJZYO.js} +4 -4
- package/dist/{chunk-P5HIWY2E.js → chunk-PAYVSTF2.js} +1 -1
- package/dist/chunk-PWRC5XZO.js +161 -0
- package/dist/{chunk-MZM6EJCU.js → chunk-PXPBF2JZ.js} +4 -4
- package/dist/{chunk-L2R3LN2P.js → chunk-QFBT7CJH.js} +1 -1
- package/dist/{chunk-2WAVZ5UJ.js → chunk-QTKDGDR5.js} +1 -1
- package/dist/{chunk-G4RGKBCA.js → chunk-R3QDXB55.js} +13 -3
- package/dist/{chunk-QQ4E2RYW.js → chunk-RZZ66LSS.js} +12 -12
- package/dist/{chunk-HJ447YER.js → chunk-S3FIQCSM.js} +14 -6
- package/dist/{chunk-G5T6KDG4.js → chunk-SA7GZU3U.js} +1 -1
- package/dist/{chunk-7CTRGNLW.js → chunk-SIGS6D5R.js} +2 -2
- package/dist/{chunk-VRAQTFD6.js → chunk-SJN5ZEDI.js} +1 -1
- package/dist/{chunk-QOO5RW3K.js → chunk-SLK3DPYU.js} +3 -3
- package/dist/{chunk-F5O7V7UK.js → chunk-SXKMH4JX.js} +1 -1
- package/dist/{chunk-6CH3TPHR.js → chunk-T3EJIMDX.js} +3 -3
- package/dist/{chunk-KWZMQACA.js → chunk-TI2XFHRQ.js} +3 -3
- package/dist/{chunk-OTF44GXL.js → chunk-TR73G4GH.js} +2 -2
- package/dist/{chunk-4CMVFVFC.js → chunk-UC37QPSR.js} +4 -4
- package/dist/{chunk-KGWRTRKC.js → chunk-UZ2LYBY5.js} +1 -1
- package/dist/{chunk-EV46QTD3.js → chunk-V7AGCRLI.js} +1 -1
- package/dist/{chunk-H7I47RS5.js → chunk-VIIHBYIP.js} +115 -3
- package/dist/{chunk-HA5R6USD.js → chunk-WYRZEMRU.js} +1 -1
- package/dist/{chunk-CE7F6RHG.js → chunk-WZTWA4G4.js} +11 -11
- package/dist/{chunk-IBYL4DHM.js → chunk-X4Z5DPOC.js} +22 -2
- package/dist/{chunk-4VSV5P4D.js → chunk-XZTTLTPG.js} +4 -4
- package/dist/{chunk-S7QUM2UK.js → chunk-YCPZTX7V.js} +2 -2
- package/dist/{chunk-GG5NDQNN.js → chunk-YYCKKORY.js} +13 -20
- package/dist/{chunk-NN2B2QKU.js → chunk-Z5VL7YBR.js} +1 -1
- package/dist/{chunk-QYZJHTNE.js → chunk-ZCLVPTZU.js} +9 -9
- package/dist/{chunk-RAXVPNMR.js → chunk-ZUBUP66T.js} +1 -1
- package/dist/{chunk-VSRPS3J7.js → chunk-ZYLKX3KB.js} +13 -13
- package/dist/{cleanup-graph-garbage-XWUFAMFO.js → cleanup-graph-garbage-DDVPSPI4.js} +5 -5
- package/dist/{co-activation-ZCHPLLP6.js → co-activation-HLCAD44L.js} +3 -3
- package/dist/{co-occurrence-KG3LKALN.js → co-occurrence-I5U2PCPX.js} +3 -3
- package/dist/{code-context-index-WSOJQ72R.js → code-context-index-FSYP5VF2.js} +4 -4
- package/dist/{conversation-wiki-populator-WQN3IUU6.js → conversation-wiki-populator-YVT5AYSK.js} +1 -1
- package/dist/{crdt-sync-4PFGPZXV.js → crdt-sync-EMV5EZ4J.js} +1 -1
- package/dist/{crm-webhook-II7Z45Q6.js → crm-webhook-XJ6UOBHR.js} +2 -2
- package/dist/{cto-delegation-gate-JWWOJPNC.js → cto-delegation-gate-5NNZWP2M.js} +19 -18
- package/dist/{daemon-auth-3FEAHFWC.js → daemon-auth-TIE7HSWF.js} +2 -2
- package/dist/{daemon-orchestration-FX4XZDR5.js → daemon-orchestration-GGSRCXR3.js} +24 -23
- package/dist/{daemon-ready-4JTSFKAY.js → daemon-ready-A7R6XZRF.js} +1 -1
- package/dist/{daemon-restart-circuit-breaker-PEGEIP6H.js → daemon-restart-circuit-breaker-5V6B6NLS.js} +1 -1
- package/dist/{db-restore-events-MQ2DBGEQ.js → db-restore-events-GQGQSYHV.js} +1 -1
- package/dist/{doc-graph-extractor-F6ODFIID.js → doc-graph-extractor-3OXUTEKS.js} +3 -3
- package/dist/{documents-23WX2FPQ.js → documents-M7UI6SZ6.js} +9 -9
- package/dist/{dreaming-NWD22UQ5.js → dreaming-CYQWRJA5.js} +20 -19
- package/dist/{exe-drift-CW72FBGE.js → exe-drift-DPDRG3OM.js} +4 -4
- package/dist/{exe-export-AUJ7CV7G.js → exe-export-SZVIC6KI.js} +8 -8
- package/dist/{exe-import-JX4I52VE.js → exe-import-Q6TCHQ6P.js} +8 -8
- package/dist/{exe-key-2N6LY2BU.js → exe-key-EVMVLB3Y.js} +86 -85
- package/dist/{exe-org-X4CSNCKS.js → exe-org-3Y3RWGIU.js} +2 -2
- package/dist/{exe-snapshot-XZ7FVCYZ.js → exe-snapshot-UX5CFSDX.js} +23 -22
- package/dist/{fast-db-init-4CWHSOOR.js → fast-db-init-O62SMAQL.js} +1 -1
- package/dist/{founder-context-7L3CFPYN.js → founder-context-FCVTBCWI.js} +3 -3
- package/dist/gateway/index.js +18 -18
- package/dist/{git-staleness-CI2R4QOJ.js → git-staleness-AFBXWNTZ.js} +3 -3
- package/dist/{global-procedures-XQX3LUH6.js → global-procedures-BDREAJSZ.js} +5 -5
- package/dist/{graph-auto-extract-OURWMGBS.js → graph-auto-extract-JJ5OGNGJ.js} +3 -3
- package/dist/{hook-integrity-XY47IM7G.js → hook-integrity-IKKZ6HBC.js} +1 -1
- package/dist/{hook-prefetch-PHRRKY4C.js → hook-prefetch-HLCCAOSZ.js} +20 -19
- package/dist/hooks/bug-report-worker.js +24 -23
- package/dist/hooks/codex-stop-task-finalizer.js +24 -23
- package/dist/hooks/commit-complete.js +23 -22
- package/dist/hooks/error-recall.js +12 -12
- package/dist/hooks/exe-heartbeat-hook.js +5 -5
- package/dist/hooks/ingest-worker.js +7 -7
- package/dist/hooks/ingest.js +19 -19
- package/dist/hooks/instructions-loaded.js +6 -6
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +6 -6
- package/dist/hooks/post-compact.js +22 -21
- package/dist/hooks/post-tool-combined.js +23 -10
- package/dist/hooks/pre-compact.js +23 -22
- package/dist/hooks/pre-tool-use.js +28 -27
- package/dist/hooks/prompt-submit.js +53 -40
- package/dist/hooks/session-end.js +28 -27
- package/dist/hooks/session-start.js +17 -17
- package/dist/hooks/stop.js +29 -28
- package/dist/hooks/subagent-stop.js +22 -21
- package/dist/hooks/summary-worker.js +28 -27
- package/dist/index.js +33 -32
- package/dist/{installer-L7EVH5U5.js → installer-BZ3QV7DJ.js} +7 -7
- package/dist/{installer-JND3RJ6Q.js → installer-HADQQZIU.js} +7 -7
- package/dist/{installer-G3JAO3NT.js → installer-OJ7XKSAR.js} +7 -7
- package/dist/{intercom-queue-ZFEQALR3.js → intercom-queue-NFOLOBTT.js} +19 -18
- package/dist/{key-backup-status-LOSMVATJ.js → key-backup-status-TTO2UUYP.js} +1 -1
- package/dist/lib/agent-config.js +2 -2
- package/dist/lib/cloud-sync.js +15 -15
- package/dist/lib/config.js +1 -1
- package/dist/lib/consolidation.js +6 -6
- package/dist/lib/database.js +3 -3
- package/dist/{db-backup-W2QFSYQC.js → lib/db-backup.js} +16 -4
- package/dist/lib/db-checkpoint-worker.js +57 -0
- package/dist/lib/db-daemon-client.js +4 -4
- package/dist/lib/db-write-worker-client.js +17 -0
- package/dist/lib/db-write-worker.js +216 -0
- package/dist/lib/db.js +3 -3
- package/dist/lib/device-registry.js +2 -2
- package/dist/lib/embed-worker.js +1 -1
- package/dist/lib/embedder.js +4 -4
- package/dist/lib/employee-templates.js +6 -6
- package/dist/lib/employees.js +3 -3
- package/dist/lib/exe-daemon-client.js +3 -3
- package/dist/lib/exe-daemon.js +781 -276
- package/dist/lib/hybrid-search.js +6 -6
- package/dist/lib/identity.js +3 -3
- package/dist/lib/license.js +3 -3
- package/dist/lib/messaging.js +20 -19
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +4 -4
- package/dist/lib/schedules.js +6 -6
- package/dist/lib/session-registry.js +5 -5
- package/dist/lib/skill-learning.js +7 -7
- package/dist/lib/status-brief.js +3 -3
- package/dist/lib/store.js +5 -5
- package/dist/lib/task-router.js +4 -4
- package/dist/lib/tasks.js +21 -20
- package/dist/lib/tmux-routing.js +19 -18
- package/dist/lib/token-spend.js +4 -4
- package/dist/{license-gate-QTRQHV4F.js → license-gate-3KPSNYVA.js} +4 -4
- package/dist/{license-sync-N3UJFWAW.js → license-sync-CQ42HDBA.js} +3 -3
- package/dist/mcp/register-tools.js +83 -82
- package/dist/mcp/server.js +85 -84
- package/dist/mcp/tools/complete-reminder.js +5 -5
- package/dist/mcp/tools/create-reminder.js +5 -5
- package/dist/mcp/tools/create-task.js +23 -22
- package/dist/mcp/tools/deactivate-behavior.js +8 -8
- package/dist/mcp/tools/list-reminders.js +5 -5
- package/dist/mcp/tools/list-tasks.js +23 -22
- package/dist/mcp/tools/send-message.js +22 -21
- package/dist/mcp/tools/update-task.js +22 -21
- package/dist/{mcp-http-config-BDL36JZ3.js → mcp-http-config-BHAM376G.js} +8 -6
- package/dist/{mcp-port-config-6HYY6J7K.js → mcp-port-config-PA3W3BJK.js} +7 -1
- package/dist/{mcp-session-identity-T7H2EKFQ.js → mcp-session-identity-S7GSVRR6.js} +19 -18
- package/dist/mcp-session-persist-PS7BIG44.js +62 -0
- package/dist/mcp-stale-flag-ZM23XRSJ.js +11 -0
- package/dist/{memory-cards-ZRDW7QBX.js → memory-cards-47NYPFC3.js} +5 -5
- package/dist/{memory-graph-extractor-QLXDMHRS.js → memory-graph-extractor-IH7YBZ6U.js} +4 -4
- package/dist/{memory-poisoning-defense-HJTXYCWH.js → memory-poisoning-defense-MZQFCQ2G.js} +3 -3
- package/dist/{memory-pressure-watchdog-HN5X7AVN.js → memory-pressure-watchdog-PSVJ5BCF.js} +20 -19
- package/dist/{memory-queue-2UOOF27L.js → memory-queue-ZI7DX44D.js} +2 -2
- package/dist/{memory-queue-client-O5U6F6XP.js → memory-queue-client-6IPZTWZA.js} +5 -5
- package/dist/{memory-reflection-WVNFBJAA.js → memory-reflection-3VPYJS2G.js} +3 -3
- package/dist/{monitor-grants-E3ELDEWD.js → monitor-grants-OXKZ75TH.js} +2 -2
- package/dist/{notification-ledger-SZEPGJQ7.js → notification-ledger-A6MYLQAN.js} +20 -19
- package/dist/{notifications-4UT53CDG.js → notifications-6XCSUTJW.js} +19 -18
- package/dist/{orchestration-events-WV4NWKZH.js → orchestration-events-5XDNVNR2.js} +4 -4
- package/dist/{orchestration-phase-AWBXPO52.js → orchestration-phase-6DJUSFMV.js} +2 -2
- package/dist/{orchestrator-UAC3RW2T.js → orchestrator-2RQBNMZL.js} +21 -20
- package/dist/{pipeline-router-LM53NMWJ.js → pipeline-router-N2LDNFJ5.js} +4 -4
- package/dist/{plan-limits-2FEY2GOS.js → plan-limits-7BUMNQOI.js} +6 -6
- package/dist/{platform-procedures-X5DFJFV7.js → platform-procedures-VDW2R65H.js} +1 -1
- package/dist/{project-boot-4NUH5FRU.js → project-boot-RXCHF3S7.js} +1 -1
- package/dist/{projection-worker-FZ7YSN3G.js → projection-worker-CKC2E22U.js} +4 -4
- package/dist/{prospective-memory-6D2ASWM3.js → prospective-memory-Q7ZUCAS4.js} +3 -3
- package/dist/{push-notifications-U6FIBQRW.js → push-notifications-VCSZYVD5.js} +2 -2
- package/dist/{reranker-GYYRPANK.js → reranker-L3GLRUDY.js} +2 -2
- package/dist/{retrieval-health-4Z242P3B.js → retrieval-health-DPLY6O6P.js} +1 -1
- package/dist/{review-polling-HXAFJZDA.js → review-polling-DLPMK3QW.js} +20 -19
- package/dist/runtime/index.js +31 -30
- package/dist/{session-events-O3BV56ZX.js → session-events-N5VRC6IT.js} +20 -19
- package/dist/{session-kill-telemetry-AELE4JDK.js → session-kill-telemetry-76ZVQ525.js} +20 -19
- package/dist/{session-scope-5EAPUT45.js → session-scope-B3BEHGHO.js} +19 -18
- package/dist/{setup-wizard-NB6R4QVS.js → setup-wizard-5SIRITVN.js} +3 -3
- package/dist/{shard-manager-35PWFR3B.js → shard-manager-OETALPDW.js} +2 -2
- package/dist/{skill-refinement-DVSYXBBP.js → skill-refinement-ACXLAK2G.js} +4 -4
- package/dist/{stack-update-ATCJFOEK.js → stack-update-YVFP65NY.js} +4 -4
- package/dist/{steward-gate-3GQ5XKMJ.js → steward-gate-2M66UU6A.js} +4 -4
- package/dist/{support-inbox-4L62P4EP.js → support-inbox-5W2GMJGV.js} +4 -4
- package/dist/sweep-budget-LQYBMDTK.js +15 -0
- package/dist/{task-enforcement-IPIZX2MM.js → task-enforcement-C7MMJTKX.js} +20 -19
- package/dist/{task-scope-FOIW25HR.js → task-scope-DK666AKV.js} +19 -18
- package/dist/{tasks-crud-HBDKE6C5.js → tasks-crud-DFPIAAEC.js} +21 -18
- package/dist/{tasks-notify-G2U2U2YA.js → tasks-notify-4R5YIPZN.js} +20 -19
- package/dist/{tasks-review-27SFX5XN.js → tasks-review-GOYSZEZA.js} +19 -18
- package/dist/{telemetry-upload-ZOXHRWR5.js → telemetry-upload-Y5F6WYLD.js} +8 -8
- package/dist/{token-budget-5Y4YPDO3.js → token-budget-BAM5QDFV.js} +4 -4
- package/dist/{tool-capability-index-VYF5GNJ2.js → tool-capability-index-QOFFCWDS.js} +1 -1
- package/dist/{tool-telemetry-KBXSBDTK.js → tool-telemetry-4MF2HIWR.js} +1 -1
- package/dist/tui/App.js +33 -32
- package/dist/{tui-data-NLFMBIQI.js → tui-data-WMYZNTBR.js} +19 -18
- package/dist/{update-support-UVUSZG7R.js → update-support-44SGQUA4.js} +12 -12
- package/dist/{worker-gate-3KUBAU32.js → worker-gate-7OK7ZRJL.js} +2 -2
- package/dist/{workflow-engine-YITHXZR5.js → workflow-engine-EDZGGHAI.js} +2 -2
- package/dist/{worktree-LL62PLQB.js → worktree-VDCY44ZP.js} +5 -5
- package/dist/{worktree-sweep-WTK3MTKH.js → worktree-sweep-VSL7TRQK.js} +6 -6
- package/package.json +3 -2
- package/release-notes.json +12 -12
- package/dist/chunk-GIBYNT6W.js +0 -23
- /package/dist/{chunk-NBZL5CGA.js → chunk-735SUAT4.js} +0 -0
- /package/dist/{chunk-MGGOSFCR.js → chunk-CIG7FSD5.js} +0 -0
- /package/dist/{chunk-JRM4TAGS.js → chunk-DFCSGPNZ.js} +0 -0
- /package/dist/{chunk-QIFYLIUF.js → chunk-EBTWNNAS.js} +0 -0
- /package/dist/{chunk-KP3U5QGJ.js → chunk-L5GFREAH.js} +0 -0
- /package/dist/{chunk-PWUFMX75.js → chunk-UU4FHMON.js} +0 -0
- /package/dist/{core-memory-GAC6EWOQ.js → core-memory-VOBMIFRX.js} +0 -0
- /package/dist/{entity-boost-NT6UO2Z3.js → entity-boost-N4NAK4WA.js} +0 -0
- /package/dist/{message-queue-client-4EOQRUXW.js → message-queue-client-WMIO5FL5.js} +0 -0
- /package/dist/{oauth-server-67YBDP32.js → oauth-server-HPQCBLZQ.js} +0 -0
- /package/dist/{webhook-pipe-LEXMUQ5B.js → webhook-pipe-HH7XXXYC.js} +0 -0
- /package/dist/{wiki-acl-74BLWG6J.js → wiki-acl-NEM3L4LK.js} +0 -0
- /package/dist/{wiki-client-EAN7F5LV.js → wiki-client-WREIYJLY.js} +0 -0
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
mcpHttpPort
|
|
3
|
-
} from "./chunk-GG5NDQNN.js";
|
|
4
1
|
import {
|
|
5
2
|
checkCpuStealSync
|
|
6
3
|
} from "./chunk-SSC7EKY2.js";
|
|
7
4
|
import {
|
|
8
5
|
inventoryLocalSecretResidue
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SJN5ZEDI.js";
|
|
10
7
|
import {
|
|
11
8
|
CC_NATIVE_ONLY_CUTOFF,
|
|
12
9
|
compareSemver,
|
|
@@ -15,10 +12,13 @@ import {
|
|
|
15
12
|
import {
|
|
16
13
|
readMcpHttpEvents,
|
|
17
14
|
summarizeMcpTransport
|
|
18
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-ZUBUP66T.js";
|
|
16
|
+
import {
|
|
17
|
+
mcpHttpPort
|
|
18
|
+
} from "./chunk-YYCKKORY.js";
|
|
19
19
|
import {
|
|
20
20
|
EXE_AI_DIR
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-OL4JFQ2T.js";
|
|
22
22
|
|
|
23
23
|
// src/bin/exe-healthcheck.ts
|
|
24
24
|
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
enqueueMemory
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VIIHBYIP.js";
|
|
4
4
|
import {
|
|
5
5
|
isClientConnected,
|
|
6
6
|
sendDaemonRequest
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-R3QDXB55.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/memory-queue-client.ts
|
|
10
10
|
async function writeMemoryViaDaemon(entry) {
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isCrdtSyncEnabled
|
|
3
|
+
} from "./chunk-735SUAT4.js";
|
|
1
4
|
import {
|
|
2
5
|
activeRecipientPubKeys,
|
|
3
6
|
isGrantsMacPrimed,
|
|
4
7
|
primeGrantsMacKey,
|
|
5
8
|
warnActiveMonitoringOnce
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-IRUWKANS.js";
|
|
7
10
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
11
|
+
retryOnDaemonTransportError
|
|
12
|
+
} from "./chunk-CBD64QQG.js";
|
|
10
13
|
import {
|
|
11
14
|
GHOST_BEHAVIOR_SQL,
|
|
12
15
|
isGhostBehaviorRow
|
|
13
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KRRZNASS.js";
|
|
14
17
|
import {
|
|
15
18
|
decryptSyncBlob,
|
|
16
19
|
encryptSyncBlob,
|
|
17
20
|
initSyncCrypto,
|
|
18
21
|
isSyncCryptoInitialized
|
|
19
22
|
} from "./chunk-S3THSOWV.js";
|
|
20
|
-
import {
|
|
21
|
-
retryOnDaemonTransportError
|
|
22
|
-
} from "./chunk-5TY4FPH6.js";
|
|
23
23
|
import {
|
|
24
24
|
getClient,
|
|
25
25
|
loadEmployees,
|
|
26
26
|
registerBinSymlinks,
|
|
27
27
|
saveEmployees
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-GD7FA6IP.js";
|
|
29
29
|
import {
|
|
30
30
|
loadDeviceId
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-4E3SZEEI.js";
|
|
32
32
|
import {
|
|
33
33
|
EXE_AI_DIR
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-OL4JFQ2T.js";
|
|
35
35
|
import {
|
|
36
36
|
atomicWriteJsonSync,
|
|
37
37
|
atomicWriteSync,
|
|
@@ -721,7 +721,7 @@ async function cloudSync(config, options) {
|
|
|
721
721
|
let pulled = 0;
|
|
722
722
|
if (pullResult.records.length > 0) {
|
|
723
723
|
if (shouldUseCrdtMergeForCloudSync()) {
|
|
724
|
-
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-
|
|
724
|
+
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-EMV5EZ4J.js");
|
|
725
725
|
initCrdtDoc();
|
|
726
726
|
importExistingMemories(
|
|
727
727
|
pullResult.records.map((rec) => ({
|
|
@@ -1117,7 +1117,7 @@ async function cloudSync(config, options) {
|
|
|
1117
1117
|
}
|
|
1118
1118
|
const totalMemories = await countRows("SELECT COUNT(*) as cnt FROM memories WHERE status = 'active' OR status IS NULL");
|
|
1119
1119
|
try {
|
|
1120
|
-
const { getLatestBackup } = await import("./db-backup
|
|
1120
|
+
const { getLatestBackup } = await import("./lib/db-backup.js");
|
|
1121
1121
|
const latestBackup = getLatestBackup();
|
|
1122
1122
|
if (latestBackup) {
|
|
1123
1123
|
const backupSize = statSync(latestBackup).size;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionScopeFilter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HDL7CXQ4.js";
|
|
4
4
|
import {
|
|
5
5
|
getClient,
|
|
6
6
|
getIdentity
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GD7FA6IP.js";
|
|
8
8
|
import {
|
|
9
9
|
getEmotionalBaseline
|
|
10
10
|
} from "./chunk-PNQDP3OA.js";
|
|
@@ -643,7 +643,7 @@ var DreamingEngine = class {
|
|
|
643
643
|
}
|
|
644
644
|
let overdueProspective = [];
|
|
645
645
|
try {
|
|
646
|
-
const { getOverdueProspective, completeProspective } = await import("./prospective-memory-
|
|
646
|
+
const { getOverdueProspective, completeProspective } = await import("./prospective-memory-Q7ZUCAS4.js");
|
|
647
647
|
const overdue = await getOverdueProspective(agentId);
|
|
648
648
|
overdueProspective = overdue.map((o) => ({
|
|
649
649
|
id: o.id,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fastDbInit
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UU4FHMON.js";
|
|
4
4
|
import {
|
|
5
5
|
sessionScopeFilter
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HDL7CXQ4.js";
|
|
7
7
|
import {
|
|
8
8
|
formatStatusAll,
|
|
9
9
|
formatStatusDeep,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
getClient,
|
|
15
15
|
isCoordinatorRole,
|
|
16
16
|
loadEmployees
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GD7FA6IP.js";
|
|
18
18
|
import {
|
|
19
19
|
isMainModule
|
|
20
20
|
} from "./chunk-6Y4B3QF6.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isExeSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HDL7CXQ4.js";
|
|
4
4
|
import {
|
|
5
5
|
recordOrchestrationEventBestEffort
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QTKDGDR5.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isCoordinatorName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GD7FA6IP.js";
|
|
11
11
|
import {
|
|
12
12
|
isDaemonAlive
|
|
13
13
|
} from "./chunk-7HLWBYH7.js";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLATFORM_PROCEDURE_TITLES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6L6SXVTP.js";
|
|
4
4
|
import {
|
|
5
5
|
isGhostBehaviorRow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KRRZNASS.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
getIdentity,
|
|
10
10
|
listIdentities,
|
|
11
11
|
updateIdentity
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GD7FA6IP.js";
|
|
13
13
|
import {
|
|
14
14
|
atomicWriteJsonSync
|
|
15
15
|
} from "./chunk-BYTDMAGB.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getDeviceInfo
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NG2ABIDX.js";
|
|
4
4
|
import {
|
|
5
5
|
EXE_AI_DIR
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OL4JFQ2T.js";
|
|
7
7
|
|
|
8
8
|
// src/lib/license.ts
|
|
9
9
|
import { chmodSync, readFileSync, writeFileSync, existsSync, mkdirSync, statSync, renameSync } from "fs";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// src/lib/mcp-stale-flag.ts
|
|
2
|
+
import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
function flagPath(agentId) {
|
|
6
|
+
const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
7
|
+
return path.join(os.homedir(), ".exe-os", "session-cache", `mcp-stale-${safeAgentId}.flag`);
|
|
8
|
+
}
|
|
9
|
+
function markMcpStale(agentId) {
|
|
10
|
+
try {
|
|
11
|
+
const file = flagPath(agentId);
|
|
12
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
13
|
+
writeFileSync(file, `${Date.now()}
|
|
14
|
+
`, "utf8");
|
|
15
|
+
} catch {
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function clearMcpStale(agentId) {
|
|
19
|
+
try {
|
|
20
|
+
const file = flagPath(agentId);
|
|
21
|
+
if (existsSync(file)) unlinkSync(file);
|
|
22
|
+
} catch {
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function isMcpStale(agentId) {
|
|
26
|
+
try {
|
|
27
|
+
return existsSync(flagPath(agentId));
|
|
28
|
+
} catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
markMcpStale,
|
|
35
|
+
clearMcpStale,
|
|
36
|
+
isMcpStale
|
|
37
|
+
};
|
|
@@ -72,6 +72,23 @@ function hashMemoryContent(text) {
|
|
|
72
72
|
function scopedDedupArgs(input) {
|
|
73
73
|
return [input.contentHash, input.agentId, input.projectName, input.memoryType];
|
|
74
74
|
}
|
|
75
|
+
function scopedDedupSql(excludeId = false) {
|
|
76
|
+
let sql = `SELECT id FROM memories
|
|
77
|
+
WHERE content_hash = ?
|
|
78
|
+
-- Bug d23040c2: force SQLite away from idx_memories_agent_ts.
|
|
79
|
+
-- The old agent_id predicate plus ORDER BY timestamp DESC made
|
|
80
|
+
-- non-duplicate writes walk every row for the agent
|
|
81
|
+
-- (idx_memories_agent_ts; 1477ms on 60K rows). Unary plus keeps
|
|
82
|
+
-- the predicate semantics identical while disqualifying the
|
|
83
|
+
-- agent indexes, so the planner uses idx_memories_content_hash
|
|
84
|
+
-- (content_hash, agent_id); measured 0.03ms.
|
|
85
|
+
AND +agent_id = ?
|
|
86
|
+
AND project_name = ?
|
|
87
|
+
AND COALESCE(memory_type, 'raw') = ?
|
|
88
|
+
AND COALESCE(status, 'active') != 'deleted'`;
|
|
89
|
+
if (excludeId) sql += " AND id != ?";
|
|
90
|
+
return `${sql} ORDER BY timestamp DESC LIMIT 1`;
|
|
91
|
+
}
|
|
75
92
|
function governMemoryRecord(record) {
|
|
76
93
|
const redacted = redactSecrets(record.raw_text);
|
|
77
94
|
const normalized = normalizeMemoryText(redacted.text);
|
|
@@ -115,17 +132,10 @@ async function findScopedDuplicate(input) {
|
|
|
115
132
|
const { getClient } = await import("./lib/database.js");
|
|
116
133
|
const client = getClient();
|
|
117
134
|
const args = scopedDedupArgs(input);
|
|
118
|
-
let sql = `SELECT id FROM memories
|
|
119
|
-
WHERE content_hash = ?
|
|
120
|
-
AND agent_id = ?
|
|
121
|
-
AND project_name = ?
|
|
122
|
-
AND COALESCE(memory_type, 'raw') = ?
|
|
123
|
-
AND COALESCE(status, 'active') != 'deleted'`;
|
|
124
135
|
if (input.excludeId) {
|
|
125
|
-
sql += " AND id != ?";
|
|
126
136
|
args.push(input.excludeId);
|
|
127
137
|
}
|
|
128
|
-
sql
|
|
138
|
+
const sql = scopedDedupSql(Boolean(input.excludeId));
|
|
129
139
|
const result = await client.execute({ sql, args });
|
|
130
140
|
return result.rows[0]?.id ? String(result.rows[0].id) : null;
|
|
131
141
|
}
|
|
@@ -206,5 +216,6 @@ function schedulePostWriteMemoryHygiene(memoryIds) {
|
|
|
206
216
|
export {
|
|
207
217
|
governMemoryRecord,
|
|
208
218
|
findScopedDuplicate,
|
|
219
|
+
runPostWriteMemoryHygiene,
|
|
209
220
|
schedulePostWriteMemoryHygiene
|
|
210
221
|
};
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-75H4R62K.js";
|
|
4
4
|
import {
|
|
5
5
|
initStore
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZYLKX3KB.js";
|
|
7
7
|
import {
|
|
8
8
|
getClient,
|
|
9
9
|
isInitialized
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GD7FA6IP.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/schedules.ts
|
|
13
13
|
import crypto from "crypto";
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// src/lib/daemon-ready.ts
|
|
2
|
+
async function defaultPing() {
|
|
3
|
+
const { pingDaemon } = await import("./lib/exe-daemon-client.js");
|
|
4
|
+
return pingDaemon();
|
|
5
|
+
}
|
|
6
|
+
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
async function defaultHealthProbe() {
|
|
8
|
+
try {
|
|
9
|
+
const { resolveMcpHttpPort } = await import("./mcp-port-config-PA3W3BJK.js");
|
|
10
|
+
const res = await fetch(`http://127.0.0.1:${resolveMcpHttpPort()}/health`, {
|
|
11
|
+
signal: AbortSignal.timeout(500)
|
|
12
|
+
});
|
|
13
|
+
if (res.status === 503) return "starting";
|
|
14
|
+
if (!res.ok) return "dead";
|
|
15
|
+
try {
|
|
16
|
+
const body = await res.json();
|
|
17
|
+
return body.status === "starting" ? "starting" : "ready";
|
|
18
|
+
} catch {
|
|
19
|
+
return "ready";
|
|
20
|
+
}
|
|
21
|
+
} catch {
|
|
22
|
+
return "dead";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function waitForDaemonReady(attempts = 3, delayMs = 600, ping = defaultPing, options = {}) {
|
|
26
|
+
const healthProbe = options.healthProbe ?? defaultHealthProbe;
|
|
27
|
+
const startingBudgetMs = options.startingBudgetMs ?? 7e3;
|
|
28
|
+
const startingPollMs = options.startingPollMs ?? 500;
|
|
29
|
+
let sawStarting = false;
|
|
30
|
+
for (let i = 0; i < attempts; i++) {
|
|
31
|
+
try {
|
|
32
|
+
const health = await ping();
|
|
33
|
+
if (health) return true;
|
|
34
|
+
} catch {
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
if (await healthProbe() === "starting") sawStarting = true;
|
|
38
|
+
} catch {
|
|
39
|
+
}
|
|
40
|
+
if (i < attempts - 1) {
|
|
41
|
+
await sleep(delayMs);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!sawStarting) return false;
|
|
45
|
+
const deadline = Date.now() + startingBudgetMs;
|
|
46
|
+
while (Date.now() < deadline) {
|
|
47
|
+
try {
|
|
48
|
+
const health = await ping();
|
|
49
|
+
if (health) return true;
|
|
50
|
+
} catch {
|
|
51
|
+
}
|
|
52
|
+
let healthState = "dead";
|
|
53
|
+
try {
|
|
54
|
+
healthState = await healthProbe();
|
|
55
|
+
} catch {
|
|
56
|
+
healthState = "dead";
|
|
57
|
+
}
|
|
58
|
+
if (healthState === "ready") {
|
|
59
|
+
try {
|
|
60
|
+
const health = await ping();
|
|
61
|
+
if (health) return true;
|
|
62
|
+
} catch {
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (healthState === "dead") return false;
|
|
67
|
+
const remaining = deadline - Date.now();
|
|
68
|
+
if (remaining <= 0) break;
|
|
69
|
+
await sleep(Math.min(startingPollMs, remaining));
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
waitForDaemonReady
|
|
76
|
+
};
|
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
connectEmbedDaemon,
|
|
3
3
|
disconnectClient,
|
|
4
4
|
embedViaClient
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-R3QDXB55.js";
|
|
6
6
|
import {
|
|
7
7
|
EMBEDDING_DIM
|
|
8
8
|
} from "./chunk-FXU7JOXK.js";
|
|
9
9
|
import {
|
|
10
10
|
MODELS_DIR,
|
|
11
11
|
loadConfigSync
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-OL4JFQ2T.js";
|
|
13
13
|
|
|
14
14
|
// src/lib/embedder.ts
|
|
15
15
|
var MAX_EMBED_CHARS = 24e3;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PLATFORM_PROCEDURES,
|
|
3
3
|
PLATFORM_PROCEDURE_TITLES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6L6SXVTP.js";
|
|
5
5
|
import {
|
|
6
6
|
getClient
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GD7FA6IP.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/global-procedures.ts
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
routeTask
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SA7GZU3U.js";
|
|
4
4
|
import {
|
|
5
5
|
createTaskCore,
|
|
6
6
|
employeeSessionName,
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
isEmployeeAlive,
|
|
10
10
|
sessionScopeFilter,
|
|
11
11
|
updateTaskStatus
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HDL7CXQ4.js";
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_COORDINATOR_TEMPLATE_NAME,
|
|
15
15
|
getCoordinatorName
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GD7FA6IP.js";
|
|
17
17
|
|
|
18
18
|
// src/runtime/orchestrator.ts
|
|
19
19
|
var STALE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
|
|
@@ -35,7 +35,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
35
35
|
title: "Platform reference \u2014 read on demand, not injected",
|
|
36
36
|
domain: "operations",
|
|
37
37
|
priority: "p1",
|
|
38
|
-
content: "Reference-heavy platform docs are NOT injected into every session (token budget). Read them on demand from ~/.exe-os/reference/platform-reference.md (auto-written at COO boot), which covers: the full MCP tool reference (all domains + key actions); how to update exe-os (channels, CLI vs stack, `exe-os update`); the first-install setup wizard + license activation; cognition features (dreaming, reflexes, baselines, hot-path summary); and platform capabilities (watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders). For LIVE MCP tool discovery use diagnostics(action='tool_search'); for update status use diagnostics(action='check_update'). When a task needs these details, read the file or recall \u2014 never guess update/setup steps."
|
|
38
|
+
content: "Reference-heavy platform docs are NOT injected into every session (token budget). Read them on demand from ~/.exe-os/reference/platform-reference.md (auto-written at COO boot), which covers: the full MCP tool reference (all domains + key actions); how to update exe-os (channels, CLI vs stack, `exe-os update`); the first-install setup wizard + license activation; cognition features (dreaming, reflexes, baselines, hot-path summary); and platform capabilities (watchdog, diagnostics, graph extraction, discovery hooks, cloud reminders). For LIVE MCP tool discovery use diagnostics(action='tool_search'); for update status use diagnostics(action='check_update'). Also in the reference file: production-readiness audit methodology; license plan refresh. When a task needs these details, read the file or recall \u2014 never guess update/setup steps."
|
|
39
39
|
},
|
|
40
40
|
// --- Project boundary ---
|
|
41
41
|
{
|
|
@@ -73,7 +73,19 @@ var PLATFORM_PROCEDURES = [
|
|
|
73
73
|
title: "Single dispatch path \u2014 create_task only",
|
|
74
74
|
domain: "workflow",
|
|
75
75
|
priority: "p0",
|
|
76
|
-
content: "create_task is the ONLY way to dispatch work to another agent. No direct ensureEmployee calls, no manual tmux spawns, no send_message for actionable work. create_task -> system auto-spawns -> session correctly named. ONE PATH. No backdoors. No exceptions."
|
|
76
|
+
content: "create_task is the ONLY way to dispatch work to another agent. No direct ensureEmployee calls, no manual tmux spawns, no send_message for actionable work. create_task -> system auto-spawns -> session correctly named. ONE PATH. No backdoors. No exceptions. Native subagents within your OWN task scope are execution, not dispatch \u2014 they are allowed and encouraged (see Dispatch Ladder); create_task remains the ONLY way to hand work to ANOTHER agent."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
title: "Dispatch Ladder \u2014 subagents for parallelism, tmux employees for org boundaries",
|
|
80
|
+
domain: "workflow",
|
|
81
|
+
priority: "p0",
|
|
82
|
+
content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for parallelism WITHIN your own task scope: bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE update_task(done) \u2014 subagent output must never die in a context window. (3) create_task -> tmux employee \u2014 ONLY when crossing an organizational boundary: different role/expertise, different runtime/model, needs its own review gate, work outliving your session, cross-project, or founder visibility. tmux is the org chart, not the thread pool."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
title: "Subagent guardrails \u2014 fence scope, isolate Codex, never stash",
|
|
86
|
+
domain: "workflow",
|
|
87
|
+
priority: "p0",
|
|
88
|
+
content: "When delegating to subagents: (1) FENCE SCOPE \u2014 a subagent with MCP access must be explicitly forbidden from touching other agents' tasks, reviews, or folders; give it only its own brief. (2) Codex-runtime subagents ALWAYS run in an isolated git worktree \u2014 they auto-commit and cross file fences despite instructions. (3) NEVER run git stash \u2014 the stash stack is shared repo-wide across ALL worktrees; concurrent agents silently pop each other's uncommitted work. Use git diff > patch, a scratch commit, or a separate worktree instead. Brief every subagent you dispatch with these rules."
|
|
77
89
|
},
|
|
78
90
|
// --- Session isolation (consolidated from 3 procedures) ---
|
|
79
91
|
{
|
|
@@ -163,6 +175,12 @@ var PLATFORM_PROCEDURES = [
|
|
|
163
175
|
priority: "p0",
|
|
164
176
|
content: `Every manager (COO/CTO/CMO) who dispatches work to a worker MUST actively monitor them. Check tmux capture-pane every 10 minutes. Verify they're working, not stuck. If idle at prompt with in_progress task -> send intercom. If stuck -> unblock or escalate. "Standing by" without checking is negligence.`
|
|
165
177
|
},
|
|
178
|
+
{
|
|
179
|
+
title: "Coordinator verification \u2014 verify signals, triangulate absence",
|
|
180
|
+
domain: "workflow",
|
|
181
|
+
priority: "p0",
|
|
182
|
+
content: "Never act on a self-reported lifecycle signal without independent verification. Employee claims 'context-full' -> check tmux capture-pane first; the context bar reads left-to-right (% shown = USED, not remaining) \u2014 never kill a session under 80% used. 'Task done' -> read the deliverable and run the verification yourself. Before reporting absence ('no tasks', 'no work was done', 'agent is idle'), triangulate at least three sources: task DB across ALL statuses with project_name='all', output artifacts in exe/output/, and team memory. A null result from one query is the limit of your filter, not a fact about reality. If verification contradicts a detailed claim, double-check your verification before accusing the agent."
|
|
183
|
+
},
|
|
166
184
|
{
|
|
167
185
|
title: "COO boot health check \u2014 memory, cloud sync, daemon on every launch",
|
|
168
186
|
domain: "workflow",
|
|
@@ -280,20 +298,6 @@ var PLATFORM_PROCEDURES = [
|
|
|
280
298
|
domain: "engineering",
|
|
281
299
|
priority: "p0",
|
|
282
300
|
content: "Three rules for ALL coding work. 1. LAZY LADDER (before writing code): Stop at the first rung that works \u2014 (a) Does this need to exist? (YAGNI) (b) Already in the codebase? (search with code_context/grep) (c) stdlib or language built-in? (d) Native platform feature? (Node APIs, OS builtins) (e) Already handled by an installed dependency? (f) One-liner? (inline it, no new function/file) (g) Only then: write minimum-viable code. No scaffolding, no future-proofing. For new dependencies: justify in PR. Every dep is permanent maintenance + supply-chain surface. Prefer stdlib > existing dep > new dep. 2. SURGICAL DIFF: Diff as small as the task allows. Do NOT reformat code you didn't change. Do NOT rename/refactor outside task scope. Do NOT add 'while I\\'m here' improvements \u2014 file a separate task. Every changed line must be justifiable by the task brief. 3. NAMED FAILURE MODES (shared review vocabulary): KITCHEN SINK \u2014 added more than the task asked for. WRONG ABSTRACTION \u2014 generic solution for a specific problem; wait for the third instance. OPTIMISTIC PATH \u2014 only handled the happy path, missing error handling/edge cases. RUNAWAY REFACTOR \u2014 started fixing one thing, ended up restructuring a module. PHANTOM DEPENDENCY \u2014 added a dep that stdlib or an existing dep already covers. NULL PATCH \u2014 change has no observable effect; diagnosis was likely wrong."
|
|
283
|
-
},
|
|
284
|
-
// --- Production-readiness auditing (rotating blind-spot rounds) ---
|
|
285
|
-
{
|
|
286
|
-
title: "Production-readiness auditing \u2014 rotating blind-spot rounds until convergence",
|
|
287
|
-
domain: "engineering",
|
|
288
|
-
priority: "p1",
|
|
289
|
-
content: "A single audit only finds what its angles look for. A 'green' codebase (passing tests) routinely hides real, user-facing, disqualifying defects that tests structurally cannot catch. NEVER treat one audit pass as production-readiness proof. Audit as successive ROUNDS, each attacking ENTIRELY DIFFERENT surfaces, until convergence. THREE PRINCIPLES: 1. Never repeat an angle \u2014 tell each round what prior rounds already covered, so it hunts NEW surface instead of re-confirming old findings. 2. Fan out, then adversarially synthesize \u2014 N parallel hunters per round (each blind to the others), then ONE synthesizer that discards re-discoveries and renders a convergence verdict. 3. Convergence is the stop signal, NOT a round count \u2014 stop only when a FRESH-angle round comes back mostly P3 polish. A drop in findings between rounds is NOT convergence; it is usually angle exhaustion within a similar surface (a false signal). Verify by widening the aperture; if new angles still surface P0/P1, keep going. ANGLE FAMILIES (rotate; never re-run the same family): (a) Trust / obvious failures \u2014 data-loss, edge-cases, dependency-risk, privacy, ux-traps, concurrency. (b) Self-audit + structural fragility \u2014 did our own fixes / just-merged PRs introduce regressions? what is structurally fragile (dedup, token refresh, error boundaries)? (c) Desktop-native + infra \u2014 updater lifecycle (a registered-but-never-invoked auto-updater is a classic invisible P0), single-instance, half-open sockets, multi-window, native robustness, build-config. (d) Data-flow + privacy + visual \u2014 trace the EXACT bytes leaving the device (telemetry payloads), cross-user bleed on shared machines, privacy-toggle actually working, i18n/timezone, theme/CSS layout, clipboard/file-drop, logout completeness, zero-data first-run. (e) Time + OS + compound failure \u2014 offline/airplane, multi-hour soak (resource accumulation), rapid double-submit races, OS integration (notifications/tray/deep-links), session-resumption gap reconciliation, keyboard/focus/IME conflicts (the hardest class \u2014 only fails over time or when several things break at once). HONEST HEADLINE: fast-built surface that was never adversarially stressed keeps yielding blockers round after round. If early rounds keep finding real P0/P1s and never converge to polish, the right call may be a dedicated stabilization pass \u2014 NOT just more audit rounds. Surface that judgment rather than declaring 'ready' on a hopeful dip."
|
|
290
|
-
},
|
|
291
|
-
// --- License plan & refreshing entitlement ---
|
|
292
|
-
{
|
|
293
|
-
title: "License plan & refreshing entitlement \u2014 pick up a plan change (e.g. more agents)",
|
|
294
|
-
domain: "licensing",
|
|
295
|
-
priority: "p1",
|
|
296
|
-
content: "Your plan (free / pro / team / agency / enterprise) governs your limits \u2014 including how many agents/employees you can run. Enterprise = unlimited. HOW VALIDATION WORKS: your instance validates your license key (or login) against the cloud (api.askexe.com), which reads the users store \u2014 the SINGLE SOURCE OF TRUTH \u2014 and returns your plan as a signed token, cached locally at ~/.exe-os/license-cache.json (works fast, and offline within a grace window). That cached token is what your limits run on day-to-day. IF YOUR PLAN WAS CHANGED (e.g. upgraded to enterprise for more agents): the change lands on the SERVER first; your instance keeps the OLD cached plan until it re-validates \u2014 so nothing changes for you until you refresh. To pick it up IMMEDIATELY, do one of: (1) run the `refresh_license` MCP action, or (2) run the `exe-os license refresh` CLI. Either forces a re-check against the cloud, caches the new plan, and lifts your agent limit on the spot (shows old plan -> new plan + new limits). AUTOMATIC: on your next boot, your instance auto-detects a plan change (cheap cloud check, gated to ~10-min cache freshness) and announces it \u2014 e.g. 'Plan changed: pro -> enterprise. Employee limit now unlimited.' No cache-file editing, ever. ASKEXE ADMINS ONLY: to change a CUSTOMER's plan, use the admin-gated set-customer-plan path (requires the AskExe admin token \u2014 customers can never change their own or anyone's plan). It writes the users store (source of truth); the hourly license sync then reflects it into billing, and the customer runs `refresh_license` to pick it up. (Self-serve refresh available in exe-os 0.9.322+.)"
|
|
297
301
|
}
|
|
298
302
|
];
|
|
299
303
|
var PLATFORM_REFERENCE_PROCEDURES = [
|
|
@@ -326,6 +330,18 @@ var PLATFORM_REFERENCE_PROCEDURES = [
|
|
|
326
330
|
domain: "operations",
|
|
327
331
|
priority: "p2",
|
|
328
332
|
content: "WATCHDOG: Out-of-process, pings daemon every 10s. After 3 failures (30s), force-restarts via SIGTERM->SIGKILL->launchd. MCP outages bounded to ~30-40s. Wait and retry before telling user to /mcp. DIAGNOSTICS: mcp_ping/cloud_status/memory_audit report embed daemon status, search mode, query router, vector backfill, graph coverage, event loop lag (degraded when >5s). DOC-GRAPH: ingest_document auto-extracts concepts/relationships to knowledge graph. Manual: graph(action='extract_from_document', document_id='...'). ATTACHMENTS: support(action='create_bug/create_feature') accepts attachments=[{filename, content}] (4KB truncated). REMINDERS: Auto-sync to cloud (Cloudflare KV). Created on Mac, visible on VPS. Dedup by text+due_date. DISCOVERY: Compact tool catalog injected at boot (~300 tokens). Per-prompt contextual hints (max 3, ~150 tokens). ROSTER: Team roster injected at boot (name+role). Don't recall for team info. Use config(action='capability_cards') for full agent manifests."
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
title: "Production-readiness auditing \u2014 rotating blind-spot rounds until convergence",
|
|
336
|
+
domain: "engineering",
|
|
337
|
+
priority: "p1",
|
|
338
|
+
content: "A single audit only finds what its angles look for. A 'green' codebase (passing tests) routinely hides real, user-facing, disqualifying defects that tests structurally cannot catch. NEVER treat one audit pass as production-readiness proof. Audit as successive ROUNDS, each attacking ENTIRELY DIFFERENT surfaces, until convergence. THREE PRINCIPLES: 1. Never repeat an angle \u2014 tell each round what prior rounds already covered, so it hunts NEW surface instead of re-confirming old findings. 2. Fan out, then adversarially synthesize \u2014 N parallel hunters per round (each blind to the others), then ONE synthesizer that discards re-discoveries and renders a convergence verdict. 3. Convergence is the stop signal, NOT a round count \u2014 stop only when a FRESH-angle round comes back mostly P3 polish. A drop in findings between rounds is NOT convergence; it is usually angle exhaustion within a similar surface (a false signal). Verify by widening the aperture; if new angles still surface P0/P1, keep going. ANGLE FAMILIES (rotate; never re-run the same family): (a) Trust / obvious failures \u2014 data-loss, edge-cases, dependency-risk, privacy, ux-traps, concurrency. (b) Self-audit + structural fragility \u2014 did our own fixes / just-merged PRs introduce regressions? what is structurally fragile (dedup, token refresh, error boundaries)? (c) Desktop-native + infra \u2014 updater lifecycle (a registered-but-never-invoked auto-updater is a classic invisible P0), single-instance, half-open sockets, multi-window, native robustness, build-config. (d) Data-flow + privacy + visual \u2014 trace the EXACT bytes leaving the device (telemetry payloads), cross-user bleed on shared machines, privacy-toggle actually working, i18n/timezone, theme/CSS layout, clipboard/file-drop, logout completeness, zero-data first-run. (e) Time + OS + compound failure \u2014 offline/airplane, multi-hour soak (resource accumulation), rapid double-submit races, OS integration (notifications/tray/deep-links), session-resumption gap reconciliation, keyboard/focus/IME conflicts (the hardest class \u2014 only fails over time or when several things break at once). HONEST HEADLINE: fast-built surface that was never adversarially stressed keeps yielding blockers round after round. If early rounds keep finding real P0/P1s and never converge to polish, the right call may be a dedicated stabilization pass \u2014 NOT just more audit rounds. Surface that judgment rather than declaring 'ready' on a hopeful dip."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
title: "License plan & refreshing entitlement \u2014 pick up a plan change (e.g. more agents)",
|
|
342
|
+
domain: "licensing",
|
|
343
|
+
priority: "p1",
|
|
344
|
+
content: "Your plan (free / pro / team / agency / enterprise) governs your limits \u2014 including how many agents/employees you can run. Enterprise = unlimited. HOW VALIDATION WORKS: your instance validates your license key (or login) against the cloud (api.askexe.com), which reads the users store \u2014 the SINGLE SOURCE OF TRUTH \u2014 and returns your plan as a signed token, cached locally at ~/.exe-os/license-cache.json (works fast, and offline within a grace window). That cached token is what your limits run on day-to-day. IF YOUR PLAN WAS CHANGED (e.g. upgraded to enterprise for more agents): the change lands on the SERVER first; your instance keeps the OLD cached plan until it re-validates \u2014 so nothing changes for you until you refresh. To pick it up IMMEDIATELY, do one of: (1) run the `refresh_license` MCP action, or (2) run the `exe-os license refresh` CLI. Either forces a re-check against the cloud, caches the new plan, and lifts your agent limit on the spot (shows old plan -> new plan + new limits). AUTOMATIC: on your next boot, your instance auto-detects a plan change (cheap cloud check, gated to ~10-min cache freshness) and announces it \u2014 e.g. 'Plan changed: pro -> enterprise. Employee limit now unlimited.' No cache-file editing, ever. ASKEXE ADMINS ONLY: to change a CUSTOMER's plan, use the admin-gated set-customer-plan path (requires the AskExe admin token \u2014 customers can never change their own or anyone's plan). It writes the users store (source of truth); the hourly license sync then reflects it into billing, and the customer runs `refresh_license` to pick it up. (Self-serve refresh available in exe-os 0.9.322+.)"
|
|
329
345
|
}
|
|
330
346
|
];
|
|
331
347
|
function getPlatformReferenceMarkdown() {
|