@askexenow/exe-os 0.9.311 → 0.9.313
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/compose/.env.askexe-control-plane.example +1 -1
- package/deploy/compose/.env.customer.example +11 -7
- package/deploy/compose/.env.default +4 -4
- package/deploy/compose/.env.example +7 -7
- package/deploy/compose/docker-compose.yml +43 -19
- package/deploy/compose/gateway.json +2 -2
- package/deploy/compose/init-db.sql +6 -20
- package/deploy/compose/setup.sh +74 -132
- package/deploy/compose/status.sh +5 -0
- package/deploy/stack-manifests/v0.9.json +25 -4
- package/dist/{active-agent-ORX47ZKW.js → active-agent-EWF2HJ3W.js} +6 -6
- package/dist/{active-agent-S5T2YMOR.js → active-agent-FFN5ARMC.js} +6 -6
- package/dist/{agentic-ontology-6KBAXLSJ.js → agentic-ontology-AAUATKUS.js} +1 -1
- package/dist/{backfill-metadata-FV7GX6AS.js → backfill-metadata-FBYFDOTH.js} +7 -7
- package/dist/{background-jobs-A2LV36UX.js → background-jobs-2QZ5IQKE.js} +5 -3
- package/dist/{behaviors-47CPEKJ7.js → behaviors-PQ77IPJR.js} +8 -8
- package/dist/bin/age-ontology-load.js +3 -3
- package/dist/bin/agentic-ontology-backfill.js +9 -9
- package/dist/bin/agentic-reflection-backfill.js +10 -10
- package/dist/bin/agentic-semantic-label.js +9 -9
- package/dist/bin/backfill-conversations.js +10 -10
- package/dist/bin/backfill-responses.js +10 -10
- package/dist/bin/backfill-vectors.js +13 -13
- package/dist/bin/bulk-sync-postgres.js +16 -16
- package/dist/bin/cc-doctor.js +9 -9
- package/dist/bin/cleanup-stale-review-tasks.js +15 -15
- package/dist/bin/cli.js +21 -21
- package/dist/bin/deferred-daemon-restart.js +1 -1
- package/dist/bin/exe-agent-config.js +6 -6
- package/dist/bin/exe-agent.js +14 -14
- package/dist/bin/exe-assign.js +12 -12
- package/dist/bin/exe-boot.js +78 -57
- package/dist/bin/exe-call.js +7 -7
- package/dist/bin/exe-cloud.js +17 -17
- package/dist/bin/exe-config-dump.js +7 -7
- package/dist/bin/exe-dispatch.js +15 -15
- package/dist/bin/exe-doctor.js +11 -2
- package/dist/bin/exe-export-behaviors.js +10 -10
- package/dist/bin/exe-forget.js +9 -9
- package/dist/bin/exe-gateway.js +10 -10
- package/dist/bin/exe-healthcheck.js +9 -9
- package/dist/bin/exe-heartbeat.js +15 -15
- package/dist/bin/exe-kill.js +18 -18
- package/dist/bin/exe-launch-agent.js +30 -28
- package/dist/bin/exe-new-employee.js +36 -15
- package/dist/bin/exe-pending-messages.js +16 -16
- package/dist/bin/exe-pending-notifications.js +15 -15
- package/dist/bin/exe-pending-reviews.js +15 -15
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +19 -29
- package/dist/bin/exe-review.js +17 -17
- package/dist/bin/exe-search.js +8 -8
- package/dist/bin/exe-session-cleanup.js +41 -20
- package/dist/bin/exe-settings.js +18 -18
- package/dist/bin/exe-start-codex.js +15 -15
- package/dist/bin/exe-start-opencode.js +11 -11
- package/dist/bin/exe-status.js +16 -16
- package/dist/bin/exe-support.js +5 -5
- package/dist/bin/exe-team.js +6 -6
- package/dist/bin/exe-watchdog.js +33 -4
- package/dist/bin/git-sweep.js +16 -16
- package/dist/bin/graph-backfill.js +8 -8
- package/dist/bin/graph-export.js +8 -8
- package/dist/bin/import-history.js +10 -10
- package/dist/bin/install-launchd.js +2 -2
- package/dist/bin/install.js +15 -15
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -7
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/pre-build-guard.js +12 -1
- package/dist/bin/scan-tasks.js +15 -15
- package/dist/bin/setup.js +3 -3
- package/dist/bin/shard-migrate.js +8 -8
- package/dist/bin/stack-update.js +8 -8
- package/dist/bin/verify-stack.js +3 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{branding-SC4BOPUY.js → branding-EDUC7TUP.js} +2 -2
- package/dist/{browser-session-store-DV5TDXXD.js → browser-session-store-CXQMOSEC.js} +1 -1
- package/dist/{capability-cards-WQVY7WSS.js → capability-cards-2U3XWCDP.js} +5 -5
- package/dist/{capacity-monitor-BUKYPSWR.js → capacity-monitor-ZRLW7TVL.js} +16 -16
- package/dist/{catchup-brief-X5IVQAOH.js → catchup-brief-FSBZVYPL.js} +18 -18
- package/dist/{chunk-PMEOSD6S.js → chunk-24BUDF3J.js} +9 -6
- package/dist/{chunk-2NVEKSSP.js → chunk-2FULKRDO.js} +56 -38
- package/dist/{chunk-QB5JOGPK.js → chunk-2PI6JBJL.js} +5 -4
- package/dist/{chunk-MTIJ2NXY.js → chunk-2PWRUIKZ.js} +1 -1
- package/dist/{chunk-NIZQ3CIS.js → chunk-3AMGSCRH.js} +1 -1
- package/dist/{chunk-7ODTYODO.js → chunk-3LGID56M.js} +10 -7
- package/dist/{chunk-GSY6HL3T.js → chunk-4JI54RHR.js} +5 -5
- package/dist/{chunk-ISILDO7P.js → chunk-4THK7IA4.js} +1 -1
- package/dist/{chunk-IRIPGGGL.js → chunk-4UHQYBMQ.js} +1 -1
- package/dist/{chunk-HQODUV3G.js → chunk-552IGUBB.js} +2 -2
- package/dist/{chunk-IRHNV4GY.js → chunk-5KLQCGI5.js} +72 -18
- package/dist/{chunk-SOT23KWW.js → chunk-63UEWYM3.js} +4 -4
- package/dist/{chunk-QE7UVQDP.js → chunk-6PR2RAKM.js} +1 -1
- package/dist/{chunk-ZZXADKAP.js → chunk-6SPUK67A.js} +2 -2
- package/dist/{chunk-RVXWGPD3.js → chunk-75TM3APG.js} +29 -6
- package/dist/{chunk-IZPO6IOZ.js → chunk-7QSXARI3.js} +1 -1
- package/dist/{chunk-A2YZG4AD.js → chunk-AIUXE3ZJ.js} +6 -6
- package/dist/{chunk-U63BZI2B.js → chunk-AJERMFD6.js} +3 -3
- package/dist/{chunk-BUOMSIXH.js → chunk-BMNX3YWX.js} +2 -2
- package/dist/{chunk-YUBTHJVV.js → chunk-BRSMAFBN.js} +1 -1
- package/dist/{chunk-JZW5AOWI.js → chunk-BSPALHIR.js} +2 -2
- package/dist/{chunk-VDYUKTNS.js → chunk-CLAYNAXC.js} +4 -5
- package/dist/{chunk-J3QZPDNH.js → chunk-CNQ25C4C.js} +1 -1
- package/dist/{chunk-GWPICNSO.js → chunk-CSTL7BMK.js} +49 -4
- package/dist/{chunk-5DPE7B7K.js → chunk-CTYHSVHP.js} +1 -1
- package/dist/{chunk-EM4EYF3P.js → chunk-CVTWQZOR.js} +13 -5
- package/dist/{chunk-JNARUXDC.js → chunk-CW3FPWUW.js} +2 -2
- package/dist/{chunk-V42BSVX6.js → chunk-CWACO2D4.js} +51 -4
- package/dist/{chunk-RPBTYQKJ.js → chunk-CWUCD7C7.js} +1 -1
- package/dist/{chunk-DFUCFLZH.js → chunk-D4EMVYI7.js} +2 -2
- package/dist/{chunk-W2J2RF5N.js → chunk-DIHMGQGV.js} +3 -3
- package/dist/{chunk-YB7U4WTY.js → chunk-DJ4RG3RK.js} +2 -2
- package/dist/{chunk-KSMITUGY.js → chunk-DR7QPGX4.js} +3 -3
- package/dist/{chunk-QNXM2HXW.js → chunk-ELFFRVNL.js} +1 -1
- package/dist/{chunk-QEGXNJGR.js → chunk-EV2SMRLF.js} +4 -4
- package/dist/{chunk-VFSYVQX4.js → chunk-F3QMXKKJ.js} +8 -2
- package/dist/{chunk-NCC3F6GM.js → chunk-F5XPKUPK.js} +2 -2
- package/dist/{chunk-43R2GILO.js → chunk-FIBL4JRZ.js} +2 -2
- package/dist/{chunk-B2J3BBJC.js → chunk-FQH4R6UG.js} +2 -2
- package/dist/{chunk-AC6DKMVS.js → chunk-FSAKWKWU.js} +1 -1
- package/dist/{chunk-GL5NU6IK.js → chunk-FXS5OFGH.js} +1 -1
- package/dist/{chunk-K7KBAJQL.js → chunk-GHJRLETI.js} +10 -10
- package/dist/{chunk-VQRTO7IS.js → chunk-H73TUI4Y.js} +9 -2
- package/dist/{chunk-IIHE3FNC.js → chunk-HSXWUZOD.js} +3 -3
- package/dist/{chunk-JV225JBX.js → chunk-I6RHLHVW.js} +2 -2
- package/dist/{chunk-S6HVQF27.js → chunk-IEDCQRGG.js} +88 -4
- package/dist/{chunk-4Q5VNQTV.js → chunk-IFSOVXGN.js} +3 -3
- package/dist/{chunk-JDYO76PI.js → chunk-ITVMRPCQ.js} +17 -9
- package/dist/{chunk-VT6P7FV4.js → chunk-IU44MPY3.js} +1 -1
- package/dist/{chunk-6OD2RVIA.js → chunk-IXTDBQYU.js} +273 -397
- package/dist/{chunk-2NGPZCWX.js → chunk-JB7QUK3D.js} +3 -3
- package/dist/{chunk-VT2B5BHM.js → chunk-JBSCL2XT.js} +2 -1
- package/dist/{chunk-MPX3TRMQ.js → chunk-JD5S5AAV.js} +1 -1
- package/dist/{chunk-XYG722JW.js → chunk-JIJKUZIO.js} +3 -3
- package/dist/{chunk-DKHBMIVE.js → chunk-K5C6LC2G.js} +244 -45
- package/dist/{chunk-DAOHCXM2.js → chunk-KH6BCYLC.js} +1 -1
- package/dist/{chunk-4L4R6AQJ.js → chunk-KMI4TUTW.js} +1 -1
- package/dist/{chunk-PHFPIUWU.js → chunk-KWOAM7TA.js} +3 -0
- package/dist/{chunk-RZJ6DXVE.js → chunk-L6QI2NNG.js} +1 -1
- package/dist/{chunk-HED6D5KR.js → chunk-MMNMQNLD.js} +43 -29
- package/dist/{chunk-KAVUTP5G.js → chunk-N3CRJ2VW.js} +3 -3
- package/dist/{chunk-OBJXZII2.js → chunk-N7LBAQGK.js} +3 -3
- package/dist/{chunk-LMX7UKGX.js → chunk-OUAGTQC4.js} +17 -11
- package/dist/{chunk-WZBUKC5N.js → chunk-OUJI2ZTY.js} +2 -2
- package/dist/{chunk-YUGLOZOR.js → chunk-OXTZEKVA.js} +1 -1
- package/dist/{chunk-OR3TAZL3.js → chunk-P4ULFI2N.js} +1 -1
- package/dist/{chunk-6LNSZADA.js → chunk-PVC4RNHQ.js} +50 -11
- package/dist/{chunk-FM7XZDZI.js → chunk-R2WP3XIN.js} +1 -1
- package/dist/{chunk-IBDPPBFK.js → chunk-R5IPZ5ZC.js} +1 -1
- package/dist/{chunk-7WDIGRSO.js → chunk-R5TZ2FC3.js} +1 -1
- package/dist/{chunk-2UVN2NBN.js → chunk-RICNNGYH.js} +3 -3
- package/dist/{chunk-WBJXJ2R4.js → chunk-RLBVY5FE.js} +17 -14
- package/dist/{chunk-XXJRZ75E.js → chunk-RV634O2W.js} +5 -2
- package/dist/{chunk-3KH6GXXX.js → chunk-RYPFOZQH.js} +2 -2
- package/dist/{chunk-DNFU56ZS.js → chunk-SB7W6XI4.js} +1 -1
- package/dist/{chunk-PPXQE7AS.js → chunk-SE6MLUOK.js} +33 -34
- package/dist/{chunk-65DBIEM2.js → chunk-SHIICYJW.js} +7 -1
- package/dist/{chunk-KPVVTHPK.js → chunk-SRMNWAHN.js} +15 -10
- package/dist/chunk-T2DJR7ND.js +367 -0
- package/dist/{chunk-Z6H6Y4BS.js → chunk-TA22MGGN.js} +1 -1
- package/dist/{chunk-ZOVHXTGC.js → chunk-TN7SC2ZQ.js} +1 -1
- package/dist/{chunk-XV5HRIXG.js → chunk-TRPGNCVB.js} +8 -8
- package/dist/{chunk-4BANMHJ5.js → chunk-UDZP2SHJ.js} +3 -3
- package/dist/{chunk-GMZMBLHT.js → chunk-UM6WUSQ7.js} +2 -2
- package/dist/{chunk-2EJ636HI.js → chunk-UST3MKK7.js} +1 -1
- package/dist/{chunk-RQ7OVXUZ.js → chunk-V2CZVZUO.js} +2 -2
- package/dist/{chunk-4RJJ5FJ2.js → chunk-V4UKBUUA.js} +1 -1
- package/dist/{chunk-EOS7VPVT.js → chunk-VA2MDALR.js} +8 -8
- package/dist/{chunk-SCYWCWKY.js → chunk-VG4ZH2Z3.js} +24 -10
- package/dist/{chunk-255DIG4B.js → chunk-VHLI6CTD.js} +1 -1
- package/dist/{chunk-DFIOOK5R.js → chunk-WCES22KG.js} +4 -3
- package/dist/{chunk-5A6KTWQL.js → chunk-WOTKNUKK.js} +126 -2
- package/dist/{chunk-62UZWGFX.js → chunk-WZZBGGSD.js} +63 -2
- package/dist/{chunk-ELXR65AN.js → chunk-X2FHTDIU.js} +6 -3
- package/dist/{chunk-V4BW5HFQ.js → chunk-X5I5QRC2.js} +3 -3
- package/dist/{chunk-X4AFBL4N.js → chunk-XCORXJ3M.js} +1 -1
- package/dist/{chunk-66JPZELX.js → chunk-Y5CNGG4F.js} +24 -16
- package/dist/{chunk-SPOXL7HF.js → chunk-YEWNIBNA.js} +9 -9
- package/dist/{chunk-WJ2PZGRV.js → chunk-ZAA344BL.js} +29 -2
- package/dist/{chunk-TN2YCFQE.js → chunk-ZGLJ2VD7.js} +5 -5
- package/dist/{co-activation-WN25AJOC.js → co-activation-RH46OQ3N.js} +5 -5
- package/dist/{co-occurrence-YP2Q3OEA.js → co-occurrence-MJWERUWY.js} +5 -5
- package/dist/{code-context-index-ZWONKBKX.js → code-context-index-WFUBYGQT.js} +6 -6
- package/dist/{content-extractor-EYRVGD6O.js → content-extractor-RHITF2KM.js} +1 -1
- package/dist/{conversation-wiki-populator-XFUC7S5P.js → conversation-wiki-populator-SK233TL4.js} +1 -1
- package/dist/{crdt-sync-ZFIFL2QM.js → crdt-sync-4R7SXTNB.js} +1 -1
- package/dist/{crm-webhook-DGPHULOO.js → crm-webhook-YDXX5FDK.js} +2 -2
- package/dist/{cto-delegation-gate-OF2A3TSS.js → cto-delegation-gate-ZJHLPK4Y.js} +14 -14
- package/dist/{daemon-auth-N6P2MZAV.js → daemon-auth-5FCYVQIZ.js} +3 -3
- package/dist/{daemon-orchestration-G4RRTPP7.js → daemon-orchestration-NBU5RZ2O.js} +18 -18
- package/dist/{daemon-ready-signal-3L2MJT7C.js → daemon-ready-signal-KXLL6ZFL.js} +1 -1
- package/dist/{db-backup-EORG4LBO.js → db-backup-BTL2FBBL.js} +9 -3
- package/dist/{db-restore-events-3R7G4FP4.js → db-restore-events-3A57GMLW.js} +2 -2
- package/dist/{doc-graph-extractor-APZS3DFD.js → doc-graph-extractor-ADYRG7DB.js} +5 -5
- package/dist/documents-VWPZTDFA.js +56 -0
- package/dist/{dreaming-Q4E3WBGY.js → dreaming-76WKGTL6.js} +15 -15
- package/dist/embeddings-config-FANLORDH.js +21 -0
- package/dist/{exe-drift-CI5R6GUT.js → exe-drift-T3IO2SPX.js} +6 -6
- package/dist/{exe-export-HQIQASIT.js → exe-export-6YEHSJMP.js} +9 -9
- package/dist/{exe-import-ULZK56WC.js → exe-import-3NERK63O.js} +9 -9
- package/dist/{exe-key-ILNSBGRN.js → exe-key-RCMBMLSQ.js} +8 -8
- package/dist/{exe-org-WQWQZRLR.js → exe-org-KCOOLUTW.js} +3 -3
- package/dist/{exe-snapshot-RUZTWZOF.js → exe-snapshot-JIY7MNRI.js} +18 -18
- package/dist/{fast-db-init-KNJRL7T3.js → fast-db-init-PVJ72264.js} +1 -1
- package/dist/{founder-context-QCTMEK66.js → founder-context-A4VUEKDH.js} +4 -4
- package/dist/gateway/index.js +17 -17
- package/dist/{git-staleness-KIA5YI4H.js → git-staleness-IOAHAGBI.js} +5 -5
- package/dist/{git-task-sweep-WH6QE7HL.js → git-task-sweep-IGM5RILF.js} +17 -15
- package/dist/{global-procedures-SYZZCGDS.js → global-procedures-VZL2X4RK.js} +6 -6
- package/dist/{graph-auto-extract-J2TIWZEE.js → graph-auto-extract-TIXRGBC5.js} +5 -5
- package/dist/{hook-integrity-I6PWJQER.js → hook-integrity-XNPNCMAS.js} +1 -1
- package/dist/hooks/bug-report-worker.js +47 -17
- package/dist/hooks/codex-stop-task-finalizer.js +47 -17
- package/dist/hooks/commit-complete.js +18 -18
- package/dist/hooks/error-recall.js +11 -11
- package/dist/hooks/exe-heartbeat-hook.js +7 -7
- package/dist/hooks/ingest-worker.js +39 -9
- package/dist/hooks/ingest.js +17 -17
- package/dist/hooks/instructions-loaded.js +8 -8
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +8 -8
- package/dist/hooks/post-compact.js +17 -17
- package/dist/hooks/post-tool-combined.js +60 -7
- package/dist/hooks/pre-compact.js +23 -23
- package/dist/hooks/pre-tool-use.js +64 -34
- package/dist/hooks/prompt-submit.js +40 -32
- package/dist/hooks/session-end.js +29 -29
- package/dist/hooks/session-start.js +17 -17
- package/dist/hooks/stop.js +24 -24
- package/dist/hooks/subagent-stop.js +17 -17
- package/dist/hooks/summary-worker.js +55 -25
- package/dist/index.js +27 -27
- package/dist/{installer-PSDYMGN7.js → installer-D7D5O4KL.js} +10 -10
- package/dist/{installer-3NB3IBHF.js → installer-EQP2EMNZ.js} +10 -10
- package/dist/{installer-IIJFCTMH.js → installer-IWRYH55Z.js} +10 -10
- package/dist/{key-backup-status-FNSN3NXH.js → key-backup-status-ZNGDSPLT.js} +2 -2
- package/dist/lib/agent-config.js +3 -3
- package/dist/lib/cloud-sync.js +16 -16
- package/dist/lib/config.js +2 -2
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/database.js +7 -5
- package/dist/lib/db-daemon-client.js +6 -6
- package/dist/lib/db.js +7 -5
- package/dist/lib/device-registry.js +3 -3
- package/dist/lib/embed-worker.js +2 -2
- package/dist/lib/embedder.js +6 -6
- package/dist/lib/employee-templates.js +7 -7
- package/dist/lib/employees.js +5 -5
- package/dist/lib/exe-daemon-client.js +5 -5
- package/dist/lib/exe-daemon.js +449 -89
- package/dist/lib/hybrid-search.js +8 -8
- package/dist/lib/identity.js +5 -5
- package/dist/lib/license.js +4 -4
- package/dist/lib/messaging.js +15 -15
- package/dist/lib/post-tool-memory.js +2 -2
- package/dist/lib/reminders.js +6 -6
- package/dist/lib/schedules.js +8 -8
- package/dist/lib/session-registry.js +9 -7
- package/dist/lib/session-wrappers.js +1 -1
- package/dist/lib/skill-learning.js +9 -9
- package/dist/lib/store.js +7 -7
- package/dist/lib/task-router.js +6 -6
- package/dist/lib/tasks.js +16 -16
- package/dist/lib/tmux-routing.js +14 -14
- package/dist/lib/token-spend.js +6 -6
- package/dist/{license-gate-7SDHCJUO.js → license-gate-PZOP7S2S.js} +5 -5
- package/dist/mcp/register-tools.js +73 -72
- package/dist/mcp/server.js +74 -73
- package/dist/mcp/tools/complete-reminder.js +7 -7
- package/dist/mcp/tools/create-reminder.js +7 -7
- package/dist/mcp/tools/create-task.js +18 -18
- package/dist/mcp/tools/deactivate-behavior.js +10 -10
- package/dist/mcp/tools/list-reminders.js +7 -7
- package/dist/mcp/tools/list-tasks.js +18 -18
- package/dist/mcp/tools/send-message.js +17 -17
- package/dist/mcp/tools/update-task.js +17 -17
- package/dist/{mcp-http-config-QSOVFXHW.js → mcp-http-config-23DHJAU4.js} +7 -7
- package/dist/{mcp-port-config-AWWRZA22.js → mcp-port-config-FFAMMLLE.js} +2 -1
- package/dist/{memory-cards-II67WFL2.js → memory-cards-CNLMHSZC.js} +5 -5
- package/dist/{memory-graph-extractor-PM4Q2KJG.js → memory-graph-extractor-HIXP2BQS.js} +6 -6
- package/dist/{memory-poisoning-defense-ECXSX7HK.js → memory-poisoning-defense-YL53IBBF.js} +5 -5
- package/dist/{memory-queue-VAE6WMSS.js → memory-queue-3Q5P43AM.js} +3 -3
- package/dist/memory-queue-client-YP2QKX6J.js +16 -0
- package/dist/{memory-reflection-PXF6YFDU.js → memory-reflection-VHQRUZWK.js} +5 -5
- package/dist/{notifications-UP7WQGG4.js → notifications-Q5NEAP6K.js} +14 -14
- package/dist/{orchestration-events-PZLLPCKY.js → orchestration-events-7SNWRJYE.js} +6 -6
- package/dist/{orchestration-phase-SJOXDB7X.js → orchestration-phase-U45T4VG3.js} +3 -3
- package/dist/{orchestrator-PUT45J4O.js → orchestrator-XWLKNWUG.js} +16 -16
- package/dist/{pipeline-router-5CRWKESM.js → pipeline-router-5IBJBH7P.js} +6 -6
- package/dist/{plan-limits-SH2NDFNX.js → plan-limits-PBEZVHRQ.js} +8 -8
- package/dist/{preferences-YWBTKW3M.js → preferences-TYTGDXQZ.js} +2 -2
- package/dist/{project-boot-2TCPDZ4S.js → project-boot-OHEGJD2L.js} +2 -2
- package/dist/{projection-worker-HWY37MNC.js → projection-worker-HELRBNDR.js} +5 -5
- package/dist/{prospective-memory-FQSVMCGG.js → prospective-memory-N55XRGJP.js} +5 -5
- package/dist/{push-notifications-DK6XA5B3.js → push-notifications-PAFNP3EC.js} +3 -3
- package/dist/{reranker-AALRMGMM.js → reranker-MNJSTOPR.js} +3 -3
- package/dist/{retrieval-health-PNWJSJNG.js → retrieval-health-W4HNR3WX.js} +1 -1
- package/dist/{review-polling-65JZUE3T.js → review-polling-SRYZU2PI.js} +15 -15
- package/dist/runtime/index.js +22 -22
- package/dist/{session-events-EJ3OSAA6.js → session-events-L4DK5J6J.js} +15 -15
- package/dist/{session-kill-telemetry-3HGM7SNQ.js → session-kill-telemetry-U2YHKHCB.js} +15 -15
- package/dist/{session-scope-JGDYAMJO.js → session-scope-JTPHECAU.js} +14 -14
- package/dist/{setup-wizard-44LMFM2C.js → setup-wizard-IP5R66LR.js} +3 -3
- package/dist/{shard-manager-KUCJPLC6.js → shard-manager-RASGFMGS.js} +3 -3
- package/dist/{skill-refinement-DUOO6B7V.js → skill-refinement-VTYL4OMJ.js} +5 -5
- package/dist/{stack-release-XYMKU7NT.js → stack-release-TOCCJQOF.js} +244 -45
- package/dist/{stack-update-XHQJRJEP.js → stack-update-MRNVHUZZ.js} +15 -5
- package/dist/{steward-gate-6NWRDLX2.js → steward-gate-JEVUDTBI.js} +6 -6
- package/dist/{task-enforcement-UOULTGFB.js → task-enforcement-VFSAAZUN.js} +14 -14
- package/dist/{task-scope-P5STKYAC.js → task-scope-P4VLIQNP.js} +14 -14
- package/dist/{tasks-crud-24HMTULR.js → tasks-crud-SC3ERIUR.js} +14 -14
- package/dist/{tasks-notify-LAIU7UUI.js → tasks-notify-WJYBUCIB.js} +15 -15
- package/dist/{tasks-review-AFJAU2DY.js → tasks-review-XPVPHCGD.js} +14 -14
- package/dist/{telemetry-upload-DWFGC2XJ.js → telemetry-upload-4QEYQROW.js} +10 -10
- package/dist/{token-budget-4RFZKWGH.js → token-budget-UBOP3HVE.js} +6 -6
- package/dist/{tool-capability-index-ZEXBWKUZ.js → tool-capability-index-SHYCBE2Z.js} +1 -1
- package/dist/{tool-telemetry-BS5JXM5M.js → tool-telemetry-CDNPES5B.js} +1 -1
- package/dist/tui/App.js +27 -27
- package/dist/{tui-data-UNO5B7PU.js → tui-data-HVYY7GRK.js} +14 -14
- package/dist/{worker-gate-C6CTTYMD.js → worker-gate-KQTODSUQ.js} +3 -3
- package/dist/{workflow-engine-4W2KYCDV.js → workflow-engine-OP2DQISD.js} +2 -2
- package/dist/{working-memory-FXHQCJJE.js → working-memory-PY4AG577.js} +22 -2
- package/dist/{worktree-2CXY6NEB.js → worktree-Z2G4CP4Z.js} +7 -7
- package/dist/{worktree-sweep-K3CJFSUL.js → worktree-sweep-LWSCAZW6.js} +8 -8
- package/package.json +2 -2
- package/release-notes.json +40 -88
- package/stack.release.json +11 -11
- package/dist/memory-queue-client-HLURQEV6.js +0 -16
- /package/dist/{chunk-J3SR5MGG.js → chunk-GIS4GBZE.js} +0 -0
- /package/dist/{chunk-AE74NOE6.js → chunk-NAPBIDGH.js} +0 -0
- /package/dist/{chunk-I3DPCSDG.js → chunk-OJS2H5HR.js} +0 -0
- /package/dist/{chunk-K4BKJJ4F.js → chunk-PCRRDXGL.js} +0 -0
- /package/dist/{chunk-MQCTK6EF.js → chunk-RRYJTPVW.js} +0 -0
- /package/dist/{chunk-2NS3QRMJ.js → chunk-ZIVUMDHA.js} +0 -0
- /package/dist/{core-memory-OC5ITKKV.js → core-memory-4JWCAGJI.js} +0 -0
- /package/dist/{entity-boost-NF3LE6OJ.js → entity-boost-AU342QRK.js} +0 -0
- /package/dist/{message-queue-client-4VDU6BZY.js → message-queue-client-IXYLJJVJ.js} +0 -0
- /package/dist/{oauth-server-EWUL7DMD.js → oauth-server-F4QWESK2.js} +0 -0
- /package/dist/{webhook-pipe-DHIGZHPW.js → webhook-pipe-S4CWK6H5.js} +0 -0
- /package/dist/{wiki-acl-CONNF6ES.js → wiki-acl-6GZHUA44.js} +0 -0
- /package/dist/{wiki-client-N6PT5P7W.js → wiki-client-CIJXRMKL.js} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
formatDegradations,
|
|
3
|
+
getRetrievalHealth
|
|
4
|
+
} from "./chunk-BRSMAFBN.js";
|
|
1
5
|
import {
|
|
2
6
|
buildRestartReport,
|
|
3
7
|
formatRestartReport
|
|
4
8
|
} from "./chunk-KQ4Z2G24.js";
|
|
5
|
-
import {
|
|
6
|
-
formatDegradations,
|
|
7
|
-
getRetrievalHealth
|
|
8
|
-
} from "./chunk-YUBTHJVV.js";
|
|
9
9
|
import {
|
|
10
10
|
blobToVector
|
|
11
11
|
} from "./chunk-OTVEIJUQ.js";
|
|
@@ -14,6 +14,9 @@ import {
|
|
|
14
14
|
LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS,
|
|
15
15
|
manifestEntryForCommand
|
|
16
16
|
} from "./chunk-L3TB7CC3.js";
|
|
17
|
+
import {
|
|
18
|
+
offloadReadIfMain
|
|
19
|
+
} from "./chunk-VG4ZH2Z3.js";
|
|
17
20
|
import {
|
|
18
21
|
isMainModule
|
|
19
22
|
} from "./chunk-6Y4B3QF6.js";
|
|
@@ -316,24 +319,28 @@ function agentFilter(flags) {
|
|
|
316
319
|
}
|
|
317
320
|
async function auditStats(client, flags) {
|
|
318
321
|
const { clause, args } = agentFilter(flags);
|
|
319
|
-
const summary = await
|
|
320
|
-
|
|
322
|
+
const summary = await offloadReadIfMain(
|
|
323
|
+
client,
|
|
324
|
+
`SELECT COUNT(*) as total,
|
|
321
325
|
COUNT(DISTINCT agent_id) as agents,
|
|
322
326
|
COUNT(DISTINCT project_name) as projects,
|
|
323
327
|
MIN(timestamp) as oldest,
|
|
324
328
|
MAX(timestamp) as newest
|
|
325
329
|
FROM memories${clause}`,
|
|
326
|
-
args
|
|
327
|
-
|
|
330
|
+
args,
|
|
331
|
+
true
|
|
332
|
+
);
|
|
328
333
|
const row = summary.rows[0];
|
|
329
|
-
const perAgent = await
|
|
330
|
-
|
|
334
|
+
const perAgent = await offloadReadIfMain(
|
|
335
|
+
client,
|
|
336
|
+
`SELECT agent_id, COUNT(*) as count,
|
|
331
337
|
SUM(CASE WHEN vector IS NULL THEN 1 ELSE 0 END) as null_vectors
|
|
332
338
|
FROM memories${clause}
|
|
333
339
|
GROUP BY agent_id
|
|
334
340
|
ORDER BY count DESC`,
|
|
335
|
-
args
|
|
336
|
-
|
|
341
|
+
args,
|
|
342
|
+
true
|
|
343
|
+
);
|
|
337
344
|
return {
|
|
338
345
|
total: Number(row.total),
|
|
339
346
|
agents: Number(row.agents),
|
|
@@ -350,25 +357,29 @@ async function auditStats(client, flags) {
|
|
|
350
357
|
async function auditNullVectors(client, flags) {
|
|
351
358
|
const { clause, args } = agentFilter(flags);
|
|
352
359
|
const where = clause ? clause + " AND vector IS NULL" : " WHERE vector IS NULL";
|
|
353
|
-
const result = await
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
360
|
+
const result = await offloadReadIfMain(
|
|
361
|
+
client,
|
|
362
|
+
`SELECT COUNT(*) as cnt FROM memories${where}`,
|
|
363
|
+
args,
|
|
364
|
+
true
|
|
365
|
+
);
|
|
357
366
|
return Number(result.rows[0].cnt);
|
|
358
367
|
}
|
|
359
368
|
async function auditDuplicates(client, flags) {
|
|
360
369
|
const { clause, args } = agentFilter(flags);
|
|
361
370
|
const liveOnly = " AND COALESCE(status, 'active') = 'active'";
|
|
362
371
|
const backfillExclude = clause ? " AND tool_name != 'ConversationBackfill'" : " WHERE tool_name != 'ConversationBackfill'";
|
|
363
|
-
const groups = await
|
|
364
|
-
|
|
372
|
+
const groups = await offloadReadIfMain(
|
|
373
|
+
client,
|
|
374
|
+
`SELECT SUBSTR(raw_text, 1, 200) as text_head, LENGTH(raw_text) as text_len, COUNT(*) as cnt
|
|
365
375
|
FROM memories${clause}${backfillExclude}${liveOnly}
|
|
366
376
|
GROUP BY text_head, text_len
|
|
367
377
|
HAVING cnt > 1
|
|
368
378
|
ORDER BY cnt DESC
|
|
369
379
|
LIMIT 500`,
|
|
370
|
-
args
|
|
371
|
-
|
|
380
|
+
args,
|
|
381
|
+
true
|
|
382
|
+
);
|
|
372
383
|
const duplicates = [];
|
|
373
384
|
for (const g of groups.rows) {
|
|
374
385
|
const textHead = g.text_head;
|
|
@@ -377,10 +388,12 @@ async function auditDuplicates(client, flags) {
|
|
|
377
388
|
let filterClause = " WHERE SUBSTR(raw_text, 1, 200) = ? AND LENGTH(raw_text) = ?" + liveOnly;
|
|
378
389
|
if (flags.agent) filterClause += " AND agent_id = ?";
|
|
379
390
|
if (flags.project) filterClause += " AND project_name = ?";
|
|
380
|
-
const ids = await
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
391
|
+
const ids = await offloadReadIfMain(
|
|
392
|
+
client,
|
|
393
|
+
`SELECT id, raw_text FROM memories${filterClause} ORDER BY timestamp DESC LIMIT 10000`,
|
|
394
|
+
filterArgs,
|
|
395
|
+
true
|
|
396
|
+
);
|
|
384
397
|
const byText = /* @__PURE__ */ new Map();
|
|
385
398
|
for (const r of ids.rows) {
|
|
386
399
|
const text = r.raw_text;
|
|
@@ -405,13 +418,15 @@ async function auditBloated(client, flags) {
|
|
|
405
418
|
const { clause, args } = agentFilter(flags);
|
|
406
419
|
const splitGuard = " AND COALESCE(consolidated, 0) = 0 AND COALESCE(status, 'active') = 'active'";
|
|
407
420
|
const where = (clause ? clause + " AND LENGTH(raw_text) > 5120 AND tool_name != 'ConversationBackfill'" : " WHERE LENGTH(raw_text) > 5120 AND tool_name != 'ConversationBackfill'") + splitGuard;
|
|
408
|
-
const result = await
|
|
409
|
-
|
|
421
|
+
const result = await offloadReadIfMain(
|
|
422
|
+
client,
|
|
423
|
+
`SELECT id, agent_id, LENGTH(raw_text) as size, tool_name
|
|
410
424
|
FROM memories${where}
|
|
411
425
|
ORDER BY size DESC
|
|
412
426
|
LIMIT 100`,
|
|
413
|
-
args
|
|
414
|
-
|
|
427
|
+
args,
|
|
428
|
+
true
|
|
429
|
+
);
|
|
415
430
|
return result.rows.map((r) => ({
|
|
416
431
|
id: r.id,
|
|
417
432
|
agent_id: r.agent_id,
|
|
@@ -420,19 +435,22 @@ async function auditBloated(client, flags) {
|
|
|
420
435
|
}));
|
|
421
436
|
}
|
|
422
437
|
async function auditFts(client) {
|
|
423
|
-
const memCount = await client
|
|
424
|
-
const ftsCount = await client
|
|
438
|
+
const memCount = await offloadReadIfMain(client, "SELECT COUNT(*) as cnt FROM memories", [], true);
|
|
439
|
+
const ftsCount = await offloadReadIfMain(client, "SELECT COUNT(*) as cnt FROM memories_fts", [], true);
|
|
425
440
|
const mc = Number(memCount.rows[0].cnt);
|
|
426
441
|
const fc = Number(ftsCount.rows[0].cnt);
|
|
427
442
|
return { memoryCount: mc, ftsCount: fc, inSync: mc === fc };
|
|
428
443
|
}
|
|
429
444
|
async function auditOrphanedProjects(client) {
|
|
430
|
-
const result = await
|
|
445
|
+
const result = await offloadReadIfMain(
|
|
446
|
+
client,
|
|
431
447
|
`SELECT project_name, COUNT(*) as cnt
|
|
432
448
|
FROM memories
|
|
433
449
|
WHERE tool_name != 'ConversationBackfill'
|
|
434
450
|
GROUP BY project_name
|
|
435
|
-
ORDER BY cnt DESC
|
|
451
|
+
ORDER BY cnt DESC`,
|
|
452
|
+
[],
|
|
453
|
+
true
|
|
436
454
|
);
|
|
437
455
|
const orphans = [];
|
|
438
456
|
const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
@@ -603,7 +621,7 @@ function auditHookOwnership() {
|
|
|
603
621
|
}
|
|
604
622
|
async function auditShards() {
|
|
605
623
|
try {
|
|
606
|
-
const { auditShardHealth } = await import("./shard-manager-
|
|
624
|
+
const { auditShardHealth } = await import("./shard-manager-RASGFMGS.js");
|
|
607
625
|
const report = await auditShardHealth();
|
|
608
626
|
return {
|
|
609
627
|
total: report.total,
|
|
@@ -621,7 +639,7 @@ async function auditShards() {
|
|
|
621
639
|
async function auditKeyHealth() {
|
|
622
640
|
try {
|
|
623
641
|
const { getMasterKey } = await import("./lib/keychain.js");
|
|
624
|
-
const { getKeyBackupStatus } = await import("./key-backup-status-
|
|
642
|
+
const { getKeyBackupStatus } = await import("./key-backup-status-ZNGDSPLT.js");
|
|
625
643
|
const key = await getMasterKey();
|
|
626
644
|
const backup = getKeyBackupStatus();
|
|
627
645
|
return {
|
|
@@ -941,7 +959,7 @@ function formatReport(report, flags) {
|
|
|
941
959
|
return lines.join("\n");
|
|
942
960
|
}
|
|
943
961
|
async function fixNullVectors() {
|
|
944
|
-
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-
|
|
962
|
+
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-KQTODSUQ.js");
|
|
945
963
|
if (!tryAcquireWorkerSlot()) {
|
|
946
964
|
process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
|
|
947
965
|
await new Promise((r) => setTimeout(r, 5e3));
|
|
@@ -1055,7 +1073,7 @@ function shouldFixShards(shards) {
|
|
|
1055
1073
|
return shards.unreadable > 0 || shards.schemaMismatches > 0;
|
|
1056
1074
|
}
|
|
1057
1075
|
async function fixShards(dryRun) {
|
|
1058
|
-
const { auditShardHealth } = await import("./shard-manager-
|
|
1076
|
+
const { auditShardHealth } = await import("./shard-manager-RASGFMGS.js");
|
|
1059
1077
|
const report = await auditShardHealth({ repair: true, dryRun });
|
|
1060
1078
|
return {
|
|
1061
1079
|
total: report.total,
|
|
@@ -1126,7 +1144,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
1126
1144
|
console.log(formatRestartReport(restartReport));
|
|
1127
1145
|
return emptyAuditReport();
|
|
1128
1146
|
}
|
|
1129
|
-
const { fastDbInit } = await import("./fast-db-init-
|
|
1147
|
+
const { fastDbInit } = await import("./fast-db-init-PVJ72264.js");
|
|
1130
1148
|
const client = await fastDbInit();
|
|
1131
1149
|
const report = await runAudit(client, flags);
|
|
1132
1150
|
console.log(formatReport(report, flags));
|
|
@@ -1137,7 +1155,7 @@ ${mode} Applying repairs...
|
|
|
1137
1155
|
`);
|
|
1138
1156
|
if (!flags.dryRun) {
|
|
1139
1157
|
try {
|
|
1140
|
-
const { createBackup } = await import("./db-backup-
|
|
1158
|
+
const { createBackup } = await import("./db-backup-BTL2FBBL.js");
|
|
1141
1159
|
const backupPath = await createBackup("pre-fix");
|
|
1142
1160
|
if (backupPath) {
|
|
1143
1161
|
console.log(` Backup created: ${backupPath.split("/").pop()}`);
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-NGP6LSV2.js";
|
|
5
5
|
import {
|
|
6
6
|
EXE_AI_DIR
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WCES22KG.js";
|
|
8
8
|
import {
|
|
9
9
|
atomicWriteJsonSync,
|
|
10
10
|
ensurePrivateDirSync
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-SHIICYJW.js";
|
|
12
12
|
|
|
13
13
|
// src/lib/agent-config.ts
|
|
14
14
|
import { readFileSync, existsSync } from "fs";
|
|
@@ -30,7 +30,7 @@ var RUNTIME_LABELS = {
|
|
|
30
30
|
opencode: "OpenCode (open source)"
|
|
31
31
|
};
|
|
32
32
|
var DEFAULT_MODELS = {
|
|
33
|
-
claude: "claude-
|
|
33
|
+
claude: "claude-sonnet-4",
|
|
34
34
|
codex: RUNTIME_TABLE.codex?.defaultModel ?? "gpt-5.4",
|
|
35
35
|
opencode: RUNTIME_TABLE.opencode?.defaultModel ?? "anthropic/claude-sonnet-4-6"
|
|
36
36
|
};
|
|
@@ -56,7 +56,8 @@ function getAgentRuntime(agentId) {
|
|
|
56
56
|
return { runtime: DEFAULT_RUNTIME, model: DEFAULT_MODELS[DEFAULT_RUNTIME] };
|
|
57
57
|
}
|
|
58
58
|
function normalizeCcModelName(model) {
|
|
59
|
-
let ccModel = model.replace(
|
|
59
|
+
let ccModel = model.replace(/^[a-z0-9.-]+\//i, "");
|
|
60
|
+
ccModel = ccModel.replace(/(\d+)\.(\d+)/g, "$1-$2");
|
|
60
61
|
const isExplicit1m = /-1m$/.test(ccModel) || ccModel.includes("[1m]");
|
|
61
62
|
if ((/claude-(opus|sonnet)-4-[6-9]/.test(ccModel) || /claude-fable-\d+/.test(ccModel)) && !isExplicit1m) {
|
|
62
63
|
ccModel += "[1m]";
|
|
@@ -11,7 +11,7 @@ var REQUIRED_INFRA = {
|
|
|
11
11
|
var FORBIDDEN_HOST_SUBSTRINGS = ["askexe.com", "askexenow.com"];
|
|
12
12
|
var CLIENT_FACING_HOST_FIELDS = ["healthHost", "healthUrl"];
|
|
13
13
|
var BYOK_ENFORCEMENT_VARS = ["EXE_ALLOW_DIRECT_PROVIDER_KEYS", "EXE_BILLING_MODE"];
|
|
14
|
-
var
|
|
14
|
+
var BYOK_ALIAS_VARS = ["BYOK_ENABLED"];
|
|
15
15
|
function resolveDefaultManifest() {
|
|
16
16
|
let dir = path.dirname(new URL(import.meta.url).pathname);
|
|
17
17
|
for (let i = 0; i < 6; i++) {
|
|
@@ -56,11 +56,15 @@ function resolveStack(manifest, requested) {
|
|
|
56
56
|
const entry = manifest.stacks[version];
|
|
57
57
|
return { version, services: entry?.services ?? {} };
|
|
58
58
|
}
|
|
59
|
+
function isAskExeImage(image) {
|
|
60
|
+
return image.startsWith("ghcr.io/askexe/") || image.startsWith("update.askexe.com/askexe/");
|
|
61
|
+
}
|
|
59
62
|
function checkDigestPinning(services) {
|
|
60
63
|
const bug = "ee16e7ef (digest-pinning)";
|
|
61
64
|
const offenders = [];
|
|
62
65
|
for (const [name, svc] of Object.entries(services)) {
|
|
63
66
|
if (!svc.image) continue;
|
|
67
|
+
if (!isAskExeImage(svc.image)) continue;
|
|
64
68
|
const { hasDigest } = parseImageRef(svc.image);
|
|
65
69
|
if (!hasDigest) offenders.push(`${name}=${svc.image}`);
|
|
66
70
|
}
|
|
@@ -154,14 +158,13 @@ function checkEnvContract(env, compose) {
|
|
|
154
158
|
for (const m of compose.text.matchAll(/\$\{?([A-Z][A-Z0-9_]+)/g)) declared.add(m[1]);
|
|
155
159
|
}
|
|
156
160
|
const missingEnforcement = BYOK_ENFORCEMENT_VARS.filter((v) => !declared.has(v));
|
|
157
|
-
const
|
|
158
|
-
if (
|
|
161
|
+
const aliasDeclared = BYOK_ALIAS_VARS.filter((v) => declared.has(v));
|
|
162
|
+
if (aliasDeclared.length > 0) {
|
|
159
163
|
return {
|
|
160
164
|
check: "env-contract",
|
|
161
|
-
status: "
|
|
165
|
+
status: "pass",
|
|
162
166
|
bug,
|
|
163
|
-
|
|
164
|
-
message: `BYOK env-contract mismatch \u2014 customer surface exposes ${exposedLegacy.join("/")} but billing enforcement reads ${BYOK_ENFORCEMENT_VARS.join("+")} (absent). BYOK can bypass billing.`
|
|
167
|
+
message: `BYOK enforcement satisfied via alias (${aliasDeclared.join(", ")} \u2192 byok + allow-direct-keys)`
|
|
165
168
|
};
|
|
166
169
|
}
|
|
167
170
|
if (missingEnforcement.length > 0) {
|
|
@@ -170,7 +173,7 @@ function checkEnvContract(env, compose) {
|
|
|
170
173
|
status: "warn",
|
|
171
174
|
bug,
|
|
172
175
|
offenders: missingEnforcement.map((v) => `missing ${v}`),
|
|
173
|
-
message: `billing enforcement vars not declared: ${missingEnforcement.join(", ")}`
|
|
176
|
+
message: `billing enforcement vars not declared: ${missingEnforcement.join(", ")} (and no ${BYOK_ALIAS_VARS.join("/")} alias) \u2014 defaults to metered`
|
|
174
177
|
};
|
|
175
178
|
}
|
|
176
179
|
return { check: "env-contract", status: "pass", bug, message: `BYOK enforcement vars present (${BYOK_ENFORCEMENT_VARS.join(", ")})` };
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
recordSessionKill
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OUAGTQC4.js";
|
|
4
4
|
import {
|
|
5
5
|
sessionScopeFilter,
|
|
6
6
|
verifyPaneAtCapacity,
|
|
7
7
|
writeNotification
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MMNMQNLD.js";
|
|
9
9
|
import {
|
|
10
10
|
listSessions
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZAA344BL.js";
|
|
12
12
|
import {
|
|
13
13
|
getTransport
|
|
14
14
|
} from "./chunk-KOO3J5PV.js";
|
|
15
15
|
import {
|
|
16
16
|
recordOrchestrationEventBestEffort
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-P4ULFI2N.js";
|
|
18
18
|
import {
|
|
19
19
|
getClient,
|
|
20
20
|
isCoordinatorName
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-VG4ZH2Z3.js";
|
|
22
22
|
|
|
23
23
|
// src/lib/capacity-monitor.ts
|
|
24
24
|
var CAPACITY_PATTERNS = [
|
|
@@ -24,6 +24,38 @@ var FRONTEND_URLS = {
|
|
|
24
24
|
"exe-monitor-hub": "http://127.0.0.1:8090"
|
|
25
25
|
};
|
|
26
26
|
var GOTRUE_TOKEN_URL = "http://127.0.0.1:9999/token?grant_type=password";
|
|
27
|
+
function parseComposeServiceNames(composeFile) {
|
|
28
|
+
const names = /* @__PURE__ */ new Set();
|
|
29
|
+
if (!existsSync(composeFile)) return names;
|
|
30
|
+
let raw;
|
|
31
|
+
try {
|
|
32
|
+
raw = readFileSync(composeFile, "utf8");
|
|
33
|
+
} catch {
|
|
34
|
+
return names;
|
|
35
|
+
}
|
|
36
|
+
let inServices = false;
|
|
37
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
38
|
+
if (!line.trim() || line.trim().startsWith("#")) continue;
|
|
39
|
+
const indent = line.length - line.trimStart().length;
|
|
40
|
+
const trimmed = line.trim();
|
|
41
|
+
if (indent === 0) {
|
|
42
|
+
inServices = /^services:\s*$/.test(trimmed);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (inServices && indent === 2 && /^[a-zA-Z0-9_-]+:\s*$/.test(trimmed)) {
|
|
46
|
+
names.add(trimmed.replace(/:.*$/, ""));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return names;
|
|
50
|
+
}
|
|
51
|
+
function filterToDeployed(map, deployed) {
|
|
52
|
+
if (deployed.size === 0) return map;
|
|
53
|
+
const out = {};
|
|
54
|
+
for (const [name, val] of Object.entries(map)) {
|
|
55
|
+
if (deployed.has(name)) out[name] = val;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
27
59
|
function loadEnvFile(envPath) {
|
|
28
60
|
if (!existsSync(envPath)) return {};
|
|
29
61
|
const raw = readFileSync(envPath, "utf8");
|
|
@@ -137,10 +169,14 @@ async function checkContainersHealthy(composeFile) {
|
|
|
137
169
|
return { check, status: "fail", message: err instanceof Error ? err.message : String(err) };
|
|
138
170
|
}
|
|
139
171
|
}
|
|
140
|
-
async function checkServiceUrls() {
|
|
172
|
+
async function checkServiceUrls(deployed) {
|
|
141
173
|
const check = "All service URLs respond 200";
|
|
174
|
+
const urls = filterToDeployed(SERVICE_URLS, deployed);
|
|
175
|
+
if (Object.keys(urls).length === 0) {
|
|
176
|
+
return { check, status: "skip", message: "No HTTP services deployed in this selection" };
|
|
177
|
+
}
|
|
142
178
|
const failures = [];
|
|
143
|
-
for (const [service, url] of Object.entries(
|
|
179
|
+
for (const [service, url] of Object.entries(urls)) {
|
|
144
180
|
try {
|
|
145
181
|
const res = await httpGet(url, CHECK_TIMEOUT_MS);
|
|
146
182
|
if (res.status !== 200) {
|
|
@@ -153,10 +189,13 @@ async function checkServiceUrls() {
|
|
|
153
189
|
if (failures.length > 0) {
|
|
154
190
|
return { check, status: "fail", message: failures.join("; ") };
|
|
155
191
|
}
|
|
156
|
-
return { check, status: "pass", message: `${Object.keys(
|
|
192
|
+
return { check, status: "pass", message: `${Object.keys(urls).length} services responding` };
|
|
157
193
|
}
|
|
158
|
-
async function checkGoTrueLogin(env) {
|
|
194
|
+
async function checkGoTrueLogin(env, deployed) {
|
|
159
195
|
const check = "GoTrue login works";
|
|
196
|
+
if (deployed.size > 0 && !deployed.has("gotrue")) {
|
|
197
|
+
return { result: { check, status: "skip", message: "gotrue not deployed in this selection" } };
|
|
198
|
+
}
|
|
160
199
|
const email = env.GOTRUE_TEST_EMAIL || process.env.GOTRUE_TEST_EMAIL;
|
|
161
200
|
const password = env.GOTRUE_TEST_PASSWORD || process.env.GOTRUE_TEST_PASSWORD;
|
|
162
201
|
if (!email || !password) {
|
|
@@ -178,8 +217,11 @@ async function checkGoTrueLogin(env) {
|
|
|
178
217
|
return { result: { check, status: "fail", message: err instanceof Error ? err.message : String(err) } };
|
|
179
218
|
}
|
|
180
219
|
}
|
|
181
|
-
async function checkWhatsAppConnected() {
|
|
220
|
+
async function checkWhatsAppConnected(deployed) {
|
|
182
221
|
const check = "WhatsApp still connected";
|
|
222
|
+
if (deployed.size > 0 && !deployed.has("exe-gateway")) {
|
|
223
|
+
return { check, status: "skip", message: "exe-gateway not deployed in this selection" };
|
|
224
|
+
}
|
|
183
225
|
try {
|
|
184
226
|
const res = await httpGet(SERVICE_URLS["exe-gateway"], CHECK_TIMEOUT_MS);
|
|
185
227
|
if (res.status !== 200) {
|
|
@@ -205,10 +247,14 @@ async function checkWhatsAppConnected() {
|
|
|
205
247
|
return { check, status: "fail", message: err instanceof Error ? err.message : String(err) };
|
|
206
248
|
}
|
|
207
249
|
}
|
|
208
|
-
async function checkFrontendsLoad() {
|
|
250
|
+
async function checkFrontendsLoad(deployed) {
|
|
209
251
|
const check = "Each frontend loads";
|
|
252
|
+
const urls = filterToDeployed(FRONTEND_URLS, deployed);
|
|
253
|
+
if (Object.keys(urls).length === 0) {
|
|
254
|
+
return { check, status: "skip", message: "No frontends deployed in this selection" };
|
|
255
|
+
}
|
|
210
256
|
const failures = [];
|
|
211
|
-
for (const [service, url] of Object.entries(
|
|
257
|
+
for (const [service, url] of Object.entries(urls)) {
|
|
212
258
|
try {
|
|
213
259
|
const res = await httpGet(url, CHECK_TIMEOUT_MS);
|
|
214
260
|
if (!res.contentType.includes("text/html")) {
|
|
@@ -223,10 +269,13 @@ async function checkFrontendsLoad() {
|
|
|
223
269
|
if (failures.length > 0) {
|
|
224
270
|
return { check, status: "fail", message: failures.join("; ") };
|
|
225
271
|
}
|
|
226
|
-
return { check, status: "pass", message: `${Object.keys(
|
|
272
|
+
return { check, status: "pass", message: `${Object.keys(urls).length} frontends serving HTML` };
|
|
227
273
|
}
|
|
228
|
-
async function checkMonitorMetrics() {
|
|
274
|
+
async function checkMonitorMetrics(deployed) {
|
|
229
275
|
const check = "Monitor reports metrics";
|
|
276
|
+
if (deployed.size > 0 && !deployed.has("exe-monitor-hub")) {
|
|
277
|
+
return { check, status: "skip", message: "exe-monitor-hub not deployed in this selection" };
|
|
278
|
+
}
|
|
230
279
|
try {
|
|
231
280
|
const res = await httpGet(SERVICE_URLS["exe-monitor-hub"], CHECK_TIMEOUT_MS);
|
|
232
281
|
if (res.status !== 200) {
|
|
@@ -264,15 +313,18 @@ async function checkRawPipeline(env) {
|
|
|
264
313
|
return { check, status: "fail", message: msg.slice(0, 200) };
|
|
265
314
|
}
|
|
266
315
|
}
|
|
267
|
-
async function checkCrossServiceAuth(jwt) {
|
|
316
|
+
async function checkCrossServiceAuth(jwt, deployed) {
|
|
268
317
|
const check = "Cross-service auth";
|
|
269
318
|
if (!jwt) {
|
|
270
319
|
return { check, status: "skip", message: "No GoTrue JWT available (check 3 skipped or failed)" };
|
|
271
320
|
}
|
|
272
|
-
const targets = {
|
|
321
|
+
const targets = filterToDeployed({
|
|
273
322
|
"exe-wiki": "http://127.0.0.1:3001/api/ping",
|
|
274
323
|
"exe-crm": "http://127.0.0.1:3000/healthz"
|
|
275
|
-
};
|
|
324
|
+
}, deployed);
|
|
325
|
+
if (Object.keys(targets).length === 0) {
|
|
326
|
+
return { check, status: "skip", message: "No JWT-consuming services (wiki/CRM) deployed in this selection" };
|
|
327
|
+
}
|
|
276
328
|
const failures = [];
|
|
277
329
|
for (const [service, url] of Object.entries(targets)) {
|
|
278
330
|
try {
|
|
@@ -295,6 +347,7 @@ async function runVerifyStack(options) {
|
|
|
295
347
|
const totalTimeout = options?.timeoutMs ?? TOTAL_TIMEOUT_MS;
|
|
296
348
|
const env = loadEnvFile(envFile);
|
|
297
349
|
const results = [];
|
|
350
|
+
const deployed = parseComposeServiceNames(composeFile);
|
|
298
351
|
const deadline = Date.now() + totalTimeout;
|
|
299
352
|
const addResult = (r) => {
|
|
300
353
|
results.push(r);
|
|
@@ -304,20 +357,20 @@ async function runVerifyStack(options) {
|
|
|
304
357
|
};
|
|
305
358
|
addResult(await checkContainersHealthy(composeFile));
|
|
306
359
|
if (Date.now() > deadline) return summarize(results);
|
|
307
|
-
addResult(await checkServiceUrls());
|
|
360
|
+
addResult(await checkServiceUrls(deployed));
|
|
308
361
|
if (Date.now() > deadline) return summarize(results);
|
|
309
|
-
const goTrueResult = await checkGoTrueLogin(env);
|
|
362
|
+
const goTrueResult = await checkGoTrueLogin(env, deployed);
|
|
310
363
|
addResult(goTrueResult.result);
|
|
311
364
|
if (Date.now() > deadline) return summarize(results);
|
|
312
|
-
addResult(await checkWhatsAppConnected());
|
|
365
|
+
addResult(await checkWhatsAppConnected(deployed));
|
|
313
366
|
if (Date.now() > deadline) return summarize(results);
|
|
314
|
-
addResult(await checkFrontendsLoad());
|
|
367
|
+
addResult(await checkFrontendsLoad(deployed));
|
|
315
368
|
if (Date.now() > deadline) return summarize(results);
|
|
316
|
-
addResult(await checkMonitorMetrics());
|
|
369
|
+
addResult(await checkMonitorMetrics(deployed));
|
|
317
370
|
if (Date.now() > deadline) return summarize(results);
|
|
318
371
|
addResult(await checkRawPipeline(env));
|
|
319
372
|
if (Date.now() > deadline) return summarize(results);
|
|
320
|
-
addResult(await checkCrossServiceAuth(goTrueResult.jwt));
|
|
373
|
+
addResult(await checkCrossServiceAuth(goTrueResult.jwt, deployed));
|
|
321
374
|
return summarize(results);
|
|
322
375
|
}
|
|
323
376
|
function summarize(results) {
|
|
@@ -384,5 +437,6 @@ if (isMainModule(import.meta.url) && process.argv[1]?.includes("verify-stack"))
|
|
|
384
437
|
}
|
|
385
438
|
|
|
386
439
|
export {
|
|
440
|
+
parseComposeServiceNames,
|
|
387
441
|
runVerifyStack
|
|
388
442
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VG4ZH2Z3.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/pipeline-router.ts
|
|
6
6
|
import crypto from "crypto";
|
|
@@ -116,12 +116,12 @@ async function sinkCRM(msg, agentResponse, agentName) {
|
|
|
116
116
|
}
|
|
117
117
|
async function sinkWiki(msg, agentResponse) {
|
|
118
118
|
try {
|
|
119
|
-
const { createWikiClient } = await import("./wiki-client-
|
|
119
|
+
const { createWikiClient } = await import("./wiki-client-CIJXRMKL.js");
|
|
120
120
|
const client = await createWikiClient();
|
|
121
121
|
if (!client) return false;
|
|
122
122
|
const content = msg.text ?? "";
|
|
123
123
|
if (content.length < 50) return false;
|
|
124
|
-
const { chatInWorkspace } = await import("./wiki-client-
|
|
124
|
+
const { chatInWorkspace } = await import("./wiki-client-CIJXRMKL.js");
|
|
125
125
|
const ingestText = [
|
|
126
126
|
`[${msg.platform}] Message from ${msg.senderName ?? msg.senderId} (${msg.timestamp}):`,
|
|
127
127
|
content,
|
|
@@ -149,7 +149,7 @@ async function sinkEntityExtraction(msg, agentResponse, agentName) {
|
|
|
149
149
|
const client = getClient();
|
|
150
150
|
const memoryId = `conv:${msg.messageId}`;
|
|
151
151
|
await storeExtraction(client, extraction, memoryId, msg.timestamp);
|
|
152
|
-
import("./conversation-wiki-populator-
|
|
152
|
+
import("./conversation-wiki-populator-SK233TL4.js").then(
|
|
153
153
|
({ populateWikiFromExtraction }) => populateWikiFromExtraction(extraction, msg, agentResponse, agentName)
|
|
154
154
|
).catch((err) => {
|
|
155
155
|
process.stderr.write(
|
|
@@ -44,7 +44,7 @@ async function fastDbInit(opts) {
|
|
|
44
44
|
return getClient();
|
|
45
45
|
}
|
|
46
46
|
if (opts?.daemonOnly) {
|
|
47
|
-
const { isDaemonReady } = await import("./daemon-ready-signal-
|
|
47
|
+
const { isDaemonReady } = await import("./daemon-ready-signal-KXLL6ZFL.js");
|
|
48
48
|
if (!isDaemonReady()) return makeNoopClient();
|
|
49
49
|
}
|
|
50
50
|
const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-FF5DA4XP.js";
|
|
5
5
|
import {
|
|
6
6
|
getClient
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VG4ZH2Z3.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/graph-entity-heuristics.ts
|
|
10
10
|
var FILE_EXT_PATTERN = /(?:^|\s|['"`(])([a-zA-Z0-9_./-]+\.(?:ts|js|tsx|jsx|json|md|py|rs|go|toml|yaml|yml|css|html|sql|sh|bash|zsh|env|conf|cfg|xml|csv|lock))\b/g;
|
|
@@ -467,7 +467,7 @@ async function upsertMemoryGraph(result, memoryId) {
|
|
|
467
467
|
});
|
|
468
468
|
}
|
|
469
469
|
try {
|
|
470
|
-
const { createCoOccurrenceEdges } = await import("./co-occurrence-
|
|
470
|
+
const { createCoOccurrenceEdges } = await import("./co-occurrence-MJWERUWY.js");
|
|
471
471
|
await createCoOccurrenceEdges(result.entities, memoryId);
|
|
472
472
|
} catch {
|
|
473
473
|
}
|