@askexenow/exe-os 0.9.239 → 0.9.244
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.customer.example +12 -0
- package/deploy/compose/.env.example +13 -1
- package/deploy/compose/cloudflared/config.yml.example +29 -5
- package/deploy/compose/docker-compose.yml +27 -7
- package/deploy/compose/generate-env.ts +49 -1
- package/deploy/compose/init-db.sql +10 -2
- package/deploy/stack-manifests/v0.9.json +113 -9
- package/dist/{active-agent-7MIVNARP.js → active-agent-KO4ZWDXE.js} +4 -4
- package/dist/{active-agent-55C5Y3XL.js → active-agent-KP2O52HA.js} +4 -4
- package/dist/{agentic-ontology-NCAQIQQI.js → agentic-ontology-DXE5J6I5.js} +1 -1
- package/dist/{backfill-metadata-3JP7EZ2U.js → backfill-metadata-DFTIGPXP.js} +7 -7
- package/dist/{background-jobs-RWL46VRD.js → background-jobs-CRXY7T4Y.js} +2 -2
- package/dist/{behaviors-6BGALYGW.js → behaviors-BL3QCHBT.js} +4 -4
- package/dist/bin/age-ontology-load.js +2 -2
- 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 +9 -9
- package/dist/bin/backfill-responses.js +9 -9
- package/dist/bin/backfill-vectors.js +11 -11
- package/dist/bin/bulk-sync-postgres.js +10 -10
- package/dist/bin/cc-doctor.js +3 -3
- package/dist/bin/cleanup-stale-review-tasks.js +13 -13
- package/dist/bin/cli.js +27 -22
- package/dist/bin/exe-agent-config.js +4 -4
- package/dist/bin/exe-agent.js +8 -8
- package/dist/bin/exe-assign.js +11 -11
- package/dist/bin/exe-boot.js +22 -22
- package/dist/bin/exe-call.js +5 -5
- package/dist/bin/exe-cloud.js +8 -8
- package/dist/bin/exe-dispatch.js +13 -13
- package/dist/bin/exe-doctor.js +1 -1
- 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-healthcheck.js +3 -3
- package/dist/bin/exe-heartbeat.js +13 -13
- package/dist/bin/exe-kill.js +18 -18
- package/dist/bin/exe-launch-agent.js +22 -22
- package/dist/bin/exe-new-employee.js +8 -8
- package/dist/bin/exe-pending-messages.js +14 -14
- package/dist/bin/exe-pending-notifications.js +13 -13
- package/dist/bin/exe-pending-reviews.js +13 -13
- package/dist/bin/exe-rename.js +5 -5
- package/dist/bin/exe-review.js +17 -17
- package/dist/bin/exe-search.js +8 -8
- package/dist/bin/exe-session-cleanup.js +20 -20
- package/dist/bin/exe-settings.js +7 -7
- package/dist/bin/exe-start-codex.js +14 -14
- package/dist/bin/exe-start-opencode.js +11 -11
- package/dist/bin/exe-status.js +14 -14
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/git-sweep.js +13 -13
- 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.js +7 -7
- 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/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +13 -13
- package/dist/bin/setup.js +3 -3
- package/dist/bin/shard-migrate.js +8 -8
- package/dist/bin/stack-update.js +348 -20
- package/dist/bin/verify-stack.js +3 -383
- package/dist/bin/vps-backup.js +8 -160
- package/dist/bin/vps-health-gate.js +10 -220
- package/dist/{branding-I7YYX4FM.js → branding-XWMO5EDR.js} +1 -1
- package/dist/{capacity-monitor-IFCZKRPG.js → capacity-monitor-4CSBC7AP.js} +14 -14
- package/dist/{catchup-brief-PIDRWXOW.js → catchup-brief-LF5Z6Q6E.js} +17 -17
- package/dist/{chunk-FGJUGDNM.js → chunk-222SI7QC.js} +14 -14
- package/dist/{chunk-JZMVLAZ2.js → chunk-2WBBVEIB.js} +1 -1
- package/dist/{chunk-JDOE33C2.js → chunk-3V53HH5T.js} +4 -4
- package/dist/{chunk-2KZSKURT.js → chunk-57SULZJ2.js} +3 -3
- package/dist/{chunk-QI4IXJN7.js → chunk-5CHYEKMH.js} +7 -4
- package/dist/chunk-5DMAMQNU.js +168 -0
- package/dist/{chunk-PLQAFB3Z.js → chunk-5JIG2FP2.js} +1 -1
- package/dist/{chunk-UWQ3XCDG.js → chunk-5WK7X5CF.js} +2 -2
- package/dist/{chunk-DDPAQ4LT.js → chunk-6JAGJN77.js} +2 -2
- package/dist/{chunk-7F37NMKB.js → chunk-73UE2PHT.js} +1 -1
- package/dist/{chunk-JL3K5OTS.js → chunk-7IZWLMTP.js} +1 -1
- package/dist/{chunk-ELRRL2NC.js → chunk-A4K2ZT6N.js} +4 -4
- package/dist/{chunk-GWYADLIW.js → chunk-AHXEU5XB.js} +1 -1
- package/dist/{chunk-WSHMBME6.js → chunk-AWRL5FGM.js} +19 -78
- package/dist/{chunk-OMPCFLWA.js → chunk-BSPOEYAO.js} +1 -1
- package/dist/{chunk-F4TCKCKK.js → chunk-BYCNUKII.js} +47 -12
- package/dist/{chunk-DHVC4RN7.js → chunk-CBDPEJOR.js} +5 -5
- package/dist/{chunk-2H55BIV2.js → chunk-CEJO7244.js} +2 -2
- package/dist/{chunk-FKWZVO2T.js → chunk-CPXGLSIL.js} +3 -3
- package/dist/{chunk-HX5G4AS4.js → chunk-CWITU7DW.js} +2 -2
- package/dist/{chunk-5GG7MTRJ.js → chunk-DGBGIXCC.js} +4 -4
- package/dist/{chunk-IQXPMK46.js → chunk-DLZYAYVM.js} +60 -14
- package/dist/{chunk-PPYWQV2M.js → chunk-DR5BGWFR.js} +2 -2
- package/dist/{chunk-BZWKTFEB.js → chunk-ENVRFBTB.js} +2 -2
- package/dist/{chunk-DUVO2PUJ.js → chunk-F3GM6OOP.js} +4 -4
- package/dist/{chunk-HNLPLLE6.js → chunk-F7JLZXHC.js} +60 -26
- package/dist/{chunk-AL4DRC5H.js → chunk-FFLILAG6.js} +1 -1
- package/dist/{chunk-BZNI4OK5.js → chunk-GHEWRYMY.js} +18 -2
- package/dist/{chunk-C7SFJO5F.js → chunk-GHT4REOS.js} +5 -5
- package/dist/{chunk-FBWUJEXS.js → chunk-HANG6NLF.js} +4 -6
- package/dist/{chunk-5NJ4A4ZA.js → chunk-HCBMPZDT.js} +1 -1
- package/dist/chunk-HOGTZLVU.js +244 -0
- package/dist/{chunk-IQSCZDBQ.js → chunk-I5PIBL56.js} +3 -3
- package/dist/chunk-IRHNV4GY.js +388 -0
- package/dist/{chunk-4HROS3GJ.js → chunk-IZVKWBIP.js} +1 -1
- package/dist/{chunk-DKI5BTBC.js → chunk-J7V7LPPX.js} +2 -2
- package/dist/{chunk-TOZ5NN5V.js → chunk-JLKUVK5J.js} +1 -1
- package/dist/{chunk-4SC65UBG.js → chunk-JLNXKG3K.js} +1 -1
- package/dist/{chunk-KVSQOG3W.js → chunk-K2BDE2B5.js} +4 -4
- package/dist/{chunk-KDJRFJDL.js → chunk-K333WOW4.js} +30 -2
- package/dist/{chunk-6LBCUA2A.js → chunk-KEZXW3RP.js} +1 -1
- package/dist/{chunk-W7G3GY4I.js → chunk-KLQI7QY4.js} +3 -3
- package/dist/{chunk-UODVZGBQ.js → chunk-KN7LPTIB.js} +1 -1
- package/dist/{chunk-ESKBZN4Q.js → chunk-L4WRH3DL.js} +1 -1
- package/dist/{chunk-VFQKKMKE.js → chunk-LAOB5BKV.js} +2 -2
- package/dist/{chunk-MAN5LZQ4.js → chunk-LQSFP2BV.js} +1 -1
- package/dist/{chunk-EJ7LOTV2.js → chunk-LSFHEMVI.js} +9 -9
- package/dist/{chunk-RA2RO27E.js → chunk-MCESA5UW.js} +2 -2
- package/dist/{chunk-UPMHG7ET.js → chunk-MEIHREPM.js} +1 -1
- package/dist/{chunk-D5C56WO3.js → chunk-MOZ2YQ54.js} +1 -1
- package/dist/{chunk-CLGB3FGL.js → chunk-MPX3TRMQ.js} +2 -2
- package/dist/{chunk-5R75ODPS.js → chunk-NBY6R37W.js} +61 -232
- package/dist/{chunk-RWFGXC35.js → chunk-NEYQAEYU.js} +7 -7
- package/dist/{chunk-MBHZDXGN.js → chunk-NL35XNLI.js} +1 -1
- package/dist/{chunk-TPQVLYSV.js → chunk-NLGMHPEN.js} +1 -1
- package/dist/{chunk-5LMH4YHG.js → chunk-NRVV4Y5V.js} +4 -4
- package/dist/{chunk-GN5VHPPR.js → chunk-NVZR7T4E.js} +1 -1
- package/dist/{chunk-Y2L7RMGH.js → chunk-NWBHL5PI.js} +1 -1
- package/dist/{chunk-YPYDLW75.js → chunk-OEMX65EA.js} +1 -1
- package/dist/{chunk-UAFUGPKO.js → chunk-ONAQAL3O.js} +1 -1
- package/dist/{chunk-AVM7XZE4.js → chunk-OWQ3CCYJ.js} +7 -6
- package/dist/{chunk-K525WLL7.js → chunk-PI6V23GF.js} +5 -4
- package/dist/{chunk-AURM7FOT.js → chunk-Q2OAQPWY.js} +1 -1
- package/dist/{chunk-FB5VRO5S.js → chunk-QLDWASTX.js} +28 -32
- package/dist/{chunk-EPWDTS2Q.js → chunk-QMTGMCWB.js} +1 -1
- package/dist/{chunk-VI2FJY2M.js → chunk-QP4FHME2.js} +2 -2
- package/dist/{chunk-NJWK6J4N.js → chunk-QUNKPR6Y.js} +5 -5
- package/dist/{chunk-O6DAF2TY.js → chunk-QUZVAHO7.js} +2 -2
- package/dist/{chunk-VHKL4S4T.js → chunk-RRHSONV5.js} +2 -2
- package/dist/{chunk-GPF6X6HE.js → chunk-RYDHEWYY.js} +2 -2
- package/dist/{chunk-SVXDCELZ.js → chunk-SHN5O73O.js} +32 -4
- package/dist/chunk-TD5CADZ5.js +230 -0
- package/dist/{chunk-C2YS2AA6.js → chunk-U7WOVXBB.js} +2 -2
- package/dist/{chunk-FE45RXGC.js → chunk-V2GZMY6O.js} +1 -1
- package/dist/{chunk-PATCHPNY.js → chunk-VHALWCUO.js} +1 -1
- package/dist/{chunk-HLZSC5WK.js → chunk-VQAP35DA.js} +20 -18
- package/dist/{chunk-452XB7OZ.js → chunk-VRIMTCX2.js} +1 -1
- package/dist/{chunk-SUNYJ6YE.js → chunk-VT2B5BHM.js} +1 -1
- package/dist/{chunk-UZIJDYDA.js → chunk-VWVJVQDH.js} +2 -2
- package/dist/{chunk-TRZ5KA2R.js → chunk-VXIMSRTO.js} +2 -2
- package/dist/{chunk-DAZIV4QZ.js → chunk-WCXZF42W.js} +1 -1
- package/dist/{chunk-6OJJF4WP.js → chunk-XJUUWHVN.js} +1 -1
- package/dist/{chunk-F7LU65PQ.js → chunk-Y25OJWOQ.js} +14 -2
- package/dist/{chunk-2ORPA23Y.js → chunk-YMXXD2GW.js} +36 -8
- package/dist/{chunk-5WLMF6PL.js → chunk-YMZHTTOQ.js} +1 -1
- package/dist/{chunk-7DIDOQCX.js → chunk-YRVW57UW.js} +139 -125
- package/dist/{chunk-BRFH5X7G.js → chunk-Z7VDUS6L.js} +1 -1
- package/dist/{chunk-YFE6W75D.js → chunk-ZKFPHJIJ.js} +1 -1
- package/dist/{chunk-5WUTKDH6.js → chunk-ZVXJSQOR.js} +1 -1
- package/dist/{co-activation-VB4CJQZB.js → co-activation-L6I2LSJO.js} +3 -3
- package/dist/{co-occurrence-XZQJJIBM.js → co-occurrence-QARWYUAY.js} +3 -3
- package/dist/{code-context-index-FCQOPUEA.js → code-context-index-UIYQRDHD.js} +4 -4
- package/dist/{content-extractor-SPSH5X33.js → content-extractor-EYRVGD6O.js} +2 -2
- package/dist/{conversation-wiki-populator-YU35LNRK.js → conversation-wiki-populator-L7O6F3BB.js} +1 -1
- package/dist/{crdt-sync-KXETGV45.js → crdt-sync-R6YROKDH.js} +1 -1
- package/dist/{crm-webhook-JMOAHTJ6.js → crm-webhook-WK3PYJJK.js} +2 -2
- package/dist/{cto-delegation-gate-IJ3KQIKF.js → cto-delegation-gate-5JZORQIT.js} +12 -12
- package/dist/{daemon-auth-2IZACWSG.js → daemon-auth-2HEOL6VG.js} +2 -2
- package/dist/{daemon-orchestration-ZCY4GEI3.js → daemon-orchestration-BJ3T5MMF.js} +16 -15
- package/dist/{db-backup-HLX5OLIV.js → db-backup-EWS52P2W.js} +2 -2
- package/dist/{dreaming-2CJML3TU.js → dreaming-BOSBDRI3.js} +13 -13
- package/dist/{entity-boost-T5IYWWDZ.js → entity-boost-6ZVX7DFB.js} +26 -2
- package/dist/{exe-drift-P5OIRNSH.js → exe-drift-WRE6RADZ.js} +4 -4
- package/dist/{exe-export-QQL2H322.js → exe-export-7N5PBCMK.js} +8 -8
- package/dist/{exe-import-V4RJCUEP.js → exe-import-YOOE7S3H.js} +8 -8
- package/dist/{exe-key-MENJGDD7.js → exe-key-GXJSTCX2.js} +4 -4
- package/dist/{exe-org-3FNET2J7.js → exe-org-42YMQL75.js} +2 -2
- package/dist/{exe-snapshot-YRARQE7F.js → exe-snapshot-ODUCFW7G.js} +18 -18
- package/dist/{fast-db-init-HIJWWKAO.js → fast-db-init-YSR7RMVZ.js} +1 -1
- package/dist/{founder-context-BQ5NBDUV.js → founder-context-Q2HUCZX4.js} +2 -2
- package/dist/gateway/index.js +9 -9
- package/dist/{gateway-client-YGSA5QMC.js → gateway-client-4QXHKN5C.js} +1 -1
- package/dist/{git-staleness-IHTKCUMN.js → git-staleness-BJDTCDPC.js} +3 -3
- package/dist/{git-task-sweep-5ZPNQS7Y.js → git-task-sweep-L3U3T5HM.js} +13 -13
- package/dist/{global-procedures-XHDIZRJU.js → global-procedures-HCHEHKY2.js} +4 -4
- package/dist/{graph-auto-extract-5TPT67GP.js → graph-auto-extract-FP5C76LS.js} +3 -3
- package/dist/{hook-integrity-SB53Y7UK.js → hook-integrity-2OU3T6UC.js} +1 -1
- package/dist/hooks/bug-report-worker.js +15 -14
- package/dist/hooks/codex-stop-task-finalizer.js +15 -14
- package/dist/hooks/commit-complete.js +16 -16
- package/dist/hooks/error-recall.js +10 -10
- package/dist/hooks/exe-heartbeat-hook.js +5 -5
- package/dist/hooks/ingest-worker.js +8 -8
- package/dist/hooks/ingest.js +13 -13
- package/dist/hooks/instructions-loaded.js +7 -7
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +6 -6
- package/dist/hooks/post-compact.js +15 -15
- package/dist/hooks/post-tool-combined.js +7 -7
- package/dist/hooks/pre-compact.js +20 -20
- package/dist/hooks/pre-tool-use.js +28 -25
- package/dist/hooks/prompt-submit.js +62 -31
- package/dist/hooks/session-end.js +26 -26
- package/dist/hooks/session-start.js +39 -15
- package/dist/hooks/stop.js +22 -22
- package/dist/hooks/subagent-stop.js +15 -15
- package/dist/hooks/summary-worker.js +32 -27
- package/dist/index.js +21 -21
- package/dist/{installer-AMZM4MLS.js → installer-AWMUCRN4.js} +7 -7
- package/dist/{installer-KT5FW4CN.js → installer-HB3NH6FG.js} +9 -9
- package/dist/{installer-HW74W3IT.js → installer-RU6EVOBL.js} +6 -6
- package/dist/{intercom-queue-RNM6EPGA.js → intercom-queue-A6UJEFIF.js} +1 -1
- package/dist/{key-backup-status-OZ2CXUDW.js → key-backup-status-4YKCV4ZV.js} +1 -1
- package/dist/lib/agent-config.js +2 -2
- package/dist/lib/cloud-sync.js +10 -8
- package/dist/lib/config.js +1 -1
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/database.js +3 -3
- package/dist/lib/db-daemon-client.js +3 -3
- package/dist/lib/db.js +3 -3
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +4 -4
- package/dist/lib/employee-templates.js +5 -5
- package/dist/lib/employees.js +3 -3
- package/dist/lib/exe-daemon-client.js +3 -3
- package/dist/lib/exe-daemon.js +105 -74
- package/dist/lib/hybrid-search.js +8 -8
- package/dist/lib/identity.js +3 -3
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +13 -13
- package/dist/lib/post-tool-memory.js +3 -3
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +4 -4
- package/dist/lib/schedules.js +8 -8
- package/dist/lib/session-registry.js +5 -5
- package/dist/lib/skill-learning.js +5 -5
- package/dist/lib/store.js +7 -7
- package/dist/lib/task-router.js +4 -4
- package/dist/lib/tasks.js +14 -13
- package/dist/lib/tmux-routing.js +12 -12
- package/dist/lib/token-spend.js +4 -4
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-XJDIL6OZ.js → license-gate-6JQQFBHS.js} +3 -3
- package/dist/mcp/register-tools.js +68 -67
- package/dist/mcp/server.js +70 -69
- 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 +16 -15
- package/dist/mcp/tools/deactivate-behavior.js +6 -6
- package/dist/mcp/tools/list-reminders.js +5 -5
- package/dist/mcp/tools/list-tasks.js +16 -15
- package/dist/mcp/tools/send-message.js +15 -15
- package/dist/mcp/tools/update-task.js +15 -14
- package/dist/{mcp-http-config-BXX3RZPR.js → mcp-http-config-XIJR5P2Z.js} +4 -4
- package/dist/{memory-cards-KRTP5GFM.js → memory-cards-H4BJJ5OK.js} +3 -3
- package/dist/{memory-graph-extractor-G532PUHC.js → memory-graph-extractor-SDGM3GVR.js} +4 -4
- package/dist/{memory-poisoning-defense-HJM3FQA3.js → memory-poisoning-defense-UVU67DGJ.js} +3 -3
- package/dist/{memory-queue-FTNBWLS4.js → memory-queue-FNT5WHXP.js} +2 -2
- package/dist/{memory-queue-client-DHSHEIHQ.js → memory-queue-client-JZCFYTWQ.js} +5 -5
- package/dist/{memory-reflection-RANRFUQL.js → memory-reflection-GGB5K35L.js} +3 -3
- package/dist/{notifications-4P2PVEOT.js → notifications-P3XQZDTH.js} +12 -12
- package/dist/{orchestration-events-IYTASMSN.js → orchestration-events-25WEKUKH.js} +4 -4
- package/dist/{orchestration-phase-SGA7PJ5G.js → orchestration-phase-C26XVKLZ.js} +2 -2
- package/dist/{orchestrator-VKVHZ4MV.js → orchestrator-VIXTY4E4.js} +14 -14
- package/dist/{pipeline-router-E4L5BDXN.js → pipeline-router-S5PE5U6B.js} +4 -4
- package/dist/{plan-limits-5O5QG55H.js → plan-limits-DGIVM42H.js} +5 -5
- package/dist/{prediction-log-OMWHW7FL.js → prediction-log-DOEOHDHS.js} +1 -1
- package/dist/{project-boot-WMI6CWRX.js → project-boot-4ZL2W7DN.js} +12 -2
- package/dist/{projection-worker-54KRNQSO.js → projection-worker-GG2W5OM3.js} +3 -3
- package/dist/{push-notifications-E2XXEWJZ.js → push-notifications-AMHVR6DF.js} +2 -2
- package/dist/{reranker-4NTUFNYT.js → reranker-UCPLQZE2.js} +2 -2
- package/dist/{review-polling-BFRJDLUA.js → review-polling-P2MWEXLR.js} +13 -13
- package/dist/runtime/index.js +15 -15
- package/dist/{session-events-KCZCWGE4.js → session-events-5CD66R6U.js} +13 -13
- package/dist/{session-kill-telemetry-TMNIDYWY.js → session-kill-telemetry-7FBHTEDN.js} +4 -4
- package/dist/{session-scope-DRZBQ32Y.js → session-scope-VMIPAZU7.js} +12 -12
- package/dist/{setup-wizard-TQKGDAHO.js → setup-wizard-BNR47URR.js} +3 -3
- package/dist/{shard-manager-G6MHCO7X.js → shard-manager-VGA2TYHM.js} +2 -2
- package/dist/{skill-refinement-Z5SWD3AM.js → skill-refinement-NRG4WWRW.js} +3 -3
- package/dist/stack-release-PFZI22WC.js +521 -0
- package/dist/{stack-update-NO5MNARG.js → stack-update-7F2E2MBJ.js} +3 -3
- package/dist/{steward-gate-7DWYS5AT.js → steward-gate-L7DJMF4C.js} +4 -4
- package/dist/{task-enforcement-2VL5J6JJ.js → task-enforcement-XQL77PZH.js} +52 -12
- package/dist/{task-scope-YHALISIB.js → task-scope-R3XKBIHL.js} +12 -12
- package/dist/{tasks-crud-JXZEBZFR.js → tasks-crud-DQOG2NPG.js} +12 -12
- package/dist/tasks-notify-4EQYG52H.js +37 -0
- package/dist/{tasks-review-PGPYJQF5.js → tasks-review-XPFJ4DSJ.js} +12 -12
- package/dist/{telemetry-upload-H7OJNBIF.js → telemetry-upload-OT5B5HUY.js} +7 -7
- package/dist/{token-budget-JJ7JQIA2.js → token-budget-D2LQKCAV.js} +3 -3
- package/dist/{tool-capability-index-WIV4K3FB.js → tool-capability-index-FAJ5ZHDF.js} +1 -1
- package/dist/{tool-telemetry-W4LFCHFT.js → tool-telemetry-QIF5BCLF.js} +1 -1
- package/dist/tui/App.js +26 -26
- package/dist/{tui-data-72U6N2DC.js → tui-data-UEV2QOR3.js} +108 -12
- package/dist/{whatsapp-config-W63RQ3AU.js → whatsapp-config-GOSELKTE.js} +7 -0
- package/dist/{worker-gate-SCSN6IHI.js → worker-gate-PRCKA23W.js} +2 -2
- package/dist/{workflow-engine-OICYBE4F.js → workflow-engine-7X6LLH3M.js} +2 -2
- package/dist/{worktree-JXN4RCWC.js → worktree-RICSCT2S.js} +5 -5
- package/package.json +1 -1
- package/release-notes.json +210 -298
- package/stack.release.json +4 -3
- package/dist/preflight-EAH2MI76.js +0 -287
- /package/dist/{chunk-H42LEGLB.js → chunk-AQBEG33D.js} +0 -0
- /package/dist/{chunk-AU5426YP.js → chunk-B7JGEDVE.js} +0 -0
- /package/dist/{chunk-YFDDTHNM.js → chunk-JXI4XUTV.js} +0 -0
- /package/dist/{chunk-SNYDRHV3.js → chunk-U3DUFHOT.js} +0 -0
- /package/dist/{chunk-N2XUH2HQ.js → chunk-VBPC7IC7.js} +0 -0
- /package/dist/{chunk-HTUJBTBM.js → chunk-VUS6WXQ3.js} +0 -0
- /package/dist/{chunk-NOLIN2YI.js → chunk-XAYRZHLV.js} +0 -0
- /package/dist/{core-memory-VOBGGB2Q.js → core-memory-4KAIKQRQ.js} +0 -0
- /package/dist/{message-queue-client-KAJN6TIJ.js → message-queue-client-S6W5VMJV.js} +0 -0
- /package/dist/{oauth-server-QEXRSXEP.js → oauth-server-2ESBZB7F.js} +0 -0
- /package/dist/{webhook-pipe-LY4XEDL7.js → webhook-pipe-ZRUVOG5H.js} +0 -0
- /package/dist/{wiki-acl-M3OR547L.js → wiki-acl-MFLSS6DE.js} +0 -0
- /package/dist/{wiki-client-MAFYBXCQ.js → wiki-client-GBPR45BQ.js} +0 -0
|
@@ -589,7 +589,7 @@ function auditHookOwnership() {
|
|
|
589
589
|
}
|
|
590
590
|
async function auditShards() {
|
|
591
591
|
try {
|
|
592
|
-
const { auditShardHealth } = await import("./shard-manager-
|
|
592
|
+
const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
|
|
593
593
|
const report = await auditShardHealth();
|
|
594
594
|
return {
|
|
595
595
|
total: report.total,
|
|
@@ -607,7 +607,7 @@ async function auditShards() {
|
|
|
607
607
|
async function auditKeyHealth() {
|
|
608
608
|
try {
|
|
609
609
|
const { getMasterKey } = await import("./lib/keychain.js");
|
|
610
|
-
const { getKeyBackupStatus } = await import("./key-backup-status-
|
|
610
|
+
const { getKeyBackupStatus } = await import("./key-backup-status-4YKCV4ZV.js");
|
|
611
611
|
const key = await getMasterKey();
|
|
612
612
|
const backup = getKeyBackupStatus();
|
|
613
613
|
return {
|
|
@@ -859,7 +859,7 @@ function formatReport(report, flags) {
|
|
|
859
859
|
return lines.join("\n");
|
|
860
860
|
}
|
|
861
861
|
async function fixNullVectors() {
|
|
862
|
-
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-
|
|
862
|
+
const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-PRCKA23W.js");
|
|
863
863
|
if (!tryAcquireWorkerSlot()) {
|
|
864
864
|
process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
|
|
865
865
|
await new Promise((r) => setTimeout(r, 5e3));
|
|
@@ -943,7 +943,7 @@ async function fixBloated(client, bloated, dryRun) {
|
|
|
943
943
|
return chunksCreated;
|
|
944
944
|
}
|
|
945
945
|
async function fixShards(dryRun) {
|
|
946
|
-
const { auditShardHealth } = await import("./shard-manager-
|
|
946
|
+
const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
|
|
947
947
|
const report = await auditShardHealth({ repair: true, dryRun });
|
|
948
948
|
return {
|
|
949
949
|
total: report.total,
|
|
@@ -982,7 +982,7 @@ function splitAtSentences(text, maxChunkSize) {
|
|
|
982
982
|
}
|
|
983
983
|
async function main(argv = process.argv.slice(2)) {
|
|
984
984
|
const flags = parseFlags(argv);
|
|
985
|
-
const { fastDbInit } = await import("./fast-db-init-
|
|
985
|
+
const { fastDbInit } = await import("./fast-db-init-YSR7RMVZ.js");
|
|
986
986
|
const client = await fastDbInit();
|
|
987
987
|
const report = await runAudit(client, flags);
|
|
988
988
|
console.log(formatReport(report, flags));
|
|
@@ -993,8 +993,8 @@ ${mode} Applying repairs...
|
|
|
993
993
|
`);
|
|
994
994
|
if (!flags.dryRun) {
|
|
995
995
|
try {
|
|
996
|
-
const { createBackup } = await import("./db-backup-
|
|
997
|
-
const backupPath = createBackup("pre-fix");
|
|
996
|
+
const { createBackup } = await import("./db-backup-EWS52P2W.js");
|
|
997
|
+
const backupPath = await createBackup("pre-fix");
|
|
998
998
|
if (backupPath) {
|
|
999
999
|
console.log(` Backup created: ${backupPath.split("/").pop()}`);
|
|
1000
1000
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ingest
|
|
3
|
-
} from "./chunk-ELRRL2NC.js";
|
|
4
1
|
import {
|
|
5
2
|
listWorkflowDefinitions,
|
|
6
3
|
runWorkflow,
|
|
7
4
|
startWorkflow
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V2GZMY6O.js";
|
|
6
|
+
import {
|
|
7
|
+
ingest
|
|
8
|
+
} from "./chunk-A4K2ZT6N.js";
|
|
9
9
|
import {
|
|
10
10
|
initCRMBridge
|
|
11
11
|
} from "./chunk-ONKIWA3R.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionScopeFilter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-F7JLZXHC.js";
|
|
4
4
|
import {
|
|
5
5
|
getClient,
|
|
6
6
|
getIdentity
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CEJO7244.js";
|
|
8
8
|
|
|
9
9
|
// src/lib/dreaming.ts
|
|
10
10
|
var DreamingEngine = class {
|
|
@@ -131,6 +131,7 @@ var DreamingEngine = class {
|
|
|
131
131
|
*/
|
|
132
132
|
identifyPatterns(review) {
|
|
133
133
|
const patterns = [];
|
|
134
|
+
const investigations = review.investigations ?? [];
|
|
134
135
|
const errorTasks = review.tasks.filter(
|
|
135
136
|
(t) => /\b(fix|bug|error|fail|broken|crash|revert)\b/i.test(t.title) || t.result && /\b(error|failed|broken|crash)\b/i.test(t.result)
|
|
136
137
|
);
|
|
@@ -188,12 +189,12 @@ var DreamingEngine = class {
|
|
|
188
189
|
confidence: 0.7
|
|
189
190
|
});
|
|
190
191
|
}
|
|
191
|
-
if (
|
|
192
|
+
if (investigations.length > 0) {
|
|
192
193
|
const catTotals = /* @__PURE__ */ new Map();
|
|
193
194
|
let totalFailed = 0;
|
|
194
195
|
let totalAttempts = 0;
|
|
195
196
|
let totalWastedMs = 0;
|
|
196
|
-
for (const inv of
|
|
197
|
+
for (const inv of investigations) {
|
|
197
198
|
totalAttempts += inv.totalAttempts;
|
|
198
199
|
totalFailed += inv.failedAttempts;
|
|
199
200
|
totalWastedMs += inv.wastedMs;
|
|
@@ -203,7 +204,7 @@ var DreamingEngine = class {
|
|
|
203
204
|
patterns.push({
|
|
204
205
|
type: "mistake",
|
|
205
206
|
description: `Investigation failure rate: ${Math.round(totalFailed / totalAttempts * 100)}% of ${totalAttempts} attempts failed (${Math.round(totalWastedMs / 6e4)}min wasted)`,
|
|
206
|
-
evidence:
|
|
207
|
+
evidence: investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
|
|
207
208
|
frequency: totalFailed,
|
|
208
209
|
confidence: Math.min(0.6 + totalFailed * 0.05, 0.95)
|
|
209
210
|
});
|
|
@@ -214,7 +215,7 @@ var DreamingEngine = class {
|
|
|
214
215
|
patterns.push({
|
|
215
216
|
type: "inefficiency",
|
|
216
217
|
description: `Top debugging failure: "${topCat}" (${topCount} times). ${topCat === "lack_of_context" ? "Agent didn't have enough code context before editing" : topCat === "lack_of_tools" ? "Agent couldn't verify the fix (missing tools)" : topCat === "lack_of_reasoning" ? "Agent had the info but drew wrong conclusion" : topCat === "lack_of_measurement" ? "Agent tested the wrong thing (API vs browser)" : topCat === "wrong_diagnosis" ? "Agent misidentified the root cause" : "Recurring failure pattern"}`,
|
|
217
|
-
evidence:
|
|
218
|
+
evidence: investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
|
|
218
219
|
frequency: topCount,
|
|
219
220
|
confidence: Math.min(0.7 + topCount * 0.05, 0.95)
|
|
220
221
|
});
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extractMemoryGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QUZVAHO7.js";
|
|
4
4
|
import {
|
|
5
5
|
flushBatch,
|
|
6
6
|
writeMemory
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-222SI7QC.js";
|
|
8
8
|
import {
|
|
9
9
|
extractKeywords
|
|
10
10
|
} from "./chunk-CHCA3ZM2.js";
|
|
11
11
|
import {
|
|
12
12
|
getActiveAgent
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MCESA5UW.js";
|
|
14
14
|
|
|
15
15
|
// src/mcp/tools/import-conversations.ts
|
|
16
16
|
import { z } from "zod";
|
|
@@ -350,7 +350,8 @@ function registerImportConversations(server) {
|
|
|
350
350
|
await flushBatch();
|
|
351
351
|
await new Promise((r) => setTimeout(r, 0));
|
|
352
352
|
if ((i + 1) % (YIELD_INTERVAL * 10) === 0) {
|
|
353
|
-
|
|
353
|
+
process.stderr.write(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored
|
|
354
|
+
`);
|
|
354
355
|
}
|
|
355
356
|
}
|
|
356
357
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isCrdtSyncEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JXI4XUTV.js";
|
|
4
4
|
import {
|
|
5
5
|
decryptSyncBlob,
|
|
6
6
|
encryptSyncBlob,
|
|
@@ -12,13 +12,13 @@ import {
|
|
|
12
12
|
loadEmployees,
|
|
13
13
|
registerBinSymlinks,
|
|
14
14
|
saveEmployees
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-CEJO7244.js";
|
|
16
16
|
import {
|
|
17
17
|
loadDeviceId
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-MOZ2YQ54.js";
|
|
19
19
|
import {
|
|
20
20
|
EXE_AI_DIR
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-VXIMSRTO.js";
|
|
22
22
|
import {
|
|
23
23
|
atomicWriteJsonSync,
|
|
24
24
|
atomicWriteSync,
|
|
@@ -70,6 +70,21 @@ var FETCH_TIMEOUT_MS = 3e4;
|
|
|
70
70
|
var PUSH_BATCH_SIZE = 5e3;
|
|
71
71
|
var ROSTER_LOCK_PATH = path.join(EXE_AI_DIR, "roster-merge.lock");
|
|
72
72
|
var LOCK_STALE_MS = 3e4;
|
|
73
|
+
var _daemonCrdtSkipLogged = false;
|
|
74
|
+
function shouldUseCrdtMergeForCloudSync() {
|
|
75
|
+
if (!isCrdtSyncEnabled()) return false;
|
|
76
|
+
if (process.env.EXE_IS_DAEMON === "1" && process.env.EXE_DAEMON_CRDT_SYNC !== "1") {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
function logDaemonCrdtSkipOnce() {
|
|
82
|
+
if (_daemonCrdtSkipLogged) return;
|
|
83
|
+
_daemonCrdtSkipLogged = true;
|
|
84
|
+
process.stderr.write(
|
|
85
|
+
"[cloud-sync] CRDT merge disabled inside daemon; using bounded SQL upsert path. Set EXE_DAEMON_CRDT_SYNC=1 only for diagnostics.\n"
|
|
86
|
+
);
|
|
87
|
+
}
|
|
73
88
|
var SYNC_COOLDOWN_MS = 1e4;
|
|
74
89
|
var _lastSyncPushVersion = -1;
|
|
75
90
|
var _lastSyncPushTimestamp = 0;
|
|
@@ -505,8 +520,8 @@ async function cloudSync(config) {
|
|
|
505
520
|
const pullResult = await cloudPull(lastPullVersion, config);
|
|
506
521
|
let pulled = 0;
|
|
507
522
|
if (pullResult.records.length > 0) {
|
|
508
|
-
if (
|
|
509
|
-
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-
|
|
523
|
+
if (shouldUseCrdtMergeForCloudSync()) {
|
|
524
|
+
const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-R6YROKDH.js");
|
|
510
525
|
initCrdtDoc();
|
|
511
526
|
importExistingMemories(
|
|
512
527
|
pullResult.records.map((rec) => ({
|
|
@@ -571,6 +586,9 @@ async function cloudSync(config) {
|
|
|
571
586
|
if (stmts.length > 0) await client.batch(stmts, "write");
|
|
572
587
|
pulled = pullResult.records.length;
|
|
573
588
|
} else {
|
|
589
|
+
if (process.env.EXE_IS_DAEMON === "1" && isCrdtSyncEnabled()) {
|
|
590
|
+
logDaemonCrdtSkipOnce();
|
|
591
|
+
}
|
|
574
592
|
try {
|
|
575
593
|
const incomingIds = pullResult.records.map((r) => sqlSafe(r.id));
|
|
576
594
|
if (incomingIds.length > 0) {
|
|
@@ -935,7 +953,7 @@ async function cloudSync(config) {
|
|
|
935
953
|
}
|
|
936
954
|
const totalMemories = await countRows("SELECT COUNT(*) as cnt FROM memories WHERE status = 'active' OR status IS NULL");
|
|
937
955
|
try {
|
|
938
|
-
const { getLatestBackup } = await import("./db-backup-
|
|
956
|
+
const { getLatestBackup } = await import("./db-backup-EWS52P2W.js");
|
|
939
957
|
const latestBackup = getLatestBackup();
|
|
940
958
|
if (latestBackup) {
|
|
941
959
|
const backupSize = statSync(latestBackup).size;
|
|
@@ -1577,34 +1595,11 @@ async function cloudPullTasks(config) {
|
|
|
1577
1595
|
if (!remoteTasks || remoteTasks.length === 0) return { pulled: 0 };
|
|
1578
1596
|
const client = getClient();
|
|
1579
1597
|
const stmts = remoteTasks.map((t) => ({
|
|
1580
|
-
sql: `INSERT INTO tasks
|
|
1598
|
+
sql: `INSERT OR IGNORE INTO tasks
|
|
1581
1599
|
(id, title, assigned_to, assigned_by, project_name, priority, status, task_file, created_at, updated_at,
|
|
1582
1600
|
blocked_by, parent_task_id, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at,
|
|
1583
1601
|
reviewer, context, complexity, session_scope, spawn_runtime, spawn_model, result)
|
|
1584
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1585
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
1586
|
-
title = excluded.title,
|
|
1587
|
-
assigned_to = excluded.assigned_to,
|
|
1588
|
-
assigned_by = excluded.assigned_by,
|
|
1589
|
-
project_name = excluded.project_name,
|
|
1590
|
-
priority = excluded.priority,
|
|
1591
|
-
status = excluded.status,
|
|
1592
|
-
task_file = excluded.task_file,
|
|
1593
|
-
updated_at = excluded.updated_at,
|
|
1594
|
-
blocked_by = excluded.blocked_by,
|
|
1595
|
-
parent_task_id = excluded.parent_task_id,
|
|
1596
|
-
budget_tokens = excluded.budget_tokens,
|
|
1597
|
-
budget_fallback_model = excluded.budget_fallback_model,
|
|
1598
|
-
tokens_used = excluded.tokens_used,
|
|
1599
|
-
tokens_warned_at = excluded.tokens_warned_at,
|
|
1600
|
-
reviewer = excluded.reviewer,
|
|
1601
|
-
context = excluded.context,
|
|
1602
|
-
complexity = excluded.complexity,
|
|
1603
|
-
session_scope = excluded.session_scope,
|
|
1604
|
-
spawn_runtime = excluded.spawn_runtime,
|
|
1605
|
-
spawn_model = excluded.spawn_model,
|
|
1606
|
-
result = excluded.result
|
|
1607
|
-
WHERE COALESCE(excluded.updated_at, '') > COALESCE(tasks.updated_at, '')`,
|
|
1602
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
1608
1603
|
args: [
|
|
1609
1604
|
sqlSafe(t.id),
|
|
1610
1605
|
sqlSafe(t.title),
|
|
@@ -2045,6 +2040,7 @@ async function cloudPullCoreMemory(config) {
|
|
|
2045
2040
|
}
|
|
2046
2041
|
|
|
2047
2042
|
export {
|
|
2043
|
+
shouldUseCrdtMergeForCloudSync,
|
|
2048
2044
|
loadPgClient,
|
|
2049
2045
|
disposeCloudSync,
|
|
2050
2046
|
pushToPostgres,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadLicense,
|
|
3
3
|
readCachedLicenseToken
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MOZ2YQ54.js";
|
|
5
5
|
import {
|
|
6
6
|
EXE_AI_DIR,
|
|
7
7
|
loadConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VXIMSRTO.js";
|
|
9
9
|
|
|
10
10
|
// src/bin/exe-support.ts
|
|
11
11
|
import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MultiAgentOrchestrator
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CPXGLSIL.js";
|
|
4
4
|
import {
|
|
5
5
|
createQuietRenderer,
|
|
6
6
|
createTerminalRenderer,
|
|
@@ -206,7 +206,7 @@ function createExeOSHooks(config) {
|
|
|
206
206
|
);
|
|
207
207
|
}
|
|
208
208
|
try {
|
|
209
|
-
const { listBehaviors } = await import("./behaviors-
|
|
209
|
+
const { listBehaviors } = await import("./behaviors-BL3QCHBT.js");
|
|
210
210
|
const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
|
|
211
211
|
if (behaviors.length > 0) {
|
|
212
212
|
process.stderr.write(
|
|
@@ -244,7 +244,7 @@ function createExeOSHooks(config) {
|
|
|
244
244
|
const ALLOWED_RE = /^(Bash|Edit|Write|Read|Glob|Grep|Agent|mcp__.*)$/;
|
|
245
245
|
if (!ALLOWED_RE.test(toolName)) return;
|
|
246
246
|
try {
|
|
247
|
-
const { extractSemanticText } = await import("./content-extractor-
|
|
247
|
+
const { extractSemanticText } = await import("./content-extractor-EYRVGD6O.js");
|
|
248
248
|
const { writeMemory } = await import("./lib/store.js");
|
|
249
249
|
const toolInput = block.input ?? {};
|
|
250
250
|
const toolResponse = result.isError ? { error: result.content } : { output: result.content };
|
|
@@ -327,7 +327,7 @@ function createExeOSHooks(config) {
|
|
|
327
327
|
async onSubagentStop(_reason) {
|
|
328
328
|
try {
|
|
329
329
|
const { getClient } = await import("./lib/database.js");
|
|
330
|
-
const { sessionScopeFilter } = await import("./task-scope-
|
|
330
|
+
const { sessionScopeFilter } = await import("./task-scope-R3XKBIHL.js");
|
|
331
331
|
const client = getClient();
|
|
332
332
|
const ehScope = sessionScopeFilter();
|
|
333
333
|
const tasks = await client.execute({
|
|
@@ -419,7 +419,7 @@ function createExeOSHooks(config) {
|
|
|
419
419
|
try {
|
|
420
420
|
const { writeMemory, flushBatch } = await import("./lib/store.js");
|
|
421
421
|
const { getClient } = await import("./lib/database.js");
|
|
422
|
-
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-
|
|
422
|
+
const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-R3XKBIHL.js");
|
|
423
423
|
const client = getClient();
|
|
424
424
|
const cpScope = cpScopeFilter();
|
|
425
425
|
const tasks = await client.execute({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CEJO7244.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/memory-graph-extractor.ts
|
|
6
6
|
function entityId(type, name) {
|
|
@@ -247,7 +247,7 @@ async function upsertMemoryGraph(result, memoryId) {
|
|
|
247
247
|
});
|
|
248
248
|
}
|
|
249
249
|
try {
|
|
250
|
-
const { createCoOccurrenceEdges } = await import("./co-occurrence-
|
|
250
|
+
const { createCoOccurrenceEdges } = await import("./co-occurrence-QARWYUAY.js");
|
|
251
251
|
await createCoOccurrenceEdges(result.entities, memoryId);
|
|
252
252
|
} catch {
|
|
253
253
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureDaemonToken,
|
|
3
3
|
readDaemonToken
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7IZWLMTP.js";
|
|
5
5
|
import {
|
|
6
6
|
requestRestart
|
|
7
7
|
} from "./chunk-PWMMIGVQ.js";
|
|
8
8
|
import {
|
|
9
9
|
EXE_AI_DIR
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VXIMSRTO.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/exe-daemon-client.ts
|
|
13
13
|
import net from "net";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
createCRMWebhookHandler,
|
|
21
21
|
parseTwentyWebhook
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-LQSFP2BV.js";
|
|
23
23
|
import {
|
|
24
24
|
OllamaProvider
|
|
25
25
|
} from "./chunk-FWFFZGSC.js";
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
retryWithBackoff,
|
|
50
50
|
routeMessage,
|
|
51
51
|
validateGatewayConfig
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-NRVV4Y5V.js";
|
|
53
53
|
import {
|
|
54
54
|
getAccountByName,
|
|
55
55
|
getAccountByPhoneNumberId,
|
|
@@ -14,19 +14,39 @@ function registryProxyOptionsFromEnv(env = process.env) {
|
|
|
14
14
|
upstreamUsername: env.EXE_REGISTRY_PROXY_UPSTREAM_USERNAME || env.GHCR_USERNAME || "askexe",
|
|
15
15
|
upstreamToken,
|
|
16
16
|
pullTokens,
|
|
17
|
-
allowedNamespace: env.EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE || "askexe"
|
|
17
|
+
allowedNamespace: env.EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE || "askexe",
|
|
18
|
+
licenseValidatorUrl: env.EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL || ""
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
function assertRegistryProxyConfig(options) {
|
|
21
22
|
if (!options.upstreamToken) throw new Error("EXE_REGISTRY_PROXY_UPSTREAM_TOKEN or GHCR_TOKEN is required");
|
|
22
|
-
if (options.pullTokens.length === 0
|
|
23
|
-
|
|
23
|
+
if (options.pullTokens.length === 0 && !options.licenseValidatorUrl) {
|
|
24
|
+
throw new Error("EXE_REGISTRY_PROXY_PULL_TOKENS or EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL is required");
|
|
25
|
+
}
|
|
26
|
+
const namespace = options.allowedNamespace ?? "askexe";
|
|
27
|
+
if (!/^[a-z0-9._-]+$/i.test(namespace)) {
|
|
24
28
|
throw new Error("EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE must be a registry-safe namespace");
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
function timingSafeIncludes(values, candidate) {
|
|
28
32
|
return values.some((value) => value === candidate);
|
|
29
33
|
}
|
|
34
|
+
function isLicenseKeyFormat(value) {
|
|
35
|
+
return value.startsWith("exe_sk_") || value.startsWith("exe_lk_");
|
|
36
|
+
}
|
|
37
|
+
async function validateLicenseKey(licenseKey, validatorUrl) {
|
|
38
|
+
try {
|
|
39
|
+
const res = await fetch(validatorUrl, {
|
|
40
|
+
method: "POST",
|
|
41
|
+
headers: { "content-type": "application/json" },
|
|
42
|
+
body: JSON.stringify({ licenseKey }),
|
|
43
|
+
signal: AbortSignal.timeout(5e3)
|
|
44
|
+
});
|
|
45
|
+
return res.ok;
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
30
50
|
function parseBasicAuth(header) {
|
|
31
51
|
if (!header?.startsWith("Basic ")) return null;
|
|
32
52
|
try {
|
|
@@ -112,10 +132,18 @@ function createRegistryProxyServer(options) {
|
|
|
112
132
|
return;
|
|
113
133
|
}
|
|
114
134
|
const auth = parseBasicAuth(req.headers.authorization);
|
|
115
|
-
if (!auth
|
|
135
|
+
if (!auth) {
|
|
116
136
|
unauthorized(res);
|
|
117
137
|
return;
|
|
118
138
|
}
|
|
139
|
+
const isPullToken = timingSafeIncludes(options.pullTokens, auth.password);
|
|
140
|
+
if (!isPullToken) {
|
|
141
|
+
const licenseOk = options.licenseValidatorUrl && isLicenseKeyFormat(auth.password) ? await validateLicenseKey(auth.password, options.licenseValidatorUrl) : false;
|
|
142
|
+
if (!licenseOk) {
|
|
143
|
+
unauthorized(res);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
119
147
|
const upstreamUrl = new URL(requestUrl.pathname + requestUrl.search, upstream.origin);
|
|
120
148
|
const headers = new Headers();
|
|
121
149
|
for (const [key, value] of Object.entries(req.headers)) {
|