@askexenow/exe-os 0.9.279 → 0.9.280
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-2G5ARPXZ.js +26 -0
- package/dist/active-agent-2IAUPOJO.js +27 -0
- package/dist/agentic-ontology-YLZRGG7G.js +25 -0
- package/dist/backfill-metadata-GHUTESVD.js +599 -0
- package/dist/backfill-metadata-MSIZ5PV2.js +599 -0
- package/dist/backfill-metadata-SKUAF4QY.js +599 -0
- package/dist/backfill-metadata-WXUP5OVY.js +599 -0
- package/dist/behaviors-27D52NU4.js +39 -0
- package/dist/behaviors-BHIVZRAN.js +39 -0
- package/dist/behaviors-HAEVJHQN.js +39 -0
- package/dist/behaviors-LDDK7WEB.js +39 -0
- package/dist/bin/agentic-ontology-backfill.js +6 -6
- package/dist/bin/agentic-reflection-backfill.js +7 -7
- package/dist/bin/agentic-semantic-label.js +6 -6
- package/dist/bin/backfill-conversations.js +7 -7
- package/dist/bin/backfill-responses.js +7 -7
- package/dist/bin/backfill-vectors.js +9 -9
- package/dist/bin/bulk-sync-postgres.js +7 -7
- package/dist/bin/cc-doctor.js +4 -4
- package/dist/bin/cleanup-stale-review-tasks.js +9 -9
- package/dist/bin/cli.js +151 -16
- package/dist/bin/deferred-daemon-restart.js +1 -1
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +7 -7
- package/dist/bin/exe-assign.js +9 -9
- package/dist/bin/exe-boot.js +17 -17
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +5 -5
- package/dist/bin/exe-dispatch.js +9 -9
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +8 -8
- package/dist/bin/exe-forget.js +7 -7
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +4 -4
- package/dist/bin/exe-heartbeat.js +9 -9
- package/dist/bin/exe-kill.js +13 -13
- package/dist/bin/exe-launch-agent.js +17 -17
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +10 -10
- package/dist/bin/exe-pending-notifications.js +9 -9
- package/dist/bin/exe-pending-reviews.js +9 -9
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +12 -12
- package/dist/bin/exe-search.js +6 -6
- package/dist/bin/exe-session-cleanup.js +15 -15
- package/dist/bin/exe-settings.js +4 -4
- package/dist/bin/exe-start-codex.js +24 -13
- package/dist/bin/exe-start-opencode.js +9 -9
- package/dist/bin/exe-start.sh +2 -2
- package/dist/bin/exe-status.js +10 -10
- package/dist/bin/exe-support.js +1 -1
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/exe-watchdog.js +52 -4
- package/dist/bin/git-sweep.js +10 -10
- package/dist/bin/graph-backfill.js +7 -7
- package/dist/bin/graph-export.js +6 -6
- 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 +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/scan-tasks.js +9 -9
- package/dist/bin/setup.js +2 -2
- package/dist/bin/shard-migrate.js +5 -5
- package/dist/capability-cards-JG75HHOF.js +88 -0
- package/dist/capacity-monitor-CNW7PRLG.js +50 -0
- package/dist/capacity-monitor-HET7G4MG.js +50 -0
- package/dist/capacity-monitor-SAY7CD46.js +50 -0
- package/dist/capacity-monitor-V7LY63U6.js +50 -0
- package/dist/catchup-brief-E7IF2QGR.js +154 -0
- package/dist/catchup-brief-JPOHC6UH.js +154 -0
- package/dist/catchup-brief-JQID2BF7.js +154 -0
- package/dist/catchup-brief-RW5GN43K.js +154 -0
- package/dist/chunk-2IA7BLFA.js +2078 -0
- package/dist/chunk-2UATPAHA.js +244 -0
- package/dist/chunk-2XEWT25L.js +290 -0
- package/dist/chunk-2ZFUZKF5.js +197 -0
- package/dist/chunk-37C3FRF2.js +1352 -0
- package/dist/chunk-3ABB3GEN.js +97 -0
- package/dist/chunk-3FCQSK7F.js +4318 -0
- package/dist/chunk-3LEZZS52.js +2113 -0
- package/dist/chunk-3O46YCET.js +30 -0
- package/dist/chunk-3SDHTGTT.js +369 -0
- package/dist/chunk-3XLXETYH.js +128 -0
- package/dist/chunk-433KKYLZ.js +539 -0
- package/dist/chunk-4CCAANIM.js +85 -0
- package/dist/chunk-4J5TKW7C.js +1352 -0
- package/dist/chunk-4QN4XAB5.js +227 -0
- package/dist/chunk-4T2F5SJA.js +2078 -0
- package/dist/chunk-52HOURUP.js +369 -0
- package/dist/chunk-52XEYRFA.js +362 -0
- package/dist/chunk-54XM4CYO.js +1076 -0
- package/dist/chunk-5BECNOD5.js +14219 -0
- package/dist/chunk-5BUPCYCN.js +604 -0
- package/dist/chunk-5CVQOWOY.js +1350 -0
- package/dist/chunk-5DGFPLCO.js +214 -0
- package/dist/chunk-5DSH4NNZ.js +731 -0
- package/dist/chunk-5MCJQCAM.js +128 -0
- package/dist/chunk-5OCQ4NMK.js +284 -0
- package/dist/chunk-5ODRK4TE.js +1076 -0
- package/dist/chunk-5QDLLWZ3.js +510 -0
- package/dist/chunk-5TT4VL25.js +167 -0
- package/dist/chunk-5VV3WZB6.js +76 -0
- package/dist/chunk-6H74SOGI.js +204 -0
- package/dist/chunk-6M74TBVW.js +290 -0
- package/dist/chunk-6MDKSLYM.js +123 -0
- package/dist/chunk-6OFFJSL5.js +33 -0
- package/dist/chunk-6ST7MMLG.js +240 -0
- package/dist/chunk-6WFUH2B4.js +345 -0
- package/dist/chunk-74YEBPGM.js +271 -0
- package/dist/chunk-77C3E5LS.js +54 -0
- package/dist/chunk-7EAYV7G2.js +345 -0
- package/dist/chunk-7FT4TXF3.js +4318 -0
- package/dist/chunk-7L2EV3XX.js +366 -0
- package/dist/chunk-7MAQO7FA.js +394 -0
- package/dist/chunk-7NPWPF2X.js +712 -0
- package/dist/chunk-7NWWQ6QX.js +1094 -0
- package/dist/chunk-AB5QAKU3.js +1119 -0
- package/dist/chunk-AEQOKSU4.js +214 -0
- package/dist/chunk-AFPNLGJJ.js +377 -0
- package/dist/chunk-ARWKPNWX.js +284 -0
- package/dist/chunk-B3UT6H2X.js +14219 -0
- package/dist/chunk-BDEB2THB.js +127 -0
- package/dist/chunk-BIISXDSB.js +50 -0
- package/dist/chunk-BOCQAH6E.js +171 -0
- package/dist/chunk-BVETHEMM.js +456 -0
- package/dist/chunk-C3N2MXIP.js +85 -0
- package/dist/chunk-C3PAAUNW.js +54 -0
- package/dist/chunk-C7CRZGD7.js +81 -0
- package/dist/chunk-CAQE2WME.js +214 -0
- package/dist/chunk-CAWCO2VR.js +2078 -0
- package/dist/chunk-CB4SB3VJ.js +377 -0
- package/dist/chunk-CFLJBUHT.js +1094 -0
- package/dist/chunk-CITYIYX5.js +89 -0
- package/dist/chunk-CLBCRQWU.js +210 -0
- package/dist/chunk-D5IPAFJO.js +82 -0
- package/dist/chunk-DA53BA7V.js +271 -0
- package/dist/chunk-DHBIRCFL.js +290 -0
- package/dist/chunk-DHP3ISXV.js +185 -0
- package/dist/chunk-DIAOAGZ6.js +38 -0
- package/dist/chunk-DJ2MBAAF.js +280 -0
- package/dist/chunk-DKH2VU3V.js +97 -0
- package/dist/chunk-DOTMUSXW.js +81 -0
- package/dist/chunk-DQM5DO5S.js +128 -0
- package/dist/chunk-EGFKI6W2.js +129 -0
- package/dist/chunk-EMA5YFAV.js +362 -0
- package/dist/chunk-EQQNJ4B3.js +128 -0
- package/dist/chunk-EVVR5QCW.js +290 -0
- package/dist/chunk-EXECVV2I.js +539 -0
- package/dist/chunk-F73FLMUA.js +668 -0
- package/dist/chunk-FECRU7AB.js +221 -0
- package/dist/chunk-FGMF5K2G.js +231 -0
- package/dist/chunk-FIWKVHEU.js +204 -0
- package/dist/chunk-FJ5WSXU5.js +97 -0
- package/dist/chunk-FLBMX6YY.js +75 -0
- package/dist/chunk-FLKGAL3F.js +333 -0
- package/dist/chunk-FRXQSRTO.js +1076 -0
- package/dist/chunk-FVHQL6ND.js +89 -0
- package/dist/chunk-G2FYKVRB.js +54 -0
- package/dist/chunk-G4RPL2RH.js +333 -0
- package/dist/chunk-GACE3UCH.js +271 -0
- package/dist/chunk-GAQ2OCPU.js +204 -0
- package/dist/chunk-GMM3ALHG.js +1350 -0
- package/dist/chunk-GSNDMSWZ.js +1119 -0
- package/dist/chunk-H4IGERTU.js +712 -0
- package/dist/chunk-HCIMNY45.js +2078 -0
- package/dist/chunk-HKB4GOGL.js +159 -0
- package/dist/chunk-HMMM6YFN.js +1068 -0
- package/dist/chunk-HVKPZCXA.js +271 -0
- package/dist/chunk-HZJDZ6NX.js +89 -0
- package/dist/chunk-I5BYXBAD.js +1350 -0
- package/dist/chunk-I6NQVJYF.js +97 -0
- package/dist/chunk-I6YJU2DE.js +128 -0
- package/dist/chunk-I7GRBEFS.js +690 -0
- package/dist/chunk-IFYEMOZG.js +85 -0
- package/dist/chunk-IHR5L3YV.js +244 -0
- package/dist/chunk-ILIAYMKP.js +362 -0
- package/dist/chunk-IPZ4JWBG.js +4318 -0
- package/dist/chunk-IQHXWJ2Q.js +402 -0
- package/dist/chunk-J2PDHWJV.js +448 -0
- package/dist/chunk-J373WY35.js +82 -0
- package/dist/chunk-JAZEO27N.js +1094 -0
- package/dist/chunk-JDSJ3NU7.js +836 -0
- package/dist/chunk-JMK2BOGQ.js +2113 -0
- package/dist/chunk-JS2KQWMD.js +377 -0
- package/dist/chunk-JU42WYSP.js +448 -0
- package/dist/chunk-K26DLCUP.js +299 -0
- package/dist/chunk-K4JTUUWC.js +1094 -0
- package/dist/chunk-KBUQ4X5Y.js +1076 -0
- package/dist/chunk-KFSW4EKI.js +50 -0
- package/dist/chunk-KT2XEGXZ.js +345 -0
- package/dist/chunk-KZ57MNYJ.js +562 -0
- package/dist/chunk-LFAX3MCC.js +668 -0
- package/dist/chunk-LJZZS4B5.js +81 -0
- package/dist/chunk-LNV6OOHY.js +150 -0
- package/dist/chunk-LYH3ZLYF.js +197 -0
- package/dist/chunk-M2QK3YD5.js +214 -0
- package/dist/chunk-M5N2TE3L.js +76 -0
- package/dist/chunk-MJ44I6HG.js +244 -0
- package/dist/chunk-MRRYZQUS.js +510 -0
- package/dist/chunk-MZV4HV2T.js +363 -0
- package/dist/chunk-N663LPHD.js +97 -0
- package/dist/chunk-NDG4GHYH.js +171 -0
- package/dist/chunk-NGK4DUTW.js +85 -0
- package/dist/chunk-O25CS3BH.js +836 -0
- package/dist/chunk-OADURIIN.js +258 -0
- package/dist/chunk-OCYNSIQR.js +204 -0
- package/dist/chunk-OGYVGJ7F.js +402 -0
- package/dist/chunk-OUKLRG7K.js +54 -0
- package/dist/chunk-OVOWVZXV.js +127 -0
- package/dist/chunk-P3AUAXMW.js +712 -0
- package/dist/chunk-P3YEMU7L.js +167 -0
- package/dist/chunk-P73YSDV7.js +284 -0
- package/dist/chunk-PAMQBA5K.js +157 -0
- package/dist/chunk-PDOGDOO6.js +81 -0
- package/dist/chunk-PDSMTX4H.js +448 -0
- package/dist/chunk-PN5VKI6G.js +448 -0
- package/dist/chunk-PW4S2SN7.js +14219 -0
- package/dist/chunk-PWJI2O5R.js +171 -0
- package/dist/chunk-PZLB7XHF.js +1119 -0
- package/dist/chunk-QLBF5REP.js +731 -0
- package/dist/chunk-QMU256CS.js +262 -0
- package/dist/chunk-QMVUSITJ.js +539 -0
- package/dist/chunk-QOWE36S5.js +1119 -0
- package/dist/chunk-QRLP3WDY.js +373 -0
- package/dist/chunk-QWFF3NWP.js +382 -0
- package/dist/chunk-RUF7DGXX.js +1350 -0
- package/dist/chunk-S5JWN7XT.js +382 -0
- package/dist/chunk-SEIYC4D4.js +197 -0
- package/dist/chunk-SFQXO7I6.js +1352 -0
- package/dist/chunk-SO4SCJZ2.js +362 -0
- package/dist/chunk-SOLGWOCM.js +836 -0
- package/dist/chunk-SVHHWATZ.js +377 -0
- package/dist/chunk-SVOMFAJM.js +50 -0
- package/dist/chunk-SYIROM36.js +197 -0
- package/dist/chunk-SYSDSINS.js +76 -0
- package/dist/chunk-T5XMAQAC.js +85 -0
- package/dist/chunk-TGHIBL4B.js +244 -0
- package/dist/chunk-TH22CNKK.js +70 -0
- package/dist/chunk-TJMNFB2W.js +58 -0
- package/dist/chunk-TWPNURFU.js +50 -0
- package/dist/chunk-U3PEZZ7D.js +712 -0
- package/dist/chunk-U76CXW3D.js +55 -0
- package/dist/chunk-UJUPYSVY.js +333 -0
- package/dist/chunk-UKVPGFD4.js +4318 -0
- package/dist/chunk-UVD2VXDC.js +127 -0
- package/dist/chunk-V6M2GKUD.js +89 -0
- package/dist/chunk-VD5NF6RG.js +348 -0
- package/dist/chunk-VFPBTJBN.js +58 -0
- package/dist/chunk-VIFBK7VL.js +510 -0
- package/dist/chunk-VNBHLJTU.js +76 -0
- package/dist/chunk-VO73AAFF.js +539 -0
- package/dist/chunk-VOZL5CBT.js +731 -0
- package/dist/chunk-WK2X6PE6.js +167 -0
- package/dist/chunk-WYU7FFTV.js +127 -0
- package/dist/chunk-WZLKGEUJ.js +510 -0
- package/dist/chunk-X46O77S4.js +630 -0
- package/dist/chunk-X6C2EL46.js +836 -0
- package/dist/chunk-XZ2KJ3OG.js +103 -0
- package/dist/chunk-Y2PCFIJE.js +345 -0
- package/dist/chunk-Y5OXHXCP.js +731 -0
- package/dist/chunk-YKRQXHXX.js +1352 -0
- package/dist/chunk-YMUH7TWT.js +382 -0
- package/dist/chunk-YO43YXZS.js +1076 -0
- package/dist/chunk-YWN6DKZJ.js +181 -0
- package/dist/chunk-Z42MXYWW.js +691 -0
- package/dist/chunk-Z75DAPMI.js +14219 -0
- package/dist/chunk-ZDCRV6PH.js +58 -0
- package/dist/chunk-ZDIKSXMV.js +58 -0
- package/dist/chunk-ZFU7SITA.js +284 -0
- package/dist/chunk-ZGBIUKNK.js +668 -0
- package/dist/chunk-ZJP3ZONM.js +3208 -0
- package/dist/chunk-ZLXATOXN.js +167 -0
- package/dist/chunk-ZM5WXR57.js +382 -0
- package/dist/chunk-ZQ4CBSJ3.js +171 -0
- package/dist/chunk-ZQXOZ4U2.js +14219 -0
- package/dist/chunk-ZTS2KRU5.js +333 -0
- package/dist/co-activation-PLLVFEDK.js +73 -0
- package/dist/co-occurrence-OIK6WLXN.js +94 -0
- package/dist/co-occurrence-QB4MQSY7.js +94 -0
- package/dist/code-context-index-CG4P2JZI.js +30 -0
- package/dist/conversation-entity-extractor-ZN3J4WGY.js +114 -0
- package/dist/core-memory-D3AWRAMA.js +110 -0
- package/dist/core-memory-JUTA3DWM.js +110 -0
- package/dist/core-memory-NW6GT543.js +110 -0
- package/dist/core-memory-TPY5XO3E.js +110 -0
- package/dist/crdt-sync-6GDTEJBT.js +33 -0
- package/dist/crm-webhook-2BYS65SZ.js +10 -0
- package/dist/crm-webhook-3AZQWNMQ.js +10 -0
- package/dist/crm-webhook-AUYAFOV3.js +10 -0
- package/dist/crm-webhook-VM72DSLW.js +10 -0
- package/dist/cto-delegation-gate-GQNNQON7.js +279 -0
- package/dist/cto-delegation-gate-LTI5OTGF.js +279 -0
- package/dist/cto-delegation-gate-Q2IIOK3T.js +279 -0
- package/dist/cto-delegation-gate-VVDKZGQ6.js +279 -0
- package/dist/daemon-orchestration-2ZD3N5AP.js +138 -0
- package/dist/daemon-orchestration-3J4K62I5.js +138 -0
- package/dist/daemon-orchestration-L47GDSJG.js +138 -0
- package/dist/daemon-orchestration-ZAQF437L.js +138 -0
- package/dist/db-backup-L64NT6GW.js +33 -0
- package/dist/doc-graph-extractor-7EXXBHN5.js +132 -0
- package/dist/doc-graph-extractor-M3G5IZAT.js +132 -0
- package/dist/dreaming-3CVAKE4O.js +33 -0
- package/dist/dreaming-DMKA2UH6.js +33 -0
- package/dist/dreaming-EP3WNLQ3.js +33 -0
- package/dist/dreaming-INJT3QVE.js +33 -0
- package/dist/entity-boost-DVQU26WN.js +375 -0
- package/dist/exe-drift-ZCUGNELY.js +69 -0
- package/dist/exe-export-5LKQALH2.js +75 -0
- package/dist/exe-export-7CME3MXT.js +75 -0
- package/dist/exe-export-GQMMQWON.js +75 -0
- package/dist/exe-export-Q5O2YADE.js +75 -0
- package/dist/exe-import-25AMCNVB.js +78 -0
- package/dist/exe-import-DMXDVIF2.js +78 -0
- package/dist/exe-import-EHJM6OZW.js +78 -0
- package/dist/exe-import-J6BPUDJ3.js +78 -0
- package/dist/exe-key-4SRZOC5W.js +580 -0
- package/dist/exe-key-5QK7VKBJ.js +580 -0
- package/dist/exe-key-GFLJRRHG.js +580 -0
- package/dist/exe-key-XWTYIY3B.js +580 -0
- package/dist/exe-snapshot-CR2AFYRP.js +337 -0
- package/dist/exe-snapshot-DWXKW6SC.js +337 -0
- package/dist/exe-snapshot-IYPOSAWY.js +337 -0
- package/dist/exe-snapshot-QIIQZXZM.js +337 -0
- package/dist/fast-db-init-BSUZIK6R.js +7 -0
- package/dist/fast-db-init-MAISJZ3L.js +7 -0
- package/dist/fast-db-init-WKK5SPFG.js +7 -0
- package/dist/fast-db-init-XZ6WHYNC.js +7 -0
- package/dist/gateway/index.js +8 -8
- package/dist/gateway-client-GRBOJQYC.js +11 -0
- package/dist/git-staleness-G7347RT3.js +111 -0
- package/dist/git-task-sweep-GGTGURJ6.js +41 -0
- package/dist/git-task-sweep-TQA4QTSM.js +41 -0
- package/dist/git-task-sweep-UCJ3KLDS.js +41 -0
- package/dist/git-task-sweep-XFX3OTBY.js +41 -0
- package/dist/global-procedures-3NYFIROX.js +21 -0
- package/dist/global-procedures-NOBNQDNA.js +21 -0
- package/dist/global-procedures-ZFIEDO7E.js +21 -0
- package/dist/gotrue-session-2IT7MDGW.js +171 -0
- package/dist/graph-auto-extract-HC576FNS.js +182 -0
- package/dist/graph-auto-extract-RMZT3EYN.js +182 -0
- package/dist/graph-rag-HFBYZF3M.js +31 -0
- package/dist/hooks/bug-report-worker.js +11 -11
- package/dist/hooks/codex-stop-task-finalizer.js +11 -11
- package/dist/hooks/commit-complete.js +11 -11
- package/dist/hooks/error-recall.js +7 -7
- package/dist/hooks/exe-heartbeat-hook.js +3 -3
- package/dist/hooks/ingest-worker.js +3 -3
- package/dist/hooks/ingest.js +6 -6
- package/dist/hooks/instructions-loaded.js +4 -4
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +4 -4
- package/dist/hooks/post-compact.js +10 -10
- package/dist/hooks/post-tool-combined.js +6 -6
- package/dist/hooks/pre-compact.js +14 -14
- package/dist/hooks/pre-tool-use.js +14 -14
- package/dist/hooks/prompt-submit.js +24 -24
- package/dist/hooks/session-end.js +19 -19
- package/dist/hooks/session-start.js +11 -11
- package/dist/hooks/stop.js +17 -17
- package/dist/hooks/subagent-stop.js +10 -10
- package/dist/hooks/summary-worker.js +18 -18
- package/dist/index.js +17 -17
- package/dist/installer-3QCLMBSY.js +297 -0
- package/dist/installer-6SAIKLV6.js +343 -0
- package/dist/installer-RN25LFX6.js +39 -0
- package/dist/lib/cloud-sync.js +4 -4
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-daemon-client.js +2 -2
- package/dist/lib/db.js +2 -2
- package/dist/lib/embedder.js +3 -3
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon-client.js +2 -2
- package/dist/lib/exe-daemon.js +41 -41
- package/dist/lib/hybrid-search.js +6 -6
- package/dist/lib/identity.js +2 -2
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/messaging.js +9 -9
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +6 -6
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +7 -7
- package/dist/lib/store.js +5 -5
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +10 -10
- package/dist/lib/tmux-routing.js +8 -8
- package/dist/lib/token-spend.js +3 -3
- package/dist/lib/ws-client.js +1 -1
- package/dist/mcp/register-tools.js +63 -63
- package/dist/mcp/server.js +64 -64
- package/dist/mcp/tools/complete-reminder.js +4 -4
- package/dist/mcp/tools/create-reminder.js +4 -4
- package/dist/mcp/tools/create-task.js +12 -12
- package/dist/mcp/tools/deactivate-behavior.js +8 -8
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +12 -12
- package/dist/mcp/tools/send-message.js +11 -11
- package/dist/mcp/tools/update-task.js +11 -11
- package/dist/mcp-http-config-YFZWGX4W.js +28 -0
- package/dist/memory-cards-AKXTAQZG.js +179 -0
- package/dist/memory-graph-extractor-O7KEZROX.js +21 -0
- package/dist/memory-graph-extractor-Q66O22GE.js +21 -0
- package/dist/memory-poisoning-defense-ADIGRTRJ.js +223 -0
- package/dist/memory-queue-client-4ZAOMEJR.js +16 -0
- package/dist/memory-reflection-RAWMCOLK.js +243 -0
- package/dist/message-queue-client-EDB46D6M.js +92 -0
- package/dist/notifications-JRKUMV4T.js +46 -0
- package/dist/notifications-MOTAHF7S.js +46 -0
- package/dist/notifications-SSRKYMKV.js +46 -0
- package/dist/notifications-XIMWAK7P.js +46 -0
- package/dist/orchestration-events-H6EZJEMV.js +26 -0
- package/dist/orchestrator-BCSQHCCZ.js +34 -0
- package/dist/orchestrator-J2EDJBWJ.js +34 -0
- package/dist/orchestrator-QODIF3U2.js +34 -0
- package/dist/orchestrator-W6AO4RZM.js +34 -0
- package/dist/pipeline-router-2IFHZ5KC.js +14 -0
- package/dist/pipeline-router-VCJCI5W7.js +14 -0
- package/dist/pipeline-router-VEP3NSZF.js +14 -0
- package/dist/pipeline-router-WV34UOJV.js +14 -0
- package/dist/plan-limits-IQK6XLCF.js +27 -0
- package/dist/project-boot-QWRBVBFG.js +299 -0
- package/dist/projection-worker-74KP2LHZ.js +1034 -0
- package/dist/projection-worker-GJ2M2BUF.js +1034 -0
- package/dist/projection-worker-HOLOWWX7.js +1034 -0
- package/dist/projection-worker-JEC7EM5Y.js +1034 -0
- package/dist/reranker-SIUVV2JD.js +19 -0
- package/dist/reranker-TEEWFPPU.js +19 -0
- package/dist/reranker-USWG7L7N.js +19 -0
- package/dist/reranker-VI3T6F2P.js +19 -0
- package/dist/retrieval-health-WIEQKVAV.js +7 -0
- package/dist/review-polling-DNBH4D7X.js +125 -0
- package/dist/review-polling-FAG2O7R4.js +125 -0
- package/dist/review-polling-RRD7IIEV.js +125 -0
- package/dist/review-polling-WVH6DK22.js +125 -0
- package/dist/runtime/index.js +11 -11
- package/dist/session-events-67N3ESQN.js +37 -0
- package/dist/session-events-NCPIQK5Q.js +37 -0
- package/dist/session-events-SF75L7NG.js +37 -0
- package/dist/session-events-VTP7KQQM.js +37 -0
- package/dist/session-kill-telemetry-5MTQD4JW.js +30 -0
- package/dist/session-scope-6QDWFFGE.js +87 -0
- package/dist/session-scope-FZ7CJ2PU.js +87 -0
- package/dist/session-scope-QGR72GYJ.js +87 -0
- package/dist/session-scope-YRJWFFQ5.js +87 -0
- package/dist/setup-wizard-2MGNOCDA.js +12 -0
- package/dist/setup-wizard-2ZHU6PBC.js +12 -0
- package/dist/setup-wizard-LGMBT5MA.js +12 -0
- package/dist/setup-wizard-MC6OYLSN.js +12 -0
- package/dist/skill-refinement-645HA6R7.js +158 -0
- package/dist/skill-refinement-6S5GJPBC.js +158 -0
- package/dist/skill-refinement-7M3OO2KL.js +158 -0
- package/dist/skill-refinement-HBS65LE7.js +158 -0
- package/dist/steward-gate-JSGYBZRR.js +14 -0
- package/dist/support-outbox-TIC66SRX.js +494 -0
- package/dist/support-outbox-YLXLMEKF.js +503 -0
- package/dist/task-enforcement-7CV4AMJY.js +439 -0
- package/dist/task-enforcement-BQ4L3T2J.js +439 -0
- package/dist/task-enforcement-L5EZK5MJ.js +439 -0
- package/dist/task-enforcement-S6KEUCL6.js +439 -0
- package/dist/task-scope-47VM3OGT.js +36 -0
- package/dist/task-scope-MONXB37O.js +36 -0
- package/dist/task-scope-RPYOVJOD.js +36 -0
- package/dist/task-scope-V6BS7L5C.js +36 -0
- package/dist/tasks-crud-AMWLBEJT.js +78 -0
- package/dist/tasks-crud-LD2WCC5Z.js +78 -0
- package/dist/tasks-crud-SMVAMAK7.js +78 -0
- package/dist/tasks-crud-UVSMJ7SQ.js +78 -0
- package/dist/tasks-notify-5KWFXJBA.js +39 -0
- package/dist/tasks-notify-6Q2CJIR5.js +39 -0
- package/dist/tasks-notify-FG2NXZP6.js +39 -0
- package/dist/tasks-notify-NBHN537I.js +39 -0
- package/dist/tasks-review-333PSSFU.js +48 -0
- package/dist/tasks-review-B6VOLVVZ.js +48 -0
- package/dist/tasks-review-MFD4VTZL.js +48 -0
- package/dist/tasks-review-MYPYFT6C.js +48 -0
- package/dist/telemetry-upload-45DH7FR7.js +740 -0
- package/dist/telemetry-upload-OSTVGOIS.js +740 -0
- package/dist/telemetry-upload-PNLXKL43.js +740 -0
- package/dist/telemetry-upload-QOKD4NUY.js +740 -0
- package/dist/token-budget-RJ2VKVYI.js +85 -0
- package/dist/tool-capability-index-ANXYTG5M.js +10 -0
- package/dist/tool-telemetry-W6I2BO5E.js +17 -0
- package/dist/tui/App.js +17 -17
- package/dist/tui-data-A6PDJW45.js +259 -0
- package/dist/tui-data-GOGDXQF5.js +259 -0
- package/dist/tui-data-VIY77WXK.js +259 -0
- package/dist/tui-data-YOZSLQMZ.js +259 -0
- package/dist/wiki-acl-Z5XZ6X4K.js +111 -0
- package/dist/worker-gate-34CD6WYY.js +21 -0
- package/dist/worker-gate-7T2DKS3A.js +21 -0
- package/dist/worker-gate-LN2IHRFB.js +21 -0
- package/dist/worker-gate-MQJTGE5N.js +21 -0
- package/dist/workflow-engine-KWAYDFUW.js +28 -0
- package/dist/workflow-engine-PXQ6N3C7.js +28 -0
- package/dist/workflow-engine-TECXAR65.js +28 -0
- package/dist/workflow-engine-UWEMT2OU.js +28 -0
- package/dist/worktree-5Q4VB2LR.js +27 -0
- package/dist/worktree-sweep-5KENYHYC.js +20 -0
- package/package.json +1 -1
- package/release-notes.json +87 -24
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getActiveAgent
|
|
3
|
+
} from "./chunk-DHP3ISXV.js";
|
|
4
|
+
import {
|
|
5
|
+
listTasks
|
|
6
|
+
} from "./chunk-UKVPGFD4.js";
|
|
7
|
+
import {
|
|
8
|
+
getAgentContext
|
|
9
|
+
} from "./chunk-GJV3WDWM.js";
|
|
10
|
+
import {
|
|
11
|
+
isCoordinatorName
|
|
12
|
+
} from "./chunk-ZJP3ZONM.js";
|
|
13
|
+
|
|
14
|
+
// src/mcp/tools/list-tasks.ts
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
function registerListTasks(server) {
|
|
17
|
+
server.registerTool(
|
|
18
|
+
"list_tasks",
|
|
19
|
+
{
|
|
20
|
+
title: "List Tasks",
|
|
21
|
+
description: "Query tasks by assignee, status, project, or priority. Defaults to current project. Pass project_name='all' for all projects. When querying your own tasks, project filter is skipped automatically.",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
assigned_to: z.string().optional().describe("Filter by employee name"),
|
|
24
|
+
status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).optional().describe("Filter by status. Default: active tasks only (excludes closed/cancelled)"),
|
|
25
|
+
project_name: z.string().optional().describe("Project name. Defaults to current project. Pass 'all' for all projects."),
|
|
26
|
+
priority: z.enum(["p0", "p1", "p2"]).optional().describe("Filter by priority"),
|
|
27
|
+
cross_session: z.boolean().optional().describe("When true, return tasks from ALL coordinator sessions (read-only). Default: false.")
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
async ({ assigned_to, status, project_name, priority, cross_session }) => {
|
|
31
|
+
try {
|
|
32
|
+
const { agentId } = getActiveAgent();
|
|
33
|
+
const isReviewQueue = status === "needs_review";
|
|
34
|
+
const shouldDefaultToOwnQueue = !assigned_to && !isReviewQueue && !isCoordinatorName(agentId);
|
|
35
|
+
const effectiveAssignedTo = assigned_to ?? (shouldDefaultToOwnQueue ? agentId : void 0);
|
|
36
|
+
const effectiveReviewer = !assigned_to && isReviewQueue ? agentId : void 0;
|
|
37
|
+
const isOwnQuery = effectiveAssignedTo === agentId;
|
|
38
|
+
const callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || null;
|
|
39
|
+
const resolvedProject = project_name && project_name !== "all" ? project_name : null;
|
|
40
|
+
const effectiveCrossSession = cross_session === true;
|
|
41
|
+
const tasks = await listTasks({
|
|
42
|
+
assignedTo: effectiveAssignedTo,
|
|
43
|
+
reviewer: effectiveReviewer,
|
|
44
|
+
status,
|
|
45
|
+
projectName: resolvedProject,
|
|
46
|
+
priority,
|
|
47
|
+
crossSession: effectiveCrossSession,
|
|
48
|
+
isOwnQuery: !!isOwnQuery,
|
|
49
|
+
callerSession
|
|
50
|
+
});
|
|
51
|
+
if (tasks.length === 0) {
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text: "No tasks found." }]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const lines = tasks.map((t) => {
|
|
57
|
+
const cpIndicator = t.checkpointCount && t.checkpointCount > 0 ? ` [cp:${t.checkpointCount}]` : "";
|
|
58
|
+
let budgetNote = "";
|
|
59
|
+
if (t.budgetTokens !== null) {
|
|
60
|
+
const pct = Math.round(t.tokensUsed / t.budgetTokens * 100);
|
|
61
|
+
budgetNote = ` [${t.tokensUsed}/${t.budgetTokens} tokens, ${pct}%]`;
|
|
62
|
+
}
|
|
63
|
+
const shortId = t.id.slice(0, 8);
|
|
64
|
+
const sessionNote = cross_session && t.sessionScope ? ` [session:${t.sessionScope}]` : "";
|
|
65
|
+
return `- [${t.priority.toUpperCase()}] ${t.title} (${t.projectName}) \u2014 ${t.status}${cpIndicator}${budgetNote}${sessionNote} \u2192 ${t.assignedTo} [id:${shortId}]`;
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: `${tasks.length} task(s):
|
|
72
|
+
${lines.join("\n")}`
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
} catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: `Failed to list tasks: ${msg}` }],
|
|
80
|
+
isError: true
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
registerListTasks
|
|
89
|
+
};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import {
|
|
2
|
+
redactSecrets
|
|
3
|
+
} from "./chunk-Y25OJWOQ.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/memory-write-governor.ts
|
|
6
|
+
import { createHash } from "crypto";
|
|
7
|
+
var HIGH_VALUE_SUPERSESSION_TYPES = /* @__PURE__ */ new Set([
|
|
8
|
+
"decision",
|
|
9
|
+
"adr",
|
|
10
|
+
"behavior",
|
|
11
|
+
"procedure"
|
|
12
|
+
]);
|
|
13
|
+
var NOISE_DROP_PATTERNS = [
|
|
14
|
+
/^\s*\[📋\s+\d+\s+reviews?\s+pending\b/im,
|
|
15
|
+
/^\s*<system-reminder>[\s\S]*?<\/system-reminder>\s*$/im,
|
|
16
|
+
/^\s*The UserPromptSubmit hook checks the DB for new tasks/im,
|
|
17
|
+
/^\s*Intercom is a speedup, not delivery/im,
|
|
18
|
+
/^\s*Context bar reads as USAGE not remaining/im,
|
|
19
|
+
// Intercom noise — these repeat on every prompt and cause 18K+ duplicates
|
|
20
|
+
/^\/exe-intercom\b/i,
|
|
21
|
+
/^You have pending notifications\.\s*Run list_tasks/i,
|
|
22
|
+
/^You have open tasks\.\s*Run list_tasks/i,
|
|
23
|
+
/^You have a new P\d+ task/i,
|
|
24
|
+
/^You have more open tasks to dispatch/i,
|
|
25
|
+
/^No new tasks\.\s*(Standing by|Idle|Dashboard)/i
|
|
26
|
+
];
|
|
27
|
+
var SKIP_EMBED_PATTERNS = [
|
|
28
|
+
/tmux capture-pane\b/i,
|
|
29
|
+
/docker ps\b/i,
|
|
30
|
+
/docker images\b/i,
|
|
31
|
+
/git status\b/i,
|
|
32
|
+
/grep .*node_modules/i,
|
|
33
|
+
/npm (install|ci)\b[\s\S]*(added \d+ packages|audited \d+ packages)/i
|
|
34
|
+
];
|
|
35
|
+
function normalizeMemoryText(text) {
|
|
36
|
+
return text.replace(/\r\n/g, "\n").replace(/[ \t]+$/gm, "").replace(/\n{4,}/g, "\n\n\n").trim();
|
|
37
|
+
}
|
|
38
|
+
function classifyMemoryType(input) {
|
|
39
|
+
if (input.memory_type && input.memory_type.trim()) return input.memory_type.trim();
|
|
40
|
+
const tool = input.tool_name.toLowerCase();
|
|
41
|
+
const text = input.raw_text.toLowerCase();
|
|
42
|
+
if (tool.includes("store_decision") || tool.includes("decision")) return "decision";
|
|
43
|
+
if (tool.includes("commit") || text.includes("adr-") || text.includes("architectural decision")) return "adr";
|
|
44
|
+
if (tool.includes("store_behavior") || tool.includes("behavior")) return "behavior";
|
|
45
|
+
if (tool.includes("global_procedure") || text.includes("organization-wide procedures")) return "procedure";
|
|
46
|
+
if (tool.includes("checkpoint") || text.startsWith("context checkpoint")) return "checkpoint";
|
|
47
|
+
if (tool.includes("sessionsummary") || tool.includes("session-summary")) return "summary";
|
|
48
|
+
if (tool.includes("sessionend") || text.startsWith("session ended")) return "summary";
|
|
49
|
+
if (tool.includes("send_whatsapp") || tool.includes("conversation")) return "conversation";
|
|
50
|
+
if (tool === "store_memory" || tool === "manual") return "observation";
|
|
51
|
+
if (tool === "userprompt" || tool === "slashcommand") return "conversation";
|
|
52
|
+
return "raw";
|
|
53
|
+
}
|
|
54
|
+
function shouldDropMemory(text) {
|
|
55
|
+
const normalized = normalizeMemoryText(text);
|
|
56
|
+
if (normalized.length < 10) return { drop: true, reason: "too_short" };
|
|
57
|
+
if (NOISE_DROP_PATTERNS.some((pattern) => pattern.test(normalized))) {
|
|
58
|
+
return { drop: true, reason: "known_boilerplate_noise" };
|
|
59
|
+
}
|
|
60
|
+
return { drop: false };
|
|
61
|
+
}
|
|
62
|
+
function shouldSkipEmbedding(input) {
|
|
63
|
+
const type = classifyMemoryType(input);
|
|
64
|
+
if (HIGH_VALUE_SUPERSESSION_TYPES.has(type)) return false;
|
|
65
|
+
if (type === "raw" && input.raw_text.length > 2e4) return true;
|
|
66
|
+
if (SKIP_EMBED_PATTERNS.some((pattern) => pattern.test(input.raw_text))) return true;
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
function hashMemoryContent(text) {
|
|
70
|
+
return createHash("sha256").update(normalizeMemoryText(text)).digest("hex");
|
|
71
|
+
}
|
|
72
|
+
function scopedDedupArgs(input) {
|
|
73
|
+
return [input.contentHash, input.agentId, input.projectName, input.memoryType];
|
|
74
|
+
}
|
|
75
|
+
function governMemoryRecord(record) {
|
|
76
|
+
const redacted = redactSecrets(record.raw_text);
|
|
77
|
+
const normalized = normalizeMemoryText(redacted.text);
|
|
78
|
+
const memoryType = classifyMemoryType({
|
|
79
|
+
raw_text: normalized,
|
|
80
|
+
agent_id: record.agent_id,
|
|
81
|
+
project_name: record.project_name,
|
|
82
|
+
tool_name: record.tool_name,
|
|
83
|
+
memory_type: record.memory_type
|
|
84
|
+
});
|
|
85
|
+
const drop = shouldDropMemory(normalized);
|
|
86
|
+
const skipEmbedding = shouldSkipEmbedding({
|
|
87
|
+
raw_text: normalized,
|
|
88
|
+
agent_id: record.agent_id,
|
|
89
|
+
project_name: record.project_name,
|
|
90
|
+
tool_name: record.tool_name,
|
|
91
|
+
memory_type: memoryType
|
|
92
|
+
});
|
|
93
|
+
const trajectoryValue = record.trajectory;
|
|
94
|
+
const redactedTrajectory = typeof trajectoryValue === "string" ? redactSecrets(trajectoryValue).text : record.trajectory;
|
|
95
|
+
return {
|
|
96
|
+
record: {
|
|
97
|
+
...record,
|
|
98
|
+
raw_text: normalized,
|
|
99
|
+
memory_type: memoryType,
|
|
100
|
+
vector: skipEmbedding ? null : record.vector,
|
|
101
|
+
keywords: record.keywords ? redactSecrets(record.keywords).text : record.keywords,
|
|
102
|
+
trajectory: redactedTrajectory
|
|
103
|
+
},
|
|
104
|
+
contentHash: hashMemoryContent(normalized),
|
|
105
|
+
shouldDrop: drop.drop,
|
|
106
|
+
dropReason: drop.reason,
|
|
107
|
+
skipEmbedding,
|
|
108
|
+
hygiene: {
|
|
109
|
+
dedup: true,
|
|
110
|
+
supersession: HIGH_VALUE_SUPERSESSION_TYPES.has(memoryType)
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async function findScopedDuplicate(input) {
|
|
115
|
+
const { getClient } = await import("./lib/database.js");
|
|
116
|
+
const client = getClient();
|
|
117
|
+
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
|
+
if (input.excludeId) {
|
|
125
|
+
sql += " AND id != ?";
|
|
126
|
+
args.push(input.excludeId);
|
|
127
|
+
}
|
|
128
|
+
sql += " ORDER BY timestamp DESC LIMIT 1";
|
|
129
|
+
const result = await client.execute({ sql, args });
|
|
130
|
+
return result.rows[0]?.id ? String(result.rows[0].id) : null;
|
|
131
|
+
}
|
|
132
|
+
async function runPostWriteMemoryHygiene(memoryId) {
|
|
133
|
+
try {
|
|
134
|
+
const { getClient } = await import("./lib/database.js");
|
|
135
|
+
const client = getClient();
|
|
136
|
+
const current = await client.execute({
|
|
137
|
+
sql: `SELECT id, agent_id, project_name, memory_type, content_hash, supersedes_id,
|
|
138
|
+
importance, timestamp
|
|
139
|
+
FROM memories
|
|
140
|
+
WHERE id = ?
|
|
141
|
+
LIMIT 1`,
|
|
142
|
+
args: [memoryId]
|
|
143
|
+
});
|
|
144
|
+
const row = current.rows[0];
|
|
145
|
+
if (!row) return;
|
|
146
|
+
const memoryType = String(row.memory_type ?? "raw");
|
|
147
|
+
const contentHash = row.content_hash ? String(row.content_hash) : null;
|
|
148
|
+
const agentId = String(row.agent_id);
|
|
149
|
+
const projectName = String(row.project_name);
|
|
150
|
+
if (contentHash) {
|
|
151
|
+
await client.execute({
|
|
152
|
+
sql: `UPDATE memories
|
|
153
|
+
SET status = 'deleted',
|
|
154
|
+
outcome = COALESCE(outcome, 'superseded')
|
|
155
|
+
WHERE id != ?
|
|
156
|
+
AND content_hash = ?
|
|
157
|
+
AND agent_id = ?
|
|
158
|
+
AND project_name = ?
|
|
159
|
+
AND COALESCE(memory_type, 'raw') = ?
|
|
160
|
+
AND COALESCE(status, 'active') = 'active'`,
|
|
161
|
+
args: [memoryId, contentHash, agentId, projectName, memoryType]
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
const supersedesId = row.supersedes_id ? String(row.supersedes_id) : null;
|
|
165
|
+
if (supersedesId && HIGH_VALUE_SUPERSESSION_TYPES.has(memoryType)) {
|
|
166
|
+
const old = await client.execute({
|
|
167
|
+
sql: `SELECT importance FROM memories WHERE id = ? LIMIT 1`,
|
|
168
|
+
args: [supersedesId]
|
|
169
|
+
});
|
|
170
|
+
const oldImportance = Number(old.rows[0]?.importance ?? 0);
|
|
171
|
+
const newImportance = Number(row.importance ?? 0);
|
|
172
|
+
await client.batch([
|
|
173
|
+
{
|
|
174
|
+
sql: `UPDATE memories
|
|
175
|
+
SET status = 'archived',
|
|
176
|
+
outcome = COALESCE(outcome, 'superseded')
|
|
177
|
+
WHERE id = ?`,
|
|
178
|
+
args: [supersedesId]
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
sql: `UPDATE memories
|
|
182
|
+
SET importance = MAX(COALESCE(importance, 5), ?),
|
|
183
|
+
parent_memory_id = COALESCE(parent_memory_id, ?)
|
|
184
|
+
WHERE id = ?`,
|
|
185
|
+
args: [Math.max(oldImportance, newImportance), supersedesId, memoryId]
|
|
186
|
+
}
|
|
187
|
+
], "write");
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
process.stderr.write(
|
|
191
|
+
`[memory-governor] post-write hygiene failed for ${memoryId}: ${err instanceof Error ? err.message : String(err)}
|
|
192
|
+
`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function schedulePostWriteMemoryHygiene(memoryIds) {
|
|
197
|
+
if (process.env.EXE_SKIP_MEMORY_HYGIENE === "1") return;
|
|
198
|
+
if (memoryIds.length === 0) return;
|
|
199
|
+
const run = () => {
|
|
200
|
+
void Promise.all(memoryIds.map((id) => runPostWriteMemoryHygiene(id)));
|
|
201
|
+
};
|
|
202
|
+
if (typeof setImmediate === "function") setImmediate(run);
|
|
203
|
+
else setTimeout(run, 0);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
governMemoryRecord,
|
|
208
|
+
findScopedDuplicate,
|
|
209
|
+
schedulePostWriteMemoryHygiene
|
|
210
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
connectEmbedDaemon,
|
|
3
|
+
disconnectClient,
|
|
4
|
+
embedViaClient
|
|
5
|
+
} from "./chunk-KZ57MNYJ.js";
|
|
6
|
+
import {
|
|
7
|
+
EMBEDDING_DIM
|
|
8
|
+
} from "./chunk-FXU7JOXK.js";
|
|
9
|
+
import {
|
|
10
|
+
MODELS_DIR,
|
|
11
|
+
loadConfigSync
|
|
12
|
+
} from "./chunk-T3B5RK4H.js";
|
|
13
|
+
|
|
14
|
+
// src/lib/embedder.ts
|
|
15
|
+
var MAX_EMBED_CHARS = 24e3;
|
|
16
|
+
function prepareEmbeddingText(text, kind) {
|
|
17
|
+
const cfg = loadConfigSync();
|
|
18
|
+
const truncated = text.length > MAX_EMBED_CHARS ? text.slice(0, MAX_EMBED_CHARS) : text;
|
|
19
|
+
if (!kind || !cfg.embeddingPrefixes.enabled) return truncated;
|
|
20
|
+
const prefix = kind === "query" ? cfg.embeddingPrefixes.query : cfg.embeddingPrefixes.passage;
|
|
21
|
+
return prefix ? `${prefix}${truncated}` : truncated;
|
|
22
|
+
}
|
|
23
|
+
async function getEmbedder() {
|
|
24
|
+
const ok = await connectEmbedDaemon();
|
|
25
|
+
if (!ok) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
"Could not connect to embedding daemon. Embeddings may be disabled or the daemon may be unreachable."
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function embed(text) {
|
|
32
|
+
const priority = process.env.EXE_EMBED_PRIORITY === "low" ? "low" : "high";
|
|
33
|
+
const vector = await embedViaClient(prepareEmbeddingText(text), priority);
|
|
34
|
+
if (!vector) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
"Embedding failed: daemon unavailable or no embedding model is loaded."
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const expectedDim = loadConfigSync().embeddingDim || EMBEDDING_DIM;
|
|
40
|
+
if (vector.length !== expectedDim) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
`Embedding dimension mismatch: expected ${expectedDim}, got ${vector.length}. Ensure the configured embedding model matches config.embeddingDim.`
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
return vector;
|
|
46
|
+
}
|
|
47
|
+
async function disposeEmbedder() {
|
|
48
|
+
disconnectClient();
|
|
49
|
+
}
|
|
50
|
+
async function embedDirect(text) {
|
|
51
|
+
const llamaCpp = await import("node-llama-cpp");
|
|
52
|
+
const { existsSync } = await import("fs");
|
|
53
|
+
const path = await import("path");
|
|
54
|
+
const cfg = loadConfigSync();
|
|
55
|
+
const modelPath = path.join(MODELS_DIR, cfg.modelFile);
|
|
56
|
+
if (!existsSync(modelPath)) {
|
|
57
|
+
throw new Error(`Embedding model not found at ${modelPath}. Install or configure an embedding model to validate it.`);
|
|
58
|
+
}
|
|
59
|
+
const llama = await llamaCpp.getLlama();
|
|
60
|
+
const model = await llama.loadModel({ modelPath });
|
|
61
|
+
const context = await model.createEmbeddingContext();
|
|
62
|
+
try {
|
|
63
|
+
const embedding = await context.getEmbeddingFor(prepareEmbeddingText(text));
|
|
64
|
+
const vector = Array.from(embedding.vector);
|
|
65
|
+
const expectedDim = cfg.embeddingDim || EMBEDDING_DIM;
|
|
66
|
+
if (vector.length !== expectedDim) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
`Embedding dimension mismatch: expected ${expectedDim}, got ${vector.length}.`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
return vector;
|
|
72
|
+
} finally {
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
prepareEmbeddingText,
|
|
78
|
+
getEmbedder,
|
|
79
|
+
embed,
|
|
80
|
+
disposeEmbedder,
|
|
81
|
+
embedDirect
|
|
82
|
+
};
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import {
|
|
2
|
+
vectorToSqlLiteral
|
|
3
|
+
} from "./chunk-X6C2EL46.js";
|
|
4
|
+
import {
|
|
5
|
+
blobToVector
|
|
6
|
+
} from "./chunk-OTVEIJUQ.js";
|
|
7
|
+
import {
|
|
8
|
+
getClient
|
|
9
|
+
} from "./chunk-B532MYLM.js";
|
|
10
|
+
|
|
11
|
+
// src/lib/behaviors.ts
|
|
12
|
+
import crypto from "crypto";
|
|
13
|
+
function formatReflexContent(trigger, action) {
|
|
14
|
+
return `\u26A1 REFLEX: When ${trigger} \u2192 ${action}. Decide whether to act.`;
|
|
15
|
+
}
|
|
16
|
+
function isReflexBehavior(behavior) {
|
|
17
|
+
return behavior.domain === "reflex";
|
|
18
|
+
}
|
|
19
|
+
async function storeReflexBehavior(opts) {
|
|
20
|
+
const content = formatReflexContent(opts.trigger, opts.action);
|
|
21
|
+
return storeBehavior({
|
|
22
|
+
agentId: opts.agentId,
|
|
23
|
+
content,
|
|
24
|
+
domain: "reflex",
|
|
25
|
+
projectName: opts.projectName,
|
|
26
|
+
priority: "p0",
|
|
27
|
+
// Always injected — impossible to miss
|
|
28
|
+
deviceScoped: opts.deviceScoped ?? false
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function storeBehavior(opts) {
|
|
32
|
+
try {
|
|
33
|
+
const { loadEmployeesSync, baseAgentName } = await import("./lib/employees.js");
|
|
34
|
+
const roster = loadEmployeesSync();
|
|
35
|
+
if (roster.length > 0) {
|
|
36
|
+
const base = baseAgentName(opts.agentId, roster);
|
|
37
|
+
if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
|
|
38
|
+
process.stderr.write(
|
|
39
|
+
`[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
|
|
40
|
+
`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
const client = getClient();
|
|
47
|
+
const id = crypto.randomUUID();
|
|
48
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
49
|
+
const duplicate = await client.execute({
|
|
50
|
+
sql: `SELECT id FROM behaviors
|
|
51
|
+
WHERE agent_id = ?
|
|
52
|
+
AND COALESCE(domain, '') = COALESCE(?, '')
|
|
53
|
+
AND COALESCE(project_name, '') = COALESCE(?, '')
|
|
54
|
+
AND active = 1
|
|
55
|
+
AND lower(trim(content)) = lower(trim(?))
|
|
56
|
+
ORDER BY updated_at DESC
|
|
57
|
+
LIMIT 1`,
|
|
58
|
+
args: [opts.agentId, opts.domain ?? null, opts.projectName ?? null, opts.content]
|
|
59
|
+
});
|
|
60
|
+
const existingId = duplicate.rows[0]?.id;
|
|
61
|
+
if (existingId) return String(existingId);
|
|
62
|
+
let vector = null;
|
|
63
|
+
if (!process.env.VITEST) {
|
|
64
|
+
try {
|
|
65
|
+
const { embed } = await import("./lib/embedder.js");
|
|
66
|
+
const vec = await embed(opts.content);
|
|
67
|
+
vector = new Float32Array(vec);
|
|
68
|
+
} catch {
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
let createdByDevice = null;
|
|
72
|
+
try {
|
|
73
|
+
const { loadDeviceId } = await import("./lib/license.js");
|
|
74
|
+
createdByDevice = loadDeviceId() ?? null;
|
|
75
|
+
} catch {
|
|
76
|
+
}
|
|
77
|
+
const createdByAgent = process.env.AGENT_ID ?? null;
|
|
78
|
+
const sourceSessionId = process.env.CLAUDE_SESSION_ID ?? process.env.SESSION_ID ?? null;
|
|
79
|
+
let deviceId = null;
|
|
80
|
+
if (opts.deviceScoped) {
|
|
81
|
+
try {
|
|
82
|
+
const { loadDeviceId } = await import("./lib/license.js");
|
|
83
|
+
deviceId = loadDeviceId() ?? null;
|
|
84
|
+
} catch {
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
await client.execute({
|
|
88
|
+
sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id)
|
|
89
|
+
VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?)`,
|
|
90
|
+
args: [id, opts.agentId, opts.projectName ?? null, opts.domain ?? null, opts.priority ?? "p1", opts.content, now, now, vector ? vectorToSqlLiteral(vector) : null, createdByAgent, createdByDevice, sourceSessionId, deviceId]
|
|
91
|
+
});
|
|
92
|
+
return id;
|
|
93
|
+
}
|
|
94
|
+
async function listBehaviors(agentId, projectName, limit = 30) {
|
|
95
|
+
const client = getClient();
|
|
96
|
+
let currentDeviceId = null;
|
|
97
|
+
try {
|
|
98
|
+
const { loadDeviceId } = await import("./lib/license.js");
|
|
99
|
+
currentDeviceId = loadDeviceId() ?? null;
|
|
100
|
+
} catch {
|
|
101
|
+
}
|
|
102
|
+
const result = await client.execute({
|
|
103
|
+
sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
|
|
104
|
+
FROM behaviors
|
|
105
|
+
WHERE agent_id = ? AND active = 1
|
|
106
|
+
AND (project_name IS NULL OR project_name = ?)
|
|
107
|
+
AND (device_id IS NULL OR device_id = ?)
|
|
108
|
+
ORDER BY
|
|
109
|
+
CASE WHEN priority = 'p0' THEN 0
|
|
110
|
+
WHEN priority = 'p1' THEN 1
|
|
111
|
+
ELSE 2 END,
|
|
112
|
+
CASE
|
|
113
|
+
WHEN lower(coalesce(domain, '')) IN ('identity', 'title', 'role') THEN 0
|
|
114
|
+
WHEN lower(content) LIKE '%identity%' THEN 0
|
|
115
|
+
WHEN lower(content) LIKE '%title%' THEN 0
|
|
116
|
+
WHEN lower(content) LIKE '%who are you%' THEN 0
|
|
117
|
+
ELSE 1
|
|
118
|
+
END,
|
|
119
|
+
updated_at DESC
|
|
120
|
+
LIMIT ?`,
|
|
121
|
+
args: [agentId, projectName ?? "", currentDeviceId ?? "", limit]
|
|
122
|
+
});
|
|
123
|
+
return result.rows.map((r) => ({
|
|
124
|
+
id: String(r.id),
|
|
125
|
+
agent_id: String(r.agent_id),
|
|
126
|
+
project_name: r.project_name ? String(r.project_name) : null,
|
|
127
|
+
domain: r.domain ? String(r.domain) : null,
|
|
128
|
+
priority: String(r.priority || "p1"),
|
|
129
|
+
content: String(r.content),
|
|
130
|
+
active: Number(r.active),
|
|
131
|
+
created_at: String(r.created_at),
|
|
132
|
+
updated_at: String(r.updated_at),
|
|
133
|
+
vector: r.vector ? blobToVector(r.vector) : null,
|
|
134
|
+
created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
|
|
135
|
+
created_by_device: r.created_by_device ? String(r.created_by_device) : null,
|
|
136
|
+
source_session_id: r.source_session_id ? String(r.source_session_id) : null,
|
|
137
|
+
device_id: r.device_id ? String(r.device_id) : null
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
async function listBehaviorsByDomain(agentId, domain) {
|
|
141
|
+
const client = getClient();
|
|
142
|
+
const result = await client.execute({
|
|
143
|
+
sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector
|
|
144
|
+
FROM behaviors
|
|
145
|
+
WHERE agent_id = ? AND domain = ? AND active = 1`,
|
|
146
|
+
args: [agentId, domain]
|
|
147
|
+
});
|
|
148
|
+
return result.rows.map((r) => ({
|
|
149
|
+
id: String(r.id),
|
|
150
|
+
agent_id: String(r.agent_id),
|
|
151
|
+
project_name: r.project_name ? String(r.project_name) : null,
|
|
152
|
+
domain: r.domain ? String(r.domain) : null,
|
|
153
|
+
priority: String(r.priority || "p1"),
|
|
154
|
+
content: String(r.content),
|
|
155
|
+
active: Number(r.active),
|
|
156
|
+
created_at: String(r.created_at),
|
|
157
|
+
updated_at: String(r.updated_at),
|
|
158
|
+
vector: r.vector ? blobToVector(r.vector) : null,
|
|
159
|
+
created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
|
|
160
|
+
created_by_device: r.created_by_device ? String(r.created_by_device) : null,
|
|
161
|
+
source_session_id: r.source_session_id ? String(r.source_session_id) : null,
|
|
162
|
+
device_id: r.device_id ? String(r.device_id) : null
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
async function listBehaviorsSince(agentId, sinceIso, projectName, limit = 15) {
|
|
166
|
+
const client = getClient();
|
|
167
|
+
let currentDeviceId = null;
|
|
168
|
+
try {
|
|
169
|
+
const { loadDeviceId } = await import("./lib/license.js");
|
|
170
|
+
currentDeviceId = loadDeviceId() ?? null;
|
|
171
|
+
} catch {
|
|
172
|
+
}
|
|
173
|
+
const result = await client.execute({
|
|
174
|
+
sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
|
|
175
|
+
FROM behaviors
|
|
176
|
+
WHERE agent_id = ? AND active = 1
|
|
177
|
+
AND (project_name IS NULL OR project_name = ?)
|
|
178
|
+
AND (device_id IS NULL OR device_id = ?)
|
|
179
|
+
AND (created_at > ? OR updated_at > ?)
|
|
180
|
+
ORDER BY
|
|
181
|
+
CASE WHEN priority = 'p0' THEN 0
|
|
182
|
+
WHEN priority = 'p1' THEN 1
|
|
183
|
+
ELSE 2 END,
|
|
184
|
+
updated_at DESC
|
|
185
|
+
LIMIT ?`,
|
|
186
|
+
args: [agentId, projectName ?? "", currentDeviceId ?? "", sinceIso, sinceIso, limit]
|
|
187
|
+
});
|
|
188
|
+
return result.rows.map((r) => ({
|
|
189
|
+
id: String(r.id),
|
|
190
|
+
agent_id: String(r.agent_id),
|
|
191
|
+
project_name: r.project_name ? String(r.project_name) : null,
|
|
192
|
+
domain: r.domain ? String(r.domain) : null,
|
|
193
|
+
priority: String(r.priority || "p1"),
|
|
194
|
+
content: String(r.content),
|
|
195
|
+
active: Number(r.active),
|
|
196
|
+
created_at: String(r.created_at),
|
|
197
|
+
updated_at: String(r.updated_at),
|
|
198
|
+
vector: r.vector ? blobToVector(r.vector) : null,
|
|
199
|
+
created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
|
|
200
|
+
created_by_device: r.created_by_device ? String(r.created_by_device) : null,
|
|
201
|
+
source_session_id: r.source_session_id ? String(r.source_session_id) : null,
|
|
202
|
+
device_id: r.device_id ? String(r.device_id) : null
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
async function listSharedSkills(currentAgentId, projectName, limit = 30) {
|
|
206
|
+
const client = getClient();
|
|
207
|
+
let currentDeviceId = null;
|
|
208
|
+
try {
|
|
209
|
+
const { loadDeviceId } = await import("./lib/license.js");
|
|
210
|
+
currentDeviceId = loadDeviceId() ?? null;
|
|
211
|
+
} catch {
|
|
212
|
+
}
|
|
213
|
+
const result = await client.execute({
|
|
214
|
+
sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
|
|
215
|
+
FROM behaviors
|
|
216
|
+
WHERE domain = 'skill' AND active = 1
|
|
217
|
+
AND (project_name IS NULL OR project_name = ?)
|
|
218
|
+
AND (device_id IS NULL OR device_id = ?)
|
|
219
|
+
ORDER BY
|
|
220
|
+
CASE WHEN agent_id = ? THEN 0 ELSE 1 END,
|
|
221
|
+
updated_at DESC
|
|
222
|
+
LIMIT ?`,
|
|
223
|
+
args: [projectName ?? "", currentDeviceId ?? "", currentAgentId, limit]
|
|
224
|
+
});
|
|
225
|
+
return result.rows.map((r) => ({
|
|
226
|
+
id: String(r.id),
|
|
227
|
+
agent_id: String(r.agent_id),
|
|
228
|
+
project_name: r.project_name ? String(r.project_name) : null,
|
|
229
|
+
domain: r.domain ? String(r.domain) : null,
|
|
230
|
+
priority: String(r.priority || "p1"),
|
|
231
|
+
content: String(r.content),
|
|
232
|
+
active: Number(r.active),
|
|
233
|
+
created_at: String(r.created_at),
|
|
234
|
+
updated_at: String(r.updated_at),
|
|
235
|
+
vector: r.vector ? blobToVector(r.vector) : null,
|
|
236
|
+
created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
|
|
237
|
+
created_by_device: r.created_by_device ? String(r.created_by_device) : null,
|
|
238
|
+
source_session_id: r.source_session_id ? String(r.source_session_id) : null,
|
|
239
|
+
device_id: r.device_id ? String(r.device_id) : null,
|
|
240
|
+
shared: String(r.agent_id) !== currentAgentId
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
async function deactivateBehavior(id) {
|
|
244
|
+
const client = getClient();
|
|
245
|
+
const result = await client.execute({
|
|
246
|
+
sql: `UPDATE behaviors SET active = 0, updated_at = ? WHERE id = ? AND active = 1`,
|
|
247
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), id]
|
|
248
|
+
});
|
|
249
|
+
return (result.rowsAffected ?? 0) > 0;
|
|
250
|
+
}
|
|
251
|
+
async function reactivateBehavior(id) {
|
|
252
|
+
const client = getClient();
|
|
253
|
+
const result = await client.execute({
|
|
254
|
+
sql: `UPDATE behaviors SET active = 1, updated_at = ? WHERE id = ? AND active = 0`,
|
|
255
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), id]
|
|
256
|
+
});
|
|
257
|
+
return (result.rowsAffected ?? 0) > 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export {
|
|
261
|
+
formatReflexContent,
|
|
262
|
+
isReflexBehavior,
|
|
263
|
+
storeReflexBehavior,
|
|
264
|
+
storeBehavior,
|
|
265
|
+
listBehaviors,
|
|
266
|
+
listBehaviorsByDomain,
|
|
267
|
+
listBehaviorsSince,
|
|
268
|
+
listSharedSkills,
|
|
269
|
+
deactivateBehavior,
|
|
270
|
+
reactivateBehavior
|
|
271
|
+
};
|