@oscharko-dev/keiko 0.2.0-beta.2 → 0.2.0-beta.4

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 (517) hide show
  1. package/README.md +139 -1
  2. package/dist/ui/csp-hashes.json +34 -39
  3. package/dist/ui/static/404.html +1 -1
  4. package/dist/ui/static/__next.__PAGE__.txt +9 -0
  5. package/dist/ui/static/__next._full.txt +18 -0
  6. package/dist/ui/static/__next._head.txt +6 -0
  7. package/dist/ui/static/__next._index.txt +5 -0
  8. package/dist/ui/static/__next._tree.txt +2 -0
  9. package/dist/ui/static/_next/static/Hb6brrvZY2nZtizQlYhVt/_buildManifest.js +11 -0
  10. package/dist/ui/static/_next/static/Hb6brrvZY2nZtizQlYhVt/_clientMiddlewareManifest.js +1 -0
  11. package/dist/ui/static/_next/static/chunks/05-c3ty_6dwfk.js +1 -0
  12. package/dist/ui/static/_next/static/chunks/082obv3v03b-9.js +2 -0
  13. package/dist/ui/static/_next/static/chunks/0iq1i69206cyl.js +31 -0
  14. package/dist/ui/static/_next/static/chunks/0uifns067thv8.js +1 -0
  15. package/dist/ui/static/_next/static/chunks/0x31-j53ab1tt.js +1 -0
  16. package/dist/ui/static/_next/static/chunks/14mrh2-p_w84d.js +1 -0
  17. package/dist/ui/static/_next/static/chunks/1t04tfgin0v_g.js +106 -0
  18. package/dist/ui/static/_next/static/chunks/1v4hrxrm_6_rw.js +1 -0
  19. package/dist/ui/static/_next/static/chunks/27jktro2p5rq9.js +4 -0
  20. package/dist/ui/static/_next/static/chunks/2lypy3ewh0r04.js +1 -0
  21. package/dist/ui/static/_next/static/chunks/32573pyyglqxl.js +1 -0
  22. package/dist/ui/static/_next/static/chunks/3_t_pzet29qtn.js +1 -0
  23. package/dist/ui/static/_next/static/chunks/3jgg_oe0iok0l.js +1 -0
  24. package/dist/ui/static/_next/static/chunks/3o_oia3vsam60.js +1 -0
  25. package/dist/ui/static/_next/static/chunks/3peubv2924kx4.js +1 -0
  26. package/dist/ui/static/_next/static/chunks/3wr_35f2vg6sd.css +1 -0
  27. package/dist/ui/static/_next/static/chunks/turbopack-2lg1g6kbsfm0x.js +1 -0
  28. package/dist/ui/static/_not-found/__next._full.txt +16 -0
  29. package/dist/ui/static/_not-found/__next._head.txt +6 -0
  30. package/dist/ui/static/_not-found/__next._index.txt +5 -0
  31. package/dist/ui/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
  32. package/dist/ui/static/_not-found/__next._not-found.txt +5 -0
  33. package/dist/ui/static/_not-found/__next._tree.txt +2 -0
  34. package/dist/ui/static/_not-found.html +1 -0
  35. package/dist/ui/static/_not-found.txt +16 -0
  36. package/dist/ui/static/index.html +1 -1
  37. package/dist/ui/static/index.txt +16 -18
  38. package/dist/ui/static/launch/__next._full.txt +20 -0
  39. package/dist/ui/static/launch/__next._head.txt +6 -0
  40. package/dist/ui/static/launch/__next._index.txt +5 -0
  41. package/dist/ui/static/launch/__next._tree.txt +2 -0
  42. package/dist/ui/static/launch/__next.launch.__PAGE__.txt +9 -0
  43. package/dist/ui/static/launch/__next.launch.txt +5 -0
  44. package/dist/ui/static/launch.html +1 -1
  45. package/dist/ui/static/launch.txt +17 -17
  46. package/dist/ui/static/local-knowledge/__next._full.txt +20 -0
  47. package/dist/ui/static/local-knowledge/__next._head.txt +6 -0
  48. package/dist/ui/static/local-knowledge/__next._index.txt +5 -0
  49. package/dist/ui/static/local-knowledge/__next._tree.txt +2 -0
  50. package/dist/ui/static/local-knowledge/__next.local-knowledge.__PAGE__.txt +9 -0
  51. package/dist/ui/static/local-knowledge/__next.local-knowledge.txt +5 -0
  52. package/dist/ui/static/local-knowledge/capsule/__next._full.txt +17 -0
  53. package/dist/ui/static/local-knowledge/capsule/__next._head.txt +6 -0
  54. package/dist/ui/static/local-knowledge/capsule/__next._index.txt +5 -0
  55. package/dist/ui/static/local-knowledge/capsule/__next._tree.txt +2 -0
  56. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.__PAGE__.txt +6 -0
  57. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.txt +5 -0
  58. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.txt +5 -0
  59. package/dist/ui/static/local-knowledge/capsule.html +1 -1
  60. package/dist/ui/static/local-knowledge/capsule.txt +14 -14
  61. package/dist/ui/static/local-knowledge.html +1 -1
  62. package/dist/ui/static/local-knowledge.txt +19 -16
  63. package/dist/ui/static/manifest.webmanifest +2 -2
  64. package/dist/ui/static/memoriaviva/__next._full.txt +17 -0
  65. package/dist/ui/static/memoriaviva/__next._head.txt +6 -0
  66. package/dist/ui/static/memoriaviva/__next._index.txt +5 -0
  67. package/dist/ui/static/memoriaviva/__next._tree.txt +2 -0
  68. package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +6 -0
  69. package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +5 -0
  70. package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +17 -0
  71. package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +6 -0
  72. package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +5 -0
  73. package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -0
  74. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +6 -0
  75. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +5 -0
  76. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +5 -0
  77. package/dist/ui/static/memoriaviva/consolidation.html +1 -1
  78. package/dist/ui/static/memoriaviva/consolidation.txt +15 -15
  79. package/dist/ui/static/memoriaviva/detail/__next._full.txt +17 -0
  80. package/dist/ui/static/memoriaviva/detail/__next._head.txt +6 -0
  81. package/dist/ui/static/memoriaviva/detail/__next._index.txt +5 -0
  82. package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -0
  83. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +6 -0
  84. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +5 -0
  85. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +5 -0
  86. package/dist/ui/static/memoriaviva/detail.html +1 -1
  87. package/dist/ui/static/memoriaviva/detail.txt +14 -14
  88. package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +17 -0
  89. package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +6 -0
  90. package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +5 -0
  91. package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -0
  92. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +6 -0
  93. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +5 -0
  94. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +5 -0
  95. package/dist/ui/static/memoriaviva/review-queue.html +1 -1
  96. package/dist/ui/static/memoriaviva/review-queue.txt +15 -15
  97. package/dist/ui/static/memoriaviva.html +1 -1
  98. package/dist/ui/static/memoriaviva.txt +14 -14
  99. package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
  100. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.d.ts.map +1 -1
  101. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.js +61 -2
  102. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.d.ts.map +1 -1
  103. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.js +65 -21
  104. package/node_modules/@oscharko-dev/keiko-cli/dist/launcher-platforms.js +3 -3
  105. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts +2 -0
  106. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts.map +1 -1
  107. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.js +51 -10
  108. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts +3 -1
  109. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts.map +1 -1
  110. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.js +128 -38
  111. package/node_modules/@oscharko-dev/keiko-cli/package.json +2 -2
  112. package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
  113. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts +20 -1
  114. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts.map +1 -1
  115. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts +1 -1
  116. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts.map +1 -1
  117. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.js +256 -75
  118. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts +11 -0
  119. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts.map +1 -1
  120. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +7 -7
  121. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
  122. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +4 -4
  123. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts +11 -0
  124. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts.map +1 -1
  125. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.js +4 -0
  126. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts +1 -1
  127. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts.map +1 -1
  128. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.js +109 -4
  129. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts +2 -0
  130. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts.map +1 -1
  131. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.js +94 -7
  132. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts +5 -0
  133. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts.map +1 -1
  134. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts +15 -0
  135. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts.map +1 -1
  136. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.js +1 -1
  137. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.d.ts.map +1 -1
  138. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.js +3 -0
  139. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts +1 -1
  140. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts.map +1 -1
  141. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts +14 -0
  142. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts.map +1 -1
  143. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.js +53 -5
  144. package/node_modules/@oscharko-dev/keiko-contracts/package.json +2 -2
  145. package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
  146. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.d.ts.map +1 -1
  147. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.js +11 -3
  148. package/node_modules/@oscharko-dev/keiko-evaluations/package.json +2 -2
  149. package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
  150. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts +20 -1
  151. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts.map +1 -1
  152. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.js +34 -2
  153. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts +1 -0
  154. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts.map +1 -1
  155. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.js +3 -1
  156. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts +17 -0
  157. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts.map +1 -1
  158. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.js +19 -0
  159. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +5 -1
  160. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
  161. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +32 -2
  162. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
  163. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +259 -40
  164. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts +3 -0
  165. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts.map +1 -1
  166. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.js +48 -5
  167. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts.map +1 -1
  168. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +30 -13
  169. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts +1 -1
  170. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts.map +1 -1
  171. package/node_modules/@oscharko-dev/keiko-evidence/package.json +2 -2
  172. package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
  173. package/node_modules/@oscharko-dev/keiko-harness/package.json +2 -2
  174. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
  175. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.d.ts.map +1 -1
  176. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.js +25 -1
  177. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts +1 -1
  178. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts.map +1 -1
  179. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.js +16 -0
  180. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts +3 -1
  181. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts.map +1 -1
  182. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.js +9 -5
  183. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.d.ts.map +1 -1
  184. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.js +22 -7
  185. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts +4 -1
  186. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts.map +1 -1
  187. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.js +61 -9
  188. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.d.ts.map +1 -1
  189. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.js +64 -36
  190. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts +2 -2
  191. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts.map +1 -1
  192. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.js +2 -2
  193. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts +7 -1
  194. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts.map +1 -1
  195. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.js +5 -1
  196. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts +1 -1
  197. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts.map +1 -1
  198. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.js +27 -4
  199. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts +5 -1
  200. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts.map +1 -1
  201. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.js +18 -5
  202. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.d.ts.map +1 -1
  203. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.js +10 -1
  204. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts +4 -1
  205. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts.map +1 -1
  206. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.js +370 -45
  207. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts +2 -0
  208. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts.map +1 -1
  209. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.js +8 -4
  210. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts +1 -1
  211. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts.map +1 -1
  212. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.js +10 -5
  213. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.d.ts.map +1 -1
  214. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.js +65 -20
  215. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts +1 -0
  216. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts.map +1 -1
  217. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.js +79 -0
  218. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts +1 -1
  219. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts.map +1 -1
  220. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.js +1 -1
  221. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.d.ts.map +1 -1
  222. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.js +4 -0
  223. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts +6 -5
  224. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts.map +1 -1
  225. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.js +4 -4
  226. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.d.ts.map +1 -1
  227. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.js +71 -29
  228. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.d.ts.map +1 -1
  229. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.js +258 -132
  230. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts +12 -0
  231. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts.map +1 -1
  232. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.d.ts.map +1 -1
  233. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.js +9 -0
  234. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts +3 -1
  235. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts.map +1 -1
  236. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.js +13 -1
  237. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.d.ts.map +1 -1
  238. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.js +86 -46
  239. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts +1 -1
  240. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts.map +1 -1
  241. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.js +1 -1
  242. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.d.ts.map +1 -1
  243. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.js +50 -22
  244. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts +21 -1
  245. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
  246. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +93 -14
  247. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.d.ts.map +1 -1
  248. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.js +3 -1
  249. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts +7 -2
  250. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts.map +1 -1
  251. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.js +7 -3
  252. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/audit-emitter.js +8 -0
  253. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.d.ts.map +1 -1
  254. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.js +17 -10
  255. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.d.ts.map +1 -1
  256. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.js +7 -0
  257. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts +4 -0
  258. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts.map +1 -1
  259. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/retrieval-runner.js +1 -1
  260. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts +1 -0
  261. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts.map +1 -1
  262. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.js +318 -32
  263. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts +1 -1
  264. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts.map +1 -1
  265. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.js +46 -16
  266. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts +14 -0
  267. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts.map +1 -1
  268. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.js +26 -1
  269. package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +10 -5
  270. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/.tsbuildinfo +1 -1
  271. package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +2 -2
  272. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/.tsbuildinfo +1 -1
  273. package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +2 -2
  274. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
  275. package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +2 -2
  276. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
  277. package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +2 -2
  278. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
  279. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/paths.d.ts.map +1 -1
  280. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/paths.js +11 -5
  281. package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +2 -2
  282. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
  283. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts +2 -1
  284. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts.map +1 -1
  285. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.js +50 -0
  286. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts +3 -0
  287. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts.map +1 -1
  288. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.js +114 -44
  289. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts +14 -0
  290. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts.map +1 -1
  291. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.js +14 -0
  292. package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +2 -2
  293. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
  294. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.d.ts.map +1 -1
  295. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.js +9 -2
  296. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.js +1 -1
  297. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts +9 -1
  298. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts.map +1 -1
  299. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.js +9 -1
  300. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts +5 -0
  301. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts.map +1 -1
  302. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.js +229 -33
  303. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts +62 -0
  304. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts.map +1 -1
  305. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.d.ts.map +1 -1
  306. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.js +24 -4
  307. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts +4 -2
  308. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts.map +1 -1
  309. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.js +0 -0
  310. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.d.ts.map +1 -1
  311. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.js +119 -5
  312. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts +2 -1
  313. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts.map +1 -1
  314. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.js +26 -11
  315. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
  316. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +86 -9
  317. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.d.ts.map +1 -1
  318. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.js +10 -3
  319. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
  320. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +14 -12
  321. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/sourceMixPlanning.js +0 -0
  322. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts +1 -1
  323. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts.map +1 -1
  324. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.js +9 -1
  325. package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +2 -2
  326. package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
  327. package/node_modules/@oscharko-dev/keiko-sdk/package.json +2 -2
  328. package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
  329. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.d.ts.map +1 -1
  330. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.js +4 -2
  331. package/node_modules/@oscharko-dev/keiko-security/package.json +2 -2
  332. package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
  333. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
  334. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +6 -1
  335. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +2 -0
  336. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
  337. package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +62 -12
  338. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts +1 -1
  339. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts.map +1 -1
  340. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.js +4 -3
  341. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts +18 -3
  342. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts.map +1 -1
  343. package/node_modules/@oscharko-dev/keiko-server/dist/files.js +208 -72
  344. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.d.ts.map +1 -1
  345. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.js +7 -2
  346. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts +3 -0
  347. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts.map +1 -1
  348. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.js +27 -4
  349. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.d.ts.map +1 -1
  350. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.js +46 -14
  351. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts +1 -0
  352. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts.map +1 -1
  353. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.js +433 -31
  354. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.d.ts.map +1 -1
  355. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.js +5 -3
  356. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts +9 -0
  357. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
  358. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +194 -45
  359. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts +4 -0
  360. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts.map +1 -1
  361. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +100 -24
  362. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts +7 -0
  363. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
  364. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +196 -20
  365. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.d.ts.map +1 -1
  366. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.js +21 -1
  367. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts +1 -1
  368. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts.map +1 -1
  369. package/node_modules/@oscharko-dev/keiko-server/dist/index.js +1 -1
  370. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts +9 -6
  371. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
  372. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +189 -66
  373. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.d.ts.map +1 -1
  374. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.js +198 -72
  375. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts +1 -1
  376. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts.map +1 -1
  377. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.js +6 -5
  378. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +10 -2
  379. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -1
  380. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.js +110 -30
  381. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +13 -4
  382. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -1
  383. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.js +29 -17
  384. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +13 -3
  385. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -1
  386. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.js +54 -5
  387. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
  388. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +84 -12
  389. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -1
  390. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.js +16 -8
  391. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +6 -2
  392. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
  393. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +13 -1
  394. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -1
  395. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.js +15 -2
  396. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +9 -0
  397. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -1
  398. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.js +2 -2
  399. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +9 -1
  400. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
  401. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +138 -19
  402. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.d.ts.map +1 -1
  403. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.js +26 -7
  404. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
  405. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +26 -7
  406. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
  407. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +28 -5
  408. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.d.ts.map +1 -1
  409. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.js +11 -0
  410. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
  411. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +90 -19
  412. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts +4 -1
  413. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
  414. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +17 -3
  415. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -1
  416. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.js +19 -2
  417. package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
  418. package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +4 -2
  419. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts.map +1 -1
  420. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.js +6 -1
  421. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts +2 -2
  422. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts.map +1 -1
  423. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.js +84 -8
  424. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.d.ts.map +1 -1
  425. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.js +4 -2
  426. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts +1 -1
  427. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts.map +1 -1
  428. package/node_modules/@oscharko-dev/keiko-server/dist/store/paths.d.ts.map +1 -1
  429. package/node_modules/@oscharko-dev/keiko-server/dist/store/paths.js +9 -2
  430. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts +5 -1
  431. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts.map +1 -1
  432. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.d.ts.map +1 -1
  433. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.js +67 -14
  434. package/node_modules/@oscharko-dev/keiko-server/package.json +2 -2
  435. package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
  436. package/node_modules/@oscharko-dev/keiko-tools/package.json +2 -2
  437. package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
  438. package/node_modules/@oscharko-dev/keiko-verification/package.json +2 -2
  439. package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
  440. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts +2 -0
  441. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts.map +1 -1
  442. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.js +45 -10
  443. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts +1 -1
  444. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts.map +1 -1
  445. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.js +1 -1
  446. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts.map +1 -1
  447. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.js +4 -6
  448. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts +30 -0
  449. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts.map +1 -0
  450. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.js +114 -0
  451. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
  452. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +58 -23
  453. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.d.ts.map +1 -1
  454. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.js +15 -7
  455. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts.map +1 -1
  456. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.js +28 -4
  457. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.d.ts.map +1 -1
  458. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.js +51 -1
  459. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.d.ts.map +1 -1
  460. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.js +8 -3
  461. package/node_modules/@oscharko-dev/keiko-workflows/package.json +2 -2
  462. package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
  463. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts +1 -0
  464. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts.map +1 -1
  465. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.js +1 -0
  466. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.d.ts.map +1 -1
  467. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.js +84 -27
  468. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.d.ts.map +1 -1
  469. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.js +22 -0
  470. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.d.ts.map +1 -1
  471. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.js +6 -3
  472. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts.map +1 -1
  473. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.js +72 -25
  474. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts +15 -0
  475. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts.map +1 -0
  476. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.js +107 -0
  477. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts +18 -0
  478. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts.map +1 -0
  479. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.js +42 -0
  480. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
  481. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +4 -11
  482. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts +2 -0
  483. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts.map +1 -0
  484. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.js +15 -0
  485. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts +2 -2
  486. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts.map +1 -1
  487. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.js +89 -75
  488. package/node_modules/@oscharko-dev/keiko-workspace/package.json +2 -2
  489. package/node_modules/@types/node/README.md +1 -1
  490. package/node_modules/@types/node/http2.d.ts +1 -0
  491. package/node_modules/@types/node/package.json +2 -2
  492. package/package.json +3 -1
  493. package/dist/ui/static/_next/static/BNiyfCos3TiM2QdurajIZ/_buildManifest.js +0 -1
  494. package/dist/ui/static/_next/static/chunks/18-ac3e3551b4e0ce8a.js +0 -1
  495. package/dist/ui/static/_next/static/chunks/664-6d821dc1aacb6b48.js +0 -1
  496. package/dist/ui/static/_next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
  497. package/dist/ui/static/_next/static/chunks/923-4141696576191bc0.js +0 -1
  498. package/dist/ui/static/_next/static/chunks/982-abc19630e6305864.js +0 -1
  499. package/dist/ui/static/_next/static/chunks/app/_not-found/page-03d642dcd0f15b52.js +0 -1
  500. package/dist/ui/static/_next/static/chunks/app/launch/page-c725ff0c02b50663.js +0 -1
  501. package/dist/ui/static/_next/static/chunks/app/layout-aadefe615729db05.js +0 -1
  502. package/dist/ui/static/_next/static/chunks/app/local-knowledge/capsule/page-4a7f242906e19a07.js +0 -1
  503. package/dist/ui/static/_next/static/chunks/app/local-knowledge/page-3361769b8964e659.js +0 -1
  504. package/dist/ui/static/_next/static/chunks/app/memoriaviva/consolidation/page-44b3f4fa3e10085f.js +0 -1
  505. package/dist/ui/static/_next/static/chunks/app/memoriaviva/detail/page-0cdfb3eeb659daeb.js +0 -1
  506. package/dist/ui/static/_next/static/chunks/app/memoriaviva/page-e78e0cd2876fec41.js +0 -1
  507. package/dist/ui/static/_next/static/chunks/app/memoriaviva/review-queue/page-e32fe86466827484.js +0 -1
  508. package/dist/ui/static/_next/static/chunks/app/page-9ad91065d05ddfa0.js +0 -1
  509. package/dist/ui/static/_next/static/chunks/framework-d8f01f7e25201916.js +0 -1
  510. package/dist/ui/static/_next/static/chunks/main-app-b52a8fa1d8127a5f.js +0 -1
  511. package/dist/ui/static/_next/static/chunks/main-bc552b04f2b6dbe2.js +0 -1
  512. package/dist/ui/static/_next/static/chunks/pages/_app-2e239ff05bfdf6d6.js +0 -1
  513. package/dist/ui/static/_next/static/chunks/pages/_error-bda15e7831eec981.js +0 -1
  514. package/dist/ui/static/_next/static/chunks/webpack-0cfe6f51555ca84e.js +0 -1
  515. package/dist/ui/static/_next/static/css/51fdcfdc624e723d.css +0 -1
  516. /package/dist/ui/static/_next/static/{BNiyfCos3TiM2QdurajIZ → Hb6brrvZY2nZtizQlYhVt}/_ssgManifest.js +0 -0
  517. /package/dist/ui/static/_next/static/chunks/{polyfills-42372ed130431b0a.js → 0cz1d0mv5g_q7.js} +0 -0
@@ -8,17 +8,17 @@
8
8
  // gateway messages, citations, and evidence from the exact same primitives.
9
9
  import { basename } from "node:path";
10
10
  import { createHash, randomUUID } from "node:crypto";
11
- import { resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
11
+ import { ContextOverflowError, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
12
12
  import { persistConnectedContextEvidence } from "@oscharko-dev/keiko-evidence";
13
13
  import { CANDIDATE_OMISSION_REASONS, DEFAULT_EXPLORATION_BUDGET, } from "@oscharko-dev/keiko-contracts/connected-context";
14
14
  import { buildGroundedAnswerContextPackSummary, } from "@oscharko-dev/keiko-contracts/bff-wire";
15
15
  import { currentRedactionSecrets } from "./deps.js";
16
- import { ClarificationNeededError, retrieveConnectedContextPack, } from "./grounded-orchestrator.js";
16
+ import { ClarificationNeededError, clarificationUserMessage, retrieveConnectedContextPack, } from "./grounded-orchestrator.js";
17
17
  import { microIndexForGroundedScope } from "./grounded-context-index.js";
18
18
  import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
19
19
  import { rememberGroundedTurn } from "./grounded-turn-registry.js";
20
20
  import { normalizeGroundedAnswerPayload, } from "./grounded-answer.js";
21
- import { badRequest, buildCitations, buildQuery, buildSelectedScopeFrom, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, packBudgetSummary, persistGroundedExchange, redactString, uncertaintyLines, } from "./grounded-qa.js";
21
+ import { badRequest, buildCitations, buildQuery, buildSelectedScopeFrom, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, mappedWorkspaceError, modelInputPromptByteLimit, packBudgetSummary, persistGroundedExchange, promptByteLength, redactString, uncertaintyLines, withPromptExcerptByteLimit, } from "./grounded-qa.js";
22
22
  // ─── Canonical reader + label/budget helpers ──────────────────────────────────
23
23
  // Canonical reader rule (Epic #532 contract): `connectedScopes` supersedes the legacy single
24
24
  // `connectedScope`. Readers must NOT mix the two — the list, when present, is authoritative.
@@ -170,6 +170,9 @@ function sourceSection(entry, index, redactor) {
170
170
  // Same system message as the single-source path; the user message lists each source under its own
171
171
  // header so the model can attribute every claim to a source label in addition to the file ref.
172
172
  export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor) {
173
+ return budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor);
174
+ }
175
+ function buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor) {
173
176
  const sections = labeledPacks.flatMap((entry, index) => sourceSection(entry, index, redactor));
174
177
  const userContent = [
175
178
  "User question:",
@@ -185,6 +188,41 @@ export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor
185
188
  { role: "user", content: userContent },
186
189
  ];
187
190
  }
191
+ function multiSourceExcerptCount(labeledPacks) {
192
+ return labeledPacks.reduce((count, entry) => count + entry.pack.files.reduce((fileCount, file) => fileCount + file.excerpts.length, 0), 0);
193
+ }
194
+ function withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes) {
195
+ return labeledPacks.map((entry) => ({
196
+ ...entry,
197
+ pack: withPromptExcerptByteLimit(entry.pack, maxExcerptBytes),
198
+ }));
199
+ }
200
+ function budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor) {
201
+ const limit = modelInputPromptByteLimit(labeledPacks.reduce((sum, entry) => sum + entry.pack.budget.modelInputTokensMax, 0));
202
+ let messages = buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor);
203
+ if (limit === 0 || promptByteLength(messages) <= limit)
204
+ return messages;
205
+ const excerptCount = multiSourceExcerptCount(labeledPacks);
206
+ if (excerptCount === 0)
207
+ return messages;
208
+ const emptyPacks = withMultiSourcePromptExcerptByteLimit(labeledPacks, 0);
209
+ const overheadBytes = promptByteLength(buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor));
210
+ // When overhead alone (system prompt + question + framing for all sources) exceeds the limit,
211
+ // no amount of excerpt trimming can bring the prompt within budget. Throw instead of sending
212
+ // an over-limit prompt to the provider which would result in an opaque 400 context-window error.
213
+ if (overheadBytes > limit) {
214
+ throw new ContextOverflowError(`Multi-source grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
215
+ }
216
+ let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
217
+ while (maxExcerptBytes >= 0) {
218
+ messages = buildRawMultiSourceGatewayMessages(question, withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes), redactor);
219
+ if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
220
+ return messages;
221
+ }
222
+ maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
223
+ }
224
+ return buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor);
225
+ }
188
226
  // Production retriever: retrieval-only orchestrator pass with a per-scope micro-index cache. No
189
227
  // modelId is needed — retrieval performs no model call.
190
228
  export function defaultRetriever(signal) {
@@ -216,14 +254,19 @@ export function createMultiSourceAnswerer(model, modelId, redactor, signal) {
216
254
  };
217
255
  };
218
256
  }
257
+ // ─── Retrieved-source record + worker ─────────────────────────────────────────
258
+ const MAX_RETRIEVAL_CONCURRENCY = 4;
219
259
  async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
220
- const retrieved = [];
221
- for (let i = 0; i < ctx.scopes.length; i += 1) {
260
+ const retrieved = new Array(ctx.scopes.length);
261
+ const skipped = [];
262
+ let nextIndex = 0;
263
+ let firstError;
264
+ async function retrieveOne(i) {
222
265
  ensureNotCancelled(ctx.signal);
223
266
  const cs = ctx.scopes[i];
224
267
  const label = labels[i];
225
268
  if (cs === undefined || label === undefined)
226
- continue;
269
+ return;
227
270
  const scope = buildSelectedScopeFrom(ctx.chat, cs, deriveScopeIdFrom(ctx.chat, cs, i));
228
271
  const out = await ctx.retriever({
229
272
  scope,
@@ -232,24 +275,50 @@ async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
232
275
  budget: perScopeBudget,
233
276
  });
234
277
  if (!isValidGroundedPack(out.pack)) {
235
- return internalError("Grounded answer context pack failed validation.");
278
+ skipped.push({ label, message: "Pack validation failed." });
279
+ firstError ??= internalError("Grounded answer context pack failed validation.");
280
+ return;
281
+ }
282
+ retrieved[i] = { label, pack: out.pack, elapsedMs: out.elapsedMs, scope, plan: out.plan };
283
+ }
284
+ async function worker() {
285
+ for (;;) {
286
+ const i = nextIndex;
287
+ nextIndex += 1;
288
+ if (i >= ctx.scopes.length)
289
+ return;
290
+ await retrieveOne(i);
236
291
  }
237
- retrieved.push({ label, pack: out.pack, elapsedMs: out.elapsedMs, scope });
238
292
  }
239
- return retrieved;
293
+ const workerCount = Math.min(MAX_RETRIEVAL_CONCURRENCY, Math.max(1, ctx.scopes.length));
294
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
295
+ const sources = retrieved.filter((source) => source !== undefined);
296
+ if (sources.length === 0 && firstError !== undefined)
297
+ return firstError;
298
+ return { retrieved: sources, skipped, firstError };
240
299
  }
241
300
  function mergedCitations(sources, redactor) {
242
301
  const citations = sources.flatMap((src) => buildCitations(src.pack, redactor).map((c) => ({ ...c, source: src.label })));
243
302
  return [...citations].sort((a, b) => b.score - a.score);
244
303
  }
245
- function mergedUncertainty(sources, redactor) {
246
- return sources.flatMap((src) => src.pack.uncertainty.map((u) => ({ kind: u.kind, claim: redactString(redactor, u.claim) })));
304
+ function mergedUncertainty(sources, skipped, preSkipped, redactor) {
305
+ const fromPacks = sources.flatMap((src) => src.pack.uncertainty.map((u) => ({ kind: u.kind, claim: redactString(redactor, u.claim) })));
306
+ const allSkipped = [
307
+ ...preSkipped.map((s) => ({ label: s.label, message: s.message })),
308
+ ...skipped,
309
+ ];
310
+ const fromSkipped = allSkipped.map((entry) => ({
311
+ kind: "source-skipped",
312
+ claim: redactString(redactor, `Source ${entry.label} skipped: ${entry.message}`),
313
+ }));
314
+ return [...fromPacks, ...fromSkipped];
247
315
  }
248
316
  // Persists ONE evidence run per source, each naming the root that source actually searched (L1
249
317
  // honesty rule, mirrored from the single path). Returns the FIRST source's run id, which the
250
- // answer surfaces as its primary evidenceRunId.
318
+ // answer surfaces as its primary evidenceRunId, plus the full set for audit discovery.
251
319
  function persistPerSourceEvidence(ctx, sources) {
252
320
  let firstRunId;
321
+ const runIds = [];
253
322
  for (const src of sources) {
254
323
  const finishedAt = Date.now();
255
324
  const startedAt = Math.max(0, finishedAt - src.elapsedMs);
@@ -259,6 +328,7 @@ function persistPerSourceEvidence(ctx, sources) {
259
328
  modelId: ctx.modelId,
260
329
  workspaceRoot: src.scope.workspaceRoot,
261
330
  chatId: ctx.chat.id,
331
+ plan: src.plan,
262
332
  pack: src.pack,
263
333
  citationCount: buildCitations(src.pack, ctx.deps.redactor).length,
264
334
  elapsedMs: src.elapsedMs,
@@ -271,23 +341,25 @@ function persistPerSourceEvidence(ctx, sources) {
271
341
  costClassResolver: resolveCostClass,
272
342
  });
273
343
  firstRunId ??= runId;
344
+ runIds.push(runId);
274
345
  }
275
- return { firstRunId };
346
+ return { firstRunId, runIds };
276
347
  }
277
- function assembleMultiSourceAnswer(ctx, sources, assistant, ids) {
348
+ function assembleMultiSourceAnswer(ctx, sources, skipped, assistant, ids) {
278
349
  const { redactor } = ctx.deps;
279
350
  const citations = mergedCitations(sources, redactor);
280
351
  const summaries = sources.map((src) => buildGroundedAnswerContextPackSummary(src.pack, buildCitations(src.pack, redactor).length, src.elapsedMs));
281
352
  const mergedSummary = mergeContextPackSummaries(summaries);
282
- const { firstRunId } = persistPerSourceEvidence(ctx, sources);
353
+ const { firstRunId, runIds } = persistPerSourceEvidence(ctx, sources);
283
354
  return {
284
355
  groundingKind: "connected-context",
285
356
  userMessageId: ids.userMessageId,
286
357
  assistantMessageId: ids.assistantMessageId,
287
358
  evidenceRunId: firstRunId,
359
+ evidenceRunIds: runIds,
288
360
  content: redactString(redactor, assistant.content),
289
361
  citations,
290
- uncertainty: mergedUncertainty(sources, redactor),
362
+ uncertainty: mergedUncertainty(sources, skipped, ctx.preSkipped ?? [], redactor),
291
363
  omittedCount: sources.reduce((acc, src) => acc + src.pack.omitted.length, 0),
292
364
  elapsedMs: sources.reduce((acc, src) => acc + src.elapsedMs, 0),
293
365
  contextPack: {
@@ -304,26 +376,27 @@ export async function runMultiSourceAsk(ctx) {
304
376
  const query = buildQuery(ctx.content, () => Date.now());
305
377
  const labels = sourceLabels(ctx.scopes);
306
378
  const perScopeBudget = splitExplorationBudget(DEFAULT_EXPLORATION_BUDGET, ctx.scopes.length);
307
- let sources;
379
+ let outcome;
308
380
  try {
309
- sources = await retrieveAllSources(ctx, query, perScopeBudget, labels);
381
+ outcome = await retrieveAllSources(ctx, query, perScopeBudget, labels);
310
382
  }
311
383
  catch (error) {
312
384
  return mapMultiSourceError(error, ctx.deps);
313
385
  }
314
- if (isRouteResult(sources)) {
315
- return sources;
386
+ if (isRouteResult(outcome)) {
387
+ return outcome;
316
388
  }
317
- const retrieved = sources;
389
+ const { retrieved, skipped } = outcome;
318
390
  let assistant;
319
391
  try {
320
392
  assistant = normalizeGroundedAnswerPayload(await ctx.answerer(ctx.content, retrieved.map((s) => ({ label: s.label, pack: s.pack }))));
393
+ ensureNotCancelled(ctx.signal);
321
394
  }
322
395
  catch (error) {
323
396
  return mapMultiSourceError(error, ctx.deps);
324
397
  }
325
398
  const [userMessage, assistantMessage] = persistGroundedExchange(ctx.deps, ctx.chat.id, redactString(ctx.deps.redactor, ctx.content), redactString(ctx.deps.redactor, assistant.content));
326
- const answer = assembleMultiSourceAnswer(ctx, retrieved, assistant, {
399
+ const answer = assembleMultiSourceAnswer(ctx, retrieved, skipped, assistant, {
327
400
  userMessageId: userMessage.id,
328
401
  assistantMessageId: assistantMessage.id,
329
402
  });
@@ -337,11 +410,14 @@ export async function runMultiSourceAsk(ctx) {
337
410
  return { status: 200, body: answer };
338
411
  }
339
412
  function isRouteResult(value) {
340
- return !Array.isArray(value);
413
+ return "status" in value;
341
414
  }
342
415
  function mapMultiSourceError(error, deps) {
343
416
  if (error instanceof ClarificationNeededError)
344
- return badRequest(error.message);
417
+ return badRequest(clarificationUserMessage(error));
418
+ const workspaceResult = mappedWorkspaceError(error);
419
+ if (workspaceResult !== undefined)
420
+ return workspaceResult;
345
421
  const gatewayResult = mappedGatewayError(error, deps);
346
422
  if (gatewayResult !== undefined)
347
423
  return gatewayResult;
@@ -1,3 +1,4 @@
1
+ import { type ChatMessage as GatewayChatMessage } from "@oscharko-dev/keiko-model-gateway";
1
2
  import { type ConnectedContextPack, type RetrievalQuery, type SelectedScope } from "@oscharko-dev/keiko-contracts/connected-context";
2
3
  import { type GroundedEvidenceCitation, type GroundedUncertainty } from "@oscharko-dev/keiko-contracts/bff-wire";
3
4
  import type { RouteContext, RouteResult } from "./routes.js";
@@ -10,15 +11,21 @@ import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
10
11
  export declare function badRequest(message: string): RouteResult;
11
12
  export declare function internalError(message: string): RouteResult;
12
13
  export declare function mappedGatewayError(error: unknown, deps: UiHandlerDeps): RouteResult | undefined;
14
+ export declare function mappedWorkspaceError(error: unknown): RouteResult | undefined;
13
15
  export declare function isValidGroundedPack(pack: ConnectedContextPack): boolean;
14
16
  export declare function deriveScopeIdFrom(chat: Chat, cs: ChatConnectedScope, index: number): string;
15
17
  export declare function buildSelectedScopeFrom(chat: Chat, cs: ChatConnectedScope, scopeId: string): SelectedScope;
16
18
  export declare function buildQuery(content: string, nowMs: () => number): RetrievalQuery;
17
19
  export declare function ensureNotCancelled(signal: AbortSignal): void;
20
+ export declare function promptSafeExcerptText(value: string): string;
21
+ export declare function promptByteLength(messages: readonly GatewayChatMessage[]): number;
22
+ export declare function modelInputPromptByteLimit(modelInputTokensMax: number): number;
23
+ export declare function withPromptExcerptByteLimit(pack: ConnectedContextPack, maxExcerptBytes: number): ConnectedContextPack;
18
24
  export declare function packBudgetSummary(pack: ConnectedContextPack): string;
19
25
  export declare function evidenceLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
20
26
  export declare function uncertaintyLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
21
27
  export { GROUNDED_SYSTEM_PROMPT };
28
+ export declare function buildGroundedGatewayMessages(question: string, pack: ConnectedContextPack, redactor: Redactor): readonly GatewayChatMessage[];
22
29
  export declare function redactString(redactor: Redactor, value: string): string;
23
30
  export declare function buildCitations(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedEvidenceCitation[];
24
31
  export declare function buildUncertainty(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedUncertainty[];
@@ -1 +1 @@
1
- {"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,19 @@
4
4
  // All path validation runs in the composed layers; this module only validates wire-shape
5
5
  // inputs (chatId + content) and enforces that the chat carries a connected scope.
6
6
  import { createHash, randomUUID } from "node:crypto";
7
- import { CancelledError, GatewayError, findCapability, findConfiguredCapability, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
7
+ import { realpathSync } from "node:fs";
8
+ import { basename } from "node:path";
9
+ import { CancelledError, ContextOverflowError, GatewayError, findCapability, findConfiguredCapability, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
8
10
  import { persistConnectedContextEvidence } from "@oscharko-dev/keiko-evidence";
9
11
  import { redact } from "@oscharko-dev/keiko-security";
12
+ import { RepoSearchInvalidQueryError, RepoSearchInvalidRangeError, RepoSearchUnsupportedFileError, } from "@oscharko-dev/keiko-workspace";
10
13
  import { CONNECTED_CONTEXT_SCHEMA_VERSION, validateConnectedContextPack, } from "@oscharko-dev/keiko-contracts/connected-context";
11
14
  import { buildGroundedAnswerContextPackSummary, } from "@oscharko-dev/keiko-contracts/bff-wire";
12
15
  import { errorBody } from "./routes.js";
13
- import { currentGatewayConfig, currentRedactionSecrets } from "./deps.js";
14
- import { ClarificationNeededError, runGroundedExploration, } from "./grounded-orchestrator.js";
16
+ import { currentGatewayConfig, currentGroundingLimits, currentRedactionSecrets } from "./deps.js";
17
+ import { ClarificationNeededError, clarificationUserMessage, runGroundedExploration, } from "./grounded-orchestrator.js";
15
18
  import { microIndexForGroundedScope } from "./grounded-context-index.js";
19
+ import { pathIsDenied } from "./files-deny.js";
16
20
  import { handleLocalKnowledgeGroundedAsk } from "./local-knowledge-grounded-qa.js";
17
21
  import { buildConnectedScopes, createMultiSourceAnswerer, defaultRetriever, runMultiSourceAsk, } from "./grounded-qa-multi-source.js";
18
22
  import { buildLocalKnowledgeScopes, runHybridGroundedAsk, } from "./grounded-qa-hybrid.js";
@@ -85,6 +89,14 @@ function gatewayErrorResult(error, deps) {
85
89
  export function mappedGatewayError(error, deps) {
86
90
  return error instanceof GatewayError ? gatewayErrorResult(error, deps) : undefined;
87
91
  }
92
+ export function mappedWorkspaceError(error) {
93
+ if (error instanceof RepoSearchInvalidQueryError ||
94
+ error instanceof RepoSearchInvalidRangeError ||
95
+ error instanceof RepoSearchUnsupportedFileError) {
96
+ return badRequest(error.message);
97
+ }
98
+ return undefined;
99
+ }
88
100
  export function isValidGroundedPack(pack) {
89
101
  try {
90
102
  return validateConnectedContextPack(pack).ok;
@@ -182,6 +194,52 @@ function buildSelectedScope(chat) {
182
194
  return undefined;
183
195
  return buildSelectedScopeFrom(chat, cs, deriveScopeId(chat));
184
196
  }
197
+ function canonicalGroundedRoot(rootInput, deps) {
198
+ if (pathIsDenied(rootInput)) {
199
+ return badRequest("Connected scope is excluded from Keiko's safe read surface.");
200
+ }
201
+ let realRoot;
202
+ try {
203
+ realRoot = realpathSync(rootInput);
204
+ }
205
+ catch {
206
+ return badRequest("Connected scope root is not accessible.");
207
+ }
208
+ if (pathIsDenied(realRoot)) {
209
+ return badRequest("Connected scope is excluded from Keiko's safe read surface.");
210
+ }
211
+ const redacted = deps.redactor(realRoot);
212
+ if (typeof redacted === "string" && redacted !== realRoot) {
213
+ return badRequest("Connected scope root contains credential-shaped metadata.");
214
+ }
215
+ return realRoot;
216
+ }
217
+ function skippedFolderMessage(result) {
218
+ const body = result.body;
219
+ return body.error?.message ?? "not accessible";
220
+ }
221
+ // Fail-soft canonicalization: inaccessible/denied scopes are collected in `skipped` instead of
222
+ // aborting the entire request. Callers apply the hard-400 only when NO healthy scope remains.
223
+ function canonicalizeGroundedFolderScopes(chat, deps, scopes) {
224
+ const canonical = [];
225
+ const skipped = [];
226
+ for (const scope of scopes) {
227
+ const rootInput = scope.root ?? chat.projectPath;
228
+ const realRoot = canonicalGroundedRoot(rootInput, deps);
229
+ if (typeof realRoot !== "string") {
230
+ const label = scope.root !== undefined ? basename(scope.root) : "project";
231
+ skipped.push({ label, message: skippedFolderMessage(realRoot), reason: realRoot });
232
+ continue;
233
+ }
234
+ canonical.push({ ...scope, root: realRoot });
235
+ }
236
+ return { canonical, skipped };
237
+ }
238
+ function withCanonicalFolderScopes(chat, scopes) {
239
+ if (scopes.length === 0)
240
+ return chat;
241
+ return { ...chat, connectedScopes: scopes, connectedScope: scopes[0] };
242
+ }
185
243
  export function buildQuery(content, nowMs) {
186
244
  return {
187
245
  kind: "natural-language",
@@ -235,6 +293,76 @@ function redactedString(redactor, value) {
235
293
  const redacted = redactor(value);
236
294
  return typeof redacted === "string" ? redacted : value;
237
295
  }
296
+ export function promptSafeExcerptText(value) {
297
+ return value.split("```").join("` ` `");
298
+ }
299
+ const APPROX_BYTES_PER_TOKEN = 4;
300
+ export function promptByteLength(messages) {
301
+ return Buffer.byteLength(messages.map((message) => message.content).join("\n"), "utf8");
302
+ }
303
+ export function modelInputPromptByteLimit(modelInputTokensMax) {
304
+ return Math.max(0, Math.floor(modelInputTokensMax) * APPROX_BYTES_PER_TOKEN);
305
+ }
306
+ function clampUtf8Bytes(value, maxBytes) {
307
+ if (maxBytes <= 0)
308
+ return "";
309
+ if (Buffer.byteLength(value, "utf8") <= maxBytes)
310
+ return value;
311
+ let low = 0;
312
+ let high = value.length;
313
+ while (low < high) {
314
+ const mid = Math.ceil((low + high) / 2);
315
+ if (Buffer.byteLength(value.slice(0, mid), "utf8") <= maxBytes) {
316
+ low = mid;
317
+ }
318
+ else {
319
+ high = mid - 1;
320
+ }
321
+ }
322
+ return value.slice(0, low);
323
+ }
324
+ function packExcerptCount(pack) {
325
+ return pack.files.reduce((count, file) => count + file.excerpts.length, 0);
326
+ }
327
+ export function withPromptExcerptByteLimit(pack, maxExcerptBytes) {
328
+ return {
329
+ ...pack,
330
+ files: pack.files.map((file) => ({
331
+ ...file,
332
+ excerpts: file.excerpts.map((excerpt) => ({
333
+ ...excerpt,
334
+ content: clampUtf8Bytes(excerpt.content, maxExcerptBytes),
335
+ })),
336
+ })),
337
+ };
338
+ }
339
+ function promptBudgetedMessages(question, pack, redactor, build) {
340
+ const limit = modelInputPromptByteLimit(pack.budget.modelInputTokensMax);
341
+ let messages = build(question, pack, redactor);
342
+ if (limit === 0 || promptByteLength(messages) <= limit)
343
+ return messages;
344
+ const excerptCount = packExcerptCount(pack);
345
+ if (excerptCount === 0)
346
+ return messages;
347
+ const emptyPack = withPromptExcerptByteLimit(pack, 0);
348
+ const emptyMessages = build(question, emptyPack, redactor);
349
+ const overheadBytes = promptByteLength(emptyMessages);
350
+ // When overhead alone (system prompt + question + framing) exceeds the limit, no amount of
351
+ // excerpt trimming can bring the prompt within budget. Throw instead of sending an over-limit
352
+ // prompt to the provider which would result in an opaque 400 context-window error.
353
+ if (overheadBytes > limit) {
354
+ throw new ContextOverflowError(`Grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
355
+ }
356
+ let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
357
+ while (maxExcerptBytes >= 0) {
358
+ messages = build(question, withPromptExcerptByteLimit(pack, maxExcerptBytes), redactor);
359
+ if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
360
+ return messages;
361
+ }
362
+ maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
363
+ }
364
+ return emptyMessages;
365
+ }
238
366
  export function packBudgetSummary(pack) {
239
367
  const { usage, budget } = pack;
240
368
  return [
@@ -264,7 +392,7 @@ export function evidenceLines(pack, redactor) {
264
392
  });
265
393
  lines.push(`- Evidence ${redactedString(redactor, citation)} (score ${excerpt.atom.score.toFixed(2)}):`);
266
394
  lines.push("```");
267
- lines.push(redactedString(redactor, excerpt.content));
395
+ lines.push(promptSafeExcerptText(redactedString(redactor, excerpt.content)));
268
396
  lines.push("```");
269
397
  }
270
398
  }
@@ -284,7 +412,7 @@ export function uncertaintyLines(pack, redactor) {
284
412
  // GROUNDED_SYSTEM_PROMPT now lives in the dependency-free ./grounded-prompt.js leaf (re-exported
285
413
  // here for back-compat) so the hybrid path can interpolate it without a circular-import TDZ.
286
414
  export { GROUNDED_SYSTEM_PROMPT };
287
- function buildGroundedGatewayMessages(question, pack, redactor) {
415
+ function buildRawGroundedGatewayMessages(question, pack, redactor) {
288
416
  const safeQuestion = redactedString(redactor, question);
289
417
  const userContent = [
290
418
  "User question:",
@@ -309,6 +437,9 @@ function buildGroundedGatewayMessages(question, pack, redactor) {
309
437
  { role: "user", content: userContent },
310
438
  ];
311
439
  }
440
+ export function buildGroundedGatewayMessages(question, pack, redactor) {
441
+ return promptBudgetedMessages(question, pack, redactor, buildRawGroundedGatewayMessages);
442
+ }
312
443
  function createGatewayAnswerer(model, modelId, redactor, signal) {
313
444
  return {
314
445
  answer: async (question, pack) => {
@@ -416,6 +547,7 @@ function persistGroundedAuditEvidence(workerCtx, output, citationCount) {
416
547
  // the real grounding root so the audit trail is honest about which tree produced the answer.
417
548
  workspaceRoot: workerCtx.scope.workspaceRoot,
418
549
  chatId: workerCtx.chat.id,
550
+ plan: output.plan,
419
551
  pack: output.pack,
420
552
  citationCount,
421
553
  elapsedMs: output.elapsedMs,
@@ -472,7 +604,7 @@ async function runAsk(workerCtx) {
472
604
  return { status: 200, body: answer };
473
605
  }
474
606
  function isRouteResult(value) {
475
- return "status" in value;
607
+ return typeof value === "object" && value !== null && "status" in value;
476
608
  }
477
609
  function ensureRouteNotCancelled(signal, deps) {
478
610
  try {
@@ -499,8 +631,11 @@ async function runGroundedRunner(workerCtx, query) {
499
631
  }
500
632
  catch (error) {
501
633
  if (error instanceof ClarificationNeededError) {
502
- return badRequest(error.message);
634
+ return badRequest(clarificationUserMessage(error));
503
635
  }
636
+ const workspaceResult = mappedWorkspaceError(error);
637
+ if (workspaceResult !== undefined)
638
+ return workspaceResult;
504
639
  const gatewayResult = mappedGatewayError(error, workerCtx.deps);
505
640
  if (gatewayResult !== undefined)
506
641
  return gatewayResult;
@@ -553,7 +688,7 @@ function resolveMultiSourceSeam(deps, modelId, signal, override) {
553
688
  answerer: createMultiSourceAnswerer(model, modelId, deps.redactor, signal),
554
689
  };
555
690
  }
556
- async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
691
+ async function dispatchMultiSourceAsk(args, deps, scopes, skippedFolders, seamOverride) {
557
692
  const { chat, input, signal } = args;
558
693
  // An injected seam (tests) bypasses model-capability resolution exactly as the single-source path
559
694
  // does for an injected runner: there is no real model port to validate against. Production (no
@@ -575,6 +710,7 @@ async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
575
710
  retriever: seam.retriever,
576
711
  answerer: seam.answerer,
577
712
  signal,
713
+ preSkipped: skippedFolders.map((s) => ({ label: s.label, message: s.message })),
578
714
  });
579
715
  }
580
716
  // Epic #532 — builds the single-source SelectedScope from the canonical list when the legacy
@@ -586,18 +722,43 @@ function singleScopeFromList(chat, scopes) {
586
722
  return undefined;
587
723
  return buildSelectedScopeFrom(chat, cs, deriveScopeIdFrom(chat, cs, 0));
588
724
  }
589
- // Epic #532 — the folder-only branch (0 bad request; 1 → the byte-identical legacy single-source
590
- // runner; 2+ the multi-source merge). Extracted so handleGroundedAsk stays the thin count-based
591
- // dispatcher.
592
- async function dispatchFolderAsk(prepared, deps, scopes, runner, multiSource) {
725
+ // Epic #532 — the folder-only branch (0 handled by caller; 1 → single-source runner unless
726
+ // there are pre-skipped folders, in which case multi-source carries the skip notice; 2+ the
727
+ // multi-source merge). Extracted so handleGroundedAsk stays the thin count-based dispatcher.
728
+ // Release 0.2.0 — ask-path defense-in-depth (mirror of the hybrid path's capSourcesToLimits):
729
+ // a stored over-cap chat (legacy rows, or an operator who later lowered the limits) must not
730
+ // fan out unboundedly at ask time. The first `cap` folders (connection order) stay live; the
731
+ // rest surface as source-skipped notices (basename label only — no path leak).
732
+ function capFolderScopesForAsk(deps, scopes, skippedFolders) {
733
+ const cap = currentGroundingLimits(deps).maxConnectedSources;
734
+ if (scopes.length <= cap)
735
+ return { scopes, skipped: skippedFolders };
736
+ const overCap = scopes.slice(cap).map((scope) => {
737
+ const label = scope.root !== undefined ? basename(scope.root) : "project";
738
+ const message = "skipped: over the connected-source limit";
739
+ return { label, message, reason: badRequest(`Source "${label}" ${message}.`) };
740
+ });
741
+ return { scopes: scopes.slice(0, cap), skipped: [...skippedFolders, ...overCap] };
742
+ }
743
+ async function dispatchFolderAsk(prepared, deps, allScopes, allSkippedFolders, runner, multiSource) {
593
744
  const { chat, input, signal } = prepared;
594
- if (scopes.length >= 2) {
595
- return dispatchMultiSourceAsk(prepared, deps, scopes, multiSource);
745
+ const { scopes, skipped: skippedFolders } = capFolderScopesForAsk(deps, allScopes, allSkippedFolders);
746
+ // 2+ healthy folders or 1 healthy + some skipped → multi-source (carries skip-notice).
747
+ if (scopes.length >= 2 || (scopes.length === 1 && skippedFolders.length > 0)) {
748
+ return dispatchMultiSourceAsk(prepared, deps, scopes, skippedFolders, multiSource);
596
749
  }
597
750
  const scope = buildSelectedScope(chat) ?? singleScopeFromList(chat, scopes);
598
751
  if (scope === undefined) {
599
752
  return badRequest("Chat has no connected scope.");
600
753
  }
754
+ // Epic #177 audit (GAP-B) — mirror the PATCH-route deny-list check for the grounded-ask hot
755
+ // path. The PATCH route validates via validateFallbackProjectRoot before persisting a scope;
756
+ // a chat whose projectPath was created before the deny-list was added (or via the test store)
757
+ // could otherwise reach the orchestrator with a credential-dir workspaceRoot. Reject before
758
+ // calling the runner so no filesystem access occurs against a denied path.
759
+ if (pathIsDenied(scope.workspaceRoot)) {
760
+ return badRequest("Connected scope is excluded from Keiko's safe read surface.");
761
+ }
601
762
  const resolved = resolveGroundedRunner(deps, chat, input.modelId, signal, runner);
602
763
  if ("status" in resolved)
603
764
  return resolved;
@@ -620,7 +781,7 @@ function hybridSeamFields(seam) {
620
781
  ...(seam.answer !== undefined ? { answer: seam.answer } : {}),
621
782
  };
622
783
  }
623
- async function dispatchHybridAsk(prepared, deps, seam) {
784
+ async function dispatchHybridAsk(prepared, deps, skippedFolders, seam) {
624
785
  const { chat, input, signal } = prepared;
625
786
  // An injected answerer (tests) bypasses model-capability resolution exactly as the multi-source
626
787
  // path does: there is no real model port to validate. Production resolves the guardrails once.
@@ -635,6 +796,11 @@ async function dispatchHybridAsk(prepared, deps, seam) {
635
796
  modelId,
636
797
  deps,
637
798
  signal,
799
+ preSkippedFolders: skippedFolders.map((s) => ({
800
+ label: s.label,
801
+ reason: "not-accessible",
802
+ message: s.message,
803
+ })),
638
804
  ...hybridSeamFields(seam),
639
805
  });
640
806
  }
@@ -648,16 +814,26 @@ export async function handleGroundedAsk(ctx, deps, runner, multiSource, hybrid)
648
814
  // keep the EXISTING folder path (#532, byte-identical). A lone connector with no folders keeps the
649
815
  // EXISTING single-connector path (#189, byte-identical). Everything else (folders+connector, or
650
816
  // 2+ connectors) is the hybrid merge.
817
+ // Fail-soft: inaccessible/denied folders are skipped; only effective (canonical) counts drive
818
+ // dispatch. A chat with ONLY denied/inaccessible sources still returns the original 400 so the
819
+ // user sees a clear rejection (security preserved).
651
820
  const folderScopes = buildConnectedScopes(chat);
821
+ const { canonical: canonicalFolderScopes, skipped: skippedFolders } = canonicalizeGroundedFolderScopes(chat, deps, folderScopes);
822
+ const preparedWithCanonicalFolders = {
823
+ ...prepared,
824
+ chat: withCanonicalFolderScopes(chat, canonicalFolderScopes),
825
+ };
652
826
  const connectorCount = buildLocalKnowledgeScopes(chat).length;
653
- if (folderScopes.length === 0 && connectorCount === 0) {
654
- return badRequest("Chat has no connected scope.");
827
+ const effectiveFolders = canonicalFolderScopes.length;
828
+ if (effectiveFolders === 0 && connectorCount === 0) {
829
+ // Hard-fail: return the first skipped reason (preserves exact 400 message) or the generic guard.
830
+ return skippedFolders[0]?.reason ?? badRequest("Chat has no connected scope.");
655
831
  }
656
832
  if (connectorCount === 0) {
657
- return dispatchFolderAsk(prepared, deps, folderScopes, runner, multiSource);
833
+ return dispatchFolderAsk(preparedWithCanonicalFolders, deps, canonicalFolderScopes, skippedFolders, runner, multiSource);
658
834
  }
659
- if (folderScopes.length === 0 && connectorCount === 1) {
835
+ if (effectiveFolders === 0 && connectorCount === 1) {
660
836
  return handleLocalKnowledgeGroundedAsk(chat, prepared.input, deps, prepared.signal);
661
837
  }
662
- return dispatchHybridAsk(prepared, deps, hybrid);
838
+ return dispatchHybridAsk(preparedWithCanonicalFolders, deps, skippedFolders, hybrid);
663
839
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grounded-turn-registry.d.ts","sourceRoot":"","sources":["../src/grounded-turn-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAK5F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD;AAOD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IAC7F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAyBD,wBAAgB,0BAA0B,CACxC,KAAK,SAAiB,EACtB,UAAU,SAAsB,GAC/B,oBAAoB,CA0CtB;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAC;AAEjE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GACnB,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAChC,kBAAkB,EAAE,MAAM,EAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GACnB,kBAAkB,GAAG,SAAS,CAEhC;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"grounded-turn-registry.d.ts","sourceRoot":"","sources":["../src/grounded-turn-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAK5F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD;AA4BD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IAC7F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAyBD,wBAAgB,0BAA0B,CACxC,KAAK,SAAiB,EACtB,UAAU,SAAsB,GAC/B,oBAAoB,CA2CtB;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAE3F;AAED,wBAAgB,kBAAkB,CAChC,kBAAkB,EAAE,MAAM,EAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GACnB,kBAAkB,GAAG,SAAS,CAEhC;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}