@remnic/core 9.63.1 → 9.63.3

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 (284) hide show
  1. package/dist/access-admin-ops-surface.d.ts +1 -1
  2. package/dist/access-admin-ops-surface.js +33 -32
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +1 -1
  5. package/dist/access-authorization-probe.js +34 -33
  6. package/dist/access-boundary.d.ts +1 -1
  7. package/dist/access-boundary.js +33 -32
  8. package/dist/access-cli.js +97 -95
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +1 -1
  11. package/dist/access-extraction-force-flush.js +33 -32
  12. package/dist/access-http-lcm-compaction.d.ts +1 -1
  13. package/dist/access-http-lifecycle-flush.d.ts +1 -1
  14. package/dist/access-http-offline-stream.d.ts +1 -1
  15. package/dist/access-http-query.js +33 -32
  16. package/dist/access-http.d.ts +2 -2
  17. package/dist/access-http.js +46 -45
  18. package/dist/access-identity-continuity-surface.js +33 -32
  19. package/dist/access-lcm-surface.d.ts +1 -1
  20. package/dist/access-lcm-surface.js +33 -32
  21. package/dist/access-mcp.d.ts +1 -1
  22. package/dist/access-mcp.js +39 -38
  23. package/dist/access-namespace-preflight.js +33 -32
  24. package/dist/access-observe-write-surface.d.ts +1 -1
  25. package/dist/access-observe-write-surface.js +33 -32
  26. package/dist/access-operations-batch.js +34 -33
  27. package/dist/access-operations.d.ts +4 -4
  28. package/dist/access-operations.js +38 -37
  29. package/dist/access-recall-concurrency.d.ts +1 -1
  30. package/dist/access-recall-concurrency.js +33 -32
  31. package/dist/access-recall-response.d.ts +1 -1
  32. package/dist/access-recall-response.js +33 -32
  33. package/dist/access-recall-surface.d.ts +1 -1
  34. package/dist/access-recall-surface.js +33 -32
  35. package/dist/access-schema.d.ts +88 -88
  36. package/dist/access-schema.js +3 -3
  37. package/dist/access-service-helpers.d.ts +1 -1
  38. package/dist/access-service.d.ts +1 -1
  39. package/dist/access-service.js +33 -32
  40. package/dist/access-surface-catalog.d.ts +1 -1
  41. package/dist/access-surface-catalog.js +35 -34
  42. package/dist/access-surface-catalog.js.map +1 -1
  43. package/dist/adapters/index.js +7 -7
  44. package/dist/adapters/registry.js +3 -3
  45. package/dist/{auto-sync-Z52VWMNC.js → auto-sync-BKRJDMKX.js} +3 -3
  46. package/dist/behavior-learner.js +2 -2
  47. package/dist/briefing.js +14 -14
  48. package/dist/buffer.js +4 -3
  49. package/dist/causal-behavior.js +3 -3
  50. package/dist/causal-chain.js +3 -3
  51. package/dist/causal-consolidation.js +17 -17
  52. package/dist/causal-retrieval.js +3 -3
  53. package/dist/causal-trajectory.js +2 -2
  54. package/dist/{chunk-5F6HMNMZ.js → chunk-2LA3H54D.js} +2 -2
  55. package/dist/{chunk-IRLH4NM2.js → chunk-2PSX5BJU.js} +3 -3
  56. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  57. package/dist/{chunk-F2FZEVDE.js → chunk-3LJ2L3T3.js} +2 -2
  58. package/dist/{chunk-RBBYKXXK.js → chunk-44KHFMCM.js} +64 -62
  59. package/dist/{chunk-RBBYKXXK.js.map → chunk-44KHFMCM.js.map} +1 -1
  60. package/dist/{chunk-AUIAHNO7.js → chunk-4NMVX5U7.js} +2 -2
  61. package/dist/{chunk-ANMIOQPU.js → chunk-4XN35YQD.js} +478 -164
  62. package/dist/chunk-4XN35YQD.js.map +1 -0
  63. package/dist/{chunk-LJOIZPJH.js → chunk-5QZR2RA3.js} +2 -2
  64. package/dist/{chunk-RBJKE5LV.js → chunk-5UFQCU6M.js} +32 -32
  65. package/dist/{chunk-S52C2DEM.js → chunk-5W5N7XJZ.js} +2 -2
  66. package/dist/{chunk-GL4RHVHX.js → chunk-5W62VEFH.js} +4 -4
  67. package/dist/{chunk-DEOYTFA6.js → chunk-645WOU5I.js} +4 -52
  68. package/dist/chunk-645WOU5I.js.map +1 -0
  69. package/dist/{chunk-4WW5FMUD.js → chunk-6D7PZKCJ.js} +9 -9
  70. package/dist/{chunk-NVSTZ2PN.js → chunk-6F2UMP4H.js} +7 -7
  71. package/dist/{chunk-IIPJKCZB.js → chunk-6NAPOLRO.js} +3 -3
  72. package/dist/{chunk-U4CCRHN6.js → chunk-6UZR7KEK.js} +2 -2
  73. package/dist/{chunk-2TYIAKU5.js → chunk-6YMEU6OQ.js} +2 -2
  74. package/dist/{chunk-LAX6S5WS.js → chunk-A73QHOZP.js} +2 -2
  75. package/dist/{chunk-ZSH6GJ2V.js → chunk-AJSZ2EK6.js} +3 -3
  76. package/dist/{chunk-GUBT77YC.js → chunk-B2OOJCUX.js} +2 -2
  77. package/dist/chunk-BUYVPUEM.js +66 -0
  78. package/dist/chunk-BUYVPUEM.js.map +1 -0
  79. package/dist/{chunk-YTHQHH5U.js → chunk-C6WMSXCJ.js} +2 -2
  80. package/dist/{chunk-JKW663ZN.js → chunk-CIAI24TQ.js} +2 -2
  81. package/dist/{chunk-PD6O7AXF.js → chunk-CSAKJVXW.js} +14 -17
  82. package/dist/chunk-CSAKJVXW.js.map +1 -0
  83. package/dist/{chunk-ALKRPLWB.js → chunk-DNRTKO2U.js} +2 -2
  84. package/dist/{chunk-J5AFG5JN.js → chunk-EJLTNPRY.js} +3 -3
  85. package/dist/{chunk-ORB56L3Y.js → chunk-EJQXDKYK.js} +4 -4
  86. package/dist/{chunk-UM7A4CPT.js → chunk-FKJVEW6O.js} +2 -2
  87. package/dist/{chunk-ZXMNT75M.js → chunk-GFNS3BHV.js} +3 -3
  88. package/dist/{chunk-ALNZEWGN.js → chunk-GPFZFCRN.js} +2 -2
  89. package/dist/{chunk-MQFFR6QB.js → chunk-GTRGH4ZT.js} +2 -2
  90. package/dist/{chunk-USKANB65.js → chunk-I6OQCT3Y.js} +2 -2
  91. package/dist/{chunk-2AZBPQLK.js → chunk-IKXUG6KC.js} +7 -7
  92. package/dist/{chunk-5LVSFKQB.js → chunk-IM56VPKO.js} +3 -3
  93. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  94. package/dist/{chunk-R7R4FSV2.js → chunk-ITYAXU4S.js} +3 -3
  95. package/dist/{chunk-7CJO52ET.js → chunk-JJ7JW62R.js} +23 -23
  96. package/dist/{chunk-5S7Y7AC6.js → chunk-JJX5XEIG.js} +2 -2
  97. package/dist/{chunk-OF6KQJ35.js → chunk-JWPG65LH.js} +14 -14
  98. package/dist/chunk-K2XUWZBM.js +417 -0
  99. package/dist/chunk-K2XUWZBM.js.map +1 -0
  100. package/dist/{chunk-G2FCSILA.js → chunk-KWIGDKM2.js} +2 -2
  101. package/dist/{chunk-UKBIB3FP.js → chunk-KWN6NOHQ.js} +2 -2
  102. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  103. package/dist/{chunk-SHSJP4D6.js → chunk-LZCSOUJ7.js} +2 -2
  104. package/dist/{chunk-256FBCVX.js → chunk-M4AHBM72.js} +7 -7
  105. package/dist/{chunk-5PFGMO33.js → chunk-MEW53VQJ.js} +2 -2
  106. package/dist/{chunk-DCUMFQYM.js → chunk-ML3U4KPR.js} +2 -2
  107. package/dist/{chunk-UDL4DNBM.js → chunk-MR5HWQHS.js} +2 -2
  108. package/dist/{chunk-H7PRHUBD.js → chunk-NRLELHAY.js} +2 -2
  109. package/dist/{chunk-ZS4JADYY.js → chunk-OW7NVMGQ.js} +2 -2
  110. package/dist/{chunk-U5LYM2NS.js → chunk-PADG72LJ.js} +3 -3
  111. package/dist/{chunk-6GGTATZF.js → chunk-PYIR4SSB.js} +4 -4
  112. package/dist/chunk-PYIR4SSB.js.map +1 -0
  113. package/dist/{chunk-UW74LP76.js → chunk-Q35XGIEM.js} +2 -2
  114. package/dist/{chunk-XPRJSHNI.js → chunk-QJ622LTI.js} +6 -3
  115. package/dist/chunk-QJ622LTI.js.map +1 -0
  116. package/dist/{chunk-FNYIMSKI.js → chunk-QSIQVC32.js} +2 -2
  117. package/dist/{chunk-EJYAE2U7.js → chunk-R74NCKEY.js} +4 -4
  118. package/dist/{chunk-KP36WQBJ.js → chunk-RYGJGXL6.js} +2 -2
  119. package/dist/{chunk-4OW2T32G.js → chunk-SQ3EGGII.js} +2 -2
  120. package/dist/{chunk-FU7OICXE.js → chunk-TRPX6F2G.js} +10 -10
  121. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  122. package/dist/{chunk-6VX2ZZH2.js → chunk-VAMQU4W7.js} +2 -2
  123. package/dist/{chunk-WLITCQAC.js → chunk-VN7IIQGS.js} +2 -2
  124. package/dist/{chunk-MMM7SDOJ.js → chunk-WDUG2CH3.js} +2 -2
  125. package/dist/{chunk-P2BT5ALE.js → chunk-X4MGNVOO.js} +2 -2
  126. package/dist/{chunk-BE5SVRFC.js → chunk-XFCQIQQU.js} +3 -3
  127. package/dist/{chunk-S4MF77NV.js → chunk-XZPSBGHA.js} +2 -2
  128. package/dist/{chunk-PMRUMGK6.js → chunk-Y7COCXY2.js} +2 -2
  129. package/dist/{chunk-DJ7HMNSL.js → chunk-YCVB7X56.js} +4 -2
  130. package/dist/chunk-YCVB7X56.js.map +1 -0
  131. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  132. package/dist/{chunk-A5BYPCDI.js → chunk-Z334TJRB.js} +2 -2
  133. package/dist/{cli-DJwNNDL1.d.ts → cli-Bw9z-KqX.d.ts} +1 -1
  134. package/dist/cli.d.ts +2 -2
  135. package/dist/cli.js +67 -66
  136. package/dist/coding/pre-action-gate.js +3 -3
  137. package/dist/compounding/engine.js +14 -14
  138. package/dist/connectors/codex-materialize-runner.js +14 -14
  139. package/dist/connectors/index.d.ts +45 -1
  140. package/dist/connectors/index.js +23 -15
  141. package/dist/convergence-refresh.js +16 -16
  142. package/dist/conversation-index/backend.js +2 -2
  143. package/dist/corpus-watermark.js +16 -16
  144. package/dist/dashboard-runtime.js +2 -2
  145. package/dist/direct-answer-wiring.js +3 -3
  146. package/dist/direct-answer.js +2 -2
  147. package/dist/entity-retrieval.js +14 -14
  148. package/dist/event-order-query.d.ts +3 -0
  149. package/dist/event-order-query.js +9 -0
  150. package/dist/event-order-query.js.map +1 -0
  151. package/dist/event-order-recall.d.ts +2 -2
  152. package/dist/event-order-recall.js +5 -2
  153. package/dist/external-wiki-access.d.ts +1 -1
  154. package/dist/external-wiki-access.js +34 -33
  155. package/dist/external-wiki-mcp-tools.d.ts +1 -1
  156. package/dist/extraction-normalization.js +2 -2
  157. package/dist/extraction.js +23 -22
  158. package/dist/harmonic-construction.js +2 -2
  159. package/dist/harmonic-retrieval.js +2 -2
  160. package/dist/index.d.ts +682 -681
  161. package/dist/index.js +106 -103
  162. package/dist/intent.js +2 -1
  163. package/dist/lcm/engine.js +3 -3
  164. package/dist/lcm/index.js +6 -6
  165. package/dist/maintenance/memory-governance.js +14 -14
  166. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
  167. package/dist/maintenance/rebuild-memory-projection.js +15 -15
  168. package/dist/mcp-memory-inspector-app.d.ts +1 -1
  169. package/dist/namespaces/migrate.js +15 -15
  170. package/dist/namespaces/search.js +9 -9
  171. package/dist/namespaces/storage.js +14 -14
  172. package/dist/operator-doctor-corpus.js +17 -17
  173. package/dist/operator-toolkit.js +21 -21
  174. package/dist/orchestration/maintenance.js +19 -19
  175. package/dist/orchestrator.js +99 -97
  176. package/dist/policy-runtime.js +3 -3
  177. package/dist/{public-http-43z1YT-k.d.ts → public-http-DK-QwaBu.d.ts} +1 -1
  178. package/dist/recall-planner-i18n.d.ts +31 -0
  179. package/dist/recall-planner-i18n.js +30 -0
  180. package/dist/recall-planner-i18n.js.map +1 -0
  181. package/dist/recall-planner-llm.js +2 -1
  182. package/dist/recall-planner-llm.js.map +1 -1
  183. package/dist/recall-query-policy.js +2 -2
  184. package/dist/recall-tokenization.js +1 -1
  185. package/dist/resume-bundles.js +3 -3
  186. package/dist/retrieval-agents.js +2 -1
  187. package/dist/schemas.d.ts +108 -108
  188. package/dist/search/factory.js +8 -8
  189. package/dist/search/index.js +14 -14
  190. package/dist/search/orama-backend.js +2 -2
  191. package/dist/semantic-consolidation.js +15 -15
  192. package/dist/semantic-rule-promotion.js +14 -14
  193. package/dist/semantic-rule-verifier.js +14 -14
  194. package/dist/shared-context/manager.d.ts +8 -8
  195. package/dist/source-agent-qualifier.js +20 -19
  196. package/dist/storage.js +13 -13
  197. package/dist/support-passport/index.d.ts +4 -4
  198. package/dist/support-passport/index.js +36 -35
  199. package/dist/transfer/autodetect.js +1 -1
  200. package/dist/transfer/backup.js +1 -1
  201. package/dist/transfer/capsule-export.js +2 -2
  202. package/dist/transfer/types.d.ts +66 -66
  203. package/dist/trust-zones.js +2 -2
  204. package/dist/verified-recall.js +14 -14
  205. package/dist/work-product-ledger.js +2 -2
  206. package/package.json +2 -2
  207. package/src/connectors/droid-mcp.ts +434 -0
  208. package/src/connectors/index.ts +70 -0
  209. package/src/direct-answer.ts +6 -3
  210. package/src/event-order-query.ts +78 -0
  211. package/src/event-order-recall.ts +4 -90
  212. package/src/intent.ts +19 -19
  213. package/src/recall-planner-i18n.ts +193 -0
  214. package/src/recall-tokenization.ts +3 -1
  215. package/src/retrieval-agents.ts +6 -10
  216. package/dist/chunk-6GGTATZF.js.map +0 -1
  217. package/dist/chunk-ANMIOQPU.js.map +0 -1
  218. package/dist/chunk-DEOYTFA6.js.map +0 -1
  219. package/dist/chunk-DJ7HMNSL.js.map +0 -1
  220. package/dist/chunk-PD6O7AXF.js.map +0 -1
  221. package/dist/chunk-XPRJSHNI.js.map +0 -1
  222. package/dist/{access-service-DBpEnlzA.d.ts → access-service-M4LgO141.d.ts} +64 -64
  223. /package/dist/{auto-sync-Z52VWMNC.js.map → auto-sync-BKRJDMKX.js.map} +0 -0
  224. /package/dist/{chunk-5F6HMNMZ.js.map → chunk-2LA3H54D.js.map} +0 -0
  225. /package/dist/{chunk-IRLH4NM2.js.map → chunk-2PSX5BJU.js.map} +0 -0
  226. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  227. /package/dist/{chunk-F2FZEVDE.js.map → chunk-3LJ2L3T3.js.map} +0 -0
  228. /package/dist/{chunk-AUIAHNO7.js.map → chunk-4NMVX5U7.js.map} +0 -0
  229. /package/dist/{chunk-LJOIZPJH.js.map → chunk-5QZR2RA3.js.map} +0 -0
  230. /package/dist/{chunk-RBJKE5LV.js.map → chunk-5UFQCU6M.js.map} +0 -0
  231. /package/dist/{chunk-S52C2DEM.js.map → chunk-5W5N7XJZ.js.map} +0 -0
  232. /package/dist/{chunk-GL4RHVHX.js.map → chunk-5W62VEFH.js.map} +0 -0
  233. /package/dist/{chunk-4WW5FMUD.js.map → chunk-6D7PZKCJ.js.map} +0 -0
  234. /package/dist/{chunk-NVSTZ2PN.js.map → chunk-6F2UMP4H.js.map} +0 -0
  235. /package/dist/{chunk-IIPJKCZB.js.map → chunk-6NAPOLRO.js.map} +0 -0
  236. /package/dist/{chunk-U4CCRHN6.js.map → chunk-6UZR7KEK.js.map} +0 -0
  237. /package/dist/{chunk-2TYIAKU5.js.map → chunk-6YMEU6OQ.js.map} +0 -0
  238. /package/dist/{chunk-LAX6S5WS.js.map → chunk-A73QHOZP.js.map} +0 -0
  239. /package/dist/{chunk-ZSH6GJ2V.js.map → chunk-AJSZ2EK6.js.map} +0 -0
  240. /package/dist/{chunk-GUBT77YC.js.map → chunk-B2OOJCUX.js.map} +0 -0
  241. /package/dist/{chunk-YTHQHH5U.js.map → chunk-C6WMSXCJ.js.map} +0 -0
  242. /package/dist/{chunk-JKW663ZN.js.map → chunk-CIAI24TQ.js.map} +0 -0
  243. /package/dist/{chunk-ALKRPLWB.js.map → chunk-DNRTKO2U.js.map} +0 -0
  244. /package/dist/{chunk-J5AFG5JN.js.map → chunk-EJLTNPRY.js.map} +0 -0
  245. /package/dist/{chunk-ORB56L3Y.js.map → chunk-EJQXDKYK.js.map} +0 -0
  246. /package/dist/{chunk-UM7A4CPT.js.map → chunk-FKJVEW6O.js.map} +0 -0
  247. /package/dist/{chunk-ZXMNT75M.js.map → chunk-GFNS3BHV.js.map} +0 -0
  248. /package/dist/{chunk-ALNZEWGN.js.map → chunk-GPFZFCRN.js.map} +0 -0
  249. /package/dist/{chunk-MQFFR6QB.js.map → chunk-GTRGH4ZT.js.map} +0 -0
  250. /package/dist/{chunk-USKANB65.js.map → chunk-I6OQCT3Y.js.map} +0 -0
  251. /package/dist/{chunk-2AZBPQLK.js.map → chunk-IKXUG6KC.js.map} +0 -0
  252. /package/dist/{chunk-5LVSFKQB.js.map → chunk-IM56VPKO.js.map} +0 -0
  253. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  254. /package/dist/{chunk-R7R4FSV2.js.map → chunk-ITYAXU4S.js.map} +0 -0
  255. /package/dist/{chunk-7CJO52ET.js.map → chunk-JJ7JW62R.js.map} +0 -0
  256. /package/dist/{chunk-5S7Y7AC6.js.map → chunk-JJX5XEIG.js.map} +0 -0
  257. /package/dist/{chunk-OF6KQJ35.js.map → chunk-JWPG65LH.js.map} +0 -0
  258. /package/dist/{chunk-G2FCSILA.js.map → chunk-KWIGDKM2.js.map} +0 -0
  259. /package/dist/{chunk-UKBIB3FP.js.map → chunk-KWN6NOHQ.js.map} +0 -0
  260. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  261. /package/dist/{chunk-SHSJP4D6.js.map → chunk-LZCSOUJ7.js.map} +0 -0
  262. /package/dist/{chunk-256FBCVX.js.map → chunk-M4AHBM72.js.map} +0 -0
  263. /package/dist/{chunk-5PFGMO33.js.map → chunk-MEW53VQJ.js.map} +0 -0
  264. /package/dist/{chunk-DCUMFQYM.js.map → chunk-ML3U4KPR.js.map} +0 -0
  265. /package/dist/{chunk-UDL4DNBM.js.map → chunk-MR5HWQHS.js.map} +0 -0
  266. /package/dist/{chunk-H7PRHUBD.js.map → chunk-NRLELHAY.js.map} +0 -0
  267. /package/dist/{chunk-ZS4JADYY.js.map → chunk-OW7NVMGQ.js.map} +0 -0
  268. /package/dist/{chunk-U5LYM2NS.js.map → chunk-PADG72LJ.js.map} +0 -0
  269. /package/dist/{chunk-UW74LP76.js.map → chunk-Q35XGIEM.js.map} +0 -0
  270. /package/dist/{chunk-FNYIMSKI.js.map → chunk-QSIQVC32.js.map} +0 -0
  271. /package/dist/{chunk-EJYAE2U7.js.map → chunk-R74NCKEY.js.map} +0 -0
  272. /package/dist/{chunk-KP36WQBJ.js.map → chunk-RYGJGXL6.js.map} +0 -0
  273. /package/dist/{chunk-4OW2T32G.js.map → chunk-SQ3EGGII.js.map} +0 -0
  274. /package/dist/{chunk-FU7OICXE.js.map → chunk-TRPX6F2G.js.map} +0 -0
  275. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  276. /package/dist/{chunk-6VX2ZZH2.js.map → chunk-VAMQU4W7.js.map} +0 -0
  277. /package/dist/{chunk-WLITCQAC.js.map → chunk-VN7IIQGS.js.map} +0 -0
  278. /package/dist/{chunk-MMM7SDOJ.js.map → chunk-WDUG2CH3.js.map} +0 -0
  279. /package/dist/{chunk-P2BT5ALE.js.map → chunk-X4MGNVOO.js.map} +0 -0
  280. /package/dist/{chunk-BE5SVRFC.js.map → chunk-XFCQIQQU.js.map} +0 -0
  281. /package/dist/{chunk-S4MF77NV.js.map → chunk-XZPSBGHA.js.map} +0 -0
  282. /package/dist/{chunk-PMRUMGK6.js.map → chunk-Y7COCXY2.js.map} +0 -0
  283. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  284. /package/dist/{chunk-A5BYPCDI.js.map → chunk-Z334TJRB.js.map} +0 -0
@@ -3,71 +3,71 @@ import {
3
3
  blendGraphExpandedRecallScore,
4
4
  graphPathRelativeToStorage,
5
5
  mergeGraphExpandedResults
6
- } from "./chunk-RBBYKXXK.js";
7
- import "./chunk-PMRUMGK6.js";
8
- import "./chunk-UKBIB3FP.js";
9
- import {
10
- formatCompressionGuidelinesForRecall
11
- } from "./chunk-UXREWVW4.js";
12
- import "./chunk-EJYAE2U7.js";
6
+ } from "./chunk-44KHFMCM.js";
7
+ import "./chunk-Y7COCXY2.js";
8
+ import "./chunk-KWN6NOHQ.js";
9
+ import "./chunk-R74NCKEY.js";
13
10
  import "./chunk-I74SUMNI.js";
14
11
  import "./chunk-ILNPU5W5.js";
15
12
  import "./chunk-7HYPN2GC.js";
13
+ import {
14
+ formatCompressionGuidelinesForRecall
15
+ } from "./chunk-UXREWVW4.js";
16
16
  import "./chunk-666A3MOW.js";
17
17
  import "./chunk-KBL3JJR6.js";
18
18
  import "./chunk-FQ7HAWWC.js";
19
19
  import "./chunk-VDC6RZI4.js";
20
20
  import "./chunk-UWK5OXUJ.js";
21
- import "./chunk-256FBCVX.js";
21
+ import "./chunk-M4AHBM72.js";
22
+ import "./chunk-TPDBFYEG.js";
23
+ import "./chunk-UXPUUL3G.js";
22
24
  import "./chunk-DDA47TES.js";
23
25
  import "./chunk-ZPUIRTIZ.js";
24
26
  import "./chunk-WVP2I6C5.js";
25
27
  import "./chunk-7N4KAIGN.js";
26
- import "./chunk-TPDBFYEG.js";
27
- import "./chunk-UXPUUL3G.js";
28
28
  import "./chunk-V5OCT34X.js";
29
29
  import "./chunk-TECVW3JP.js";
30
30
  import "./chunk-C5JF6EZ7.js";
31
- import "./chunk-WLITCQAC.js";
31
+ import "./chunk-KWIGDKM2.js";
32
+ import "./chunk-VN7IIQGS.js";
32
33
  import "./chunk-VI637ILW.js";
33
- import "./chunk-G2FCSILA.js";
34
34
  import "./chunk-47DU4SGJ.js";
35
35
  import "./chunk-SEF4IOFE.js";
36
+ import "./chunk-ECZU5BJH.js";
36
37
  import "./chunk-UHGBNIOS.js";
37
38
  import "./chunk-2NKY7OC6.js";
38
39
  import "./chunk-4EX5WZ4M.js";
39
40
  import "./chunk-YRFAYOFQ.js";
40
41
  import "./chunk-EGBDFJ36.js";
41
- import "./chunk-ECZU5BJH.js";
42
42
  import "./chunk-EUYWQ7TS.js";
43
43
  import "./chunk-6DNMUYEE.js";
44
44
  import "./chunk-T67LUYCR.js";
45
45
  import "./chunk-ODZKV2F7.js";
46
+ import "./chunk-5IZL4DCV.js";
46
47
  import "./chunk-UYCIS6V5.js";
47
48
  import "./chunk-LUDXM7MD.js";
48
49
  import "./chunk-6TCXIRP5.js";
49
- import "./chunk-XPRJSHNI.js";
50
+ import "./chunk-QJ622LTI.js";
50
51
  import "./chunk-ZOKZIR5K.js";
51
- import "./chunk-5IZL4DCV.js";
52
52
  import "./chunk-X7XN6YU4.js";
53
53
  import "./chunk-KATEWTQJ.js";
54
+ import "./chunk-YDBIWGNI.js";
54
55
  import "./chunk-PRDJMOST.js";
55
56
  import "./chunk-D3V3UMET.js";
56
- import "./chunk-YDBIWGNI.js";
57
57
  import "./chunk-ZZTOURJI.js";
58
58
  import "./chunk-ROI7BK7H.js";
59
59
  import "./chunk-23L3IXFD.js";
60
60
  import "./chunk-3GPTTA4J.js";
61
61
  import "./chunk-H63EDPFJ.js";
62
62
  import "./chunk-HTIIXNJQ.js";
63
- import "./chunk-5PFGMO33.js";
64
- import "./chunk-YAZNBMNF.js";
65
- import "./chunk-XXSOVESA.js";
66
63
  import "./chunk-PHRLJFWZ.js";
67
64
  import "./chunk-64NJRYU2.js";
68
- import "./chunk-2AZBPQLK.js";
65
+ import "./chunk-MEW53VQJ.js";
66
+ import "./chunk-YAZNBMNF.js";
67
+ import "./chunk-XXSOVESA.js";
68
+ import "./chunk-IKXUG6KC.js";
69
69
  import "./chunk-4RA3C3EV.js";
70
- import "./chunk-GL4RHVHX.js";
70
+ import "./chunk-5W62VEFH.js";
71
71
  import "./chunk-4NZHHGVL.js";
72
72
  import "./chunk-54V4BZWP.js";
73
73
  import "./chunk-2CGLBUW3.js";
@@ -76,35 +76,37 @@ import "./chunk-SZ4HFZKB.js";
76
76
  import "./chunk-4POAMKV6.js";
77
77
  import "./chunk-WAS4HV46.js";
78
78
  import "./chunk-OH7QLI6W.js";
79
+ import "./chunk-BLDBT6HZ.js";
79
80
  import "./chunk-PWFCHOB3.js";
80
81
  import "./chunk-TWTUGCTY.js";
81
- import "./chunk-2TYIAKU5.js";
82
+ import "./chunk-6YMEU6OQ.js";
82
83
  import "./chunk-R7TZ2HCS.js";
83
- import "./chunk-BLDBT6HZ.js";
84
- import "./chunk-DEOYTFA6.js";
84
+ import "./chunk-VL35ZFSZ.js";
85
+ import "./chunk-645WOU5I.js";
86
+ import "./chunk-BUYVPUEM.js";
85
87
  import "./chunk-IAIPNEHD.js";
86
88
  import "./chunk-TVIVY7KU.js";
87
89
  import "./chunk-YVVQUAOO.js";
88
90
  import "./chunk-LUPVCGYK.js";
89
91
  import "./chunk-DGFU5MSX.js";
90
- import "./chunk-VL35ZFSZ.js";
91
- import "./chunk-UW74LP76.js";
92
+ import "./chunk-Q35XGIEM.js";
92
93
  import "./chunk-GKUA4MGB.js";
93
94
  import "./chunk-5AUY5Z5E.js";
94
95
  import "./chunk-SVH57F5Z.js";
95
96
  import "./chunk-T3GIETKV.js";
96
97
  import "./chunk-J6QIAYNR.js";
97
98
  import "./chunk-VEWZZM3H.js";
98
- import "./chunk-IIPJKCZB.js";
99
- import "./chunk-6GGTATZF.js";
99
+ import "./chunk-6NAPOLRO.js";
100
+ import "./chunk-PYIR4SSB.js";
100
101
  import "./chunk-DFEODULB.js";
101
- import "./chunk-UM7A4CPT.js";
102
+ import "./chunk-FKJVEW6O.js";
102
103
  import "./chunk-3I4FUAVJ.js";
103
- import "./chunk-RBJKE5LV.js";
104
- import "./chunk-H4CKS5B2.js";
104
+ import "./chunk-5UFQCU6M.js";
105
105
  import "./chunk-MMACM5G2.js";
106
106
  import "./chunk-54BGIBCR.js";
107
+ import "./chunk-H4CKS5B2.js";
107
108
  import "./chunk-FXZTL7F7.js";
109
+ import "./chunk-UP6MOYCB.js";
108
110
  import "./chunk-BV2TIZ4F.js";
109
111
  import "./chunk-HDDRVXX4.js";
110
112
  import "./chunk-PYHOAXTI.js";
@@ -114,59 +116,58 @@ import "./chunk-2DL3OFLD.js";
114
116
  import "./chunk-G4IAEX6D.js";
115
117
  import "./chunk-2NLLXCJG.js";
116
118
  import "./chunk-765K3SAT.js";
117
- import "./chunk-UP6MOYCB.js";
119
+ import "./chunk-TBUEE7XF.js";
118
120
  import "./chunk-FGDKJJZS.js";
119
121
  import "./chunk-AJVLDJU6.js";
120
- import "./chunk-TBUEE7XF.js";
121
122
  import "./chunk-EEC4PCG5.js";
122
123
  import "./chunk-PYIFUBRK.js";
123
124
  import "./chunk-IIFFC3RL.js";
124
- import "./chunk-USKANB65.js";
125
+ import "./chunk-I6OQCT3Y.js";
125
126
  import "./chunk-DQTCGVFK.js";
126
127
  import "./chunk-AXFWMRKI.js";
127
128
  import "./chunk-YLBE6PLR.js";
128
129
  import "./chunk-CDKHKZL5.js";
129
130
  import "./chunk-HSSERO3E.js";
130
131
  import "./chunk-NOUJNHWG.js";
132
+ import "./chunk-XFCQIQQU.js";
133
+ import "./chunk-HL4DB7TO.js";
131
134
  import "./chunk-HDQUQBPW.js";
132
135
  import "./chunk-6FC3IZ26.js";
133
- import "./chunk-BE5SVRFC.js";
134
- import "./chunk-HL4DB7TO.js";
135
136
  import "./chunk-OJP3N7UK.js";
136
- import "./chunk-F2FZEVDE.js";
137
- import "./chunk-R7R4FSV2.js";
138
- import "./chunk-ZS4JADYY.js";
139
- import "./chunk-H7PRHUBD.js";
137
+ import "./chunk-3LJ2L3T3.js";
138
+ import "./chunk-ITYAXU4S.js";
139
+ import "./chunk-OW7NVMGQ.js";
140
+ import "./chunk-NRLELHAY.js";
140
141
  import "./chunk-AM4T6CHX.js";
141
142
  import "./chunk-7DRSWPUV.js";
142
143
  import "./chunk-3T74IZB3.js";
143
- import "./chunk-5F6HMNMZ.js";
144
- import "./chunk-NVSTZ2PN.js";
145
- import "./chunk-S52C2DEM.js";
144
+ import "./chunk-2LA3H54D.js";
145
+ import "./chunk-6F2UMP4H.js";
146
+ import "./chunk-5W5N7XJZ.js";
146
147
  import "./chunk-KFY3SGN7.js";
147
148
  import "./chunk-CMTINOFS.js";
148
- import "./chunk-GUBT77YC.js";
149
+ import "./chunk-B2OOJCUX.js";
149
150
  import "./chunk-RMMVQQA6.js";
150
151
  import "./chunk-UR6PBX2J.js";
151
152
  import "./chunk-6GUG4YNM.js";
152
153
  import "./chunk-JXS5PDQ7.js";
153
- import "./chunk-P2BT5ALE.js";
154
- import "./chunk-OZKOPQCM.js";
154
+ import "./chunk-X4MGNVOO.js";
155
155
  import "./chunk-C7SRUWBW.js";
156
+ import "./chunk-OZKOPQCM.js";
156
157
  import "./chunk-MCA2X4WH.js";
157
- import "./chunk-EZ25VE3G.js";
158
- import "./chunk-44442YCH.js";
158
+ import "./chunk-YNDLCWXS.js";
159
159
  import "./chunk-AUDJPF4N.js";
160
+ import "./chunk-44442YCH.js";
160
161
  import "./chunk-Y4Z4I6WK.js";
161
- import "./chunk-J5AFG5JN.js";
162
+ import "./chunk-EJLTNPRY.js";
162
163
  import "./chunk-KJTKLXTH.js";
163
164
  import "./chunk-2DQ2XREU.js";
164
165
  import "./chunk-ACPCA4NO.js";
165
166
  import "./chunk-OKTXM5H4.js";
166
167
  import "./chunk-2ASAS3CQ.js";
167
168
  import "./chunk-NOB2T2FC.js";
168
- import "./chunk-U4CCRHN6.js";
169
- import "./chunk-U5LYM2NS.js";
169
+ import "./chunk-6UZR7KEK.js";
170
+ import "./chunk-PADG72LJ.js";
170
171
  import "./chunk-5JMAGU26.js";
171
172
  import "./chunk-MYVPLJOO.js";
172
173
  import "./chunk-H3FZVNRN.js";
@@ -193,33 +194,33 @@ import "./chunk-PIG4WJFQ.js";
193
194
  import "./chunk-T3JQTCCO.js";
194
195
  import "./chunk-KFZY2OFH.js";
195
196
  import "./chunk-QW27DOHG.js";
196
- import "./chunk-YTHQHH5U.js";
197
+ import "./chunk-C6WMSXCJ.js";
197
198
  import "./chunk-KD3QD3A5.js";
198
- import "./chunk-FU7OICXE.js";
199
+ import "./chunk-TRPX6F2G.js";
199
200
  import "./chunk-V7IZKJI3.js";
200
201
  import "./chunk-SEDEKFYQ.js";
201
- import "./chunk-JBPKEARU.js";
202
+ import "./chunk-2QSZNTDO.js";
203
+ import "./chunk-RSUYKGGZ.js";
204
+ import "./chunk-42NQ7AVG.js";
202
205
  import "./chunk-TMSXWOBZ.js";
203
206
  import "./chunk-TB6CBZ5V.js";
204
207
  import "./chunk-J64TK33U.js";
205
- import "./chunk-RSUYKGGZ.js";
206
- import "./chunk-42NQ7AVG.js";
207
208
  import "./chunk-7RXCMVFQ.js";
208
209
  import "./chunk-3HSRWJTC.js";
209
- import "./chunk-AUIAHNO7.js";
210
- import "./chunk-S4MF77NV.js";
210
+ import "./chunk-4NMVX5U7.js";
211
+ import "./chunk-XZPSBGHA.js";
211
212
  import "./chunk-6ZYQ36IB.js";
212
- import "./chunk-5LVSFKQB.js";
213
+ import "./chunk-IM56VPKO.js";
213
214
  import "./chunk-HIEWDJ2O.js";
214
215
  import "./chunk-A5KNZSNA.js";
215
216
  import "./chunk-D24OXEPB.js";
216
- import "./chunk-ORB56L3Y.js";
217
- import "./chunk-UDL4DNBM.js";
218
- import "./chunk-LAX6S5WS.js";
217
+ import "./chunk-EJQXDKYK.js";
218
+ import "./chunk-MR5HWQHS.js";
219
+ import "./chunk-A73QHOZP.js";
219
220
  import "./chunk-7T4TOGMS.js";
220
221
  import "./chunk-7YQ6ESEA.js";
221
- import "./chunk-JKW663ZN.js";
222
- import "./chunk-ZSH6GJ2V.js";
222
+ import "./chunk-CIAI24TQ.js";
223
+ import "./chunk-AJSZ2EK6.js";
223
224
  import "./chunk-LTBKKSCX.js";
224
225
  import "./chunk-EQWEIIKQ.js";
225
226
  import "./chunk-7BY7V4YX.js";
@@ -234,27 +235,27 @@ import "./chunk-GZ3R6XOE.js";
234
235
  import "./chunk-CK5KOVHW.js";
235
236
  import "./chunk-DJUKBGAD.js";
236
237
  import "./chunk-G73MCJKL.js";
237
- import "./chunk-KP36WQBJ.js";
238
+ import "./chunk-RYGJGXL6.js";
238
239
  import {
239
240
  filterRecallCandidates,
240
241
  hasIdentityRecoveryIntent,
241
242
  resolveEffectiveIdentityInjectionMode
242
- } from "./chunk-7CJO52ET.js";
243
+ } from "./chunk-JJ7JW62R.js";
243
244
  import "./chunk-GDASG7NC.js";
244
245
  import "./chunk-GDB4J2H3.js";
245
246
  import "./chunk-QYN5PXDZ.js";
246
247
  import "./chunk-VQ7B2Q6M.js";
247
248
  import "./chunk-PJSK6OJM.js";
249
+ import "./chunk-5QZR2RA3.js";
248
250
  import "./chunk-GNVZQ5JN.js";
249
251
  import "./chunk-YN2UN7N3.js";
250
- import "./chunk-LJOIZPJH.js";
251
252
  import "./chunk-P5FPO2BR.js";
252
253
  import "./chunk-S4DDLTPX.js";
253
254
  import "./chunk-H7XKCNR6.js";
254
255
  import "./chunk-3F3CVVDS.js";
255
256
  import "./chunk-SOBJ6NEY.js";
256
257
  import "./chunk-QICOU4RY.js";
257
- import "./chunk-SHSJP4D6.js";
258
+ import "./chunk-LZCSOUJ7.js";
258
259
  import "./chunk-CVILPI77.js";
259
260
  import "./chunk-2HIJHXB3.js";
260
261
  import "./chunk-AQEJKOKI.js";
@@ -262,23 +263,23 @@ import "./chunk-HTP6XRUI.js";
262
263
  import "./chunk-EIR5VLIH.js";
263
264
  import "./chunk-IISBCCWR.js";
264
265
  import "./chunk-PD66CVSD.js";
266
+ import "./chunk-LTHVM4XN.js";
265
267
  import "./chunk-EI6V5UXY.js";
266
- import "./chunk-4OW2T32G.js";
267
- import "./chunk-ANMIOQPU.js";
268
+ import "./chunk-SQ3EGGII.js";
269
+ import "./chunk-4XN35YQD.js";
268
270
  import "./chunk-EMDLM3LW.js";
269
271
  import "./chunk-NLE6TSLG.js";
270
272
  import "./chunk-IVKIODHO.js";
271
273
  import "./chunk-WKDFJXW5.js";
272
274
  import "./chunk-JUXOTY6J.js";
273
275
  import "./chunk-QDW3E4RD.js";
274
- import "./chunk-LTHVM4XN.js";
275
276
  import "./chunk-DLQQU4EG.js";
276
277
  import "./chunk-C37ZRXX7.js";
277
278
  import "./chunk-7ZNJN5WZ.js";
278
- import "./chunk-5S7Y7AC6.js";
279
- import "./chunk-ALKRPLWB.js";
280
- import "./chunk-ZXMNT75M.js";
281
- import "./chunk-FNYIMSKI.js";
279
+ import "./chunk-JJX5XEIG.js";
280
+ import "./chunk-DNRTKO2U.js";
281
+ import "./chunk-GFNS3BHV.js";
282
+ import "./chunk-QSIQVC32.js";
282
283
  import "./chunk-UFGFMWAD.js";
283
284
  import "./chunk-YMOPYG3K.js";
284
285
  import "./chunk-2LSZVONP.js";
@@ -322,39 +323,40 @@ import {
322
323
  throwIfRecallAborted,
323
324
  tokenizeRecallQuery,
324
325
  utcDateKeysForLocalDay
325
- } from "./chunk-MQFFR6QB.js";
326
- import "./chunk-PD6O7AXF.js";
326
+ } from "./chunk-GTRGH4ZT.js";
327
+ import "./chunk-CSAKJVXW.js";
328
+ import "./chunk-K2XUWZBM.js";
327
329
  import "./chunk-OD4FM2U7.js";
328
330
  import "./chunk-ZY2MNJR6.js";
329
- import "./chunk-MMM7SDOJ.js";
331
+ import "./chunk-WDUG2CH3.js";
330
332
  import "./chunk-RDFF2NAU.js";
331
- import "./chunk-ALNZEWGN.js";
332
- import "./chunk-6VX2ZZH2.js";
333
- import "./chunk-OF6KQJ35.js";
334
- import "./chunk-UHVXE24Y.js";
333
+ import "./chunk-GPFZFCRN.js";
334
+ import "./chunk-VAMQU4W7.js";
335
+ import "./chunk-JWPG65LH.js";
335
336
  import "./chunk-46WM6JX2.js";
337
+ import "./chunk-UHVXE24Y.js";
336
338
  import "./chunk-SXIMQLGV.js";
337
- import "./chunk-A5BYPCDI.js";
338
- import "./chunk-4WW5FMUD.js";
339
- import "./chunk-CYEPCZN5.js";
340
- import "./chunk-DCUMFQYM.js";
341
- import "./chunk-VYISFWVX.js";
342
- import "./chunk-6KTXE6A3.js";
339
+ import "./chunk-Z334TJRB.js";
340
+ import "./chunk-6D7PZKCJ.js";
343
341
  import "./chunk-OQIRBGUU.js";
344
342
  import "./chunk-VANZKHTN.js";
343
+ import "./chunk-CYEPCZN5.js";
344
+ import "./chunk-ML3U4KPR.js";
345
+ import "./chunk-VYISFWVX.js";
345
346
  import "./chunk-W7IGLX4G.js";
347
+ import "./chunk-6KTXE6A3.js";
346
348
  import "./chunk-GUMZC2BO.js";
347
- import "./chunk-227UFSEQ.js";
348
- import "./chunk-ET356KSB.js";
349
+ import "./chunk-LEPOP46W.js";
349
350
  import "./chunk-72A4L5JJ.js";
350
351
  import "./chunk-A7Q43EUZ.js";
352
+ import "./chunk-ET356KSB.js";
351
353
  import "./chunk-S2V7RUCL.js";
352
354
  import "./chunk-AR253JBM.js";
355
+ import "./chunk-PO7NXBG2.js";
353
356
  import "./chunk-S2HLHAZ4.js";
354
357
  import "./chunk-SCU65EZI.js";
355
- import "./chunk-PO7NXBG2.js";
356
- import "./chunk-LDXUBPMO.js";
357
358
  import "./chunk-DM2T26WE.js";
359
+ import "./chunk-LDXUBPMO.js";
358
360
  import "./chunk-UG6VXIOK.js";
359
361
  import "./chunk-AAD2ZS6P.js";
360
362
  import "./chunk-H6ZXNH5I.js";
@@ -399,11 +401,11 @@ import "./chunk-W5BIQOAJ.js";
399
401
  import "./chunk-Z7L72ZHL.js";
400
402
  import "./chunk-4O4TKIXQ.js";
401
403
  import "./chunk-TBBDFYXW.js";
402
- import "./chunk-DJ7HMNSL.js";
403
- import "./chunk-KQAFEZQX.js";
404
+ import "./chunk-YCVB7X56.js";
405
+ import "./chunk-IPLYGWQF.js";
406
+ import "./chunk-J4EB7DNW.js";
404
407
  import "./chunk-WEHSQBFR.js";
405
408
  import "./chunk-X7Y7WX73.js";
406
- import "./chunk-J4EB7DNW.js";
407
409
  import "./chunk-BJMBJZ2Y.js";
408
410
  import "./chunk-UKJAGEXH.js";
409
411
  import "./chunk-FP2373TW.js";
@@ -457,9 +459,9 @@ import "./chunk-2Z24E5W2.js";
457
459
  import "./chunk-BTTPKDIL.js";
458
460
  import "./chunk-A2IYSXDQ.js";
459
461
  import "./chunk-P77QX3ID.js";
460
- import "./chunk-7K5Q6COX.js";
461
- import "./chunk-LBLXEFWK.js";
462
+ import "./chunk-TVVEYCNW.js";
462
463
  import "./chunk-RFYAYKTD.js";
464
+ import "./chunk-LBLXEFWK.js";
463
465
  import "./chunk-JIYDRBVZ.js";
464
466
  import "./chunk-FF4KLI5W.js";
465
467
  import "./chunk-XQ3HXAQH.js";
@@ -2,10 +2,10 @@ import {
2
2
  PolicyRuntimeManager,
3
3
  readRuntimePolicySnapshot,
4
4
  sanitizeRuntimePolicyValues
5
- } from "./chunk-5F6HMNMZ.js";
6
- import "./chunk-YTHQHH5U.js";
5
+ } from "./chunk-2LA3H54D.js";
6
+ import "./chunk-C6WMSXCJ.js";
7
7
  import "./chunk-TBBDFYXW.js";
8
- import "./chunk-DJ7HMNSL.js";
8
+ import "./chunk-YCVB7X56.js";
9
9
  import "./chunk-PZ5AY32C.js";
10
10
  export {
11
11
  PolicyRuntimeManager,
@@ -1,5 +1,5 @@
1
1
  import { IncomingMessage, ServerResponse } from 'node:http';
2
- import { f as EngramAccessService } from './access-service-DBpEnlzA.js';
2
+ import { f as EngramAccessService } from './access-service-M4LgO141.js';
3
3
 
4
4
  declare const SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES: readonly [{
5
5
  readonly method: "GET";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Per-script closed-class cue tables and script-agnostic signal helpers
3
+ * shared by the recall planner heuristics (issue #2191).
4
+ *
5
+ * English keyword regexes stay in their consumers. These tables seed the
6
+ * top ~10 languages so non-English prompts route to the same recall modes
7
+ * as their English equivalents. Substring cues are curated so pure-ASCII
8
+ * entries are multi-word phrases (or non-English single words) that cannot
9
+ * occur in English text — the English corpus behavior is unchanged.
10
+ */
11
+ /** True when the text contains a letter outside ASCII — the English keyword
12
+ * tables cannot be assumed to apply. */
13
+ declare function hasNonAsciiLetter(text: string): boolean;
14
+ /** Strip trailing punctuation/symbols/emojis (Unicode-aware) so exact-match
15
+ * ack detection works for "はい。", "merci !", "شكرا" etc. */
16
+ declare function stripTrailingRecallNoise(text: string): string;
17
+ /** True when the text ends with an ASCII, fullwidth, or Arabic question mark. */
18
+ declare function endsWithQuestionMark(text: string): boolean;
19
+ declare function containsRecallCue(text: string, cues: readonly string[]): boolean;
20
+ declare function isMultilingualAck(candidate: string): boolean;
21
+ declare const GRAPH_MODE_CUES: readonly string[];
22
+ declare const CAUSAL_CHAIN_CUES: readonly string[];
23
+ declare const EVENT_ORDER_CUES: readonly string[];
24
+ declare const TIMING_DETAIL_CUES: readonly string[];
25
+ declare const CONTRADICTION_CUES: readonly string[];
26
+ declare const MULTILINGUAL_PROMPT_RECALL_WORDS: readonly string[];
27
+ /** Structural heading line for non-Latin scripts: colon-terminated, short,
28
+ * and containing a non-ASCII letter. English prompts are unaffected. */
29
+ declare function isNonLatinHeadingLine(line: string): boolean;
30
+
31
+ export { CAUSAL_CHAIN_CUES, CONTRADICTION_CUES, EVENT_ORDER_CUES, GRAPH_MODE_CUES, MULTILINGUAL_PROMPT_RECALL_WORDS, TIMING_DETAIL_CUES, containsRecallCue, endsWithQuestionMark, hasNonAsciiLetter, isMultilingualAck, isNonLatinHeadingLine, stripTrailingRecallNoise };
@@ -0,0 +1,30 @@
1
+ import {
2
+ CAUSAL_CHAIN_CUES,
3
+ CONTRADICTION_CUES,
4
+ EVENT_ORDER_CUES,
5
+ GRAPH_MODE_CUES,
6
+ MULTILINGUAL_PROMPT_RECALL_WORDS,
7
+ TIMING_DETAIL_CUES,
8
+ containsRecallCue,
9
+ endsWithQuestionMark,
10
+ hasNonAsciiLetter,
11
+ isMultilingualAck,
12
+ isNonLatinHeadingLine,
13
+ stripTrailingRecallNoise
14
+ } from "./chunk-K2XUWZBM.js";
15
+ import "./chunk-PZ5AY32C.js";
16
+ export {
17
+ CAUSAL_CHAIN_CUES,
18
+ CONTRADICTION_CUES,
19
+ EVENT_ORDER_CUES,
20
+ GRAPH_MODE_CUES,
21
+ MULTILINGUAL_PROMPT_RECALL_WORDS,
22
+ TIMING_DETAIL_CUES,
23
+ containsRecallCue,
24
+ endsWithQuestionMark,
25
+ hasNonAsciiLetter,
26
+ isMultilingualAck,
27
+ isNonLatinHeadingLine,
28
+ stripTrailingRecallNoise
29
+ };
30
+ //# sourceMappingURL=recall-planner-i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  planRecallMode
3
- } from "./chunk-PD6O7AXF.js";
3
+ } from "./chunk-CSAKJVXW.js";
4
+ import "./chunk-K2XUWZBM.js";
4
5
  import {
5
6
  FallbackLlmClient,
6
7
  fallbackLlmRuntimeContextFromConfig,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/recall-planner-llm.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport type { PluginConfig, RecallPlanMode } from \"./types.js\";\nimport type { CapabilitySet } from \"./capabilities.js\";\nimport { planRecallMode } from \"./intent.js\";\nimport {\n FallbackLlmClient,\n fallbackLlmRuntimeContextFromConfig,\n gatewayTaskChainOptions,\n type FallbackLlmOptions,\n} from \"./fallback-llm.js\";\nimport { log } from \"./logger.js\";\n\n/**\n * LLM-based recall planning (issue #1367, Option C).\n *\n * Classifies an incoming prompt into a {@link RecallPlanMode} using an LLM\n * instead of (or alongside) the regex heuristic in {@link planRecallMode}.\n *\n * Provider-agnostic by construction: it routes through {@link FallbackLlmClient},\n * which resolves the model chain from gateway providers (OpenAI, Anthropic,\n * Ollama, Codex, …) or gateway agent personas / `taskModelChain`. Nothing here\n * is hard-coded to a single provider or to OpenAI's Responses API — the API\n * dialect is chosen per-provider by the client based on each provider's `api`\n * field. The configured `recallPlannerModel` is tried first, with the broader\n * task chain (and the gateway default) as resilient fallbacks.\n *\n * Invariants:\n * - Never throws to the caller (gotcha #13). Any LLM failure, timeout, empty\n * response, or unavailable backend falls back to the heuristic result and\n * sets `fallbackUsed: true` (gotcha #34 — failures are distinct from a valid\n * classification).\n * - When `recallPlannerLlmEnabled` is false the LLM is never contacted.\n */\n\nexport type RecallPlannerSource = \"llm\" | \"heuristic\" | \"heuristic-fallback\";\n\nexport interface RecallPlannerLlmResult {\n /** The mode to act on. */\n mode: RecallPlanMode;\n /** The heuristic mode, always computed (the fallback floor / shadow baseline). */\n heuristicMode: RecallPlanMode;\n /** Where `mode` came from. */\n source: RecallPlannerSource;\n /** Short human-readable rationale (LLM reason, or why we fell back). */\n reason: string;\n /** Model that actually served the classification, when an LLM was used. */\n modelUsed?: string;\n /** Wall-clock spent in the LLM call (0 when no call was made). */\n latencyMs: number;\n /** True when the LLM was enabled but we had to fall back to the heuristic. */\n fallbackUsed: boolean;\n}\n\nconst PLANNER_SCHEMA = z.object({\n // gotcha #2: optional fields use .optional().nullable()\n mode: z.enum([\"no_recall\", \"minimal\", \"full\", \"graph_mode\"]),\n reason: z.string().max(280).optional().nullable(),\n});\n\nconst SYSTEM_PROMPT = [\n \"You are a recall-planning classifier for a long-term memory system.\",\n \"Given the user's latest message, decide how much stored memory should be retrieved before the assistant responds.\",\n \"Reply with a single JSON object: {\\\"mode\\\": <one of no_recall|minimal|full|graph_mode>, \\\"reason\\\": <short string>}.\",\n \"\",\n \"Modes:\",\n '- \"no_recall\": low-information acknowledgements or chit-chat with nothing to look up (e.g. \"ok\", \"thanks\", \"sounds good\"). Retrieve nothing.',\n '- \"minimal\": short, self-contained operational directives that rarely need history (e.g. \"restart the service\", \"run the tests\", \"show status\"). Retrieve a little.',\n '- \"full\": anything memory-seeking, analytical, or a question that benefits from prior context, decisions, or facts. This is the safe default when unsure.',\n '- \"graph_mode\": queries about timelines, sequences, history, causal chains, or root cause (\"how did we get here\", \"what led to this regression\"). Retrieve relationship/graph context.',\n \"\",\n \"When uncertain, prefer \\\"full\\\" over dropping recall. Never invent facts; only classify intent.\",\n].join(\"\\n\");\n\n/** Clamp a planner prompt to the configured character budget. */\nfunction clampPrompt(prompt: string, maxChars: number): string {\n const safeMax = Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : 4000;\n if (prompt.length <= safeMax) return prompt;\n return prompt.slice(0, safeMax);\n}\n\n/** Trim and cap the optional memory hints used to ground the classification. */\nfunction clampHints(hints: string[] | undefined, maxHints: number): string[] {\n if (!Array.isArray(hints) || hints.length === 0) return [];\n const safeMax = Number.isFinite(maxHints) && maxHints > 0 ? Math.floor(maxHints) : 0;\n if (safeMax <= 0) return [];\n const cleaned: string[] = [];\n for (const hint of hints) {\n if (typeof hint !== \"string\") continue;\n const trimmed = hint.trim();\n if (trimmed.length === 0) continue;\n cleaned.push(trimmed);\n if (cleaned.length >= safeMax) break;\n }\n return cleaned;\n}\n\nfunction buildMessages(\n prompt: string,\n hints: string[],\n config: PluginConfig,\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n const clampedPrompt = clampPrompt(prompt, config.recallPlannerMaxPromptChars);\n const userParts = [`User message:\\n${clampedPrompt}`];\n if (hints.length > 0) {\n userParts.push(\n `\\nRecent memory topics (for grounding only, do not treat as the message):\\n- ${hints.join(\"\\n- \")}`,\n );\n }\n userParts.push('\\nRespond with JSON only: {\"mode\": \"...\", \"reason\": \"...\"}.');\n return [\n { role: \"system\", content: SYSTEM_PROMPT },\n { role: \"user\", content: userParts.join(\"\\n\") },\n ];\n}\n\n/**\n * Resolve the FallbackLlmClient routing options for the recall planner.\n *\n * - The dedicated `recallPlannerModel` is tried first (as the `model`\n * override — it is prepended to the chain by FallbackLlmClient). If it does\n * not resolve to a configured provider it is silently skipped, so a stale\n * default never breaks routing.\n * - In gateway mode the shared `gatewayTaskChainOptions` (taskModelChain >\n * gatewayAgentId, gotcha #22) is layered in as the fallback chain, plus the\n * implicit gateway default appended by the client.\n * - In plugin mode only the explicit model + gateway providers apply.\n */\n/**\n * A `recallPlannerModel` value is only usable as a FallbackLlmClient `model`\n * override when it is provider-qualified (`provider/model`). The client's\n * `parseModelString` rejects bare names, so forwarding a bare value (e.g. the\n * legacy default `\"gpt-5.5\"`) would log \"invalid model format\" on every call\n * and never resolve. Bare values are dropped so routing falls through to the\n * gateway chain / agent / default instead (issue #1367 review on PR #1428).\n */\nfunction qualifiedPlannerModel(recallPlannerModel: string | undefined): string | undefined {\n if (typeof recallPlannerModel !== \"string\") return undefined;\n const trimmed = recallPlannerModel.trim();\n return trimmed.includes(\"/\") ? trimmed : undefined;\n}\n\nexport function resolveRecallPlannerLlmOptions(\n config: Pick<\n PluginConfig,\n \"modelSource\" | \"taskModelChain\" | \"gatewayAgentId\" | \"recallPlannerModel\" | \"recallPlannerTimeoutMs\"\n >,\n): FallbackLlmOptions {\n const chainOptions =\n config.modelSource === \"gateway\" ? gatewayTaskChainOptions(config) : {};\n return {\n ...chainOptions,\n model: qualifiedPlannerModel(config.recallPlannerModel),\n temperature: 0,\n maxTokens: 64,\n timeoutMs:\n typeof config.recallPlannerTimeoutMs === \"number\" && config.recallPlannerTimeoutMs > 0\n ? config.recallPlannerTimeoutMs\n : 1500,\n };\n}\n\n// One-time warning per distinct routing signature so an opted-in operator with\n// no usable model learns why planning silently uses the heuristic, without\n// spamming a line on every recall.\nconst warnedNoRoutingSignatures = new Set<string>();\n\nfunction heuristicResult(\n heuristicMode: RecallPlanMode,\n source: RecallPlannerSource,\n reason: string,\n latencyMs: number,\n fallbackUsed: boolean,\n): RecallPlannerLlmResult {\n return { mode: heuristicMode, heuristicMode, source, reason, latencyMs, fallbackUsed };\n}\n\n/**\n * Plan the recall mode for `prompt`, optionally consulting an LLM.\n *\n * Always safe to call: returns the heuristic result when the LLM is disabled,\n * unavailable, or fails.\n *\n * @param llm injectable client (tests pass a stub); constructed from gateway\n * config when omitted.\n */\nexport async function planRecallModeLLM(\n prompt: string,\n hints: string[] | undefined,\n config: PluginConfig,\n caps: CapabilitySet,\n llm?: FallbackLlmClient,\n signal?: AbortSignal,\n): Promise<RecallPlannerLlmResult> {\n const heuristicMode = planRecallMode(prompt);\n\n // The recall-operation entry resolved this gate once (issue #1523); read the\n // capability, never re-derive it from raw config here.\n const plannerLlmEnabled = caps.recallPlannerLlm;\n if (!plannerLlmEnabled) {\n return heuristicResult(heuristicMode, \"heuristic\", \"llm-disabled\", 0, false);\n }\n\n // Participate in the recall cancellation contract: if the outer recall is\n // already aborted (outer timeout / reset / session abort), don't start an LLM\n // round-trip — fall back to the heuristic immediately (#1428 review).\n if (signal?.aborted) {\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"aborted\", 0, true);\n }\n\n const safePrompt = typeof prompt === \"string\" ? prompt.trim() : \"\";\n if (safePrompt.length === 0) {\n // Empty prompts never need an LLM round-trip.\n return heuristicResult(heuristicMode, \"heuristic\", \"empty-prompt\", 0, false);\n }\n\n const client =\n llm ??\n new FallbackLlmClient(\n config.gatewayConfig,\n fallbackLlmRuntimeContextFromConfig(config),\n );\n\n // Forward the recall abort signal so an aborted/timed-out outer recall can\n // cancel an in-flight planner call (FallbackLlmClient honors `signal`).\n const options = { ...resolveRecallPlannerLlmOptions(config), signal };\n\n // Availability check uses the same routing options so plugin-mode / empty\n // chains short-circuit to the heuristic without a network attempt. `model`\n // here is already provider-qualified (bare names were dropped), so a present\n // model means the override is genuinely routable.\n const availabilityProbe = {\n agentId: options.agentId,\n modelChain: options.modelChain,\n };\n if (!client.isAvailable(availabilityProbe) && !options.model) {\n // Opted-in but nothing routable resolves (e.g. plugin mode with the bare\n // default `recallPlannerModel` and no gateway chain). Warn once so it's not\n // a silent no-op, then fall back to the heuristic.\n const signature = `${config.modelSource}:${config.recallPlannerModel ?? \"\"}`;\n if (!warnedNoRoutingSignatures.has(signature)) {\n warnedNoRoutingSignatures.add(signature);\n log.warn(\n \"[recall-planner] recallPlannerLlmEnabled is on but no routable model resolves — \" +\n \"set recallPlannerModel to a 'provider/model' value or configure a gateway model chain. \" +\n \"Falling back to the heuristic planner.\",\n );\n }\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"llm-no-model\", 0, true);\n }\n\n const clampedHints = clampHints(hints, config.recallPlannerMaxMemoryHints);\n const messages = buildMessages(safePrompt, clampedHints, config);\n\n const start = Date.now();\n try {\n const detailed = await client.parseWithSchemaDetailed(messages, PLANNER_SCHEMA, options);\n const latencyMs = Date.now() - start;\n if (!detailed?.result) {\n // Distinguish failure from a valid empty (gotcha #34): a null here means\n // no parseable classification, so fall back to the heuristic.\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"llm-empty\", latencyMs, true);\n }\n const mode = detailed.result.mode;\n const reason =\n typeof detailed.result.reason === \"string\" && detailed.result.reason.trim().length > 0\n ? detailed.result.reason.trim()\n : \"llm-classified\";\n return {\n mode,\n heuristicMode,\n source: \"llm\",\n reason,\n modelUsed: detailed.modelUsed,\n latencyMs,\n fallbackUsed: false,\n };\n } catch (err) {\n const latencyMs = Date.now() - start;\n if (signal?.aborted) {\n // Cancelled by the outer recall — expected, not an error worth warning on.\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"aborted\", latencyMs, true);\n }\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`[recall-planner] LLM failed, falling back to heuristic: ${message}`);\n return heuristicResult(\n heuristicMode,\n \"heuristic-fallback\",\n `llm-error:${message}`,\n latencyMs,\n true,\n );\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/recall-planner-llm.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport type { PluginConfig, RecallPlanMode } from \"./types.js\";\nimport type { CapabilitySet } from \"./capabilities.js\";\nimport { planRecallMode } from \"./intent.js\";\nimport {\n FallbackLlmClient,\n fallbackLlmRuntimeContextFromConfig,\n gatewayTaskChainOptions,\n type FallbackLlmOptions,\n} from \"./fallback-llm.js\";\nimport { log } from \"./logger.js\";\n\n/**\n * LLM-based recall planning (issue #1367, Option C).\n *\n * Classifies an incoming prompt into a {@link RecallPlanMode} using an LLM\n * instead of (or alongside) the regex heuristic in {@link planRecallMode}.\n *\n * Provider-agnostic by construction: it routes through {@link FallbackLlmClient},\n * which resolves the model chain from gateway providers (OpenAI, Anthropic,\n * Ollama, Codex, …) or gateway agent personas / `taskModelChain`. Nothing here\n * is hard-coded to a single provider or to OpenAI's Responses API — the API\n * dialect is chosen per-provider by the client based on each provider's `api`\n * field. The configured `recallPlannerModel` is tried first, with the broader\n * task chain (and the gateway default) as resilient fallbacks.\n *\n * Invariants:\n * - Never throws to the caller (gotcha #13). Any LLM failure, timeout, empty\n * response, or unavailable backend falls back to the heuristic result and\n * sets `fallbackUsed: true` (gotcha #34 — failures are distinct from a valid\n * classification).\n * - When `recallPlannerLlmEnabled` is false the LLM is never contacted.\n */\n\nexport type RecallPlannerSource = \"llm\" | \"heuristic\" | \"heuristic-fallback\";\n\nexport interface RecallPlannerLlmResult {\n /** The mode to act on. */\n mode: RecallPlanMode;\n /** The heuristic mode, always computed (the fallback floor / shadow baseline). */\n heuristicMode: RecallPlanMode;\n /** Where `mode` came from. */\n source: RecallPlannerSource;\n /** Short human-readable rationale (LLM reason, or why we fell back). */\n reason: string;\n /** Model that actually served the classification, when an LLM was used. */\n modelUsed?: string;\n /** Wall-clock spent in the LLM call (0 when no call was made). */\n latencyMs: number;\n /** True when the LLM was enabled but we had to fall back to the heuristic. */\n fallbackUsed: boolean;\n}\n\nconst PLANNER_SCHEMA = z.object({\n // gotcha #2: optional fields use .optional().nullable()\n mode: z.enum([\"no_recall\", \"minimal\", \"full\", \"graph_mode\"]),\n reason: z.string().max(280).optional().nullable(),\n});\n\nconst SYSTEM_PROMPT = [\n \"You are a recall-planning classifier for a long-term memory system.\",\n \"Given the user's latest message, decide how much stored memory should be retrieved before the assistant responds.\",\n \"Reply with a single JSON object: {\\\"mode\\\": <one of no_recall|minimal|full|graph_mode>, \\\"reason\\\": <short string>}.\",\n \"\",\n \"Modes:\",\n '- \"no_recall\": low-information acknowledgements or chit-chat with nothing to look up (e.g. \"ok\", \"thanks\", \"sounds good\"). Retrieve nothing.',\n '- \"minimal\": short, self-contained operational directives that rarely need history (e.g. \"restart the service\", \"run the tests\", \"show status\"). Retrieve a little.',\n '- \"full\": anything memory-seeking, analytical, or a question that benefits from prior context, decisions, or facts. This is the safe default when unsure.',\n '- \"graph_mode\": queries about timelines, sequences, history, causal chains, or root cause (\"how did we get here\", \"what led to this regression\"). Retrieve relationship/graph context.',\n \"\",\n \"When uncertain, prefer \\\"full\\\" over dropping recall. Never invent facts; only classify intent.\",\n].join(\"\\n\");\n\n/** Clamp a planner prompt to the configured character budget. */\nfunction clampPrompt(prompt: string, maxChars: number): string {\n const safeMax = Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : 4000;\n if (prompt.length <= safeMax) return prompt;\n return prompt.slice(0, safeMax);\n}\n\n/** Trim and cap the optional memory hints used to ground the classification. */\nfunction clampHints(hints: string[] | undefined, maxHints: number): string[] {\n if (!Array.isArray(hints) || hints.length === 0) return [];\n const safeMax = Number.isFinite(maxHints) && maxHints > 0 ? Math.floor(maxHints) : 0;\n if (safeMax <= 0) return [];\n const cleaned: string[] = [];\n for (const hint of hints) {\n if (typeof hint !== \"string\") continue;\n const trimmed = hint.trim();\n if (trimmed.length === 0) continue;\n cleaned.push(trimmed);\n if (cleaned.length >= safeMax) break;\n }\n return cleaned;\n}\n\nfunction buildMessages(\n prompt: string,\n hints: string[],\n config: PluginConfig,\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n const clampedPrompt = clampPrompt(prompt, config.recallPlannerMaxPromptChars);\n const userParts = [`User message:\\n${clampedPrompt}`];\n if (hints.length > 0) {\n userParts.push(\n `\\nRecent memory topics (for grounding only, do not treat as the message):\\n- ${hints.join(\"\\n- \")}`,\n );\n }\n userParts.push('\\nRespond with JSON only: {\"mode\": \"...\", \"reason\": \"...\"}.');\n return [\n { role: \"system\", content: SYSTEM_PROMPT },\n { role: \"user\", content: userParts.join(\"\\n\") },\n ];\n}\n\n/**\n * Resolve the FallbackLlmClient routing options for the recall planner.\n *\n * - The dedicated `recallPlannerModel` is tried first (as the `model`\n * override — it is prepended to the chain by FallbackLlmClient). If it does\n * not resolve to a configured provider it is silently skipped, so a stale\n * default never breaks routing.\n * - In gateway mode the shared `gatewayTaskChainOptions` (taskModelChain >\n * gatewayAgentId, gotcha #22) is layered in as the fallback chain, plus the\n * implicit gateway default appended by the client.\n * - In plugin mode only the explicit model + gateway providers apply.\n */\n/**\n * A `recallPlannerModel` value is only usable as a FallbackLlmClient `model`\n * override when it is provider-qualified (`provider/model`). The client's\n * `parseModelString` rejects bare names, so forwarding a bare value (e.g. the\n * legacy default `\"gpt-5.5\"`) would log \"invalid model format\" on every call\n * and never resolve. Bare values are dropped so routing falls through to the\n * gateway chain / agent / default instead (issue #1367 review on PR #1428).\n */\nfunction qualifiedPlannerModel(recallPlannerModel: string | undefined): string | undefined {\n if (typeof recallPlannerModel !== \"string\") return undefined;\n const trimmed = recallPlannerModel.trim();\n return trimmed.includes(\"/\") ? trimmed : undefined;\n}\n\nexport function resolveRecallPlannerLlmOptions(\n config: Pick<\n PluginConfig,\n \"modelSource\" | \"taskModelChain\" | \"gatewayAgentId\" | \"recallPlannerModel\" | \"recallPlannerTimeoutMs\"\n >,\n): FallbackLlmOptions {\n const chainOptions =\n config.modelSource === \"gateway\" ? gatewayTaskChainOptions(config) : {};\n return {\n ...chainOptions,\n model: qualifiedPlannerModel(config.recallPlannerModel),\n temperature: 0,\n maxTokens: 64,\n timeoutMs:\n typeof config.recallPlannerTimeoutMs === \"number\" && config.recallPlannerTimeoutMs > 0\n ? config.recallPlannerTimeoutMs\n : 1500,\n };\n}\n\n// One-time warning per distinct routing signature so an opted-in operator with\n// no usable model learns why planning silently uses the heuristic, without\n// spamming a line on every recall.\nconst warnedNoRoutingSignatures = new Set<string>();\n\nfunction heuristicResult(\n heuristicMode: RecallPlanMode,\n source: RecallPlannerSource,\n reason: string,\n latencyMs: number,\n fallbackUsed: boolean,\n): RecallPlannerLlmResult {\n return { mode: heuristicMode, heuristicMode, source, reason, latencyMs, fallbackUsed };\n}\n\n/**\n * Plan the recall mode for `prompt`, optionally consulting an LLM.\n *\n * Always safe to call: returns the heuristic result when the LLM is disabled,\n * unavailable, or fails.\n *\n * @param llm injectable client (tests pass a stub); constructed from gateway\n * config when omitted.\n */\nexport async function planRecallModeLLM(\n prompt: string,\n hints: string[] | undefined,\n config: PluginConfig,\n caps: CapabilitySet,\n llm?: FallbackLlmClient,\n signal?: AbortSignal,\n): Promise<RecallPlannerLlmResult> {\n const heuristicMode = planRecallMode(prompt);\n\n // The recall-operation entry resolved this gate once (issue #1523); read the\n // capability, never re-derive it from raw config here.\n const plannerLlmEnabled = caps.recallPlannerLlm;\n if (!plannerLlmEnabled) {\n return heuristicResult(heuristicMode, \"heuristic\", \"llm-disabled\", 0, false);\n }\n\n // Participate in the recall cancellation contract: if the outer recall is\n // already aborted (outer timeout / reset / session abort), don't start an LLM\n // round-trip — fall back to the heuristic immediately (#1428 review).\n if (signal?.aborted) {\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"aborted\", 0, true);\n }\n\n const safePrompt = typeof prompt === \"string\" ? prompt.trim() : \"\";\n if (safePrompt.length === 0) {\n // Empty prompts never need an LLM round-trip.\n return heuristicResult(heuristicMode, \"heuristic\", \"empty-prompt\", 0, false);\n }\n\n const client =\n llm ??\n new FallbackLlmClient(\n config.gatewayConfig,\n fallbackLlmRuntimeContextFromConfig(config),\n );\n\n // Forward the recall abort signal so an aborted/timed-out outer recall can\n // cancel an in-flight planner call (FallbackLlmClient honors `signal`).\n const options = { ...resolveRecallPlannerLlmOptions(config), signal };\n\n // Availability check uses the same routing options so plugin-mode / empty\n // chains short-circuit to the heuristic without a network attempt. `model`\n // here is already provider-qualified (bare names were dropped), so a present\n // model means the override is genuinely routable.\n const availabilityProbe = {\n agentId: options.agentId,\n modelChain: options.modelChain,\n };\n if (!client.isAvailable(availabilityProbe) && !options.model) {\n // Opted-in but nothing routable resolves (e.g. plugin mode with the bare\n // default `recallPlannerModel` and no gateway chain). Warn once so it's not\n // a silent no-op, then fall back to the heuristic.\n const signature = `${config.modelSource}:${config.recallPlannerModel ?? \"\"}`;\n if (!warnedNoRoutingSignatures.has(signature)) {\n warnedNoRoutingSignatures.add(signature);\n log.warn(\n \"[recall-planner] recallPlannerLlmEnabled is on but no routable model resolves — \" +\n \"set recallPlannerModel to a 'provider/model' value or configure a gateway model chain. \" +\n \"Falling back to the heuristic planner.\",\n );\n }\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"llm-no-model\", 0, true);\n }\n\n const clampedHints = clampHints(hints, config.recallPlannerMaxMemoryHints);\n const messages = buildMessages(safePrompt, clampedHints, config);\n\n const start = Date.now();\n try {\n const detailed = await client.parseWithSchemaDetailed(messages, PLANNER_SCHEMA, options);\n const latencyMs = Date.now() - start;\n if (!detailed?.result) {\n // Distinguish failure from a valid empty (gotcha #34): a null here means\n // no parseable classification, so fall back to the heuristic.\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"llm-empty\", latencyMs, true);\n }\n const mode = detailed.result.mode;\n const reason =\n typeof detailed.result.reason === \"string\" && detailed.result.reason.trim().length > 0\n ? detailed.result.reason.trim()\n : \"llm-classified\";\n return {\n mode,\n heuristicMode,\n source: \"llm\",\n reason,\n modelUsed: detailed.modelUsed,\n latencyMs,\n fallbackUsed: false,\n };\n } catch (err) {\n const latencyMs = Date.now() - start;\n if (signal?.aborted) {\n // Cancelled by the outer recall — expected, not an error worth warning on.\n return heuristicResult(heuristicMode, \"heuristic-fallback\", \"aborted\", latencyMs, true);\n }\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`[recall-planner] LLM failed, falling back to heuristic: ${message}`);\n return heuristicResult(\n heuristicMode,\n \"heuristic-fallback\",\n `llm-error:${message}`,\n latencyMs,\n true,\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,8 +2,8 @@ import {
2
2
  buildRecallQueryPolicy,
3
3
  clampInstructionHeavyTokenCap,
4
4
  classifyRecallPromptShape
5
- } from "./chunk-YTHQHH5U.js";
6
- import "./chunk-DJ7HMNSL.js";
5
+ } from "./chunk-C6WMSXCJ.js";
6
+ import "./chunk-YCVB7X56.js";
7
7
  import "./chunk-PZ5AY32C.js";
8
8
  export {
9
9
  buildRecallQueryPolicy,
@@ -4,7 +4,7 @@ import {
4
4
  isUnsegmentableRecallChar,
5
5
  normalizeRecallTokenSet,
6
6
  normalizeRecallTokens
7
- } from "./chunk-DJ7HMNSL.js";
7
+ } from "./chunk-YCVB7X56.js";
8
8
  import "./chunk-PZ5AY32C.js";
9
9
  export {
10
10
  countRecallTokenOverlap,
@@ -4,8 +4,8 @@ import {
4
4
  recordResumeBundle,
5
5
  resolveResumeBundleDir,
6
6
  validateResumeBundle
7
- } from "./chunk-ZS4JADYY.js";
8
- import "./chunk-H7PRHUBD.js";
7
+ } from "./chunk-OW7NVMGQ.js";
8
+ import "./chunk-NRLELHAY.js";
9
9
  import "./chunk-AM4T6CHX.js";
10
10
  import "./chunk-KFY3SGN7.js";
11
11
  import "./chunk-NOB2T2FC.js";
@@ -38,7 +38,7 @@ import "./chunk-ZIKENA2C.js";
38
38
  import "./chunk-PQVCH2AE.js";
39
39
  import "./chunk-6Q3ZTEF6.js";
40
40
  import "./chunk-PJKTFXE2.js";
41
- import "./chunk-DJ7HMNSL.js";
41
+ import "./chunk-YCVB7X56.js";
42
42
  import "./chunk-HBVPYRDW.js";
43
43
  import "./chunk-5GKPFL3S.js";
44
44
  import "./chunk-JAKIDQB2.js";
@@ -7,8 +7,9 @@ import {
7
7
  runDirectAgent,
8
8
  runTemporalAgent,
9
9
  shouldRunAgent
10
- } from "./chunk-XPRJSHNI.js";
10
+ } from "./chunk-QJ622LTI.js";
11
11
  import "./chunk-ZOKZIR5K.js";
12
+ import "./chunk-YCVB7X56.js";
12
13
  import "./chunk-BTTPKDIL.js";
13
14
  import "./chunk-3WCASNQZ.js";
14
15
  import "./chunk-PZ5AY32C.js";