@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
@@ -25,12 +25,13 @@ function perSourceAtomBudget(total, sourceCount) {
25
25
  return total;
26
26
  return Math.max(1, Math.floor(total / sourceCount));
27
27
  }
28
- // Global per-run evidence byte budget. Each source kind (workspace / file / capsule) was previously
29
- // allowed ~192KB INDEPENDENTLY, so N large sources summed to N×192KB and blew the model prompt cap
30
- // (MAX_PROMPT_BYTES = 256KB) — failing the entire N+1 run with QI_PROMPT_TOO_LARGE (Epic #729
31
- // headline). The byte budget is now a single global pool split fairly across sources, mirroring the
32
- // atom-budget split, so the merged evidence text stays bounded regardless of N. A single source keeps
33
- // the full budget (identical to the prior single-source behaviour).
28
+ // Global per-run evidence byte budget. Each source kind (workspace / file / capsule /
29
+ // figma-snapshot) was previously allowed ~192KB INDEPENDENTLY, so N large sources summed to N×192KB
30
+ // and blew the model prompt cap (MAX_PROMPT_BYTES = 256KB) — failing the entire N+1 run with
31
+ // QI_PROMPT_TOO_LARGE (Epic #729 headline). The byte budget is now a single global pool split fairly
32
+ // across sources, mirroring the atom-budget split, so the merged evidence text stays bounded
33
+ // regardless of N. A single source keeps the full budget (identical to the prior single-source
34
+ // behaviour). figma-snapshot uses the same split via figmaScreenDocs (mirrors processCapsuleDocs).
34
35
  const EVIDENCE_BUDGET_BYTES = 196_608;
35
36
  // Never starve a source below this many bytes — a tiny share is still usable context.
36
37
  const MIN_SOURCE_BUDGET_BYTES = 4_096;
@@ -53,9 +54,33 @@ export class QiIngestionError extends Error {
53
54
  this.name = "QiIngestionError";
54
55
  }
55
56
  }
57
+ // Credential token shapes mirrored from keiko-contracts `fieldLooksUnsafe` so a connected
58
+ // source's display label can never echo a secret back to the browser-surfaced envelope
59
+ // (#277/#278 envelope display-surface invariant — the label is the only user-derived envelope
60
+ // field; localRef/origin/integrityHash are server-built and hash-derived).
61
+ const CREDENTIAL_LABEL_SHAPES = [
62
+ /AKIA[0-9A-Z]{12,}/gu,
63
+ /(?:ghp_|gho_|github_pat_)[A-Za-z0-9_]{20,}/gu,
64
+ /xox[baprs]-[A-Za-z0-9-]{10,}/gu,
65
+ /sk-[A-Za-z0-9]{16,}/gu,
66
+ /\bBearer\s+\S+/giu,
67
+ /-----BEGIN [A-Z ]*PRIVATE KEY-----/gu,
68
+ ];
56
69
  const sanitiseLabel = (label) => {
57
- const trimmed = label.replace(/https?:\/\/\S+/giu, "").trim();
58
- const safe = trimmed.length === 0 ? "Untitled source" : trimmed;
70
+ // Strip any URL authority — ANY scheme (http, file, s3, ftp, …), not just http(s) — plus the
71
+ // well-known credential token shapes, so a browser-supplied label never carries a URL or secret
72
+ // into the envelope display surface that is streamed back to the client (#277/#278).
73
+ let cleaned = label.replace(/[a-z][a-z0-9+.-]*:\/\/\S+/giu, " ");
74
+ for (const shape of CREDENTIAL_LABEL_SHAPES)
75
+ cleaned = cleaned.replace(shape, " ");
76
+ cleaned = cleaned.trim();
77
+ // Collapse an absolute POSIX / Windows-drive / UNC path label to its final segment so the
78
+ // display label never leaks the filesystem layout (the basename is the useful display token).
79
+ if (/^(?:\/|[A-Za-z]:[\\/]|\\\\)/u.test(cleaned)) {
80
+ const segments = cleaned.split(/[\\/]/u).filter((s) => s.length > 0);
81
+ cleaned = (segments[segments.length - 1] ?? "").trim();
82
+ }
83
+ const safe = cleaned.length === 0 ? "Untitled source" : cleaned;
59
84
  return safe.length > MAX_LABEL_CHARS ? `${safe.slice(0, MAX_LABEL_CHARS - 1)}…` : safe;
60
85
  };
61
86
  // Reject a source whose absolute path (any segment) names a denied credential location. isDenied
@@ -105,6 +130,7 @@ function ingestRequirements(source, index, registeredAt) {
105
130
  const WORKSPACE_BUDGET_BYTES = 196_608;
106
131
  const WORKSPACE_MAX_BYTES_PER_FILE = 16_384;
107
132
  const CODE_EXTENSION = /\.(?:ts|tsx|js|jsx|mjs|cjs|py|java|go|rb|rs|cs|cpp|cc|c|h|hpp|kt|swift|php|scala|sql)$/iu;
133
+ const REQUIREMENT_TEXT_EXTENSION = /\.(?:md|markdown|txt|text|rst|adoc|asciidoc|org)$/iu;
108
134
  const atomKindForPath = (path) => CODE_EXTENSION.test(path) ? "code-fragment" : "document-excerpt";
109
135
  const workspaceAtom = (entry, envelopeId) => {
110
136
  // entry.excerpt is already redacted by keiko-workspace; prefix the path so the model can
@@ -127,6 +153,42 @@ const workspaceAtom = (entry, envelopeId) => {
127
153
  };
128
154
  return { atom, canonicalText };
129
155
  };
156
+ const requirementAtomIdFor = (envelopeId, path, statement) => {
157
+ const digest = sha256Hex(`qi-atom-doc-req-v1|${String(envelopeId)}|${path}|${statement}`).slice(0, 32);
158
+ return QualityIntelligence.asQualityIntelligenceEvidenceAtomId(`qi-atom-${digest}`);
159
+ };
160
+ const stripRequirementDocumentStructure = (text) => text
161
+ .split(/\r?\n/u)
162
+ .filter((line) => !/^\s{0,3}#{1,6}\s+\S/u.test(line))
163
+ .join("\n");
164
+ function documentRequirementAtoms(entry, envelopeId) {
165
+ if (!REQUIREMENT_TEXT_EXTENSION.test(entry.path))
166
+ return Object.freeze([]);
167
+ const split = QualityIntelligenceGeneration.splitRequirementsIntoAtoms(stripRequirementDocumentStructure(entry.excerpt), {
168
+ envelopeId,
169
+ maxAtoms: MAX_TOTAL_ATOMS,
170
+ });
171
+ if (split.length <= 1)
172
+ return Object.freeze([]);
173
+ return Object.freeze(split.map((requirement) => {
174
+ const canonicalText = `${entry.path}\n${requirement.canonicalText}`;
175
+ const atom = {
176
+ kind: "requirement",
177
+ id: requirementAtomIdFor(envelopeId, entry.path, requirement.canonicalText),
178
+ sourceEnvelopeId: envelopeId,
179
+ canonicalHashSha256Hex: sha256Hex(canonicalText),
180
+ redactionStatus: "redacted",
181
+ lifecycleStatus: "draft",
182
+ };
183
+ return Object.freeze({ atom: Object.freeze(atom), canonicalText });
184
+ }));
185
+ }
186
+ function atomsForWorkspaceEntry(entry, envelopeId) {
187
+ const requirementAtoms = documentRequirementAtoms(entry, envelopeId);
188
+ return requirementAtoms.length > 0
189
+ ? requirementAtoms
190
+ : Object.freeze([workspaceAtom(entry, envelopeId)]);
191
+ }
130
192
  // Ingest a local folder by REUSING keiko-workspace traversal + redaction (no independent
131
193
  // repository traversal — Issue #278 stop condition). Each selected, already-redacted context
132
194
  // entry becomes one content-bearing atom under a single repository-context envelope.
@@ -167,7 +229,7 @@ function ingestWorkspace(source, index, registeredAt, byteBudget) {
167
229
  },
168
230
  localRef: stableLocalRef("workspace", pack.workspaceRoot),
169
231
  };
170
- const atoms = pack.selected.map((entry) => workspaceAtom(entry, envelopeId));
232
+ const atoms = pack.selected.flatMap((entry) => atomsForWorkspaceEntry(entry, envelopeId));
171
233
  return { envelope, atoms };
172
234
  }
173
235
  // A single Fachkonzept document may use the full per-run workspace byte budget — it is the only
@@ -300,9 +362,7 @@ function ingestFile(source, index, registeredAt, byteBudget) {
300
362
  },
301
363
  localRef: stableLocalRef("file", absFile),
302
364
  };
303
- const atoms = [
304
- workspaceAtom({ path: content.relativePath, excerpt: boundedText }, envelopeId),
305
- ];
365
+ const atoms = atomsForWorkspaceEntry({ path: content.relativePath, excerpt: boundedText }, envelopeId);
306
366
  return { envelope, atoms };
307
367
  }
308
368
  // A single capsule document may use the per-document byte budget; the whole capsule corpus is
@@ -485,7 +545,14 @@ function a11yItemsByScreen(parsed) {
485
545
  // items (#811) AND its accessibility test items (#812) — concatenated, neither replacing the other —
486
546
  // through the `extraItems` seam, then optionally with vision hints. The per-run byte budget bounds
487
547
  // the cumulative corpus so an oversized board never hard-fails on QI_PROMPT_TOO_LARGE.
488
- function figmaScreenDocs(record, vision) {
548
+ // The byteBudget is the caller's fair share of the global evidence pool (Epic #729 N+1 split)
549
+ // so a figma-snapshot source never consumes more than its fair slice alongside other sources.
550
+ function figmaScreenDocs(record, vision, byteBudget) {
551
+ // Mirror processCapsuleDocs (:558-563): the per-run corpus budget is the smaller of the capsule's
552
+ // own ceiling and this source's fair share of the global evidence byte budget (Epic #729 N+1
553
+ // split). The per-document cap is likewise never larger than the per-run budget.
554
+ const perRunBudget = Math.min(CAPSULE_BUDGET_BYTES, byteBudget);
555
+ const perDocBudget = Math.min(CAPSULE_MAX_BYTES_PER_DOCUMENT, perRunBudget);
489
556
  const parsed = parseScreens(record);
490
557
  const navItems = navItemsByScreen(parsed, record.links ?? []);
491
558
  const a11yItems = a11yItemsByScreen(parsed);
@@ -495,18 +562,18 @@ function figmaScreenDocs(record, vision) {
495
562
  const extraItems = [...(navItems.get(ir.id) ?? []), ...(a11yItems.get(ir.id) ?? [])];
496
563
  const baseline = QualityIntelligenceFigma.deriveScreenTestBaseline(ir, extraItems);
497
564
  const augmented = visionAugmentedScreenText(baseline, row, vision);
498
- const capped = truncateToUtf8Bytes(redact(augmented), CAPSULE_MAX_BYTES_PER_DOCUMENT);
565
+ const capped = truncateToUtf8Bytes(redact(augmented), perDocBudget);
499
566
  if (capped.trim().length === 0)
500
567
  continue;
501
568
  const bytes = utf8ByteLength(capped);
502
- if (docs.length > 0 && totalBytes + bytes > CAPSULE_BUDGET_BYTES)
569
+ if (docs.length > 0 && totalBytes + bytes > perRunBudget)
503
570
  break;
504
571
  docs.push({ documentId: `${row.screenId} (${ir.name})`, text: capped });
505
572
  totalBytes += bytes;
506
573
  }
507
574
  return docs;
508
575
  }
509
- function ingestFigmaSnapshot(source, index, registeredAt, loader, vision) {
576
+ function ingestFigmaSnapshot(source, index, registeredAt, loader, vision, byteBudget) {
510
577
  const label = sanitiseLabel(source.label);
511
578
  const record = loader(source.snapshotRunId);
512
579
  if (record === undefined) {
@@ -515,15 +582,19 @@ function ingestFigmaSnapshot(source, index, registeredAt, loader, vision) {
515
582
  if (record.screens.length === 0) {
516
583
  throw new QiIngestionError("QI_SOURCE_EMPTY", `Figma snapshot "${label}" has no screens.`);
517
584
  }
518
- const docs = figmaScreenDocs(record, vision);
585
+ const docs = figmaScreenDocs(record, vision, byteBudget);
519
586
  if (docs.length === 0) {
520
587
  throw new QiIngestionError("QI_SOURCE_EMPTY", `Figma snapshot "${label}" produced no usable screen baseline.`);
521
588
  }
522
589
  const joinedText = docs.map((d) => d.text).join("\n");
523
590
  const envelopeId = envelopeIdFor(index, label, source.snapshotRunId);
591
+ // A stored Figma Snapshot is figma evidence, not repository context. Use the dedicated
592
+ // `figma-evidence` envelope kind (#278 AC2 "represented as an explicit connector-backed source"
593
+ // + AC4 citation/audit attribution) so the persisted envelope, source-mix priority, and any
594
+ // kind-grouped audit rollup classify it correctly instead of folding it into repo context.
524
595
  const envelope = {
525
596
  id: envelopeId,
526
- kind: "repository-context",
597
+ kind: "figma-evidence",
527
598
  displayLabel: label,
528
599
  provenance: {
529
600
  origin: `figma-snapshot:${source.snapshotRunId}`,
@@ -557,7 +628,7 @@ function ingestOne(source, index, registeredAt, capsuleResolver, figmaSnapshotLo
557
628
  if (figmaSnapshotLoader === undefined) {
558
629
  throw new QiIngestionError("QI_FIGMA_SNAPSHOT_UNAVAILABLE", "Figma-snapshot sources are unavailable: the evidence directory is not configured.");
559
630
  }
560
- return ingestFigmaSnapshot(source, index, registeredAt, figmaSnapshotLoader, figmaVision);
631
+ return ingestFigmaSnapshot(source, index, registeredAt, figmaSnapshotLoader, figmaVision, byteBudget);
561
632
  }
562
633
  }
563
634
  /**
@@ -1,5 +1,8 @@
1
+ import type { QualityIntelligenceRunStreamMessage } from "@oscharko-dev/keiko-contracts";
2
+ import type { QualityIntelligence as QI } from "@oscharko-dev/keiko-contracts";
1
3
  import { type HandlerOutcome, type RouteContext, type RouteResult, type RouteDefinition } from "../routes.js";
2
- import type { UiHandlerDeps } from "../deps.js";
4
+ import type { Redactor, UiHandlerDeps } from "../deps.js";
5
+ export declare function toStreamEvent(event: QI.QualityIntelligenceRunEvent, redact: Redactor): QualityIntelligenceRunStreamMessage;
3
6
  export declare function handleStartQiRun(ctx: RouteContext, deps: UiHandlerDeps): Promise<HandlerOutcome>;
4
7
  export declare function handleCancelQiRun(ctx: RouteContext, _deps: UiHandlerDeps): RouteResult;
5
8
  export declare const QI_RUN_EXECUTION_ROUTE_GROUP: readonly RouteDefinition[];
@@ -1 +1 @@
1
- {"version":3,"file":"runRoutes.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/runRoutes.ts"],"names":[],"mappings":"AAuBA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmShD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,WAAW,CAStF;AAED,eAAO,MAAM,4BAA4B,EAAE,SAAS,eAAe,EAOlE,CAAC"}
1
+ {"version":3,"file":"runRoutes.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/runRoutes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAKV,mCAAmC,EAEpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,IAAI,EAAE,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8N1D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,EAAE,CAAC,2BAA2B,EACrC,MAAM,EAAE,QAAQ,GACf,mCAAmC,CAgBrC;AAoED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,WAAW,CAStF;AAED,eAAO,MAAM,4BAA4B,EAAE,SAAS,eAAe,EAOlE,CAAC"}
@@ -180,7 +180,9 @@ async function parseStartBody(req) {
180
180
  }
181
181
  return validateRequest(parsed);
182
182
  }
183
- function toStreamEvent(event) {
183
+ // Exported for unit testing of the reasonSummary redaction backstop (#279 AC3); not part of the
184
+ // package public surface (the QI index re-exports only the route handlers, not this helper).
185
+ export function toStreamEvent(event, redact) {
184
186
  const p = event.payload;
185
187
  return {
186
188
  type: "event",
@@ -189,9 +191,21 @@ function toStreamEvent(event) {
189
191
  ...("stageName" in p ? { stageName: p.stageName } : {}),
190
192
  ...("candidateId" in p ? { candidateId: String(p.candidateId) } : {}),
191
193
  ...("findingId" in p ? { findingId: String(p.findingId) } : {}),
192
- ...("reasonSummary" in p ? { reasonSummary: p.reasonSummary } : {}),
194
+ // `reasonSummary` is the only free-text field on the QI event envelope. The workflow already
195
+ // produces a fail-closed, secret-free summary (see `safeReasonSummary`), but pass it through the
196
+ // live-payload redactor too so this SSE writer — the one QI surface with no other redaction —
197
+ // can never stream a credential/endpoint substring should a future code path widen the field
198
+ // (#279 AC3, defence-in-depth; mirrors the Conversation Center SSE redaction posture).
199
+ ...("reasonSummary" in p ? { reasonSummary: applyRedactor(redact, p.reasonSummary) } : {}),
193
200
  };
194
201
  }
202
+ // Apply the live-payload redactor to a string field. The redactor is typed `(unknown) => unknown`
203
+ // (it walks arbitrary structures); for a string input it returns the redacted string. Fall back to
204
+ // the already-safe input on the impossible non-string return so the field type stays `string`.
205
+ function applyRedactor(redact, value) {
206
+ const out = redact(value);
207
+ return typeof out === "string" ? out : value;
208
+ }
195
209
  function classifyStartError(error) {
196
210
  if (error instanceof QiIngestionError || error instanceof QiGenerationError) {
197
211
  return { code: error.code, message: error.message };
@@ -229,7 +243,7 @@ async function streamRunExecution(deps, request, runId, registeredAt, signal, wr
229
243
  if (event.payload.kind === "finding:recorded")
230
244
  totals.findings += 1;
231
245
  qiRunRegistry.updateTotals(runId, totals);
232
- write(toStreamEvent(event));
246
+ write(toStreamEvent(event, deps.redactor));
233
247
  },
234
248
  });
235
249
  terminal = summary.status;
@@ -1 +1 @@
1
- {"version":3,"file":"uiRoutes.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/uiRoutes.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAoLzC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CA8CpF;AAMD,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAmClF"}
1
+ {"version":3,"file":"uiRoutes.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/uiRoutes.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAqMzC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAkDpF;AAMD,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,CAmClF"}
@@ -96,6 +96,18 @@ function computeCoveragePercentage(coverageByAtom) {
96
96
  const covered = coverageByAtom.filter((r) => r.status === "covered").length;
97
97
  return (covered / coverageByAtom.length) * 100;
98
98
  }
99
+ function projectDriftMetadata(manifest, candidateRows) {
100
+ const sourceFingerprintCount = manifest.sourceFingerprints?.length ?? 0;
101
+ const atomFingerprintCount = manifest.atomFingerprints?.length ?? 0;
102
+ const supported = sourceFingerprintCount > 0 && candidateRows.length > 0;
103
+ return {
104
+ status: supported ? "not-checked" : "unavailable",
105
+ sourceFingerprintCount,
106
+ atomFingerprintCount,
107
+ reCheckSupported: supported,
108
+ regenerateStaleSupported: supported,
109
+ };
110
+ }
99
111
  function projectRunDetail(inputs) {
100
112
  const { manifest, candidateRows, reviewArtifact } = inputs;
101
113
  const findingRefs = manifest.findings.map((f) => ({
@@ -131,6 +143,7 @@ function projectRunDetail(inputs) {
131
143
  coveragePercentage: computeCoveragePercentage(coverageByAtom),
132
144
  coverageByAtom,
133
145
  qualityScore: manifest.qualityScore ?? null,
146
+ drift: projectDriftMetadata(manifest, candidateRows),
134
147
  };
135
148
  }
136
149
  function parseLimitParam(ctx) {
@@ -194,8 +207,12 @@ export function handleListQiRuns(ctx, deps) {
194
207
  runs.push(summary);
195
208
  }
196
209
  catch {
197
- // A single corrupt manifest must not prevent listing other runs.
198
- // Skip and continue the store's quarantine mechanism handles it.
210
+ // A single corrupt manifest must not prevent listing other runs: skip and continue. The
211
+ // store fails closed on a corrupt manifest (EvidenceReadError) so nothing unsafe is
212
+ // surfaced. Quarantine (`quarantineCorruptQualityIntelligenceManifest`) is a SEPARATE,
213
+ // explicitly-invoked maintenance step — it is intentionally NOT run from this read path
214
+ // (a GET must not rename files); its wiring is deferred with the retention orchestrator
215
+ // (Issue #274 follow-up).
199
216
  }
200
217
  }
201
218
  const body = { runs, limit, totalRunIds, truncated };
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA+H/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,KAChB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAUD,eAAO,MAAM,UAAU,EAAE,SAAS,eAAe,EAsRhD,CAAC;AA6BF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAKD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,UAAU,GAAG,oBAAoB,GAAG,SAAS,CA2B/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEjE;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,CAE/C"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAoI/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,KAChB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAUD,eAAO,MAAM,UAAU,EAAE,SAAS,eAAe,EAwRhD,CAAC;AA6BF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAKD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,UAAU,GAAG,oBAAoB,GAAG,SAAS,CA2B/C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEjE;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,CAE/C"}
@@ -18,7 +18,7 @@ import { handleGroundedAsk } from "./grounded-qa.js";
18
18
  import { handleGroundedWorkflowHandoff } from "./grounded-handoff.js";
19
19
  import { handleGatewaySetup } from "./gateway-setup.js";
20
20
  import { handleCreateTerminalExecution, handleDeleteTerminalExecution, handleTerminalDirectories, handleTerminalEvents, handleTerminalPolicy, } from "./terminal-routes.js";
21
- import { handleFilesDirectories, handleFilesPreview, handleFilesTree } from "./files.js";
21
+ import { handleFilesContent, handleFilesDirectories, handleFilesPreview, handleFilesTree, } from "./files.js";
22
22
  import { handleBrowserApplyScreenshot, handleBrowserContent, handleBrowserEvents, handleBrowserNavigate, handleBrowserScreenshot, handleBrowserStatus, handleCreateBrowserSession, handleDeleteBrowserSession, } from "./browser.js";
23
23
  import { handleCancelLocalKnowledgeCapsuleIndexing, handleConnectLocalKnowledgeCapsule, handleCreateLocalKnowledgeCapsule, handleCreateLocalKnowledgeCapsuleSet, handleDeleteLocalKnowledgeCapsule, handleDisconnectLocalKnowledgeCapsule, handleGetLocalKnowledgeCapsule, handleListLocalKnowledgeCapsules, handleListLocalKnowledgeCapsuleSets, handleReindexLocalKnowledgeCapsule, handleStartLocalKnowledgeCapsuleIndexing, handleUpdateLocalKnowledgeCapsule, } from "./local-knowledge-handlers.js";
24
24
  import { handleRelationshipCreate, handleRelationshipDelete, handleRelationshipDependencies, handleRelationshipEvents, handleRelationshipExplain, handleRelationshipGet, handleRelationshipHealth, handleRelationshipImpact, handleRelationshipList, handleRelationshipPatch, handleRelationshipValidate, } from "./relationship-handlers.js";
@@ -90,10 +90,12 @@ export const API_ROUTES = [
90
90
  handler: handleDeleteTerminalExecution,
91
91
  },
92
92
  { method: "GET", pattern: "/api/terminal/events", handler: handleTerminalEvents },
93
- // Desktop files — read-only selected-root browser and preview control plane.
93
+ // Desktop files — selected-root browser, preview, and editor control plane.
94
94
  { method: "GET", pattern: "/api/files/directories", handler: handleFilesDirectories },
95
95
  { method: "GET", pattern: "/api/files/tree", handler: handleFilesTree },
96
96
  { method: "GET", pattern: "/api/files/preview", handler: handleFilesPreview },
97
+ { method: "GET", pattern: "/api/files/content", handler: handleFilesContent },
98
+ { method: "PATCH", pattern: "/api/files/content", handler: handleFilesContent },
97
99
  // Issue #198 audit fix — live capsule detail/health routes for the Local Knowledge UI.
98
100
  {
99
101
  method: "GET",
@@ -1 +1 @@
1
- {"version":3,"file":"run-engine.d.ts","sourceRoot":"","sources":["../src/run-engine.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAqB7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAa,MAAM,WAAW,CAAC;AAC3E,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,eAAe,CAAC;AAIvB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAG/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E;AA2TD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,EACzC,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAoBhB;AAmGD,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GACxC,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAMD,YAAY,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"run-engine.d.ts","sourceRoot":"","sources":["../src/run-engine.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAqB7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAa,MAAM,WAAW,CAAC;AAC3E,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,eAAe,CAAC;AAIvB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAG/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E;AA2TD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,EACzC,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAoBhB;AA4GD,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GACxC,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAMD,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -337,7 +337,12 @@ function persistOutcome(ctx, identity, outcome) {
337
337
  return persistExplainEvidence(runIdentity, outcome.result, ctx.evidence);
338
338
  }
339
339
  if (ctx.request.kind === "verify") {
340
- return persistVerifyEvidence(runIdentity, ctx.evidence);
340
+ return persistVerifyEvidence(runIdentity, ctx.evidence, ctx.request.governedHandoff === undefined
341
+ ? undefined
342
+ : buildGovernedHandoffEvidence({
343
+ request: ctx.request.governedHandoff,
344
+ sourceGroundedRunId: ctx.request.governedHandoffSourceGroundedRunId,
345
+ }));
341
346
  }
342
347
  return persistWorkflowEvidence(runIdentity, outcome.report, identity.sink.buffered(), ctx.evidence, ctx.request.governedHandoff === undefined
343
348
  ? undefined
@@ -1,5 +1,5 @@
1
1
  import type { DatabaseSync } from "node:sqlite";
2
- import type { Chat, CreateChatOptions, UpdateChatPatch } from "./types.js";
2
+ import type { Chat, CreateChatOptions, UpdateChatOptions, UpdateChatPatch } from "./types.js";
3
3
  export declare function listChats(db: DatabaseSync, projectPath: string): readonly Chat[];
4
4
  export declare function listChatsLimited(db: DatabaseSync, projectPath: string, limit: number): readonly Chat[];
5
5
  export declare function findChatById(db: DatabaseSync, id: string): Chat | undefined;
@@ -11,7 +11,7 @@ export declare function insertChat(db: DatabaseSync, args: {
11
11
  readonly opts: CreateChatOptions | undefined;
12
12
  readonly now: number;
13
13
  }): Chat;
14
- export declare function updateChat(db: DatabaseSync, id: string, patch: UpdateChatPatch, now: number): Chat;
14
+ export declare function updateChat(db: DatabaseSync, id: string, patch: UpdateChatPatch, now: number, options?: UpdateChatOptions): Chat;
15
15
  export declare function deleteChat(db: DatabaseSync, id: string): void;
16
16
  export declare function touchChat(db: DatabaseSync, id: string, now: number): void;
17
17
  //# sourceMappingURL=chats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/store/chats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD,OAAO,KAAK,EACV,IAAI,EAGJ,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AA8UpB,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAEhF;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,SAAS,IAAI,EAAE,CAOjB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3E;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE;IACJ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACA,IAAI,CAkBN;AAmPD,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,GACV,IAAI,CA2BN;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGzE"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/store/chats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,OAAO,KAAK,EACV,IAAI,EAGJ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AAyWpB,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAEhF;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,SAAS,IAAI,EAAE,CAOjB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3E;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE;IACJ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACA,IAAI,CAkBN;AAmTD,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,CA4BN;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG7D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGzE"}
@@ -1,7 +1,9 @@
1
1
  // ADR-0013 — chats CRUD scoped to a project. Parameterized SQL only.
2
2
  import { isAbsolute } from "node:path";
3
3
  import { SELECTED_SCOPE_KINDS, isValidScopePath, } from "@oscharko-dev/keiko-contracts/connected-context";
4
- import { DEFAULT_GROUNDING_LIMITS, MAX_CONNECTED_SOURCES, MAX_LOCAL_KNOWLEDGE_SOURCES, } from "@oscharko-dev/keiko-contracts/bff-wire";
4
+ import { DEFAULT_GROUNDING_LIMITS, GROUNDING_LIMIT_CEILINGS, } from "@oscharko-dev/keiko-contracts/bff-wire";
5
+ import { redact } from "@oscharko-dev/keiko-security";
6
+ import { pathIsDenied } from "../files-deny.js";
5
7
  import { invalidRequest, notFound } from "./errors.js";
6
8
  const MAX_CONNECTED_SCOPE_PATHS = 50;
7
9
  const SELECTED_SCOPE_KIND_SET = new Set(SELECTED_SCOPE_KINDS);
@@ -49,6 +51,18 @@ function validateScopePathsForKind(kind, paths) {
49
51
  }
50
52
  return items;
51
53
  }
54
+ function metadataIsSafe(value) {
55
+ const redacted = redact(value);
56
+ return typeof redacted !== "string" || redacted === value;
57
+ }
58
+ function assertMetadataSafe(value, label) {
59
+ if (!metadataIsSafe(value)) {
60
+ throw invalidRequest(`${label} must not contain credential-shaped metadata.`);
61
+ }
62
+ }
63
+ function allMetadataSafe(values) {
64
+ return values.every(metadataIsSafe);
65
+ }
52
66
  // Epic #532 — the connected_scope_paths column now holds EITHER a single scope object (legacy)
53
67
  // OR a JSON array of scope objects (multi-source). The Issue #184 legacy form (a bare array of
54
68
  // path strings) is still tolerated as a single files scope. Disambiguation: an array whose first
@@ -62,8 +76,13 @@ function validateScopePathsForKind(kind, paths) {
62
76
  function decodeScopeRoot(raw) {
63
77
  if (raw === undefined)
64
78
  return { ok: true };
65
- if (typeof raw === "string" && raw.length > 0 && isAbsolute(raw))
79
+ if (typeof raw === "string" &&
80
+ raw.length > 0 &&
81
+ isAbsolute(raw) &&
82
+ !pathIsDenied(raw) &&
83
+ metadataIsSafe(raw)) {
66
84
  return { ok: true, root: raw };
85
+ }
67
86
  return { ok: false };
68
87
  }
69
88
  function decodeSingleScopeObject(raw) {
@@ -72,6 +91,8 @@ function decodeSingleScopeObject(raw) {
72
91
  const relativePaths = validateScopePathsForKind(raw.kind, raw.relativePaths);
73
92
  if (relativePaths === undefined)
74
93
  return undefined;
94
+ if (!allMetadataSafe(relativePaths))
95
+ return undefined;
75
96
  const decodedRoot = decodeScopeRoot(raw.root);
76
97
  if (!decodedRoot.ok)
77
98
  return undefined;
@@ -88,10 +109,12 @@ function decodeSingleScopeObject(raw) {
88
109
  }
89
110
  function decodeLegacyFilesArray(parsed) {
90
111
  const relativePaths = validateScopePathsForKind("files", parsed);
91
- return relativePaths === undefined ? undefined : { kind: "files", relativePaths };
112
+ if (relativePaths === undefined || !allMetadataSafe(relativePaths))
113
+ return undefined;
114
+ return { kind: "files", relativePaths };
92
115
  }
93
116
  function decodeScopeObjectArray(entries) {
94
- if (entries.length > MAX_CONNECTED_SOURCES)
117
+ if (entries.length > GROUNDING_LIMIT_CEILINGS.maxConnectedSources)
95
118
  return undefined;
96
119
  const payloads = [];
97
120
  for (const entry of entries) {
@@ -180,8 +203,9 @@ function decodeLocalKnowledgeScopes(raw) {
180
203
  return single === undefined ? undefined : [single];
181
204
  }
182
205
  function decodeLocalKnowledgeScopeArray(entries) {
183
- if (entries.length === 0 || entries.length > MAX_LOCAL_KNOWLEDGE_SOURCES)
206
+ if (entries.length === 0 || entries.length > GROUNDING_LIMIT_CEILINGS.maxLocalKnowledgeSources) {
184
207
  return undefined;
208
+ }
185
209
  const scopes = [];
186
210
  for (const entry of entries) {
187
211
  const decoded = decodeLocalKnowledgeScopeObject(entry);
@@ -326,9 +350,25 @@ function validateConnectedScopeShape(scope) {
326
350
  if (!Array.isArray(scope.relativePaths)) {
327
351
  throw invalidRequest("connectedScope.relativePaths must be an array.");
328
352
  }
329
- if (validateScopePathsForKind(scope.kind, scope.relativePaths) === undefined) {
353
+ const relativePaths = validateScopePathsForKind(scope.kind, scope.relativePaths);
354
+ if (relativePaths === undefined) {
330
355
  throw invalidRequest("connectedScope.relativePaths must match connectedScope.kind and contain valid workspace-relative paths.");
331
356
  }
357
+ validateConnectedScopeTimestamp(scope);
358
+ validateConnectedScopeMetadata(relativePaths, scope.root);
359
+ }
360
+ function validateConnectedScopeMetadata(relativePaths, root) {
361
+ if (root !== undefined && pathIsDenied(root)) {
362
+ throw invalidRequest("connectedScope.root must not reference a deny-listed path.");
363
+ }
364
+ for (const relativePath of relativePaths) {
365
+ assertMetadataSafe(relativePath, "connectedScope.relativePaths");
366
+ }
367
+ if (root !== undefined) {
368
+ assertMetadataSafe(root, "connectedScope.root");
369
+ }
370
+ }
371
+ function validateConnectedScopeTimestamp(scope) {
332
372
  if (typeof scope.connectedAtMs !== "number" ||
333
373
  !Number.isInteger(scope.connectedAtMs) ||
334
374
  scope.connectedAtMs < 0) {
@@ -511,8 +551,44 @@ function localKnowledgeScopesUpdateParams(value) {
511
551
  }
512
552
  return { apply: 1, json: JSON.stringify(value.map(encodeLocalKnowledgeScopeObject)) };
513
553
  }
514
- export function updateChat(db, id, patch, now) {
515
- validateChatPatch(patch);
554
+ // Release 0.2.0 combined source cap. "Up to 16 sources" is a TOTAL across both lists
555
+ // (folders/files/repos in connectedScopes + knowledge connectors in localKnowledgeScopes),
556
+ // mirroring the QI ingestion total cap (MAX_QI_SOURCES = 16) so "16 sources" means the same
557
+ // thing everywhere. The cap is max(maxConnectedSources, maxLocalKnowledgeSources): never
558
+ // smaller than either per-list limit, so each list's own cap stays reachable. Growth-only:
559
+ // a pre-existing over-cap chat may shrink or hold its lists (no migration lock-out), but no
560
+ // patch may grow the combined total past the cap.
561
+ // Effective count after applying a resolved list patch: undefined = unchanged, null = cleared.
562
+ function patchedCount(resolved, prev) {
563
+ if (resolved === undefined)
564
+ return prev;
565
+ return resolved === null ? 0 : resolved.length;
566
+ }
567
+ function combinedSourceCap(options) {
568
+ return Math.max(options?.maxConnectedSources ?? DEFAULT_GROUNDING_LIMITS.maxConnectedSources, options?.maxLocalKnowledgeSources ?? DEFAULT_GROUNDING_LIMITS.maxLocalKnowledgeSources);
569
+ }
570
+ function validateTotalSourceCap(db, id, patch, options) {
571
+ const nextConnected = resolveScopePatch(patch);
572
+ const nextLk = resolveLocalKnowledgeScopePatch(patch);
573
+ if (nextConnected === undefined && nextLk === undefined)
574
+ return;
575
+ const existing = findChatById(db, id);
576
+ if (existing === undefined)
577
+ return; // the UPDATE below raises notFound
578
+ const prevConnected = existing.connectedScopes ??
579
+ (existing.connectedScope !== undefined ? [existing.connectedScope] : []);
580
+ const prevLk = existing.localKnowledgeScopes ??
581
+ (existing.localKnowledgeScope !== undefined ? [existing.localKnowledgeScope] : []);
582
+ const total = patchedCount(nextConnected, prevConnected.length) + patchedCount(nextLk, prevLk.length);
583
+ const prevTotal = prevConnected.length + prevLk.length;
584
+ const cap = combinedSourceCap(options);
585
+ if (total > cap && total > prevTotal) {
586
+ throw invalidRequest(`A chat may connect at most ${String(cap)} sources in total (folders, files, repositories, and knowledge connectors combined).`);
587
+ }
588
+ }
589
+ export function updateChat(db, id, patch, now, options) {
590
+ validateChatPatch(patch, options);
591
+ validateTotalSourceCap(db, id, patch, options);
516
592
  if (patch.selectedModel !== undefined)
517
593
  validateSelectedModel(patch.selectedModel);
518
594
  const titleParam = patch.title ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAMV,OAAO,EACP,qBAAqB,EAItB,MAAM,YAAY,CAAC;AAiCpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAM9E;AA6JD,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAa3C,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAI3E;AAgCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAkB/D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEhG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEvF"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/store/db.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAMV,OAAO,EACP,qBAAqB,EAKtB,MAAM,YAAY,CAAC;AAiCpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAM9E;AA+JD,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAa3C,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAI3E;AAgCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAkB/D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEhG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAEvF"}
@@ -93,10 +93,12 @@ function buildStore(db, options) {
93
93
  deleteProject: (path) => {
94
94
  deleteProjectRecord(db, path);
95
95
  },
96
- listChats: (projectPath, limit) => limit === undefined ? sqlListChats(db, projectPath) : sqlListChatsLimited(db, projectPath, limit),
96
+ listChats: (projectPath, limit) => limit === undefined
97
+ ? sqlListChats(db, projectPath)
98
+ : sqlListChatsLimited(db, projectPath, limit),
97
99
  findChatById: (id) => sqlFindChatById(db, id),
98
100
  createChat: (projectPath, title, selectedModel, opts) => createChatRecord(db, options, projectPath, title, selectedModel, opts),
99
- updateChat: (id, patch) => sqlUpdateChat(db, id, patch, options.now()),
101
+ updateChat: (id, patch, updateOptions) => sqlUpdateChat(db, id, patch, options.now(), updateOptions),
100
102
  deleteChat: (id) => {
101
103
  sqlDeleteChat(db, id);
102
104
  },
@@ -1,4 +1,4 @@
1
- export type { Chat, ChatConnectedScope, ChatLocalKnowledgeScope, ChatMessage, ChatRole, CreateChatOptions, NewChatMessage, Project, UiStore, UiStoreFactoryOptions, UpdateChatMessagePatch, UpdateChatPatch, UpdateProjectPatch, WorkflowStatus, } from "./types.js";
1
+ export type { Chat, ChatConnectedScope, ChatLocalKnowledgeScope, ChatMessage, ChatRole, CreateChatOptions, NewChatMessage, Project, UiStore, UiStoreFactoryOptions, UpdateChatOptions, UpdateChatMessagePatch, UpdateChatPatch, UpdateProjectPatch, WorkflowStatus, } from "./types.js";
2
2
  export { UiStoreError, type UiStoreErrorCode, invalidPath, invalidRequest, notFound, pathNotDirectory, pathNotFound, projectExists, } from "./errors.js";
3
3
  export { classifyPathShape, validateProjectPath, type PathShape, type ValidateProjectPathOptions, } from "./validation.js";
4
4
  export { assertUiDbOutsideProject, resolveUiDbPath, UI_DB_FILENAME, UI_DB_DIRNAME, } from "./paths.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,OAAO,EACP,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,OAAO,EACP,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/store/paths.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,aAAa,WAAW,CAAC;AAmDtC,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAChD,MAAM,CASR;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAahG"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/store/paths.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,aAAa,WAAW,CAAC;AA4DtC,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAChD,MAAM,CASR;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAgBhG"}
@@ -11,6 +11,11 @@ function isInsideCurrentWorkingDirectory(path) {
11
11
  const resolved = resolve(path);
12
12
  return resolved === cwd || resolved.startsWith(`${cwd}${sep}`);
13
13
  }
14
+ function isInsideRuntimeStateRoot(path, workspaceRoot) {
15
+ const runtimeRoot = resolve(workspaceRoot, UI_DB_DIRNAME);
16
+ const resolved = resolve(path);
17
+ return resolved === runtimeRoot || resolved.startsWith(`${runtimeRoot}${sep}`);
18
+ }
14
19
  function hasSymlinkAncestor(path) {
15
20
  let current = dirname(path);
16
21
  const root = parse(current).root;
@@ -35,7 +40,8 @@ function resolveConfiguredPath(path, label) {
35
40
  throw invalidRequest(`${label} must be absolute.`);
36
41
  }
37
42
  const resolved = normalize(path);
38
- if (isInsideCurrentWorkingDirectory(resolved)) {
43
+ if (isInsideCurrentWorkingDirectory(resolved) &&
44
+ !isInsideRuntimeStateRoot(resolved, process.cwd())) {
39
45
  throw invalidRequest(`${label} must not be inside the current workspace.`);
40
46
  }
41
47
  if (existsSync(resolved) && lstatSync(resolved).isSymbolicLink()) {
@@ -68,7 +74,8 @@ export function assertUiDbOutsideProject(uiDbPath, projectPath) {
68
74
  const resolvedDbPath = resolve(uiDbPath);
69
75
  const resolvedDbDir = dirname(resolvedDbPath);
70
76
  const resolvedProject = resolve(projectPath);
71
- if (containsPath(resolvedProject, resolvedDbPath)) {
77
+ if (containsPath(resolvedProject, resolvedDbPath) &&
78
+ !isInsideRuntimeStateRoot(resolvedDbPath, resolvedProject)) {
72
79
  throw invalidRequest("UI database path must not be inside a selected project.");
73
80
  }
74
81
  if (containsPath(resolvedDbDir, resolvedProject)) {