@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.
Files changed (470) hide show
  1. package/deploy/compose/.env.customer.example +45 -10
  2. package/deploy/compose/.env.example +46 -9
  3. package/deploy/compose/docker-compose.yml +136 -18
  4. package/deploy/compose/generate-env.ts +142 -34
  5. package/deploy/compose/sso-edge/default.conf.template +78 -7
  6. package/deploy/compose/sso-edge/sso-redirect.conf +109 -13
  7. package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
  8. package/deploy/stack-manifests/v0.9.json +4 -4
  9. package/dist/.dist-verified.json +3 -3
  10. package/dist/{active-agent-GRT5MKD5.js → active-agent-ONPPEWQV.js} +7 -6
  11. package/dist/{active-agent-L2ZSSXDK.js → active-agent-UJKMG7LJ.js} +7 -6
  12. package/dist/{agent-defs-generator-M4ZNYIVX.js → agent-defs-generator-ZWI6DXOE.js} +6 -5
  13. package/dist/{agent-loop-FOK2IRZQ.js → agent-loop-OYHJKNYH.js} +1 -1
  14. package/dist/{agentic-ontology-DMPRDEUX.js → agentic-ontology-WHFJ3QFS.js} +1 -1
  15. package/dist/{artifact-backup-767STHSW.js → artifact-backup-WXZNB7KE.js} +2 -1
  16. package/dist/{backfill-gate-VX2RZTQV.js → backfill-gate-KWJQ35YX.js} +3 -2
  17. package/dist/{backfill-metadata-ZMEHJQ5M.js → backfill-metadata-3OUSQD5V.js} +8 -7
  18. package/dist/{background-jobs-LTPWCMA3.js → background-jobs-6VMD55PK.js} +3 -2
  19. package/dist/{backup-verify-EX2K732J.js → backup-verify-ZKTUYLTA.js} +4 -3
  20. package/dist/{behavior-injection-22AGMS25.js → behavior-injection-M6UYZCMW.js} +17 -15
  21. package/dist/{behaviors-DVFXAWF5.js → behaviors-ZJ45TFBJ.js} +21 -13
  22. package/dist/bin/age-ontology-load.js +3 -2
  23. package/dist/bin/agentic-ontology-backfill.js +10 -9
  24. package/dist/bin/agentic-reflection-backfill.js +11 -10
  25. package/dist/bin/agentic-semantic-label.js +10 -9
  26. package/dist/bin/backfill-conversations.js +13 -11
  27. package/dist/bin/backfill-responses.js +13 -11
  28. package/dist/bin/backfill-vectors.js +17 -15
  29. package/dist/bin/bulk-sync-postgres.js +22 -20
  30. package/dist/bin/cc-doctor.js +10 -9
  31. package/dist/bin/cleanup-stale-review-tasks.js +29 -26
  32. package/dist/bin/cli.js +36 -26
  33. package/dist/bin/deferred-daemon-restart.js +114 -110
  34. package/dist/bin/exe-agent-config.js +6 -5
  35. package/dist/bin/exe-agent.js +127 -33
  36. package/dist/bin/exe-assign.js +15 -13
  37. package/dist/bin/exe-boot.js +57 -54
  38. package/dist/bin/exe-call.js +8 -7
  39. package/dist/bin/exe-cloud.js +24 -22
  40. package/dist/bin/exe-config-dump.js +6 -5
  41. package/dist/bin/exe-dispatch.js +30 -27
  42. package/dist/bin/exe-doctor.js +14 -10
  43. package/dist/bin/exe-export-behaviors.js +19 -17
  44. package/dist/bin/exe-forget.js +10 -9
  45. package/dist/bin/exe-gateway.js +199 -19
  46. package/dist/bin/exe-grant.js +5 -5
  47. package/dist/bin/exe-healthcheck.js +10 -9
  48. package/dist/bin/exe-heartbeat.js +35 -32
  49. package/dist/bin/exe-kill.js +34 -31
  50. package/dist/bin/exe-launch-agent.js +126 -54
  51. package/dist/bin/exe-mcp.js +6 -5
  52. package/dist/bin/exe-memory-reads.js +8 -7
  53. package/dist/bin/exe-new-employee.js +12 -11
  54. package/dist/bin/exe-os-mcp-proxy.js +6 -5
  55. package/dist/bin/exe-pending-messages.js +30 -27
  56. package/dist/bin/exe-pending-notifications.js +29 -26
  57. package/dist/bin/exe-pending-reviews.js +30 -27
  58. package/dist/bin/exe-rename.js +8 -7
  59. package/dist/bin/exe-repo-truth.js +1 -1
  60. package/dist/bin/exe-review.js +33 -30
  61. package/dist/bin/exe-search.js +9 -8
  62. package/dist/bin/exe-session-cleanup.js +35 -32
  63. package/dist/bin/exe-settings.js +24 -22
  64. package/dist/bin/exe-start-codex.js +137 -55
  65. package/dist/bin/exe-start-opencode.js +121 -23
  66. package/dist/bin/exe-status.js +31 -28
  67. package/dist/bin/exe-support.js +5 -4
  68. package/dist/bin/exe-team.js +7 -6
  69. package/dist/bin/exe-watchdog.js +31 -11
  70. package/dist/bin/generate-hook-manifest.js +44 -7
  71. package/dist/bin/git-sweep.js +31 -28
  72. package/dist/bin/graph-backfill.js +89 -35
  73. package/dist/bin/graph-export.js +9 -8
  74. package/dist/bin/import-history.js +14 -13
  75. package/dist/bin/install.js +137 -113
  76. package/dist/bin/intercom-check.js +5 -5
  77. package/dist/bin/mcp-sessions.js +2 -2
  78. package/dist/bin/orchestration-metrics.js +7 -6
  79. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
  80. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
  81. package/dist/bin/pre-publish.js +1 -1
  82. package/dist/bin/reconcile-backlog.js +2 -2
  83. package/dist/bin/registry-proxy.js +1 -1
  84. package/dist/bin/scan-tasks.js +29 -26
  85. package/dist/bin/setup.js +5 -4
  86. package/dist/bin/shard-migrate.js +9 -8
  87. package/dist/bin/stack-update.js +40 -9
  88. package/dist/bin/verify-stack.js +2 -2
  89. package/dist/bin/vps-health-gate.js +1 -1
  90. package/dist/{boot-generation-OHXH4YC5.js → boot-generation-JKVZ4ZAT.js} +6 -5
  91. package/dist/{boot-review-sections-N5IXIGSS.js → boot-review-sections-2M6BTG73.js} +28 -25
  92. package/dist/{branch-hygiene-KCGXRAWP.js → branch-hygiene-U5GFRSTP.js} +31 -7
  93. package/dist/{branding-GH43W3PU.js → branding-I6KIMB7F.js} +3 -2
  94. package/dist/budget-fallback-XJRPMP2D.js +11 -0
  95. package/dist/build-manifest.json +1318 -1233
  96. package/dist/{capability-cards-4PXVLIVS.js → capability-cards-5IMJT6J7.js} +5 -4
  97. package/dist/{capacity-monitor-FKMQXORX.js → capacity-monitor-SAXCQK7O.js} +30 -27
  98. package/dist/{catchup-brief-SN5EKO4N.js → catchup-brief-U2TXBLHD.js} +34 -31
  99. package/dist/{chunk-CNC57JCS.js → chunk-23MVDXLY.js} +4 -4
  100. package/dist/{chunk-V4XAKXXF.js → chunk-2AJGV5UL.js} +1 -1
  101. package/dist/{chunk-FBYAXTDM.js → chunk-2ZOEC4KC.js} +10 -2
  102. package/dist/{chunk-ELXFSIIM.js → chunk-32YV32VA.js} +2 -2
  103. package/dist/{chunk-44C7QNZS.js → chunk-3KDCORDO.js} +1 -1
  104. package/dist/{chunk-JTB5V6BV.js → chunk-3SXHEQ7X.js} +1 -1
  105. package/dist/{chunk-HDW4XPDV.js → chunk-3UUX5OY4.js} +1 -1
  106. package/dist/{chunk-7PSLK36P.js → chunk-44TLJZJ5.js} +1 -1
  107. package/dist/{chunk-JTWTBX2M.js → chunk-4EN3IZ3Q.js} +2 -1
  108. package/dist/{chunk-KPMC7PY7.js → chunk-4HKTO2SV.js} +1 -1
  109. package/dist/{chunk-CDUB5Q6J.js → chunk-4IK2K3B3.js} +1 -1
  110. package/dist/{chunk-GH6YJOOC.js → chunk-4SJ4LK4V.js} +6 -6
  111. package/dist/{chunk-PVEM537A.js → chunk-4YLBKEL5.js} +2 -2
  112. package/dist/chunk-4YNA3CM6.js +872 -0
  113. package/dist/{chunk-KYFFVTGO.js → chunk-55BEFF4V.js} +3 -3
  114. package/dist/{chunk-SEP5ITFQ.js → chunk-636LKCKE.js} +2 -2
  115. package/dist/{chunk-QTI4QAWA.js → chunk-6EZQUNE6.js} +338 -5
  116. package/dist/{chunk-WAEKYKTK.js → chunk-6RKKVPYF.js} +1 -1
  117. package/dist/{chunk-VX2F4ZUY.js → chunk-6SCGLHJ7.js} +3 -3
  118. package/dist/{chunk-MEGRQ53A.js → chunk-6VHOQ3IM.js} +51 -6
  119. package/dist/{chunk-HIIXCAEE.js → chunk-6YVUR3OU.js} +3 -3
  120. package/dist/{chunk-L6ZNURWN.js → chunk-7GE2EQ23.js} +1 -1
  121. package/dist/{chunk-2CWS374F.js → chunk-7RI2CNXJ.js} +1 -1
  122. package/dist/{chunk-OL3QP3AU.js → chunk-7TSBV3SD.js} +1 -1
  123. package/dist/{chunk-DSOQUQTV.js → chunk-A27Q27CT.js} +27 -0
  124. package/dist/{chunk-5AHRZI3R.js → chunk-AETLDRZB.js} +1 -1
  125. package/dist/{chunk-RNLF3CBB.js → chunk-AKLJ4JH3.js} +1 -1
  126. package/dist/{chunk-XHYHX6F7.js → chunk-AKLQSC6W.js} +329 -164
  127. package/dist/chunk-ANLFH23R.js +261 -0
  128. package/dist/{chunk-QLA3RTH4.js → chunk-AWWKRZMB.js} +5 -5
  129. package/dist/{chunk-ERVQTR7P.js → chunk-BBSIEYF5.js} +17 -3
  130. package/dist/{chunk-IPMUWYRQ.js → chunk-BJ7AVSY6.js} +2 -2
  131. package/dist/{chunk-HV6Y6F4X.js → chunk-C2L622QJ.js} +89 -3
  132. package/dist/{chunk-TX3Q2GIL.js → chunk-C5HUMAA7.js} +24 -1
  133. package/dist/{chunk-QTYJPWJN.js → chunk-CBCGDEJA.js} +7 -7
  134. package/dist/{chunk-XXSNLM6R.js → chunk-DB55JZHU.js} +1 -1
  135. package/dist/{chunk-LAZKEJMS.js → chunk-DIXXEE3S.js} +840 -607
  136. package/dist/{chunk-FB343XQX.js → chunk-DJ7YXOTU.js} +2 -2
  137. package/dist/{chunk-YFCNWQAM.js → chunk-DJOIMFKV.js} +2 -2
  138. package/dist/{chunk-UTDMTQNH.js → chunk-DSJI76XL.js} +92 -14
  139. package/dist/{chunk-EEXX4UMQ.js → chunk-DZKPOSFD.js} +1 -1
  140. package/dist/{chunk-WSOA3WMC.js → chunk-E426DOSY.js} +161 -4
  141. package/dist/{chunk-ZISQOOER.js → chunk-EKE37MO4.js} +3 -3
  142. package/dist/{chunk-RIECV7SR.js → chunk-EKYYMIVT.js} +1 -1
  143. package/dist/{chunk-HIVZ53YB.js → chunk-EXTZSNWL.js} +2 -2
  144. package/dist/{chunk-YYA5LXCT.js → chunk-FNEZ4BWT.js} +1 -1
  145. package/dist/chunk-FTZET5YX.js +313 -0
  146. package/dist/chunk-GHR4ZPJ7.js +70 -0
  147. package/dist/{chunk-MINXPXAB.js → chunk-GJI77VDO.js} +3 -3
  148. package/dist/{chunk-AAMGHW5W.js → chunk-GLQEJOXE.js} +1 -0
  149. package/dist/{chunk-ADNBOKYZ.js → chunk-GM7TLYOK.js} +60 -18
  150. package/dist/{chunk-RUWWES2K.js → chunk-GNUAL43X.js} +2 -2
  151. package/dist/{chunk-QZL6E4UB.js → chunk-GOMQ7PVQ.js} +2 -2
  152. package/dist/{chunk-GB3AHV5F.js → chunk-GQOEWNVM.js} +1 -1
  153. package/dist/{chunk-NQZUSEAR.js → chunk-GS7LIT34.js} +246 -17
  154. package/dist/{chunk-XTWHNLGD.js → chunk-GZOG2MAX.js} +1 -1
  155. package/dist/{chunk-E5HAY3DQ.js → chunk-HDLAB7W3.js} +1 -1
  156. package/dist/{chunk-E5QQZDQN.js → chunk-HNWS7YHN.js} +358 -136
  157. package/dist/{chunk-VV5EZZNT.js → chunk-HTBEVCO2.js} +1 -1
  158. package/dist/{chunk-OZBII5E3.js → chunk-I4DNJFDR.js} +4 -4
  159. package/dist/{chunk-SI5SZAJA.js → chunk-IBS2FAI4.js} +21 -4
  160. package/dist/{chunk-J5EYOBFF.js → chunk-IHXW4VUI.js} +1 -1
  161. package/dist/{chunk-RUVO3NJC.js → chunk-IN6CAM4F.js} +9 -3
  162. package/dist/{chunk-53PYNYTW.js → chunk-IRVOXUSK.js} +5 -5
  163. package/dist/{chunk-THM7J6UI.js → chunk-JHI5WMK5.js} +5 -5
  164. package/dist/{chunk-3KTQWMHI.js → chunk-JSMDRKPJ.js} +12 -4
  165. package/dist/chunk-JTVIANUB.js +131 -0
  166. package/dist/{chunk-2ADYTOHQ.js → chunk-K4ESASPL.js} +1 -1
  167. package/dist/{chunk-YWUQVHDL.js → chunk-KTCXJWJG.js} +1 -1
  168. package/dist/{chunk-RGUDGC6A.js → chunk-KTU3EAWK.js} +5 -5
  169. package/dist/{chunk-DKBPCOU4.js → chunk-L6RXG36J.js} +2 -2
  170. package/dist/{chunk-T4EK56WI.js → chunk-LDNYSMPZ.js} +1 -1
  171. package/dist/{chunk-RIK5GRWI.js → chunk-LGS2V2XD.js} +3 -3
  172. package/dist/{chunk-JKXZGRWR.js → chunk-LP4GB656.js} +2 -2
  173. package/dist/{chunk-H74466TM.js → chunk-M7O7TGGU.js} +1 -1
  174. package/dist/chunk-MJCSEIFI.js +54 -0
  175. package/dist/{chunk-IDZPQG2D.js → chunk-MOGA4Q7F.js} +2 -2
  176. package/dist/{chunk-OYQNNKNS.js → chunk-MXPNVSXI.js} +37 -14
  177. package/dist/{chunk-UVW7YFAF.js → chunk-N7VEP5B3.js} +4 -4
  178. package/dist/{chunk-HHE2HV3V.js → chunk-NBXDXKLC.js} +1 -1
  179. package/dist/{chunk-LDL3S7AC.js → chunk-NKETJCB5.js} +7 -3
  180. package/dist/{chunk-ECHLVLA7.js → chunk-NMH5ZQPU.js} +1 -1
  181. package/dist/{chunk-U3XLRMJD.js → chunk-NT7W4RXD.js} +1 -1
  182. package/dist/{chunk-UQUUNGTP.js → chunk-NUK7EEN5.js} +11 -9
  183. package/dist/{chunk-GBNB4EWD.js → chunk-ORM7ZFKC.js} +16 -0
  184. package/dist/{chunk-O4ZFRK6W.js → chunk-OVEQE6YS.js} +244 -49
  185. package/dist/{chunk-4ZJ5BPY6.js → chunk-PB5S7YOF.js} +2 -2
  186. package/dist/{chunk-JR23BL74.js → chunk-PDVXWXTL.js} +4 -4
  187. package/dist/{chunk-3CIMDFXG.js → chunk-PFQ3VEEM.js} +1 -1
  188. package/dist/{chunk-SBJV2PCU.js → chunk-PHBU4LGO.js} +1 -1
  189. package/dist/{chunk-W25RLOQ2.js → chunk-PLZSZOZN.js} +3 -3
  190. package/dist/{chunk-THIJIOE2.js → chunk-PY3FOMRN.js} +18 -6
  191. package/dist/{chunk-AAUWFXOX.js → chunk-Q3AXXKDF.js} +3 -3
  192. package/dist/{chunk-VKXS2YGN.js → chunk-QHJR7IMX.js} +2 -2
  193. package/dist/chunk-QLZ46RCK.js +45 -0
  194. package/dist/{chunk-UHPMK6QZ.js → chunk-R3CZWFFC.js} +10 -2
  195. package/dist/{chunk-6XEYELCA.js → chunk-R4CBHKZ2.js} +1 -1
  196. package/dist/{chunk-5APCDDJZ.js → chunk-R522MWAR.js} +9 -9
  197. package/dist/chunk-RH4AH3YB.js +80 -0
  198. package/dist/{chunk-AMKSDKMK.js → chunk-S2WBS6BG.js} +22 -35
  199. package/dist/{chunk-WUKQVNLP.js → chunk-SEQIPGLU.js} +1 -1
  200. package/dist/{chunk-7WQRFSZI.js → chunk-SL6KQYDU.js} +26 -6
  201. package/dist/chunk-SLLLOOEI.js +103 -0
  202. package/dist/{chunk-5N4SG5NB.js → chunk-T35RCQFE.js} +3 -3
  203. package/dist/{chunk-7V6M3QUS.js → chunk-T3QUKNLI.js} +1 -1
  204. package/dist/{chunk-CW2UCKHS.js → chunk-TADAO3HV.js} +2 -2
  205. package/dist/{chunk-5DCCKHDY.js → chunk-TAMDAOCU.js} +109 -13
  206. package/dist/{chunk-ZXB56YR2.js → chunk-TFKCERAK.js} +101 -23
  207. package/dist/{chunk-RBYHJDAT.js → chunk-TQAZTRQ3.js} +3 -3
  208. package/dist/{chunk-OKGIOWOB.js → chunk-U6SUKSZR.js} +2 -2
  209. package/dist/{chunk-23QKEUF6.js → chunk-U73AC5AN.js} +34 -12
  210. package/dist/{chunk-PM6WSWVU.js → chunk-UBK7HK3J.js} +3 -3
  211. package/dist/{chunk-H37FSTF2.js → chunk-UBMZ3YQU.js} +1 -1
  212. package/dist/{chunk-JJUGI2YL.js → chunk-UCFC2AEI.js} +1 -1
  213. package/dist/{chunk-6IWLAQ7O.js → chunk-UCUOGVDX.js} +4 -0
  214. package/dist/{chunk-E7UCDSUE.js → chunk-UKLN57Q5.js} +2 -2
  215. package/dist/{chunk-ZYCLSEZT.js → chunk-ULIBLJ6W.js} +33 -11
  216. package/dist/{chunk-RLR6VVKV.js → chunk-UM3N6VND.js} +4 -4
  217. package/dist/{chunk-ZNUJFX7L.js → chunk-UQGSBM3U.js} +1 -1
  218. package/dist/{chunk-ZZXMB5F2.js → chunk-UZDF6FLJ.js} +1 -1
  219. package/dist/{chunk-LNOS24GV.js → chunk-V3WLC5TJ.js} +2 -95
  220. package/dist/{chunk-UXLO7VHX.js → chunk-VI4ATC6I.js} +1 -1
  221. package/dist/{chunk-77JP3LK4.js → chunk-VKJGHAZT.js} +92 -21
  222. package/dist/{chunk-7R73IAHU.js → chunk-VMTZ4RUW.js} +67 -150
  223. package/dist/{chunk-TGPQMMQP.js → chunk-VYQ7B7DI.js} +30 -17
  224. package/dist/{chunk-E2WEFZOR.js → chunk-W75GTHR3.js} +1 -1
  225. package/dist/{chunk-UKLF7F3Z.js → chunk-WJG344NC.js} +9 -9
  226. package/dist/{chunk-MBNIJXKI.js → chunk-WMEYJT4R.js} +18 -4
  227. package/dist/{chunk-R6FLELV6.js → chunk-XFTEX77S.js} +3 -3
  228. package/dist/{chunk-MDGYXUOV.js → chunk-XH7YL7JM.js} +1 -1
  229. package/dist/{chunk-JOO35RHR.js → chunk-XL5MFGMR.js} +3 -3
  230. package/dist/{chunk-OW5RZIDW.js → chunk-XNNECNDL.js} +95 -33
  231. package/dist/{chunk-5AHDQCTB.js → chunk-XXFKSJYA.js} +6 -6
  232. package/dist/{chunk-TGEPLJ66.js → chunk-XXOPG4BW.js} +3 -3
  233. package/dist/{chunk-PGLPUP37.js → chunk-XZ65ST2I.js} +1 -1
  234. package/dist/{chunk-3TTKAT6V.js → chunk-YKC7QDZH.js} +9 -4
  235. package/dist/{chunk-KXYFBBZR.js → chunk-YMP2QSOP.js} +20 -3
  236. package/dist/{chunk-TK4MI6F6.js → chunk-YSLGFPWX.js} +6 -6
  237. package/dist/{chunk-X2P43TB2.js → chunk-YTSXPJUQ.js} +1 -1
  238. package/dist/{chunk-HECXZGGZ.js → chunk-ZCERWHY2.js} +33 -35
  239. package/dist/{chunk-IVU3WN7S.js → chunk-ZG62LIK3.js} +74 -4
  240. package/dist/{chunk-GU62SNDH.js → chunk-ZGYNKA3O.js} +744 -111
  241. package/dist/{chunk-QMSEL5YS.js → chunk-ZIG7VPJV.js} +28 -76
  242. package/dist/{chunk-WZJVGA5I.js → chunk-ZL4AGWAH.js} +258 -13
  243. package/dist/{chunk-QR624DER.js → chunk-ZSODLMFV.js} +2 -2
  244. package/dist/{cleanup-graph-garbage-IPYDS5OX.js → cleanup-graph-garbage-DPJGO52H.js} +11 -10
  245. package/dist/{cloud-sync-command-JLNVG7H4.js → cloud-sync-command-JPNTT4OQ.js} +2 -2
  246. package/dist/{cloud-sync-db-init-JXUF6GI3.js → cloud-sync-db-init-V2LWIUQU.js} +1 -1
  247. package/dist/{cloud-sync-shutdown-Z4SBP6PL.js → cloud-sync-shutdown-BNALPWGX.js} +5 -4
  248. package/dist/{co-activation-74RDFTKS.js → co-activation-CMNSWS6B.js} +5 -4
  249. package/dist/{co-occurrence-CN3TBYVR.js → co-occurrence-WRI2NAN6.js} +9 -8
  250. package/dist/{code-context-index-D4MJ4VFX.js → code-context-index-NOJSHLPN.js} +12 -6
  251. package/dist/code-context-watcher-VZNZU3BO.js +118 -0
  252. package/dist/{codex-consolidation-PPXNBXCV.js → codex-consolidation-SH4UKFBQ.js} +2 -1
  253. package/dist/{conversation-entity-extractor-QGTLH4BP.js → conversation-entity-extractor-74252CAO.js} +4 -4
  254. package/dist/{conversation-wiki-populator-EBUZXYEU.js → conversation-wiki-populator-OS4C6W54.js} +1 -1
  255. package/dist/conversations-retention-C4BLKFEL.js +54 -0
  256. package/dist/coordinator-notice-MHUY7AQB.js +55 -0
  257. package/dist/{crdt-sync-7T4WCOKD.js → crdt-sync-B3JN6AIV.js} +1 -1
  258. package/dist/{crm-webhook-FTW3XZTO.js → crm-webhook-GYWQRFET.js} +2 -2
  259. package/dist/{cto-delegation-gate-SZCE34LB.js → cto-delegation-gate-LQHVLEMW.js} +29 -26
  260. package/dist/{daemon-auth-SSPY5ODS.js → daemon-auth-QZHEO7IQ.js} +3 -2
  261. package/dist/{daemon-orchestration-IGPHVNFR.js → daemon-orchestration-5HIQALZH.js} +36 -34
  262. package/dist/{daemon-ready-OT2VQLS7.js → daemon-ready-P2BR2XP5.js} +1 -1
  263. package/dist/{db-integrity-events-5DTASXJF.js → db-integrity-events-2DTFO37N.js} +3 -2
  264. package/dist/{db-restore-events-2FI4ZMKA.js → db-restore-events-G6NOQOVE.js} +2 -1
  265. package/dist/{destructive-data-guard-6I5MDFVD.js → destructive-data-guard-BVFWPPIS.js} +1 -1
  266. package/dist/doc-graph-extractor-PQHDHQPQ.js +367 -0
  267. package/dist/{documents-URULIXGM.js → documents-C4SSPJMC.js} +15 -13
  268. package/dist/{dreaming-VIZO3QDO.js → dreaming-XAO3FCBV.js} +33 -30
  269. package/dist/{employee-boot-brief-XLOG4ULP.js → employee-boot-brief-W4OHUMRQ.js} +37 -34
  270. package/dist/{exe-drift-TLQM3IHD.js → exe-drift-AG2KMKD5.js} +6 -5
  271. package/dist/{exe-export-7YWYWJHY.js → exe-export-IC5BT335.js} +17 -15
  272. package/dist/{exe-import-DW6VAUKW.js → exe-import-A35ZLDPG.js} +17 -15
  273. package/dist/{exe-key-TLJP2B4Y.js → exe-key-TCMJNYLA.js} +116 -112
  274. package/dist/{exe-org-LU46N36E.js → exe-org-JXCR3JYZ.js} +24 -23
  275. package/dist/{exe-snapshot-QHUZRS62.js → exe-snapshot-SV6SRIG6.js} +36 -33
  276. package/dist/{fast-db-init-SCTOOIUT.js → fast-db-init-L2RGKJWH.js} +1 -1
  277. package/dist/{founder-context-ZFZC4UHO.js → founder-context-D4HFIESJ.js} +4 -3
  278. package/dist/{founder-monitor-envelope-5KTKNL5G.js → founder-monitor-envelope-TFKRGCFE.js} +5 -4
  279. package/dist/{fts-integrity-LKAZEZJE.js → fts-integrity-4YB34KWX.js} +3 -2
  280. package/dist/gateway/index.js +19 -17
  281. package/dist/{git-main-guard-TN27QBAI.js → git-main-guard-VTW4N3CM.js} +7 -1
  282. package/dist/{git-staleness-GSGP344N.js → git-staleness-TN7CYGFG.js} +5 -4
  283. package/dist/{global-procedures-YAR7G4C6.js → global-procedures-YFDEIOG7.js} +7 -6
  284. package/dist/{graph-auto-extract-GNQS64F5.js → graph-auto-extract-3YR3TYRW.js} +9 -8
  285. package/dist/{graph-rag-RMSFLUOB.js → graph-rag-Z2KCJTPK.js} +6 -4
  286. package/dist/{hook-integrity-CF567MVN.js → hook-integrity-KGAV6ZC2.js} +14 -4
  287. package/dist/{hook-prefetch-36BK4F7U.js → hook-prefetch-K5DN3TOQ.js} +29 -26
  288. package/dist/hooks/bug-report-worker.js +34 -30
  289. package/dist/hooks/codex-stop-task-finalizer.js +36 -32
  290. package/dist/hooks/commit-complete.js +33 -30
  291. package/dist/hooks/error-recall.js +12 -11
  292. package/dist/hooks/exe-heartbeat-hook.js +8 -7
  293. package/dist/hooks/ingest-worker.js +23 -11
  294. package/dist/hooks/ingest.js +18 -17
  295. package/dist/hooks/instructions-loaded.js +10 -9
  296. package/dist/hooks/manifest.json +20 -20
  297. package/dist/hooks/notification.js +9 -8
  298. package/dist/hooks/post-compact.js +8 -7
  299. package/dist/hooks/post-tool-combined.js +26 -15
  300. package/dist/hooks/pre-compact.js +33 -30
  301. package/dist/hooks/pre-tool-use.js +404 -46
  302. package/dist/hooks/prompt-submit.js +57 -47
  303. package/dist/hooks/session-end.js +40 -41
  304. package/dist/hooks/session-start.js +21 -20
  305. package/dist/hooks/stop.js +40 -37
  306. package/dist/hooks/subagent-stop.js +38 -35
  307. package/dist/hooks/summary-worker.js +39 -36
  308. package/dist/hyde-MP4QNMU5.js +80 -0
  309. package/dist/index.js +44 -39
  310. package/dist/{installer-LUN4HQIC.js → installer-54HTN5RE.js} +8 -7
  311. package/dist/{installer-OC5VXNC7.js → installer-LK35OX6R.js} +8 -7
  312. package/dist/{installer-MPRFUQJE.js → installer-LLWKZI2S.js} +8 -7
  313. package/dist/intercom-ack-VCW755TN.js +13 -0
  314. package/dist/{intercom-queue-6DZ7BANV.js → intercom-queue-5NOT2RKI.js} +28 -25
  315. package/dist/{key-backup-status-6L2ARCXW.js → key-backup-status-LQPINQ3W.js} +2 -1
  316. package/dist/lib/agent-config.js +3 -2
  317. package/dist/lib/cloud-sync.js +26 -20
  318. package/dist/lib/config.js +2 -1
  319. package/dist/lib/consolidation.js +17 -10
  320. package/dist/lib/database.js +7 -4
  321. package/dist/lib/db-backup.js +17 -2
  322. package/dist/lib/db-daemon-client.js +8 -6
  323. package/dist/lib/db-write-worker-client.js +3 -1
  324. package/dist/lib/db-write-worker.js +20 -3
  325. package/dist/lib/db.js +7 -4
  326. package/dist/lib/device-registry.js +3 -2
  327. package/dist/lib/embed-worker.js +2 -1
  328. package/dist/lib/embedder.js +8 -6
  329. package/dist/lib/employee-templates.js +8 -7
  330. package/dist/lib/employees.js +5 -4
  331. package/dist/lib/exe-daemon-client.js +7 -5
  332. package/dist/lib/exe-daemon.js +467 -221
  333. package/dist/lib/hybrid-search.js +11 -8
  334. package/dist/lib/identity.js +5 -4
  335. package/dist/lib/license.js +4 -3
  336. package/dist/lib/messaging.js +29 -26
  337. package/dist/lib/post-tool-memory.js +16 -2
  338. package/dist/lib/registry-proxy.js +3 -1
  339. package/dist/lib/reminders.js +6 -5
  340. package/dist/lib/schedules.js +9 -8
  341. package/dist/lib/session-registry.js +7 -6
  342. package/dist/lib/skill-learning.js +16 -14
  343. package/dist/lib/stack-invariants.js +17 -1
  344. package/dist/lib/status-brief.js +5 -4
  345. package/dist/lib/store.js +10 -7
  346. package/dist/lib/task-router.js +6 -5
  347. package/dist/lib/tasks.js +31 -27
  348. package/dist/lib/tmux-routing.js +40 -25
  349. package/dist/lib/tmux-status.js +3 -1
  350. package/dist/lib/tmux-transport.js +2 -1
  351. package/dist/lib/token-spend.js +6 -5
  352. package/dist/lib/transport.js +3 -2
  353. package/dist/{license-gate-ESER24PJ.js → license-gate-JVMB6OFD.js} +5 -4
  354. package/dist/{license-sync-JVG5KNIY.js → license-sync-5VYS2F2W.js} +4 -3
  355. package/dist/mcp/register-tools.js +113 -109
  356. package/dist/mcp/server.js +118 -114
  357. package/dist/mcp/tools/complete-reminder.js +7 -6
  358. package/dist/mcp/tools/create-reminder.js +7 -6
  359. package/dist/mcp/tools/create-task.js +34 -30
  360. package/dist/mcp/tools/deactivate-behavior.js +18 -16
  361. package/dist/mcp/tools/list-reminders.js +7 -6
  362. package/dist/mcp/tools/list-tasks.js +34 -30
  363. package/dist/mcp/tools/send-message.js +32 -29
  364. package/dist/mcp/tools/update-task.js +32 -28
  365. package/dist/mcp-child-registry-OTG4MWO7.js +25 -0
  366. package/dist/{mcp-http-config-6K6IKH5F.js → mcp-http-config-DQWL7U2Z.js} +6 -5
  367. package/dist/{mcp-session-identity-LRC6WJSD.js → mcp-session-identity-277GASTQ.js} +28 -25
  368. package/dist/{memory-cards-V3OZHIYP.js → memory-cards-3S2ZQPR7.js} +17 -8
  369. package/dist/{memory-graph-extractor-JC2Z64L4.js → memory-graph-extractor-A6DFEFIN.js} +10 -9
  370. package/dist/{memory-poisoning-defense-YM4QJHCX.js → memory-poisoning-defense-ZVP4H6DY.js} +5 -4
  371. package/dist/{memory-pressure-watchdog-6F6KEQHN.js → memory-pressure-watchdog-6W5F6R7H.js} +29 -26
  372. package/dist/{memory-queue-QJNWKWKG.js → memory-queue-YF7IDSFY.js} +3 -2
  373. package/dist/{memory-queue-client-COA4ABEV.js → memory-queue-client-ADSDP6OX.js} +9 -7
  374. package/dist/{memory-reflection-QXHJPYPC.js → memory-reflection-BKB2YOE6.js} +52 -6
  375. package/dist/{monitor-grants-BW2WL4IU.js → monitor-grants-EV747HMW.js} +4 -3
  376. package/dist/{notification-ledger-6QRLQW4Q.js → notification-ledger-CLGM7ODF.js} +30 -27
  377. package/dist/{notifications-7B6D7Y5C.js → notifications-MACUZPYP.js} +28 -25
  378. package/dist/{oauth-server-TZFNQAFS.js → oauth-server-AYM37SQ4.js} +25 -4
  379. package/dist/{orchestration-events-GY5VP5LU.js → orchestration-events-N7LYMUGA.js} +6 -5
  380. package/dist/{orchestration-phase-UDS24CVQ.js → orchestration-phase-T2WD45UA.js} +3 -2
  381. package/dist/{orchestrator-JVPVOYWA.js → orchestrator-4X24EWHV.js} +30 -27
  382. package/dist/{org-brief-session-GRV5R5E3.js → org-brief-session-FZOFMO5U.js} +13 -12
  383. package/dist/{org-consent-policy-3FHHSYXV.js → org-consent-policy-O5E6HXBL.js} +1 -1
  384. package/dist/{org-join-BY4PV6UO.js → org-join-POWUG25F.js} +8 -7
  385. package/dist/{org-key-admin-WSCPT2CZ.js → org-key-admin-E7EMDOZZ.js} +9 -8
  386. package/dist/{org-key-pin-5WUSPGVN.js → org-key-pin-WHWHVWUO.js} +4 -3
  387. package/dist/{org-membership-ESALTLLN.js → org-membership-WRT2IHJK.js} +5 -4
  388. package/dist/{org-partner-config-YKHPDPZR.js → org-partner-config-B7T4CL2T.js} +7 -6
  389. package/dist/{org-partner-runtime-UJDGECZ4.js → org-partner-runtime-FODONVTM.js} +13 -12
  390. package/dist/{org-row-visibility-V5DXIHTE.js → org-row-visibility-VX4AVV5Q.js} +1 -1
  391. package/dist/{pipeline-router-YY5FQKTY.js → pipeline-router-6GGT2ZW3.js} +6 -5
  392. package/dist/{plan-limits-OVX6SN6B.js → plan-limits-FUN76LYY.js} +8 -7
  393. package/dist/{platform-procedures-I57ITMDC.js → platform-procedures-7YSCLF4Z.js} +1 -1
  394. package/dist/{postinstall-failure-B2JHNFPM.js → postinstall-failure-O6TSSNJB.js} +3 -2
  395. package/dist/{project-boot-LXLU2J32.js → project-boot-3Q65LCIP.js} +2 -1
  396. package/dist/project-name-LJVFMYTQ.js +30 -0
  397. package/dist/{projection-worker-D2472IOD.js → projection-worker-4OANGP5K.js} +5 -4
  398. package/dist/{prospective-memory-JXO2A6PL.js → prospective-memory-KR3P4T6N.js} +5 -4
  399. package/dist/{push-notifications-HR3FZRDI.js → push-notifications-NCZLH6DI.js} +29 -26
  400. package/dist/ref-provenance-gate-M4AQO4OT.js +269 -0
  401. package/dist/{reproject-worktree-memories-OSS3PGRF.js → reproject-worktree-memories-PWYKPB2U.js} +106 -23
  402. package/dist/{reranker-IMZRPYJ2.js → reranker-6V3C2AO4.js} +3 -2
  403. package/dist/resolve-image-labels-ZI6UBW5W.js +15 -0
  404. package/dist/{retrieval-health-W7OD44FE.js → retrieval-health-5D7O6VH6.js} +4 -3
  405. package/dist/{review-polling-2INP7H6M.js → review-polling-QW3LJ4KN.js} +29 -26
  406. package/dist/runtime/index.js +38 -34
  407. package/dist/{session-events-G4XUPVWV.js → session-events-T45SSTMF.js} +31 -26
  408. package/dist/{session-kill-telemetry-W7MHWJTQ.js → session-kill-telemetry-QSPVJGBF.js} +29 -26
  409. package/dist/{session-mcp-config-F7KATWOF.js → session-mcp-config-SC5BLWZG.js} +3 -2
  410. package/dist/{session-scope-LG2J4EMQ.js → session-scope-KRWE54C4.js} +28 -25
  411. package/dist/{setup-wizard-YQJI3SVM.js → setup-wizard-GP3TBTPF.js} +5 -4
  412. package/dist/{shard-manager-UROHZE46.js → shard-manager-OE36A4MY.js} +3 -2
  413. package/dist/{skill-refinement-RA37U756.js → skill-refinement-C7JTMLJG.js} +6 -5
  414. package/dist/stack-generate-manifest-MFMDWRUP.js +810 -0
  415. package/dist/{stack-promote-IYBRXHTA.js → stack-promote-EKSCYY63.js} +8 -6
  416. package/dist/{stack-release-OXWLVVG6.js → stack-release-2GZAAFO4.js} +8 -6
  417. package/dist/{stack-update-2CZEROPK.js → stack-update-J6JXSTAZ.js} +51 -5
  418. package/dist/{steward-gate-LTNFB3FY.js → steward-gate-BFCCMCSW.js} +6 -5
  419. package/dist/{subagent-brief-injection-OHLWLECQ.js → subagent-brief-injection-ED36PLYY.js} +44 -36
  420. package/dist/{subagent-spawn-ledger-USYZXU3M.js → subagent-spawn-ledger-E6U3OY6Z.js} +3 -2
  421. package/dist/{supervisor-handoff-CSJQMI53.js → supervisor-handoff-SGLEPOCY.js} +12 -3
  422. package/dist/{support-inbox-4KCEPAZQ.js → support-inbox-YW47SYJF.js} +20 -5
  423. package/dist/{task-enforcement-LGXWXGVZ.js → task-enforcement-CECTQX4U.js} +29 -26
  424. package/dist/{task-request-inbox-WHCOSUCP.js → task-request-inbox-Q5T4N5K7.js} +1 -1
  425. package/dist/{task-scope-KXF7Y6KA.js → task-scope-ERVEUEYU.js} +28 -25
  426. package/dist/{tasks-crud-5EM55WRZ.js → tasks-crud-ZRQNJXQ2.js} +28 -25
  427. package/dist/{tasks-notify-VFMAURTN.js → tasks-notify-MIZH4C2O.js} +29 -26
  428. package/dist/{tasks-review-MHGMBHUZ.js → tasks-review-Z7J2P6DG.js} +28 -25
  429. package/dist/{telemetry-upload-6NRTN7QJ.js → telemetry-upload-LVQUQYFP.js} +10 -9
  430. package/dist/{token-budget-LZPOYTRP.js → token-budget-BU4NOVZF.js} +6 -5
  431. package/dist/{tool-capability-index-ED5OAPMW.js → tool-capability-index-7F42MOJT.js} +1 -1
  432. package/dist/{tool-gates-7PLIOLAL.js → tool-gates-JWVSAYTW.js} +1 -1
  433. package/dist/{tool-gates-2OZY3GZM.js → tool-gates-VXITVRFQ.js} +1 -1
  434. package/dist/{tool-telemetry-ZX7VSAXK.js → tool-telemetry-O27EVMBR.js} +1 -1
  435. package/dist/tui/App.js +43 -40
  436. package/dist/{tui-data-CC5POSUV.js → tui-data-TPWWBIUQ.js} +28 -25
  437. package/dist/{update-support-KH6NSQON.js → update-support-F2F5537B.js} +22 -20
  438. package/dist/{whatsapp-QW3X7OCN.js → whatsapp-YM4A2CSK.js} +3 -1
  439. package/dist/{work-claims-MNK7PEPW.js → work-claims-B73X5NE7.js} +6 -5
  440. package/dist/{work-state-heartbeat-YEWT5NMZ.js → work-state-heartbeat-P4YX6E2R.js} +1 -1
  441. package/dist/{worker-gate-BOQSIU2Z.js → worker-gate-BEEIIVWA.js} +3 -2
  442. package/dist/{workflow-engine-MUUD7ZEX.js → workflow-engine-5X46PFCW.js} +4 -2
  443. package/dist/{worktree-GOGT2LZP.js → worktree-W47CIMJ6.js} +9 -6
  444. package/dist/worktree-ownership-guard-OUWJROW2.js +88 -0
  445. package/dist/{worktree-sweep-46VWPVQT.js → worktree-sweep-BNBD4RFX.js} +8 -7
  446. package/package.json +14 -5
  447. package/release-notes.json +5 -5
  448. package/src/commands/exe/call.md +1 -1
  449. package/stack.release.json +6 -0
  450. package/dist/chunk-KZXMP6JG.js +0 -319
  451. package/dist/chunk-TCTED52S.js +0 -120
  452. package/dist/chunk-W2IRQJ6R.js +0 -67
  453. package/dist/doc-graph-extractor-VPTRIEKN.js +0 -149
  454. package/dist/project-name-ILJTETUE.js +0 -14
  455. /package/dist/{chunk-3Y5THOU6.js → chunk-6WIFPD2P.js} +0 -0
  456. /package/dist/{chunk-7XGXRD22.js → chunk-AISULNGL.js} +0 -0
  457. /package/dist/{chunk-3F2UB4IQ.js → chunk-DN4YVV4Z.js} +0 -0
  458. /package/dist/{chunk-WV3TOOL7.js → chunk-KQ6RJWRW.js} +0 -0
  459. /package/dist/{chunk-HR2R2QER.js → chunk-M4IRPXSZ.js} +0 -0
  460. /package/dist/{chunk-ORA5BWCV.js → chunk-NRG7KZIP.js} +0 -0
  461. /package/dist/{chunk-7UTJA6HF.js → chunk-VZAFWPAY.js} +0 -0
  462. /package/dist/{chunk-VJSDGDNS.js → chunk-WSQASFLP.js} +0 -0
  463. /package/dist/{chunk-FZQWVQJG.js → chunk-YO4BO2CL.js} +0 -0
  464. /package/dist/{core-memory-6WBNT2HL.js → core-memory-7I7RE2SJ.js} +0 -0
  465. /package/dist/{entity-boost-MT336PI3.js → entity-boost-3UWGXG5O.js} +0 -0
  466. /package/dist/{memory-isolation-EJ45IXBH.js → memory-isolation-2TUZ7Z4K.js} +0 -0
  467. /package/dist/{message-queue-client-MVBTYCSV.js → message-queue-client-XQN7QABL.js} +0 -0
  468. /package/dist/{webhook-pipe-UQSEHFPO.js → webhook-pipe-W2FVXY7M.js} +0 -0
  469. /package/dist/{wiki-acl-WXRJGZ5Q.js → wiki-acl-IBQLLBTS.js} +0 -0
  470. /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-UQUUNGTP.js";
10
+ } from "./chunk-NUK7EEN5.js";
11
11
  import {
12
- EXE_AI_DIR
13
- } from "./chunk-QMSEL5YS.js";
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
- function resolveImport(fromFile, importPath, allFiles) {
219
- if (!importPath.startsWith(".")) return null;
220
- const base = path.posix.normalize(path.posix.join(path.posix.dirname(fromFile.replaceAll(path.sep, "/")), importPath));
221
- const withoutKnownExt = base.replace(/\.(?:[a-z0-9]+)$/i, "");
222
- const candidates = [base];
223
- for (const ext of ["ts", "tsx", "js", "jsx", "py", "rs", "go", "java", "cs", "cpp", "c", "rb", "php", "swift", "kt", "scala", "sql", "md", "json", "yaml", "yml"]) {
224
- candidates.push(`${withoutKnownExt}.${ext}`, `${base}.${ext}`);
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
- for (const indexName of ["index.ts", "index.tsx", "index.js", "mod.rs", "__init__.py"]) candidates.push(path.posix.join(base, indexName));
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 = imports.map((importPath) => resolveImport(relPath, importPath, allFiles)).filter((file) => Boolean(file));
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, previous?.files[normalized]);
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, previous?.files[normalized]);
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
- if (loaded) {
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,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-WNBZJSQT.js";
10
10
  import {
11
11
  EXE_AI_DIR
12
- } from "./chunk-QMSEL5YS.js";
12
+ } from "./chunk-ZIG7VPJV.js";
13
13
  import {
14
14
  atomicWriteJsonSync,
15
15
  ensurePrivateDirSync
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4QCFFW2H.js";
4
4
  import {
5
5
  EXE_AI_DIR
6
- } from "./chunk-QMSEL5YS.js";
6
+ } from "./chunk-ZIG7VPJV.js";
7
7
 
8
8
  // src/lib/local-secret-inventory.ts
9
9
  import {