@askexenow/exe-os 0.9.372 → 0.9.374
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 +45 -10
- package/deploy/compose/.env.example +46 -9
- package/deploy/compose/docker-compose.yml +136 -18
- package/deploy/compose/generate-env.ts +142 -34
- package/deploy/compose/sso-edge/default.conf.template +78 -7
- package/deploy/compose/sso-edge/sso-redirect.conf +109 -13
- package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
- package/deploy/stack-manifests/v0.9.json +4 -4
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-GRT5MKD5.js → active-agent-ONPPEWQV.js} +7 -6
- package/dist/{active-agent-L2ZSSXDK.js → active-agent-UJKMG7LJ.js} +7 -6
- package/dist/{agent-defs-generator-M4ZNYIVX.js → agent-defs-generator-ZWI6DXOE.js} +6 -5
- package/dist/{agent-loop-FOK2IRZQ.js → agent-loop-OYHJKNYH.js} +1 -1
- package/dist/{agentic-ontology-DMPRDEUX.js → agentic-ontology-WHFJ3QFS.js} +1 -1
- package/dist/{artifact-backup-767STHSW.js → artifact-backup-WXZNB7KE.js} +2 -1
- package/dist/{backfill-gate-VX2RZTQV.js → backfill-gate-KWJQ35YX.js} +3 -2
- package/dist/{backfill-metadata-ZMEHJQ5M.js → backfill-metadata-3OUSQD5V.js} +8 -7
- package/dist/{background-jobs-LTPWCMA3.js → background-jobs-6VMD55PK.js} +3 -2
- package/dist/{backup-verify-EX2K732J.js → backup-verify-ZKTUYLTA.js} +4 -3
- package/dist/{behavior-injection-22AGMS25.js → behavior-injection-M6UYZCMW.js} +17 -15
- package/dist/{behaviors-DVFXAWF5.js → behaviors-ZJ45TFBJ.js} +21 -13
- package/dist/bin/age-ontology-load.js +3 -2
- package/dist/bin/agentic-ontology-backfill.js +10 -9
- package/dist/bin/agentic-reflection-backfill.js +11 -10
- package/dist/bin/agentic-semantic-label.js +10 -9
- package/dist/bin/backfill-conversations.js +13 -11
- package/dist/bin/backfill-responses.js +13 -11
- package/dist/bin/backfill-vectors.js +17 -15
- package/dist/bin/bulk-sync-postgres.js +22 -20
- package/dist/bin/cc-doctor.js +10 -9
- package/dist/bin/cleanup-stale-review-tasks.js +29 -26
- package/dist/bin/cli.js +36 -26
- package/dist/bin/deferred-daemon-restart.js +114 -110
- package/dist/bin/exe-agent-config.js +6 -5
- package/dist/bin/exe-agent.js +127 -33
- package/dist/bin/exe-assign.js +15 -13
- package/dist/bin/exe-boot.js +57 -54
- package/dist/bin/exe-call.js +8 -7
- package/dist/bin/exe-cloud.js +24 -22
- package/dist/bin/exe-config-dump.js +6 -5
- package/dist/bin/exe-dispatch.js +30 -27
- package/dist/bin/exe-doctor.js +14 -10
- package/dist/bin/exe-export-behaviors.js +19 -17
- package/dist/bin/exe-forget.js +10 -9
- package/dist/bin/exe-gateway.js +199 -19
- package/dist/bin/exe-grant.js +5 -5
- package/dist/bin/exe-healthcheck.js +10 -9
- package/dist/bin/exe-heartbeat.js +35 -32
- package/dist/bin/exe-kill.js +34 -31
- package/dist/bin/exe-launch-agent.js +126 -54
- package/dist/bin/exe-mcp.js +6 -5
- package/dist/bin/exe-memory-reads.js +8 -7
- package/dist/bin/exe-new-employee.js +12 -11
- package/dist/bin/exe-os-mcp-proxy.js +6 -5
- package/dist/bin/exe-pending-messages.js +30 -27
- package/dist/bin/exe-pending-notifications.js +29 -26
- package/dist/bin/exe-pending-reviews.js +30 -27
- package/dist/bin/exe-rename.js +8 -7
- package/dist/bin/exe-repo-truth.js +1 -1
- package/dist/bin/exe-review.js +33 -30
- package/dist/bin/exe-search.js +9 -8
- package/dist/bin/exe-session-cleanup.js +35 -32
- package/dist/bin/exe-settings.js +24 -22
- package/dist/bin/exe-start-codex.js +137 -55
- package/dist/bin/exe-start-opencode.js +121 -23
- package/dist/bin/exe-status.js +31 -28
- package/dist/bin/exe-support.js +5 -4
- package/dist/bin/exe-team.js +7 -6
- package/dist/bin/exe-watchdog.js +31 -11
- package/dist/bin/generate-hook-manifest.js +44 -7
- package/dist/bin/git-sweep.js +31 -28
- package/dist/bin/graph-backfill.js +89 -35
- package/dist/bin/graph-export.js +9 -8
- package/dist/bin/import-history.js +14 -13
- package/dist/bin/install.js +137 -113
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -6
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +29 -26
- package/dist/bin/setup.js +5 -4
- package/dist/bin/shard-migrate.js +9 -8
- package/dist/bin/stack-update.js +40 -9
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-OHXH4YC5.js → boot-generation-JKVZ4ZAT.js} +6 -5
- package/dist/{boot-review-sections-N5IXIGSS.js → boot-review-sections-2M6BTG73.js} +28 -25
- package/dist/{branch-hygiene-KCGXRAWP.js → branch-hygiene-U5GFRSTP.js} +31 -7
- package/dist/{branding-GH43W3PU.js → branding-I6KIMB7F.js} +3 -2
- package/dist/budget-fallback-XJRPMP2D.js +11 -0
- package/dist/build-manifest.json +1318 -1233
- package/dist/{capability-cards-4PXVLIVS.js → capability-cards-5IMJT6J7.js} +5 -4
- package/dist/{capacity-monitor-FKMQXORX.js → capacity-monitor-SAXCQK7O.js} +30 -27
- package/dist/{catchup-brief-SN5EKO4N.js → catchup-brief-U2TXBLHD.js} +34 -31
- package/dist/{chunk-CNC57JCS.js → chunk-23MVDXLY.js} +4 -4
- package/dist/{chunk-V4XAKXXF.js → chunk-2AJGV5UL.js} +1 -1
- package/dist/{chunk-FBYAXTDM.js → chunk-2ZOEC4KC.js} +10 -2
- package/dist/{chunk-ELXFSIIM.js → chunk-32YV32VA.js} +2 -2
- package/dist/{chunk-44C7QNZS.js → chunk-3KDCORDO.js} +1 -1
- package/dist/{chunk-JTB5V6BV.js → chunk-3SXHEQ7X.js} +1 -1
- package/dist/{chunk-HDW4XPDV.js → chunk-3UUX5OY4.js} +1 -1
- package/dist/{chunk-7PSLK36P.js → chunk-44TLJZJ5.js} +1 -1
- package/dist/{chunk-JTWTBX2M.js → chunk-4EN3IZ3Q.js} +2 -1
- package/dist/{chunk-KPMC7PY7.js → chunk-4HKTO2SV.js} +1 -1
- package/dist/{chunk-CDUB5Q6J.js → chunk-4IK2K3B3.js} +1 -1
- package/dist/{chunk-GH6YJOOC.js → chunk-4SJ4LK4V.js} +6 -6
- package/dist/{chunk-PVEM537A.js → chunk-4YLBKEL5.js} +2 -2
- package/dist/chunk-4YNA3CM6.js +872 -0
- package/dist/{chunk-KYFFVTGO.js → chunk-55BEFF4V.js} +3 -3
- package/dist/{chunk-SEP5ITFQ.js → chunk-636LKCKE.js} +2 -2
- package/dist/{chunk-QTI4QAWA.js → chunk-6EZQUNE6.js} +338 -5
- package/dist/{chunk-WAEKYKTK.js → chunk-6RKKVPYF.js} +1 -1
- package/dist/{chunk-VX2F4ZUY.js → chunk-6SCGLHJ7.js} +3 -3
- package/dist/{chunk-MEGRQ53A.js → chunk-6VHOQ3IM.js} +51 -6
- package/dist/{chunk-HIIXCAEE.js → chunk-6YVUR3OU.js} +3 -3
- package/dist/{chunk-L6ZNURWN.js → chunk-7GE2EQ23.js} +1 -1
- package/dist/{chunk-2CWS374F.js → chunk-7RI2CNXJ.js} +1 -1
- package/dist/{chunk-OL3QP3AU.js → chunk-7TSBV3SD.js} +1 -1
- package/dist/{chunk-DSOQUQTV.js → chunk-A27Q27CT.js} +27 -0
- package/dist/{chunk-5AHRZI3R.js → chunk-AETLDRZB.js} +1 -1
- package/dist/{chunk-RNLF3CBB.js → chunk-AKLJ4JH3.js} +1 -1
- package/dist/{chunk-XHYHX6F7.js → chunk-AKLQSC6W.js} +329 -164
- package/dist/chunk-ANLFH23R.js +261 -0
- package/dist/{chunk-QLA3RTH4.js → chunk-AWWKRZMB.js} +5 -5
- package/dist/{chunk-ERVQTR7P.js → chunk-BBSIEYF5.js} +17 -3
- package/dist/{chunk-IPMUWYRQ.js → chunk-BJ7AVSY6.js} +2 -2
- package/dist/{chunk-HV6Y6F4X.js → chunk-C2L622QJ.js} +89 -3
- package/dist/{chunk-TX3Q2GIL.js → chunk-C5HUMAA7.js} +24 -1
- package/dist/{chunk-QTYJPWJN.js → chunk-CBCGDEJA.js} +7 -7
- package/dist/{chunk-XXSNLM6R.js → chunk-DB55JZHU.js} +1 -1
- package/dist/{chunk-LAZKEJMS.js → chunk-DIXXEE3S.js} +840 -607
- package/dist/{chunk-FB343XQX.js → chunk-DJ7YXOTU.js} +2 -2
- package/dist/{chunk-YFCNWQAM.js → chunk-DJOIMFKV.js} +2 -2
- package/dist/{chunk-UTDMTQNH.js → chunk-DSJI76XL.js} +92 -14
- package/dist/{chunk-EEXX4UMQ.js → chunk-DZKPOSFD.js} +1 -1
- package/dist/{chunk-WSOA3WMC.js → chunk-E426DOSY.js} +161 -4
- package/dist/{chunk-ZISQOOER.js → chunk-EKE37MO4.js} +3 -3
- package/dist/{chunk-RIECV7SR.js → chunk-EKYYMIVT.js} +1 -1
- package/dist/{chunk-HIVZ53YB.js → chunk-EXTZSNWL.js} +2 -2
- package/dist/{chunk-YYA5LXCT.js → chunk-FNEZ4BWT.js} +1 -1
- package/dist/chunk-FTZET5YX.js +313 -0
- package/dist/chunk-GHR4ZPJ7.js +70 -0
- package/dist/{chunk-MINXPXAB.js → chunk-GJI77VDO.js} +3 -3
- package/dist/{chunk-AAMGHW5W.js → chunk-GLQEJOXE.js} +1 -0
- package/dist/{chunk-ADNBOKYZ.js → chunk-GM7TLYOK.js} +60 -18
- package/dist/{chunk-RUWWES2K.js → chunk-GNUAL43X.js} +2 -2
- package/dist/{chunk-QZL6E4UB.js → chunk-GOMQ7PVQ.js} +2 -2
- package/dist/{chunk-GB3AHV5F.js → chunk-GQOEWNVM.js} +1 -1
- package/dist/{chunk-NQZUSEAR.js → chunk-GS7LIT34.js} +246 -17
- package/dist/{chunk-XTWHNLGD.js → chunk-GZOG2MAX.js} +1 -1
- package/dist/{chunk-E5HAY3DQ.js → chunk-HDLAB7W3.js} +1 -1
- package/dist/{chunk-E5QQZDQN.js → chunk-HNWS7YHN.js} +358 -136
- package/dist/{chunk-VV5EZZNT.js → chunk-HTBEVCO2.js} +1 -1
- package/dist/{chunk-OZBII5E3.js → chunk-I4DNJFDR.js} +4 -4
- package/dist/{chunk-SI5SZAJA.js → chunk-IBS2FAI4.js} +21 -4
- package/dist/{chunk-J5EYOBFF.js → chunk-IHXW4VUI.js} +1 -1
- package/dist/{chunk-RUVO3NJC.js → chunk-IN6CAM4F.js} +9 -3
- package/dist/{chunk-53PYNYTW.js → chunk-IRVOXUSK.js} +5 -5
- package/dist/{chunk-THM7J6UI.js → chunk-JHI5WMK5.js} +5 -5
- package/dist/{chunk-3KTQWMHI.js → chunk-JSMDRKPJ.js} +12 -4
- package/dist/chunk-JTVIANUB.js +131 -0
- package/dist/{chunk-2ADYTOHQ.js → chunk-K4ESASPL.js} +1 -1
- package/dist/{chunk-YWUQVHDL.js → chunk-KTCXJWJG.js} +1 -1
- package/dist/{chunk-RGUDGC6A.js → chunk-KTU3EAWK.js} +5 -5
- package/dist/{chunk-DKBPCOU4.js → chunk-L6RXG36J.js} +2 -2
- package/dist/{chunk-T4EK56WI.js → chunk-LDNYSMPZ.js} +1 -1
- package/dist/{chunk-RIK5GRWI.js → chunk-LGS2V2XD.js} +3 -3
- package/dist/{chunk-JKXZGRWR.js → chunk-LP4GB656.js} +2 -2
- package/dist/{chunk-H74466TM.js → chunk-M7O7TGGU.js} +1 -1
- package/dist/chunk-MJCSEIFI.js +54 -0
- package/dist/{chunk-IDZPQG2D.js → chunk-MOGA4Q7F.js} +2 -2
- package/dist/{chunk-OYQNNKNS.js → chunk-MXPNVSXI.js} +37 -14
- package/dist/{chunk-UVW7YFAF.js → chunk-N7VEP5B3.js} +4 -4
- package/dist/{chunk-HHE2HV3V.js → chunk-NBXDXKLC.js} +1 -1
- package/dist/{chunk-LDL3S7AC.js → chunk-NKETJCB5.js} +7 -3
- package/dist/{chunk-ECHLVLA7.js → chunk-NMH5ZQPU.js} +1 -1
- package/dist/{chunk-U3XLRMJD.js → chunk-NT7W4RXD.js} +1 -1
- package/dist/{chunk-UQUUNGTP.js → chunk-NUK7EEN5.js} +11 -9
- package/dist/{chunk-GBNB4EWD.js → chunk-ORM7ZFKC.js} +16 -0
- package/dist/{chunk-O4ZFRK6W.js → chunk-OVEQE6YS.js} +244 -49
- package/dist/{chunk-4ZJ5BPY6.js → chunk-PB5S7YOF.js} +2 -2
- package/dist/{chunk-JR23BL74.js → chunk-PDVXWXTL.js} +4 -4
- package/dist/{chunk-3CIMDFXG.js → chunk-PFQ3VEEM.js} +1 -1
- package/dist/{chunk-SBJV2PCU.js → chunk-PHBU4LGO.js} +1 -1
- package/dist/{chunk-W25RLOQ2.js → chunk-PLZSZOZN.js} +3 -3
- package/dist/{chunk-THIJIOE2.js → chunk-PY3FOMRN.js} +18 -6
- package/dist/{chunk-AAUWFXOX.js → chunk-Q3AXXKDF.js} +3 -3
- package/dist/{chunk-VKXS2YGN.js → chunk-QHJR7IMX.js} +2 -2
- package/dist/chunk-QLZ46RCK.js +45 -0
- package/dist/{chunk-UHPMK6QZ.js → chunk-R3CZWFFC.js} +10 -2
- package/dist/{chunk-6XEYELCA.js → chunk-R4CBHKZ2.js} +1 -1
- package/dist/{chunk-5APCDDJZ.js → chunk-R522MWAR.js} +9 -9
- package/dist/chunk-RH4AH3YB.js +80 -0
- package/dist/{chunk-AMKSDKMK.js → chunk-S2WBS6BG.js} +22 -35
- package/dist/{chunk-WUKQVNLP.js → chunk-SEQIPGLU.js} +1 -1
- package/dist/{chunk-7WQRFSZI.js → chunk-SL6KQYDU.js} +26 -6
- package/dist/chunk-SLLLOOEI.js +103 -0
- package/dist/{chunk-5N4SG5NB.js → chunk-T35RCQFE.js} +3 -3
- package/dist/{chunk-7V6M3QUS.js → chunk-T3QUKNLI.js} +1 -1
- package/dist/{chunk-CW2UCKHS.js → chunk-TADAO3HV.js} +2 -2
- package/dist/{chunk-5DCCKHDY.js → chunk-TAMDAOCU.js} +109 -13
- package/dist/{chunk-ZXB56YR2.js → chunk-TFKCERAK.js} +101 -23
- package/dist/{chunk-RBYHJDAT.js → chunk-TQAZTRQ3.js} +3 -3
- package/dist/{chunk-OKGIOWOB.js → chunk-U6SUKSZR.js} +2 -2
- package/dist/{chunk-23QKEUF6.js → chunk-U73AC5AN.js} +34 -12
- package/dist/{chunk-PM6WSWVU.js → chunk-UBK7HK3J.js} +3 -3
- package/dist/{chunk-H37FSTF2.js → chunk-UBMZ3YQU.js} +1 -1
- package/dist/{chunk-JJUGI2YL.js → chunk-UCFC2AEI.js} +1 -1
- package/dist/{chunk-6IWLAQ7O.js → chunk-UCUOGVDX.js} +4 -0
- package/dist/{chunk-E7UCDSUE.js → chunk-UKLN57Q5.js} +2 -2
- package/dist/{chunk-ZYCLSEZT.js → chunk-ULIBLJ6W.js} +33 -11
- package/dist/{chunk-RLR6VVKV.js → chunk-UM3N6VND.js} +4 -4
- package/dist/{chunk-ZNUJFX7L.js → chunk-UQGSBM3U.js} +1 -1
- package/dist/{chunk-ZZXMB5F2.js → chunk-UZDF6FLJ.js} +1 -1
- package/dist/{chunk-LNOS24GV.js → chunk-V3WLC5TJ.js} +2 -95
- package/dist/{chunk-UXLO7VHX.js → chunk-VI4ATC6I.js} +1 -1
- package/dist/{chunk-77JP3LK4.js → chunk-VKJGHAZT.js} +92 -21
- package/dist/{chunk-7R73IAHU.js → chunk-VMTZ4RUW.js} +67 -150
- package/dist/{chunk-TGPQMMQP.js → chunk-VYQ7B7DI.js} +30 -17
- package/dist/{chunk-E2WEFZOR.js → chunk-W75GTHR3.js} +1 -1
- package/dist/{chunk-UKLF7F3Z.js → chunk-WJG344NC.js} +9 -9
- package/dist/{chunk-MBNIJXKI.js → chunk-WMEYJT4R.js} +18 -4
- package/dist/{chunk-R6FLELV6.js → chunk-XFTEX77S.js} +3 -3
- package/dist/{chunk-MDGYXUOV.js → chunk-XH7YL7JM.js} +1 -1
- package/dist/{chunk-JOO35RHR.js → chunk-XL5MFGMR.js} +3 -3
- package/dist/{chunk-OW5RZIDW.js → chunk-XNNECNDL.js} +95 -33
- package/dist/{chunk-5AHDQCTB.js → chunk-XXFKSJYA.js} +6 -6
- package/dist/{chunk-TGEPLJ66.js → chunk-XXOPG4BW.js} +3 -3
- package/dist/{chunk-PGLPUP37.js → chunk-XZ65ST2I.js} +1 -1
- package/dist/{chunk-3TTKAT6V.js → chunk-YKC7QDZH.js} +9 -4
- package/dist/{chunk-KXYFBBZR.js → chunk-YMP2QSOP.js} +20 -3
- package/dist/{chunk-TK4MI6F6.js → chunk-YSLGFPWX.js} +6 -6
- package/dist/{chunk-X2P43TB2.js → chunk-YTSXPJUQ.js} +1 -1
- package/dist/{chunk-HECXZGGZ.js → chunk-ZCERWHY2.js} +33 -35
- package/dist/{chunk-IVU3WN7S.js → chunk-ZG62LIK3.js} +74 -4
- package/dist/{chunk-GU62SNDH.js → chunk-ZGYNKA3O.js} +744 -111
- package/dist/{chunk-QMSEL5YS.js → chunk-ZIG7VPJV.js} +28 -76
- package/dist/{chunk-WZJVGA5I.js → chunk-ZL4AGWAH.js} +258 -13
- package/dist/{chunk-QR624DER.js → chunk-ZSODLMFV.js} +2 -2
- package/dist/{cleanup-graph-garbage-IPYDS5OX.js → cleanup-graph-garbage-DPJGO52H.js} +11 -10
- package/dist/{cloud-sync-command-JLNVG7H4.js → cloud-sync-command-JPNTT4OQ.js} +2 -2
- package/dist/{cloud-sync-db-init-JXUF6GI3.js → cloud-sync-db-init-V2LWIUQU.js} +1 -1
- package/dist/{cloud-sync-shutdown-Z4SBP6PL.js → cloud-sync-shutdown-BNALPWGX.js} +5 -4
- package/dist/{co-activation-74RDFTKS.js → co-activation-CMNSWS6B.js} +5 -4
- package/dist/{co-occurrence-CN3TBYVR.js → co-occurrence-WRI2NAN6.js} +9 -8
- package/dist/{code-context-index-D4MJ4VFX.js → code-context-index-NOJSHLPN.js} +12 -6
- package/dist/code-context-watcher-VZNZU3BO.js +118 -0
- package/dist/{codex-consolidation-PPXNBXCV.js → codex-consolidation-SH4UKFBQ.js} +2 -1
- package/dist/{conversation-entity-extractor-QGTLH4BP.js → conversation-entity-extractor-74252CAO.js} +4 -4
- package/dist/{conversation-wiki-populator-EBUZXYEU.js → conversation-wiki-populator-OS4C6W54.js} +1 -1
- package/dist/conversations-retention-C4BLKFEL.js +54 -0
- package/dist/coordinator-notice-MHUY7AQB.js +55 -0
- package/dist/{crdt-sync-7T4WCOKD.js → crdt-sync-B3JN6AIV.js} +1 -1
- package/dist/{crm-webhook-FTW3XZTO.js → crm-webhook-GYWQRFET.js} +2 -2
- package/dist/{cto-delegation-gate-SZCE34LB.js → cto-delegation-gate-LQHVLEMW.js} +29 -26
- package/dist/{daemon-auth-SSPY5ODS.js → daemon-auth-QZHEO7IQ.js} +3 -2
- package/dist/{daemon-orchestration-IGPHVNFR.js → daemon-orchestration-5HIQALZH.js} +36 -34
- package/dist/{daemon-ready-OT2VQLS7.js → daemon-ready-P2BR2XP5.js} +1 -1
- package/dist/{db-integrity-events-5DTASXJF.js → db-integrity-events-2DTFO37N.js} +3 -2
- package/dist/{db-restore-events-2FI4ZMKA.js → db-restore-events-G6NOQOVE.js} +2 -1
- package/dist/{destructive-data-guard-6I5MDFVD.js → destructive-data-guard-BVFWPPIS.js} +1 -1
- package/dist/doc-graph-extractor-PQHDHQPQ.js +367 -0
- package/dist/{documents-URULIXGM.js → documents-C4SSPJMC.js} +15 -13
- package/dist/{dreaming-VIZO3QDO.js → dreaming-XAO3FCBV.js} +33 -30
- package/dist/{employee-boot-brief-XLOG4ULP.js → employee-boot-brief-W4OHUMRQ.js} +37 -34
- package/dist/{exe-drift-TLQM3IHD.js → exe-drift-AG2KMKD5.js} +6 -5
- package/dist/{exe-export-7YWYWJHY.js → exe-export-IC5BT335.js} +17 -15
- package/dist/{exe-import-DW6VAUKW.js → exe-import-A35ZLDPG.js} +17 -15
- package/dist/{exe-key-TLJP2B4Y.js → exe-key-TCMJNYLA.js} +116 -112
- package/dist/{exe-org-LU46N36E.js → exe-org-JXCR3JYZ.js} +24 -23
- package/dist/{exe-snapshot-QHUZRS62.js → exe-snapshot-SV6SRIG6.js} +36 -33
- package/dist/{fast-db-init-SCTOOIUT.js → fast-db-init-L2RGKJWH.js} +1 -1
- package/dist/{founder-context-ZFZC4UHO.js → founder-context-D4HFIESJ.js} +4 -3
- package/dist/{founder-monitor-envelope-5KTKNL5G.js → founder-monitor-envelope-TFKRGCFE.js} +5 -4
- package/dist/{fts-integrity-LKAZEZJE.js → fts-integrity-4YB34KWX.js} +3 -2
- package/dist/gateway/index.js +19 -17
- package/dist/{git-main-guard-TN27QBAI.js → git-main-guard-VTW4N3CM.js} +7 -1
- package/dist/{git-staleness-GSGP344N.js → git-staleness-TN7CYGFG.js} +5 -4
- package/dist/{global-procedures-YAR7G4C6.js → global-procedures-YFDEIOG7.js} +7 -6
- package/dist/{graph-auto-extract-GNQS64F5.js → graph-auto-extract-3YR3TYRW.js} +9 -8
- package/dist/{graph-rag-RMSFLUOB.js → graph-rag-Z2KCJTPK.js} +6 -4
- package/dist/{hook-integrity-CF567MVN.js → hook-integrity-KGAV6ZC2.js} +14 -4
- package/dist/{hook-prefetch-36BK4F7U.js → hook-prefetch-K5DN3TOQ.js} +29 -26
- package/dist/hooks/bug-report-worker.js +34 -30
- package/dist/hooks/codex-stop-task-finalizer.js +36 -32
- package/dist/hooks/commit-complete.js +33 -30
- package/dist/hooks/error-recall.js +12 -11
- package/dist/hooks/exe-heartbeat-hook.js +8 -7
- package/dist/hooks/ingest-worker.js +23 -11
- package/dist/hooks/ingest.js +18 -17
- package/dist/hooks/instructions-loaded.js +10 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +9 -8
- package/dist/hooks/post-compact.js +8 -7
- package/dist/hooks/post-tool-combined.js +26 -15
- package/dist/hooks/pre-compact.js +33 -30
- package/dist/hooks/pre-tool-use.js +404 -46
- package/dist/hooks/prompt-submit.js +57 -47
- package/dist/hooks/session-end.js +40 -41
- package/dist/hooks/session-start.js +21 -20
- package/dist/hooks/stop.js +40 -37
- package/dist/hooks/subagent-stop.js +38 -35
- package/dist/hooks/summary-worker.js +39 -36
- package/dist/hyde-MP4QNMU5.js +80 -0
- package/dist/index.js +44 -39
- package/dist/{installer-LUN4HQIC.js → installer-54HTN5RE.js} +8 -7
- package/dist/{installer-OC5VXNC7.js → installer-LK35OX6R.js} +8 -7
- package/dist/{installer-MPRFUQJE.js → installer-LLWKZI2S.js} +8 -7
- package/dist/intercom-ack-VCW755TN.js +13 -0
- package/dist/{intercom-queue-6DZ7BANV.js → intercom-queue-5NOT2RKI.js} +28 -25
- package/dist/{key-backup-status-6L2ARCXW.js → key-backup-status-LQPINQ3W.js} +2 -1
- package/dist/lib/agent-config.js +3 -2
- package/dist/lib/cloud-sync.js +26 -20
- package/dist/lib/config.js +2 -1
- package/dist/lib/consolidation.js +17 -10
- package/dist/lib/database.js +7 -4
- package/dist/lib/db-backup.js +17 -2
- package/dist/lib/db-daemon-client.js +8 -6
- package/dist/lib/db-write-worker-client.js +3 -1
- package/dist/lib/db-write-worker.js +20 -3
- package/dist/lib/db.js +7 -4
- package/dist/lib/device-registry.js +3 -2
- package/dist/lib/embed-worker.js +2 -1
- package/dist/lib/embedder.js +8 -6
- package/dist/lib/employee-templates.js +8 -7
- package/dist/lib/employees.js +5 -4
- package/dist/lib/exe-daemon-client.js +7 -5
- package/dist/lib/exe-daemon.js +467 -221
- package/dist/lib/hybrid-search.js +11 -8
- package/dist/lib/identity.js +5 -4
- package/dist/lib/license.js +4 -3
- package/dist/lib/messaging.js +29 -26
- package/dist/lib/post-tool-memory.js +16 -2
- package/dist/lib/registry-proxy.js +3 -1
- package/dist/lib/reminders.js +6 -5
- package/dist/lib/schedules.js +9 -8
- package/dist/lib/session-registry.js +7 -6
- package/dist/lib/skill-learning.js +16 -14
- package/dist/lib/stack-invariants.js +17 -1
- package/dist/lib/status-brief.js +5 -4
- package/dist/lib/store.js +10 -7
- package/dist/lib/task-router.js +6 -5
- package/dist/lib/tasks.js +31 -27
- package/dist/lib/tmux-routing.js +40 -25
- package/dist/lib/tmux-status.js +3 -1
- package/dist/lib/tmux-transport.js +2 -1
- package/dist/lib/token-spend.js +6 -5
- package/dist/lib/transport.js +3 -2
- package/dist/{license-gate-ESER24PJ.js → license-gate-JVMB6OFD.js} +5 -4
- package/dist/{license-sync-JVG5KNIY.js → license-sync-5VYS2F2W.js} +4 -3
- package/dist/mcp/register-tools.js +113 -109
- package/dist/mcp/server.js +118 -114
- package/dist/mcp/tools/complete-reminder.js +7 -6
- package/dist/mcp/tools/create-reminder.js +7 -6
- package/dist/mcp/tools/create-task.js +34 -30
- package/dist/mcp/tools/deactivate-behavior.js +18 -16
- package/dist/mcp/tools/list-reminders.js +7 -6
- package/dist/mcp/tools/list-tasks.js +34 -30
- package/dist/mcp/tools/send-message.js +32 -29
- package/dist/mcp/tools/update-task.js +32 -28
- package/dist/mcp-child-registry-OTG4MWO7.js +25 -0
- package/dist/{mcp-http-config-6K6IKH5F.js → mcp-http-config-DQWL7U2Z.js} +6 -5
- package/dist/{mcp-session-identity-LRC6WJSD.js → mcp-session-identity-277GASTQ.js} +28 -25
- package/dist/{memory-cards-V3OZHIYP.js → memory-cards-3S2ZQPR7.js} +17 -8
- package/dist/{memory-graph-extractor-JC2Z64L4.js → memory-graph-extractor-A6DFEFIN.js} +10 -9
- package/dist/{memory-poisoning-defense-YM4QJHCX.js → memory-poisoning-defense-ZVP4H6DY.js} +5 -4
- package/dist/{memory-pressure-watchdog-6F6KEQHN.js → memory-pressure-watchdog-6W5F6R7H.js} +29 -26
- package/dist/{memory-queue-QJNWKWKG.js → memory-queue-YF7IDSFY.js} +3 -2
- package/dist/{memory-queue-client-COA4ABEV.js → memory-queue-client-ADSDP6OX.js} +9 -7
- package/dist/{memory-reflection-QXHJPYPC.js → memory-reflection-BKB2YOE6.js} +52 -6
- package/dist/{monitor-grants-BW2WL4IU.js → monitor-grants-EV747HMW.js} +4 -3
- package/dist/{notification-ledger-6QRLQW4Q.js → notification-ledger-CLGM7ODF.js} +30 -27
- package/dist/{notifications-7B6D7Y5C.js → notifications-MACUZPYP.js} +28 -25
- package/dist/{oauth-server-TZFNQAFS.js → oauth-server-AYM37SQ4.js} +25 -4
- package/dist/{orchestration-events-GY5VP5LU.js → orchestration-events-N7LYMUGA.js} +6 -5
- package/dist/{orchestration-phase-UDS24CVQ.js → orchestration-phase-T2WD45UA.js} +3 -2
- package/dist/{orchestrator-JVPVOYWA.js → orchestrator-4X24EWHV.js} +30 -27
- package/dist/{org-brief-session-GRV5R5E3.js → org-brief-session-FZOFMO5U.js} +13 -12
- package/dist/{org-consent-policy-3FHHSYXV.js → org-consent-policy-O5E6HXBL.js} +1 -1
- package/dist/{org-join-BY4PV6UO.js → org-join-POWUG25F.js} +8 -7
- package/dist/{org-key-admin-WSCPT2CZ.js → org-key-admin-E7EMDOZZ.js} +9 -8
- package/dist/{org-key-pin-5WUSPGVN.js → org-key-pin-WHWHVWUO.js} +4 -3
- package/dist/{org-membership-ESALTLLN.js → org-membership-WRT2IHJK.js} +5 -4
- package/dist/{org-partner-config-YKHPDPZR.js → org-partner-config-B7T4CL2T.js} +7 -6
- package/dist/{org-partner-runtime-UJDGECZ4.js → org-partner-runtime-FODONVTM.js} +13 -12
- package/dist/{org-row-visibility-V5DXIHTE.js → org-row-visibility-VX4AVV5Q.js} +1 -1
- package/dist/{pipeline-router-YY5FQKTY.js → pipeline-router-6GGT2ZW3.js} +6 -5
- package/dist/{plan-limits-OVX6SN6B.js → plan-limits-FUN76LYY.js} +8 -7
- package/dist/{platform-procedures-I57ITMDC.js → platform-procedures-7YSCLF4Z.js} +1 -1
- package/dist/{postinstall-failure-B2JHNFPM.js → postinstall-failure-O6TSSNJB.js} +3 -2
- package/dist/{project-boot-LXLU2J32.js → project-boot-3Q65LCIP.js} +2 -1
- package/dist/project-name-LJVFMYTQ.js +30 -0
- package/dist/{projection-worker-D2472IOD.js → projection-worker-4OANGP5K.js} +5 -4
- package/dist/{prospective-memory-JXO2A6PL.js → prospective-memory-KR3P4T6N.js} +5 -4
- package/dist/{push-notifications-HR3FZRDI.js → push-notifications-NCZLH6DI.js} +29 -26
- package/dist/ref-provenance-gate-M4AQO4OT.js +269 -0
- package/dist/{reproject-worktree-memories-OSS3PGRF.js → reproject-worktree-memories-PWYKPB2U.js} +106 -23
- package/dist/{reranker-IMZRPYJ2.js → reranker-6V3C2AO4.js} +3 -2
- package/dist/resolve-image-labels-ZI6UBW5W.js +15 -0
- package/dist/{retrieval-health-W7OD44FE.js → retrieval-health-5D7O6VH6.js} +4 -3
- package/dist/{review-polling-2INP7H6M.js → review-polling-QW3LJ4KN.js} +29 -26
- package/dist/runtime/index.js +38 -34
- package/dist/{session-events-G4XUPVWV.js → session-events-T45SSTMF.js} +31 -26
- package/dist/{session-kill-telemetry-W7MHWJTQ.js → session-kill-telemetry-QSPVJGBF.js} +29 -26
- package/dist/{session-mcp-config-F7KATWOF.js → session-mcp-config-SC5BLWZG.js} +3 -2
- package/dist/{session-scope-LG2J4EMQ.js → session-scope-KRWE54C4.js} +28 -25
- package/dist/{setup-wizard-YQJI3SVM.js → setup-wizard-GP3TBTPF.js} +5 -4
- package/dist/{shard-manager-UROHZE46.js → shard-manager-OE36A4MY.js} +3 -2
- package/dist/{skill-refinement-RA37U756.js → skill-refinement-C7JTMLJG.js} +6 -5
- package/dist/stack-generate-manifest-MFMDWRUP.js +810 -0
- package/dist/{stack-promote-IYBRXHTA.js → stack-promote-EKSCYY63.js} +8 -6
- package/dist/{stack-release-OXWLVVG6.js → stack-release-2GZAAFO4.js} +8 -6
- package/dist/{stack-update-2CZEROPK.js → stack-update-J6JXSTAZ.js} +51 -5
- package/dist/{steward-gate-LTNFB3FY.js → steward-gate-BFCCMCSW.js} +6 -5
- package/dist/{subagent-brief-injection-OHLWLECQ.js → subagent-brief-injection-ED36PLYY.js} +44 -36
- package/dist/{subagent-spawn-ledger-USYZXU3M.js → subagent-spawn-ledger-E6U3OY6Z.js} +3 -2
- package/dist/{supervisor-handoff-CSJQMI53.js → supervisor-handoff-SGLEPOCY.js} +12 -3
- package/dist/{support-inbox-4KCEPAZQ.js → support-inbox-YW47SYJF.js} +20 -5
- package/dist/{task-enforcement-LGXWXGVZ.js → task-enforcement-CECTQX4U.js} +29 -26
- package/dist/{task-request-inbox-WHCOSUCP.js → task-request-inbox-Q5T4N5K7.js} +1 -1
- package/dist/{task-scope-KXF7Y6KA.js → task-scope-ERVEUEYU.js} +28 -25
- package/dist/{tasks-crud-5EM55WRZ.js → tasks-crud-ZRQNJXQ2.js} +28 -25
- package/dist/{tasks-notify-VFMAURTN.js → tasks-notify-MIZH4C2O.js} +29 -26
- package/dist/{tasks-review-MHGMBHUZ.js → tasks-review-Z7J2P6DG.js} +28 -25
- package/dist/{telemetry-upload-6NRTN7QJ.js → telemetry-upload-LVQUQYFP.js} +10 -9
- package/dist/{token-budget-LZPOYTRP.js → token-budget-BU4NOVZF.js} +6 -5
- package/dist/{tool-capability-index-ED5OAPMW.js → tool-capability-index-7F42MOJT.js} +1 -1
- package/dist/{tool-gates-7PLIOLAL.js → tool-gates-JWVSAYTW.js} +1 -1
- package/dist/{tool-gates-2OZY3GZM.js → tool-gates-VXITVRFQ.js} +1 -1
- package/dist/{tool-telemetry-ZX7VSAXK.js → tool-telemetry-O27EVMBR.js} +1 -1
- package/dist/tui/App.js +43 -40
- package/dist/{tui-data-CC5POSUV.js → tui-data-TPWWBIUQ.js} +28 -25
- package/dist/{update-support-KH6NSQON.js → update-support-F2F5537B.js} +22 -20
- package/dist/{whatsapp-QW3X7OCN.js → whatsapp-YM4A2CSK.js} +3 -1
- package/dist/{work-claims-MNK7PEPW.js → work-claims-B73X5NE7.js} +6 -5
- package/dist/{work-state-heartbeat-YEWT5NMZ.js → work-state-heartbeat-P4YX6E2R.js} +1 -1
- package/dist/{worker-gate-BOQSIU2Z.js → worker-gate-BEEIIVWA.js} +3 -2
- package/dist/{workflow-engine-MUUD7ZEX.js → workflow-engine-5X46PFCW.js} +4 -2
- package/dist/{worktree-GOGT2LZP.js → worktree-W47CIMJ6.js} +9 -6
- package/dist/worktree-ownership-guard-OUWJROW2.js +88 -0
- package/dist/{worktree-sweep-46VWPVQT.js → worktree-sweep-BNBD4RFX.js} +8 -7
- package/package.json +14 -5
- package/release-notes.json +5 -5
- package/src/commands/exe/call.md +1 -1
- package/stack.release.json +6 -0
- package/dist/chunk-KZXMP6JG.js +0 -319
- package/dist/chunk-TCTED52S.js +0 -120
- package/dist/chunk-W2IRQJ6R.js +0 -67
- package/dist/doc-graph-extractor-VPTRIEKN.js +0 -149
- package/dist/project-name-ILJTETUE.js +0 -14
- /package/dist/{chunk-3Y5THOU6.js → chunk-6WIFPD2P.js} +0 -0
- /package/dist/{chunk-7XGXRD22.js → chunk-AISULNGL.js} +0 -0
- /package/dist/{chunk-3F2UB4IQ.js → chunk-DN4YVV4Z.js} +0 -0
- /package/dist/{chunk-WV3TOOL7.js → chunk-KQ6RJWRW.js} +0 -0
- /package/dist/{chunk-HR2R2QER.js → chunk-M4IRPXSZ.js} +0 -0
- /package/dist/{chunk-ORA5BWCV.js → chunk-NRG7KZIP.js} +0 -0
- /package/dist/{chunk-7UTJA6HF.js → chunk-VZAFWPAY.js} +0 -0
- /package/dist/{chunk-VJSDGDNS.js → chunk-WSQASFLP.js} +0 -0
- /package/dist/{chunk-FZQWVQJG.js → chunk-YO4BO2CL.js} +0 -0
- /package/dist/{core-memory-6WBNT2HL.js → core-memory-7I7RE2SJ.js} +0 -0
- /package/dist/{entity-boost-MT336PI3.js → entity-boost-3UWGXG5O.js} +0 -0
- /package/dist/{memory-isolation-EJ45IXBH.js → memory-isolation-2TUZ7Z4K.js} +0 -0
- /package/dist/{message-queue-client-MVBTYCSV.js → message-queue-client-XQN7QABL.js} +0 -0
- /package/dist/{webhook-pipe-UQSEHFPO.js → webhook-pipe-W2FVXY7M.js} +0 -0
- /package/dist/{wiki-acl-WXRJGZ5Q.js → wiki-acl-IBQLLBTS.js} +0 -0
- /package/dist/{wiki-client-AXNM5FWY.js → wiki-client-W65IOSWF.js} +0 -0
|
@@ -7,10 +7,11 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
connectEmbedDaemon,
|
|
9
9
|
embedBatchViaClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-NUK7EEN5.js";
|
|
11
11
|
import {
|
|
12
|
-
EXE_AI_DIR
|
|
13
|
-
|
|
12
|
+
EXE_AI_DIR,
|
|
13
|
+
loadConfigSync
|
|
14
|
+
} from "./chunk-ZIG7VPJV.js";
|
|
14
15
|
|
|
15
16
|
// src/lib/code-context-index.ts
|
|
16
17
|
import crypto from "crypto";
|
|
@@ -38,6 +39,14 @@ function loadVectorStore(projectRoot) {
|
|
|
38
39
|
function saveVectorStore(projectRoot, store) {
|
|
39
40
|
writeFileSync(vectorStorePath(projectRoot), JSON.stringify(store));
|
|
40
41
|
}
|
|
42
|
+
function currentEmbeddingModelId() {
|
|
43
|
+
try {
|
|
44
|
+
const cfg = loadConfigSync();
|
|
45
|
+
return process.env.EXE_EMBED_MODEL ?? cfg.modelFile ?? "unknown";
|
|
46
|
+
} catch {
|
|
47
|
+
return process.env.EXE_EMBED_MODEL ?? "unknown";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
41
50
|
function cosineSimilarity(a, b) {
|
|
42
51
|
let dot = 0, normA = 0, normB = 0;
|
|
43
52
|
for (let i = 0; i < a.length; i++) {
|
|
@@ -51,6 +60,15 @@ function cosineSimilarity(a, b) {
|
|
|
51
60
|
async function embedSymbols(index) {
|
|
52
61
|
const rootHash = hashText(index.projectRoot).slice(0, 16);
|
|
53
62
|
const existing = loadVectorStore(index.projectRoot);
|
|
63
|
+
const currentModel = currentEmbeddingModelId();
|
|
64
|
+
const existingModel = existing?.model;
|
|
65
|
+
let reusedExisting = false;
|
|
66
|
+
const resolveStoreModel = () => (
|
|
67
|
+
// If we reused vectors from a synced store whose model differs from the local
|
|
68
|
+
// model, the store carries FOREIGN vectors — preserve the original stamp so the
|
|
69
|
+
// search guard rejects them (lexical fallback) instead of trusting relabeled-local vectors.
|
|
70
|
+
reusedExisting && existingModel && existingModel !== currentModel ? existingModel : currentModel
|
|
71
|
+
);
|
|
54
72
|
const store = {
|
|
55
73
|
version: VECTOR_STORE_VERSION,
|
|
56
74
|
projectRootHash: rootHash,
|
|
@@ -61,12 +79,16 @@ async function embedSymbols(index) {
|
|
|
61
79
|
for (const symbol of file.symbols) {
|
|
62
80
|
if (existing?.vectors[symbol.id]) {
|
|
63
81
|
store.vectors[symbol.id] = existing.vectors[symbol.id];
|
|
82
|
+
reusedExisting = true;
|
|
64
83
|
} else {
|
|
65
84
|
allSymbols.push({ id: symbol.id, text: symbol.summary || `${symbol.kind} ${symbol.name} in ${symbol.filePath}` });
|
|
66
85
|
}
|
|
67
86
|
}
|
|
68
87
|
}
|
|
69
88
|
if (allSymbols.length === 0) {
|
|
89
|
+
const firstVec2 = Object.values(store.vectors)[0];
|
|
90
|
+
if (firstVec2) store.dim = firstVec2.length;
|
|
91
|
+
store.model = resolveStoreModel();
|
|
70
92
|
saveVectorStore(index.projectRoot, store);
|
|
71
93
|
return store;
|
|
72
94
|
}
|
|
@@ -88,12 +110,16 @@ async function embedSymbols(index) {
|
|
|
88
110
|
} catch {
|
|
89
111
|
}
|
|
90
112
|
}
|
|
113
|
+
const firstVec = Object.values(store.vectors)[0];
|
|
114
|
+
if (firstVec) store.dim = firstVec.length;
|
|
115
|
+
store.model = resolveStoreModel();
|
|
91
116
|
saveVectorStore(index.projectRoot, store);
|
|
92
117
|
return store;
|
|
93
118
|
}
|
|
94
119
|
var INDEX_VERSION = 2;
|
|
95
120
|
var DEFAULT_MAX_FILES = 5e3;
|
|
96
121
|
var INDEX_YIELD_EVERY_FILES = 25;
|
|
122
|
+
var GIT_PATHSPEC_BATCH = 200;
|
|
97
123
|
var DEFAULT_STALE_AFTER_DAYS = 7;
|
|
98
124
|
var STALE_AFTER_MS = Number(process.env.EXE_CODE_CONTEXT_STALE_AFTER_DAYS) > 0 ? Math.floor(Number(process.env.EXE_CODE_CONTEXT_STALE_AFTER_DAYS)) * 24 * 60 * 60 * 1e3 : DEFAULT_STALE_AFTER_DAYS * 24 * 60 * 60 * 1e3;
|
|
99
125
|
var IGNORE_SEGMENTS = /* @__PURE__ */ new Set([
|
|
@@ -215,17 +241,117 @@ function parseImportPaths(importText) {
|
|
|
215
241
|
}
|
|
216
242
|
return paths;
|
|
217
243
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
244
|
+
var MODULE_EXTENSIONS = ["ts", "tsx", "js", "jsx", "py", "rs", "go", "java", "cs", "cpp", "c", "rb", "php", "swift", "kt", "scala", "sql", "md", "json", "yaml", "yml"];
|
|
245
|
+
var MODULE_INDEX_NAMES = ["index.ts", "index.tsx", "index.js", "mod.rs", "__init__.py"];
|
|
246
|
+
var tsconfigAliasCache = /* @__PURE__ */ new Map();
|
|
247
|
+
function tsconfigStamp(projectRoot) {
|
|
248
|
+
try {
|
|
249
|
+
const stat = statSync(path.join(projectRoot, "tsconfig.json"));
|
|
250
|
+
return { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
251
|
+
} catch {
|
|
252
|
+
return { mtimeMs: -1, size: -1 };
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function stripJsonComments(text) {
|
|
256
|
+
let out = text.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
257
|
+
out = out.replace(/(^|[^:"'\\])\/\/[^\n\r]*/g, "$1");
|
|
258
|
+
out = out.replace(/,(\s*[}\]])/g, "$1");
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
function loadTsconfigAliases(projectRoot) {
|
|
262
|
+
const stamp = tsconfigStamp(projectRoot);
|
|
263
|
+
const cached = tsconfigAliasCache.get(projectRoot);
|
|
264
|
+
if (cached && cached.mtimeMs === stamp.mtimeMs && cached.size === stamp.size) return cached.aliases;
|
|
265
|
+
let result = null;
|
|
266
|
+
try {
|
|
267
|
+
const tsconfigPath = path.join(projectRoot, "tsconfig.json");
|
|
268
|
+
if (existsSync(tsconfigPath)) {
|
|
269
|
+
const parsed = JSON.parse(stripJsonComments(readFileSync(tsconfigPath, "utf8")));
|
|
270
|
+
const co = parsed.compilerOptions ?? {};
|
|
271
|
+
const hasBaseUrl = typeof co.baseUrl === "string";
|
|
272
|
+
const baseUrl = hasBaseUrl ? path.posix.normalize(co.baseUrl.replaceAll(path.sep, "/")).replace(/^\.\/?/, "").replace(/\/+$/, "") : "";
|
|
273
|
+
const paths = [];
|
|
274
|
+
if (co.paths && typeof co.paths === "object") {
|
|
275
|
+
for (const [pattern, targets] of Object.entries(co.paths)) {
|
|
276
|
+
if (Array.isArray(targets)) {
|
|
277
|
+
const strs = targets.filter((t) => typeof t === "string");
|
|
278
|
+
if (strs.length > 0) paths.push({ pattern, targets: strs });
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (hasBaseUrl || paths.length > 0) result = { baseUrl: baseUrl === "." ? "" : baseUrl, hasBaseUrl, paths };
|
|
283
|
+
}
|
|
284
|
+
} catch {
|
|
285
|
+
result = null;
|
|
225
286
|
}
|
|
226
|
-
|
|
287
|
+
tsconfigAliasCache.set(projectRoot, { ...stamp, aliases: result });
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
function tsconfigAliasFingerprint(aliases) {
|
|
291
|
+
if (!aliases) return "none";
|
|
292
|
+
const normalized = {
|
|
293
|
+
baseUrl: aliases.baseUrl,
|
|
294
|
+
hasBaseUrl: aliases.hasBaseUrl,
|
|
295
|
+
paths: [...aliases.paths].sort((a, b) => a.pattern.localeCompare(b.pattern)).map((p) => ({ pattern: p.pattern, targets: p.targets }))
|
|
296
|
+
};
|
|
297
|
+
return hashText(JSON.stringify(normalized)).slice(0, 16);
|
|
298
|
+
}
|
|
299
|
+
function resolveModuleFile(base, allFiles) {
|
|
300
|
+
const normBase = path.posix.normalize(base);
|
|
301
|
+
const withoutKnownExt = normBase.replace(/\.(?:[a-z0-9]+)$/i, "");
|
|
302
|
+
const candidates = [normBase];
|
|
303
|
+
for (const ext of MODULE_EXTENSIONS) candidates.push(`${withoutKnownExt}.${ext}`, `${normBase}.${ext}`);
|
|
304
|
+
for (const indexName of MODULE_INDEX_NAMES) candidates.push(path.posix.join(normBase, indexName));
|
|
227
305
|
return candidates.find((candidate) => allFiles.has(candidate)) ?? null;
|
|
228
306
|
}
|
|
307
|
+
function resolveViaAliases(importPath, aliases, allFiles) {
|
|
308
|
+
for (const { pattern, targets } of aliases.paths) {
|
|
309
|
+
const starIdx = pattern.indexOf("*");
|
|
310
|
+
let captured = null;
|
|
311
|
+
if (starIdx === -1) {
|
|
312
|
+
if (pattern === importPath) captured = "";
|
|
313
|
+
else continue;
|
|
314
|
+
} else {
|
|
315
|
+
const prefix = pattern.slice(0, starIdx);
|
|
316
|
+
const suffix = pattern.slice(starIdx + 1);
|
|
317
|
+
if (importPath.length >= prefix.length + suffix.length && importPath.startsWith(prefix) && importPath.endsWith(suffix)) {
|
|
318
|
+
captured = importPath.slice(prefix.length, importPath.length - suffix.length);
|
|
319
|
+
} else continue;
|
|
320
|
+
}
|
|
321
|
+
for (const target of targets) {
|
|
322
|
+
const substituted = target.includes("*") ? target.replace("*", captured ?? "") : target;
|
|
323
|
+
const base = path.posix.join(aliases.baseUrl, substituted.replaceAll(path.sep, "/"));
|
|
324
|
+
const hit = resolveModuleFile(base, allFiles);
|
|
325
|
+
if (hit) return hit;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (aliases.hasBaseUrl) {
|
|
329
|
+
const hit = resolveModuleFile(path.posix.join(aliases.baseUrl, importPath.replaceAll(path.sep, "/")), allFiles);
|
|
330
|
+
if (hit) return hit;
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
function resolveImport(fromFile, importPath, allFiles, aliases) {
|
|
335
|
+
if (importPath.startsWith(".")) {
|
|
336
|
+
const base = path.posix.join(path.posix.dirname(fromFile.replaceAll(path.sep, "/")), importPath);
|
|
337
|
+
return resolveModuleFile(base, allFiles);
|
|
338
|
+
}
|
|
339
|
+
if (aliases) return resolveViaAliases(importPath, aliases, allFiles);
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
function resolveImportsFor(fromFile, imports, allFiles, aliases) {
|
|
343
|
+
return imports.map((importPath) => resolveImport(fromFile, importPath, allFiles, aliases)).filter((file) => Boolean(file));
|
|
344
|
+
}
|
|
345
|
+
function reconcileResolvedImports(files, allFiles, aliases) {
|
|
346
|
+
let mutated = false;
|
|
347
|
+
for (const [rel, record] of Object.entries(files)) {
|
|
348
|
+
const next = resolveImportsFor(rel, record.imports, allFiles, aliases);
|
|
349
|
+
if (next.length === record.resolvedImports.length && next.every((value, i) => value === record.resolvedImports[i])) continue;
|
|
350
|
+
files[rel] = { ...record, resolvedImports: next };
|
|
351
|
+
mutated = true;
|
|
352
|
+
}
|
|
353
|
+
return mutated;
|
|
354
|
+
}
|
|
229
355
|
function symbolId(filePath, chunk) {
|
|
230
356
|
return hashText(`${filePath}:${chunk.kind}:${chunk.name}:${chunk.startLine}:${chunk.endLine}`).slice(0, 24);
|
|
231
357
|
}
|
|
@@ -258,7 +384,7 @@ function stalenessFor(indexedAt) {
|
|
|
258
384
|
function yieldToEventLoop() {
|
|
259
385
|
return new Promise((resolve) => setImmediate(resolve));
|
|
260
386
|
}
|
|
261
|
-
function buildFileRecord(projectRoot, relPath, allFiles, previous) {
|
|
387
|
+
function buildFileRecord(projectRoot, relPath, allFiles, previous, aliases) {
|
|
262
388
|
const absPath = path.join(projectRoot, relPath);
|
|
263
389
|
let stat;
|
|
264
390
|
try {
|
|
@@ -276,7 +402,7 @@ function buildFileRecord(projectRoot, relPath, allFiles, previous) {
|
|
|
276
402
|
}
|
|
277
403
|
const chunks = chunkSourceFile(source, relPath);
|
|
278
404
|
const imports = chunks.filter((chunk) => chunk.kind === "import").flatMap((chunk) => parseImportPaths(chunk.text));
|
|
279
|
-
const resolvedImports =
|
|
405
|
+
const resolvedImports = resolveImportsFor(relPath, imports, allFiles, aliases);
|
|
280
406
|
const symbols = chunks.filter((chunk) => chunk.name !== "(unknown)").map((chunk) => ({
|
|
281
407
|
id: symbolId(relPath, chunk),
|
|
282
408
|
name: chunk.name,
|
|
@@ -298,19 +424,23 @@ function buildCodeContextIndex(options = {}) {
|
|
|
298
424
|
const previous = options.force ? null : loadIndex(projectRoot);
|
|
299
425
|
const files = listCodeFiles(projectRoot, maxFiles);
|
|
300
426
|
const allFiles = new Set(files.map((file) => file.replaceAll(path.sep, "/")));
|
|
427
|
+
const aliases = loadTsconfigAliases(projectRoot);
|
|
428
|
+
const aliasFingerprint = tsconfigAliasFingerprint(aliases);
|
|
429
|
+
const reusable = previous && previous.aliasFingerprint === aliasFingerprint ? previous : null;
|
|
301
430
|
const fileRecords = {};
|
|
302
431
|
let rebuiltFiles = 0;
|
|
303
432
|
let reusedFiles = 0;
|
|
304
433
|
let skippedFiles = 0;
|
|
305
434
|
for (const rel of files) {
|
|
306
435
|
const normalized = rel.replaceAll(path.sep, "/");
|
|
307
|
-
const { record, reused } = buildFileRecord(projectRoot, normalized, allFiles,
|
|
436
|
+
const { record, reused } = buildFileRecord(projectRoot, normalized, allFiles, reusable?.files[normalized], aliases);
|
|
308
437
|
if (record) {
|
|
309
438
|
fileRecords[normalized] = record;
|
|
310
439
|
if (reused) reusedFiles++;
|
|
311
440
|
else rebuiltFiles++;
|
|
312
441
|
} else skippedFiles++;
|
|
313
442
|
}
|
|
443
|
+
if (reusedFiles > 0) reconcileResolvedImports(fileRecords, allFiles, aliases);
|
|
314
444
|
const languageBreakdown = {};
|
|
315
445
|
for (const file of Object.values(fileRecords)) languageBreakdown[file.language] = (languageBreakdown[file.language] ?? 0) + 1;
|
|
316
446
|
const index = {
|
|
@@ -318,6 +448,7 @@ function buildCodeContextIndex(options = {}) {
|
|
|
318
448
|
projectRoot,
|
|
319
449
|
rootHash: hashText(projectRoot).slice(0, 16),
|
|
320
450
|
branch,
|
|
451
|
+
aliasFingerprint,
|
|
321
452
|
indexedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
322
453
|
stats: { filesSeen: files.length, filesIndexed: Object.keys(fileRecords).length, rebuiltFiles, reusedFiles, skippedFiles, languageBreakdown },
|
|
323
454
|
files: fileRecords
|
|
@@ -332,6 +463,9 @@ async function buildCodeContextIndexAsync(options = {}) {
|
|
|
332
463
|
const previous = options.force ? null : loadIndex(projectRoot);
|
|
333
464
|
const files = listCodeFiles(projectRoot, maxFiles);
|
|
334
465
|
const allFiles = new Set(files.map((file) => file.replaceAll(path.sep, "/")));
|
|
466
|
+
const aliases = loadTsconfigAliases(projectRoot);
|
|
467
|
+
const aliasFingerprint = tsconfigAliasFingerprint(aliases);
|
|
468
|
+
const reusable = previous && previous.aliasFingerprint === aliasFingerprint ? previous : null;
|
|
335
469
|
const fileRecords = {};
|
|
336
470
|
let rebuiltFiles = 0;
|
|
337
471
|
let reusedFiles = 0;
|
|
@@ -341,13 +475,14 @@ async function buildCodeContextIndexAsync(options = {}) {
|
|
|
341
475
|
await yieldToEventLoop();
|
|
342
476
|
}
|
|
343
477
|
const normalized = files[i].replaceAll(path.sep, "/");
|
|
344
|
-
const { record, reused } = buildFileRecord(projectRoot, normalized, allFiles,
|
|
478
|
+
const { record, reused } = buildFileRecord(projectRoot, normalized, allFiles, reusable?.files[normalized], aliases);
|
|
345
479
|
if (record) {
|
|
346
480
|
fileRecords[normalized] = record;
|
|
347
481
|
if (reused) reusedFiles++;
|
|
348
482
|
else rebuiltFiles++;
|
|
349
483
|
} else skippedFiles++;
|
|
350
484
|
}
|
|
485
|
+
if (reusedFiles > 0) reconcileResolvedImports(fileRecords, allFiles, aliases);
|
|
351
486
|
const languageBreakdown = {};
|
|
352
487
|
for (const file of Object.values(fileRecords)) languageBreakdown[file.language] = (languageBreakdown[file.language] ?? 0) + 1;
|
|
353
488
|
const index = {
|
|
@@ -355,6 +490,7 @@ async function buildCodeContextIndexAsync(options = {}) {
|
|
|
355
490
|
projectRoot,
|
|
356
491
|
rootHash: hashText(projectRoot).slice(0, 16),
|
|
357
492
|
branch,
|
|
493
|
+
aliasFingerprint,
|
|
358
494
|
indexedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
359
495
|
stats: { filesSeen: files.length, filesIndexed: Object.keys(fileRecords).length, rebuiltFiles, reusedFiles, skippedFiles, languageBreakdown },
|
|
360
496
|
files: fileRecords
|
|
@@ -366,7 +502,8 @@ function loadOrBuildCodeContextIndex(options = {}) {
|
|
|
366
502
|
const projectRoot = normalizeProjectRoot(options.projectRoot);
|
|
367
503
|
if (!options.force) {
|
|
368
504
|
const loaded = loadIndex(projectRoot);
|
|
369
|
-
|
|
505
|
+
const aliasFresh = loaded ? (loaded.aliasFingerprint ?? "none") === tsconfigAliasFingerprint(loadTsconfigAliases(projectRoot)) : false;
|
|
506
|
+
if (loaded && aliasFresh) {
|
|
370
507
|
const currentFiles = listCodeFiles(projectRoot, options.maxFiles ?? DEFAULT_MAX_FILES);
|
|
371
508
|
const unchanged = currentFiles.every((rel) => {
|
|
372
509
|
const normalized = rel.replaceAll(path.sep, "/");
|
|
@@ -384,6 +521,93 @@ function loadOrBuildCodeContextIndex(options = {}) {
|
|
|
384
521
|
}
|
|
385
522
|
return buildCodeContextIndex(options);
|
|
386
523
|
}
|
|
524
|
+
function isCodeContextCandidatePath(relPath) {
|
|
525
|
+
const normalized = relPath.replaceAll(path.sep, "/");
|
|
526
|
+
return isChunkable(normalized) && !shouldIgnore(normalized);
|
|
527
|
+
}
|
|
528
|
+
function gitTrackedAmong(projectRoot, relPaths) {
|
|
529
|
+
if (relPaths.length === 0) return /* @__PURE__ */ new Set();
|
|
530
|
+
const tracked = /* @__PURE__ */ new Set();
|
|
531
|
+
for (let i = 0; i < relPaths.length; i += GIT_PATHSPEC_BATCH) {
|
|
532
|
+
const batch = relPaths.slice(i, i + GIT_PATHSPEC_BATCH);
|
|
533
|
+
const result = spawnSync("git", ["--literal-pathspecs", "ls-files", "-z", "--", ...batch], {
|
|
534
|
+
cwd: projectRoot,
|
|
535
|
+
encoding: "utf8",
|
|
536
|
+
timeout: 5e3,
|
|
537
|
+
maxBuffer: 1024 * 1024
|
|
538
|
+
});
|
|
539
|
+
if (result.status !== 0) return null;
|
|
540
|
+
for (const line of result.stdout.split("\0")) {
|
|
541
|
+
const rel = line.trim().replaceAll(path.sep, "/");
|
|
542
|
+
if (rel) tracked.add(rel);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
return tracked;
|
|
546
|
+
}
|
|
547
|
+
function applyCodeContextChanges(projectRoot, changedRelPaths, options = {}) {
|
|
548
|
+
void options;
|
|
549
|
+
const root = normalizeProjectRoot(projectRoot);
|
|
550
|
+
const index = loadIndex(root);
|
|
551
|
+
if (!index) return null;
|
|
552
|
+
const aliases = loadTsconfigAliases(root);
|
|
553
|
+
const aliasFingerprint = tsconfigAliasFingerprint(aliases);
|
|
554
|
+
const aliasChanged = (index.aliasFingerprint ?? "none") !== aliasFingerprint;
|
|
555
|
+
const allFiles = new Set(Object.keys(index.files));
|
|
556
|
+
const normalizedChanges = [...new Set(changedRelPaths.map((rel) => rel.replaceAll(path.sep, "/")))];
|
|
557
|
+
const candidates = normalizedChanges.filter((rel) => isCodeContextCandidatePath(rel));
|
|
558
|
+
const tracked = gitTrackedAmong(root, candidates);
|
|
559
|
+
const admits = (rel) => isCodeContextCandidatePath(rel) && (tracked ? tracked.has(rel) : existsSync(path.join(root, rel)));
|
|
560
|
+
let changed = false;
|
|
561
|
+
let membershipChanged = false;
|
|
562
|
+
for (const rel of normalizedChanges) {
|
|
563
|
+
if (!admits(rel)) {
|
|
564
|
+
if (index.files[rel]) {
|
|
565
|
+
delete index.files[rel];
|
|
566
|
+
changed = true;
|
|
567
|
+
}
|
|
568
|
+
if (allFiles.delete(rel)) membershipChanged = true;
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
571
|
+
if (!allFiles.has(rel) && existsSync(path.join(root, rel))) {
|
|
572
|
+
allFiles.add(rel);
|
|
573
|
+
membershipChanged = true;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
for (const rel of normalizedChanges) {
|
|
577
|
+
if (!admits(rel)) continue;
|
|
578
|
+
const known = Boolean(index.files[rel]);
|
|
579
|
+
const { record } = buildFileRecord(root, rel, allFiles, index.files[rel], aliases);
|
|
580
|
+
if (record) {
|
|
581
|
+
index.files[rel] = record;
|
|
582
|
+
changed = true;
|
|
583
|
+
if (!known) membershipChanged = true;
|
|
584
|
+
} else if (known) {
|
|
585
|
+
delete index.files[rel];
|
|
586
|
+
allFiles.delete(rel);
|
|
587
|
+
changed = true;
|
|
588
|
+
membershipChanged = true;
|
|
589
|
+
} else {
|
|
590
|
+
if (allFiles.delete(rel)) membershipChanged = true;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
if (membershipChanged || aliasChanged) {
|
|
594
|
+
if (reconcileResolvedImports(index.files, allFiles, aliases)) changed = true;
|
|
595
|
+
}
|
|
596
|
+
if (aliasChanged) {
|
|
597
|
+
index.aliasFingerprint = aliasFingerprint;
|
|
598
|
+
changed = true;
|
|
599
|
+
}
|
|
600
|
+
if (!changed) return index;
|
|
601
|
+
const languageBreakdown = {};
|
|
602
|
+
for (const file of Object.values(index.files)) {
|
|
603
|
+
languageBreakdown[file.language] = (languageBreakdown[file.language] ?? 0) + 1;
|
|
604
|
+
}
|
|
605
|
+
index.stats.filesIndexed = Object.keys(index.files).length;
|
|
606
|
+
index.stats.languageBreakdown = languageBreakdown;
|
|
607
|
+
index.indexedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
608
|
+
saveIndex(index);
|
|
609
|
+
return index;
|
|
610
|
+
}
|
|
387
611
|
function normalizeLanguage(language) {
|
|
388
612
|
return language.toLowerCase().replace(/^c\+\+$/, "cpp").replace(/^c#$/, "csharp").replace(/^js$/, "javascript").replace(/^ts$/, "typescript");
|
|
389
613
|
}
|
|
@@ -536,13 +760,16 @@ async function searchCodeContextSemantic(query, options = {}) {
|
|
|
536
760
|
} catch {
|
|
537
761
|
}
|
|
538
762
|
if (!queryVector) return lexicalSearch(query, options);
|
|
763
|
+
if (vectorStore.model && vectorStore.model !== currentEmbeddingModelId()) {
|
|
764
|
+
return lexicalSearch(query, options);
|
|
765
|
+
}
|
|
539
766
|
const files = filteredFiles(index, options);
|
|
540
767
|
const candidates = [];
|
|
541
768
|
for (const file of files) {
|
|
542
769
|
for (const symbol of file.symbols) {
|
|
543
770
|
const lexical = scoreSymbol(symbol, terms);
|
|
544
771
|
const vec = vectorStore.vectors[symbol.id];
|
|
545
|
-
const vectorScore = vec ? cosineSimilarity(queryVector, vec) : 0;
|
|
772
|
+
const vectorScore = vec && vec.length === queryVector.length ? cosineSimilarity(queryVector, vec) : 0;
|
|
546
773
|
if (lexical.score > 0 || vectorScore > 0.3) {
|
|
547
774
|
candidates.push({
|
|
548
775
|
symbol,
|
|
@@ -699,6 +926,8 @@ export {
|
|
|
699
926
|
buildCodeContextIndex,
|
|
700
927
|
buildCodeContextIndexAsync,
|
|
701
928
|
loadOrBuildCodeContextIndex,
|
|
929
|
+
isCodeContextCandidatePath,
|
|
930
|
+
applyCodeContextChanges,
|
|
702
931
|
searchCodeContext,
|
|
703
932
|
searchCodeContextSemantic,
|
|
704
933
|
buildCodeContextIndexWithEmbeddings,
|