@oscharko-dev/keiko 0.2.0-beta.3 → 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 (499) hide show
  1. package/README.md +139 -1
  2. package/dist/ui/csp-hashes.json +33 -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/memoriaviva/__next._full.txt +17 -0
  64. package/dist/ui/static/memoriaviva/__next._head.txt +6 -0
  65. package/dist/ui/static/memoriaviva/__next._index.txt +5 -0
  66. package/dist/ui/static/memoriaviva/__next._tree.txt +2 -0
  67. package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +6 -0
  68. package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +5 -0
  69. package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +17 -0
  70. package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +6 -0
  71. package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +5 -0
  72. package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -0
  73. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +6 -0
  74. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +5 -0
  75. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +5 -0
  76. package/dist/ui/static/memoriaviva/consolidation.html +1 -1
  77. package/dist/ui/static/memoriaviva/consolidation.txt +15 -15
  78. package/dist/ui/static/memoriaviva/detail/__next._full.txt +17 -0
  79. package/dist/ui/static/memoriaviva/detail/__next._head.txt +6 -0
  80. package/dist/ui/static/memoriaviva/detail/__next._index.txt +5 -0
  81. package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -0
  82. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +6 -0
  83. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +5 -0
  84. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +5 -0
  85. package/dist/ui/static/memoriaviva/detail.html +1 -1
  86. package/dist/ui/static/memoriaviva/detail.txt +14 -14
  87. package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +17 -0
  88. package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +6 -0
  89. package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +5 -0
  90. package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -0
  91. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +6 -0
  92. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +5 -0
  93. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +5 -0
  94. package/dist/ui/static/memoriaviva/review-queue.html +1 -1
  95. package/dist/ui/static/memoriaviva/review-queue.txt +15 -15
  96. package/dist/ui/static/memoriaviva.html +1 -1
  97. package/dist/ui/static/memoriaviva.txt +14 -14
  98. package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
  99. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.d.ts.map +1 -1
  100. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.js +61 -2
  101. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.d.ts.map +1 -1
  102. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.js +65 -21
  103. package/node_modules/@oscharko-dev/keiko-cli/dist/launcher-platforms.js +3 -3
  104. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts.map +1 -1
  105. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.js +36 -11
  106. package/node_modules/@oscharko-dev/keiko-cli/package.json +2 -2
  107. package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
  108. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts +20 -1
  109. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts.map +1 -1
  110. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts +1 -1
  111. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts.map +1 -1
  112. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.js +256 -75
  113. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts +11 -0
  114. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts.map +1 -1
  115. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +6 -6
  116. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
  117. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +4 -4
  118. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts +11 -0
  119. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts.map +1 -1
  120. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.js +4 -0
  121. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts +1 -1
  122. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts.map +1 -1
  123. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.js +109 -4
  124. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts +2 -0
  125. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts.map +1 -1
  126. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.js +94 -7
  127. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts +5 -0
  128. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts.map +1 -1
  129. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.d.ts.map +1 -1
  130. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.js +3 -0
  131. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts +14 -0
  132. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts.map +1 -1
  133. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.js +53 -5
  134. package/node_modules/@oscharko-dev/keiko-contracts/package.json +2 -2
  135. package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
  136. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.d.ts.map +1 -1
  137. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.js +11 -3
  138. package/node_modules/@oscharko-dev/keiko-evaluations/package.json +2 -2
  139. package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
  140. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts +20 -1
  141. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts.map +1 -1
  142. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.js +34 -2
  143. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts +1 -0
  144. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts.map +1 -1
  145. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.js +3 -1
  146. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts +17 -0
  147. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts.map +1 -1
  148. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.js +19 -0
  149. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +5 -1
  150. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
  151. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +32 -2
  152. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
  153. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +259 -40
  154. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts +3 -0
  155. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts.map +1 -1
  156. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.js +48 -5
  157. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts.map +1 -1
  158. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +30 -13
  159. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts +1 -1
  160. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts.map +1 -1
  161. package/node_modules/@oscharko-dev/keiko-evidence/package.json +2 -2
  162. package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
  163. package/node_modules/@oscharko-dev/keiko-harness/package.json +2 -2
  164. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
  165. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.d.ts.map +1 -1
  166. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.js +25 -1
  167. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts +1 -1
  168. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts.map +1 -1
  169. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.js +16 -0
  170. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts +3 -1
  171. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts.map +1 -1
  172. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.js +9 -5
  173. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.d.ts.map +1 -1
  174. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.js +22 -7
  175. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts +4 -1
  176. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts.map +1 -1
  177. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.js +61 -9
  178. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.d.ts.map +1 -1
  179. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.js +64 -36
  180. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts +2 -2
  181. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts.map +1 -1
  182. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.js +2 -2
  183. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts +7 -1
  184. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts.map +1 -1
  185. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.js +5 -1
  186. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts +1 -1
  187. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts.map +1 -1
  188. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.js +27 -4
  189. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts +5 -1
  190. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts.map +1 -1
  191. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.js +18 -5
  192. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.d.ts.map +1 -1
  193. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.js +10 -1
  194. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts +4 -1
  195. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts.map +1 -1
  196. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.js +370 -45
  197. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts +2 -0
  198. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts.map +1 -1
  199. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.js +8 -4
  200. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts +1 -1
  201. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts.map +1 -1
  202. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.js +10 -5
  203. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.d.ts.map +1 -1
  204. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.js +65 -20
  205. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts +1 -0
  206. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts.map +1 -1
  207. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.js +79 -0
  208. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts +1 -1
  209. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts.map +1 -1
  210. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.js +1 -1
  211. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.d.ts.map +1 -1
  212. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.js +4 -0
  213. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts +6 -5
  214. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts.map +1 -1
  215. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.js +4 -4
  216. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.d.ts.map +1 -1
  217. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.js +71 -29
  218. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.d.ts.map +1 -1
  219. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.js +253 -131
  220. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts +12 -0
  221. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts.map +1 -1
  222. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.d.ts.map +1 -1
  223. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.js +9 -0
  224. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts +3 -1
  225. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts.map +1 -1
  226. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.js +13 -1
  227. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.d.ts.map +1 -1
  228. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.js +86 -46
  229. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts +1 -1
  230. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts.map +1 -1
  231. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.js +1 -1
  232. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.d.ts.map +1 -1
  233. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.js +50 -22
  234. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts +21 -1
  235. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
  236. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +90 -13
  237. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.d.ts.map +1 -1
  238. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.js +3 -1
  239. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts +7 -2
  240. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts.map +1 -1
  241. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.js +7 -3
  242. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/audit-emitter.js +8 -0
  243. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.d.ts.map +1 -1
  244. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.js +17 -10
  245. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.d.ts.map +1 -1
  246. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.js +7 -0
  247. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts +4 -0
  248. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts.map +1 -1
  249. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/retrieval-runner.js +1 -1
  250. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts +1 -0
  251. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts.map +1 -1
  252. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.js +318 -32
  253. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts +1 -1
  254. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts.map +1 -1
  255. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.js +46 -16
  256. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts +14 -0
  257. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts.map +1 -1
  258. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.js +26 -1
  259. package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +10 -5
  260. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/.tsbuildinfo +1 -1
  261. package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +2 -2
  262. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/.tsbuildinfo +1 -1
  263. package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +2 -2
  264. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
  265. package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +2 -2
  266. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
  267. package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +2 -2
  268. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
  269. package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +2 -2
  270. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
  271. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts +2 -1
  272. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts.map +1 -1
  273. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.js +50 -0
  274. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts +3 -0
  275. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts.map +1 -1
  276. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.js +114 -44
  277. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts +14 -0
  278. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts.map +1 -1
  279. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.js +14 -0
  280. package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +2 -2
  281. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
  282. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.d.ts.map +1 -1
  283. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.js +9 -2
  284. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.js +1 -1
  285. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts +9 -1
  286. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts.map +1 -1
  287. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.js +9 -1
  288. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts +5 -0
  289. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts.map +1 -1
  290. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.js +229 -33
  291. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts +62 -0
  292. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts.map +1 -1
  293. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.d.ts.map +1 -1
  294. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.js +24 -4
  295. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts +4 -2
  296. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts.map +1 -1
  297. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.js +0 -0
  298. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.d.ts.map +1 -1
  299. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.js +119 -5
  300. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts +2 -1
  301. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts.map +1 -1
  302. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.js +26 -11
  303. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
  304. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +86 -9
  305. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.d.ts.map +1 -1
  306. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.js +10 -3
  307. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
  308. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +14 -12
  309. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/sourceMixPlanning.js +0 -0
  310. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts +1 -1
  311. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts.map +1 -1
  312. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.js +9 -1
  313. package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +2 -2
  314. package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
  315. package/node_modules/@oscharko-dev/keiko-sdk/package.json +2 -2
  316. package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
  317. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.d.ts.map +1 -1
  318. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.js +4 -2
  319. package/node_modules/@oscharko-dev/keiko-security/package.json +2 -2
  320. package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
  321. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
  322. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +6 -1
  323. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +2 -0
  324. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
  325. package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +59 -9
  326. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts +1 -1
  327. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts.map +1 -1
  328. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.js +4 -3
  329. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts +18 -3
  330. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts.map +1 -1
  331. package/node_modules/@oscharko-dev/keiko-server/dist/files.js +208 -72
  332. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.d.ts.map +1 -1
  333. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.js +7 -2
  334. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts +3 -0
  335. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts.map +1 -1
  336. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.js +27 -4
  337. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.d.ts.map +1 -1
  338. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.js +46 -14
  339. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts +1 -0
  340. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts.map +1 -1
  341. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.js +433 -31
  342. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.d.ts.map +1 -1
  343. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.js +5 -3
  344. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts +9 -0
  345. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
  346. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +194 -45
  347. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts +4 -0
  348. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts.map +1 -1
  349. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +100 -24
  350. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts +7 -0
  351. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
  352. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +196 -20
  353. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.d.ts.map +1 -1
  354. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.js +21 -1
  355. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts +1 -1
  356. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts.map +1 -1
  357. package/node_modules/@oscharko-dev/keiko-server/dist/index.js +1 -1
  358. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts +9 -6
  359. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
  360. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +189 -66
  361. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.d.ts.map +1 -1
  362. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.js +189 -72
  363. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +10 -2
  364. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -1
  365. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.js +110 -30
  366. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +13 -4
  367. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -1
  368. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.js +29 -17
  369. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +13 -3
  370. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -1
  371. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.js +54 -5
  372. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
  373. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +84 -12
  374. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -1
  375. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.js +16 -8
  376. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +6 -2
  377. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
  378. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +13 -1
  379. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -1
  380. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.js +15 -2
  381. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +9 -0
  382. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -1
  383. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.js +2 -2
  384. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +9 -1
  385. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
  386. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +138 -19
  387. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.d.ts.map +1 -1
  388. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.js +26 -7
  389. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
  390. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +26 -7
  391. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
  392. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +3 -1
  393. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
  394. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +51 -15
  395. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts +4 -1
  396. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
  397. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +17 -3
  398. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -1
  399. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.js +6 -2
  400. package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
  401. package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +4 -2
  402. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts.map +1 -1
  403. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.js +6 -1
  404. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts +2 -2
  405. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts.map +1 -1
  406. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.js +84 -8
  407. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.d.ts.map +1 -1
  408. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.js +4 -2
  409. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts +1 -1
  410. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts.map +1 -1
  411. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts +5 -1
  412. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts.map +1 -1
  413. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.d.ts.map +1 -1
  414. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.js +67 -14
  415. package/node_modules/@oscharko-dev/keiko-server/package.json +2 -2
  416. package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
  417. package/node_modules/@oscharko-dev/keiko-tools/package.json +2 -2
  418. package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
  419. package/node_modules/@oscharko-dev/keiko-verification/package.json +2 -2
  420. package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
  421. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts +2 -0
  422. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts.map +1 -1
  423. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.js +45 -10
  424. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts +1 -1
  425. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts.map +1 -1
  426. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.js +1 -1
  427. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts.map +1 -1
  428. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.js +4 -6
  429. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts +30 -0
  430. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts.map +1 -0
  431. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.js +114 -0
  432. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
  433. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +20 -7
  434. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.d.ts.map +1 -1
  435. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.js +15 -7
  436. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts.map +1 -1
  437. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.js +28 -4
  438. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.d.ts.map +1 -1
  439. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.js +51 -1
  440. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.d.ts.map +1 -1
  441. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.js +8 -3
  442. package/node_modules/@oscharko-dev/keiko-workflows/package.json +2 -2
  443. package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
  444. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts +1 -0
  445. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts.map +1 -1
  446. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.js +1 -0
  447. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.d.ts.map +1 -1
  448. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.js +84 -27
  449. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.d.ts.map +1 -1
  450. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.js +19 -0
  451. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.d.ts.map +1 -1
  452. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.js +6 -3
  453. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts.map +1 -1
  454. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.js +72 -25
  455. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts +15 -0
  456. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts.map +1 -0
  457. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.js +107 -0
  458. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts +18 -0
  459. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts.map +1 -0
  460. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.js +42 -0
  461. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
  462. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +4 -11
  463. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts +2 -0
  464. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts.map +1 -0
  465. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.js +15 -0
  466. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts +2 -2
  467. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts.map +1 -1
  468. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.js +89 -75
  469. package/node_modules/@oscharko-dev/keiko-workspace/package.json +2 -2
  470. package/node_modules/@types/node/README.md +1 -1
  471. package/node_modules/@types/node/http2.d.ts +1 -0
  472. package/node_modules/@types/node/package.json +2 -2
  473. package/package.json +3 -1
  474. package/dist/ui/static/_next/static/RAzN8WLtYaktD-ZePowXl/_buildManifest.js +0 -1
  475. package/dist/ui/static/_next/static/chunks/18-ac3e3551b4e0ce8a.js +0 -1
  476. package/dist/ui/static/_next/static/chunks/258-e3b5ee46b0669967.js +0 -1
  477. package/dist/ui/static/_next/static/chunks/422-4c94c107b90d3ccc.js +0 -1
  478. package/dist/ui/static/_next/static/chunks/664-6d821dc1aacb6b48.js +0 -1
  479. package/dist/ui/static/_next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
  480. package/dist/ui/static/_next/static/chunks/982-abc19630e6305864.js +0 -1
  481. package/dist/ui/static/_next/static/chunks/app/_not-found/page-c4d800f366186be0.js +0 -1
  482. package/dist/ui/static/_next/static/chunks/app/launch/page-17ca39367f25f372.js +0 -1
  483. package/dist/ui/static/_next/static/chunks/app/layout-0f75a39edc90325d.js +0 -1
  484. package/dist/ui/static/_next/static/chunks/app/local-knowledge/capsule/page-87a2ea239308ed34.js +0 -1
  485. package/dist/ui/static/_next/static/chunks/app/local-knowledge/page-98bb7704fc7fd0ad.js +0 -1
  486. package/dist/ui/static/_next/static/chunks/app/memoriaviva/consolidation/page-f912263f1ee5d2dd.js +0 -1
  487. package/dist/ui/static/_next/static/chunks/app/memoriaviva/detail/page-fa590f135356e0af.js +0 -1
  488. package/dist/ui/static/_next/static/chunks/app/memoriaviva/page-b8555600c1113f14.js +0 -1
  489. package/dist/ui/static/_next/static/chunks/app/memoriaviva/review-queue/page-85cfbeb3598c0a36.js +0 -1
  490. package/dist/ui/static/_next/static/chunks/app/page-2881856ad25d9935.js +0 -1
  491. package/dist/ui/static/_next/static/chunks/framework-d8f01f7e25201916.js +0 -1
  492. package/dist/ui/static/_next/static/chunks/main-app-5b043f6c611974ae.js +0 -1
  493. package/dist/ui/static/_next/static/chunks/main-bc552b04f2b6dbe2.js +0 -1
  494. package/dist/ui/static/_next/static/chunks/pages/_app-2e239ff05bfdf6d6.js +0 -1
  495. package/dist/ui/static/_next/static/chunks/pages/_error-bda15e7831eec981.js +0 -1
  496. package/dist/ui/static/_next/static/chunks/webpack-0cfe6f51555ca84e.js +0 -1
  497. package/dist/ui/static/_next/static/css/eac94895f3edc5a5.css +0 -1
  498. /package/dist/ui/static/_next/static/{RAzN8WLtYaktD-ZePowXl → Hb6brrvZY2nZtizQlYhVt}/_ssgManifest.js +0 -0
  499. /package/dist/ui/static/_next/static/chunks/{polyfills-42372ed130431b0a.js → 0cz1d0mv5g_q7.js} +0 -0
@@ -17,4 +17,21 @@ export interface ContainedJsonArtifactStoreOptions<T> {
17
17
  * a fresh atomic temp and renames over any existing file.
18
18
  */
19
19
  export declare function createNodeContainedJsonArtifactStore<T>(evidenceDir: string, suffix: string, options: ContainedJsonArtifactStoreOptions<T>): ContainedJsonArtifactStore<T>;
20
+ /**
21
+ * Idempotently delete ONE QI companion artifact `<runId><suffix>` from the contained `qi/` dir.
22
+ *
23
+ * Used by the run-deletion path (`deleteQualityIntelligenceRun`) to clean up companion artifacts
24
+ * that live alongside the run manifest. EXACT-suffix matching is mandatory: a non-leading `.` is a
25
+ * legal runId character (`assertValidRunId`), so `run-1` and `run-1.2` can coexist and a prefix
26
+ * (`startsWith`) sweep would let deleting `run-1` destroy `run-1.2`'s companion. By deriving the
27
+ * full `${runId}${suffix}` name and resolving it through `assertContainedRealPath`, the delete is
28
+ * collision-free, realpath-contained, and symlink-refusing (`deleteArtifactFile` lstat-gates
29
+ * `isFile`, which is false for a symlink). Returns true iff a regular file was removed.
30
+ *
31
+ * Intentionally NOT re-exported from the package barrel — it is an internal seam consumed only by
32
+ * the deletion path, so the published surface stays unchanged.
33
+ */
34
+ export declare function deleteQualityIntelligenceCompanionArtifact(evidenceDir: string, runId: string, suffix: string, options?: {
35
+ readonly fs?: WorkspaceFs;
36
+ }): boolean;
20
37
  //# sourceMappingURL=companionStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"companionStore.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/companionStore.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAQvC,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,iCAAiC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IACrC,gGAAgG;IAChG,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,CAAC;CACnD;AAuFD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,CAAC,EACpD,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iCAAiC,CAAC,CAAC,CAAC,GAC5C,0BAA0B,CAAC,CAAC,CAAC,CAwB/B"}
1
+ {"version":3,"file":"companionStore.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/companionStore.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAQvC,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,iCAAiC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IACrC,gGAAgG;IAChG,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,CAAC;CACnD;AAuFD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,CAAC,EACpD,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iCAAiC,CAAC,CAAC,CAAC,GAC5C,0BAA0B,CAAC,CAAC,CAAC,CAwB/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAA;CAAO,GAC1C,OAAO,CAIT"}
@@ -117,3 +117,22 @@ export function createNodeContainedJsonArtifactStore(evidenceDir, suffix, option
117
117
  },
118
118
  };
119
119
  }
120
+ /**
121
+ * Idempotently delete ONE QI companion artifact `<runId><suffix>` from the contained `qi/` dir.
122
+ *
123
+ * Used by the run-deletion path (`deleteQualityIntelligenceRun`) to clean up companion artifacts
124
+ * that live alongside the run manifest. EXACT-suffix matching is mandatory: a non-leading `.` is a
125
+ * legal runId character (`assertValidRunId`), so `run-1` and `run-1.2` can coexist and a prefix
126
+ * (`startsWith`) sweep would let deleting `run-1` destroy `run-1.2`'s companion. By deriving the
127
+ * full `${runId}${suffix}` name and resolving it through `assertContainedRealPath`, the delete is
128
+ * collision-free, realpath-contained, and symlink-refusing (`deleteArtifactFile` lstat-gates
129
+ * `isFile`, which is false for a symlink). Returns true iff a regular file was removed.
130
+ *
131
+ * Intentionally NOT re-exported from the package barrel — it is an internal seam consumed only by
132
+ * the deletion path, so the published surface stays unchanged.
133
+ */
134
+ export function deleteQualityIntelligenceCompanionArtifact(evidenceDir, runId, suffix, options = {}) {
135
+ const baseDir = join(evidenceDir, QI_SUBDIR);
136
+ const fs = options.fs ?? nodeWorkspaceFs;
137
+ return deleteArtifactFile(baseDir, fs, suffix, runId);
138
+ }
@@ -7,7 +7,11 @@ export interface FigmaSnapshotImageRef {
7
7
  readonly sha256: string;
8
8
  readonly byteLength: number;
9
9
  }
10
- export type FigmaSnapshotSkipReason = "render-url-missing" | "render-fetch-failed" | "render-empty" | "render-oversized";
10
+ /** Why a screen was excluded from the snapshot. The `render-fetch-failed:<CODE>` variant carries
11
+ * the FigmaConnectorErrorCode suffix when the download threw a coded error, letting retention
12
+ * and metrics distinguish misconfigured egress from an unclassified network flake.
13
+ */
14
+ export type FigmaSnapshotSkipReason = "render-url-missing" | "render-url-blocked" | "render-fetch-failed" | `render-fetch-failed:${string}` | "render-empty" | "render-oversized";
11
15
  export interface FigmaSnapshotSkippedScreenRow {
12
16
  readonly screenId: string;
13
17
  readonly reason: FigmaSnapshotSkipReason;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/qualityIntelligence/figmaSnapshot/schema.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,6BAA6B,EAAG,CAAU,CAAC;AAExD,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,uBAAuB,GAC/B,oBAAoB,GACpB,qBAAqB,GACrB,cAAc,GACd,kBAAkB,CAAC;AAEvB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,8FAA8F;AAC9F,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,6BAA6B,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAClE,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;CAC1D;AAcD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAoBzF"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/qualityIntelligence/figmaSnapshot/schema.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,6BAA6B,EAAG,CAAU,CAAC;AAExD,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,MAAM,EAAE,GAC/B,cAAc,GACd,kBAAkB,CAAC;AAEvB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,8FAA8F;AAC9F,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,6BAA6B,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAClE,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;CAC1D;AAcD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAoBzF"}
@@ -1,5 +1,5 @@
1
1
  import { type WorkspaceFs } from "@oscharko-dev/keiko-workspace";
2
- import { type FigmaSnapshotLinkRow, type FigmaSnapshotRecord, type FigmaSnapshotSkippedScreenRow } from "./schema.js";
2
+ import { type FigmaSnapshotLinkRow, type FigmaSnapshotRecord } from "./schema.js";
3
3
  export interface RecordFigmaSnapshotScreenInput {
4
4
  readonly screenId: string;
5
5
  readonly irJson: unknown;
@@ -19,7 +19,10 @@ export interface RecordFigmaSnapshotInput {
19
19
  };
20
20
  readonly integrityHash: string;
21
21
  readonly screens: readonly RecordFigmaSnapshotScreenInput[];
22
- readonly skippedScreens: readonly FigmaSnapshotSkippedScreenRow[];
22
+ readonly skippedScreens: readonly {
23
+ readonly screenId: string;
24
+ readonly reason: string;
25
+ }[];
23
26
  /** Raw inter-screen transitions for the navigation/flow graph (#811). Optional + additive. */
24
27
  readonly links?: readonly FigmaSnapshotLinkRow[];
25
28
  /** Deterministic design-tokens artifact (#752), opaque, for design-to-code (#755). Optional. */
@@ -29,14 +32,41 @@ export interface RecordFigmaSnapshotResult {
29
32
  readonly recordPath: string;
30
33
  readonly sideFileDir: string;
31
34
  }
35
+ /** Summary entry returned by {@link FigmaSnapshotStore.listByScope}. */
36
+ export interface FigmaSnapshotScopeEntry {
37
+ readonly runId: string;
38
+ readonly fetchedAt: string;
39
+ readonly integrityHash: string;
40
+ }
32
41
  export interface FigmaSnapshotStore {
33
42
  readonly record: (input: RecordFigmaSnapshotInput) => RecordFigmaSnapshotResult;
34
43
  readonly load: (runId: string) => FigmaSnapshotRecord | undefined;
35
44
  readonly location: (runId: string) => string;
45
+ /**
46
+ * List all snapshot records for a specific Figma scope, sorted by `fetchedAt` descending
47
+ * (most-recent first). Reads only the record headers — cheap scan. Unparseable files are
48
+ * skipped silently. Used by drift work (#735) to find existing snapshots for re-comparison.
49
+ */
50
+ readonly listByScope: (fileKey: string, nodeId: string) => readonly FigmaSnapshotScopeEntry[];
36
51
  }
37
52
  export interface FigmaSnapshotStoreOptions {
38
53
  readonly fs?: WorkspaceFs;
39
54
  readonly randomSuffix?: () => string;
40
55
  }
56
+ export interface FigmaSnapshotRetentionProfile {
57
+ /** Maximum number of snapshots to keep (newest first by fetchedAt). */
58
+ readonly maxRecords: number;
59
+ }
60
+ /**
61
+ * Enforce store-level retention for Figma snapshot records. Deletes the RECORD first, then the
62
+ * side-file dir, so a partially-retained snapshot is never in a state where the record is gone
63
+ * but the side-files remain (the side-files are unreachable without the record). A retained
64
+ * record's side-dir is never touched.
65
+ *
66
+ * Wiring: call this alongside `deleteQualityIntelligenceRun` in the QI retention orchestrator
67
+ * (#274). The profiles are intentionally separate because snapshot retention may differ from
68
+ * run-manifest retention (snapshots are larger, longer-lived evidence artifacts).
69
+ */
70
+ export declare function enforceFigmaSnapshotRetention(evidenceDir: string, profile: FigmaSnapshotRetentionProfile): void;
41
71
  export declare function createNodeFigmaSnapshotStore(evidenceDir: string, options?: FigmaSnapshotStoreOptions): FigmaSnapshotStore;
42
72
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/qualityIntelligence/figmaSnapshot/store.ts"],"names":[],"mappings":"AA2BA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,KAAK,6BAA6B,EACnC,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC5D,QAAQ,CAAC,cAAc,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAClE,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,yBAAyB,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAgHD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CA6CpB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/qualityIntelligence/figmaSnapshot/store.ts"],"names":[],"mappings":"AAyCA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAGzB,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAI5D,QAAQ,CAAC,cAAc,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3F,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,yBAAyB,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,uBAAuB,EAAE,CAAC;CAC/F;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAwND,MAAM,WAAW,6BAA6B;IAC5C,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,6BAA6B,GACrC,IAAI,CAkCN;AAiGD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CA2BpB"}
@@ -13,8 +13,21 @@
13
13
  // Redaction: the whole record (including the design-content IR) is passed through
14
14
  // `redactQualityIntelligenceEvidence` before write. The token is never present by construction
15
15
  // (the server builder never places it on the in-memory snapshot); redaction is defense-in-depth.
16
- import { randomUUID } from "node:crypto";
17
- import { chmodSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
16
+ //
17
+ // Integrity: load() recomputes the snapshot integrity hash and rejects a record whose persisted
18
+ // `integrityHash` disagrees — tampered or truncated records are rejected at the read boundary.
19
+ // NOTE: the PNG side-files are NOT re-hashed on load (they are served separately); the per-screen
20
+ // `sha256` stored in the record serves as the tamper-evidence for each image.
21
+ //
22
+ // Retention: `enforceFigmaSnapshotRetention` deletes snapshot records + their side-file dirs in
23
+ // lock-step with the provided policy. Wiring: call it where the other QI retention enforcement
24
+ // runs (the orchestrator that calls `deleteQualityIntelligenceRun` for each expired run).
25
+ //
26
+ // Orphan cleanup: `sweepOrphanedFigmaSnapshotSideDirs` removes side-file dirs (and stray *.tmp
27
+ // files) that have no matching record. It is lazy/once — the store calls it on first use so stale
28
+ // dirs from a previously interrupted record() are cleaned up without a separate boot step.
29
+ import { createHash, randomUUID } from "node:crypto";
30
+ import { chmodSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
18
31
  import { join } from "node:path";
19
32
  import { assertContainedRealPath, resolveWithinWorkspace, } from "@oscharko-dev/keiko-workspace";
20
33
  import { nodeWorkspaceFs } from "@oscharko-dev/keiko-workspace/internal/fs";
@@ -27,6 +40,38 @@ import { FIGMA_SNAPSHOT_SCHEMA_VERSION, validateFigmaSnapshotRecord, } from "./s
27
40
  const QI_DIR_MODE = 0o700;
28
41
  const SNAPSHOT_SUFFIX = ".figma-snapshot.json";
29
42
  const SIDE_FILE_SUBDIR = "figma-snapshots";
43
+ // ─── Integrity hash (mirrors figmaSnapshotHash.ts — inlined so keiko-evidence does not depend
44
+ // on the private keiko-server package). MUST stay bit-identical with the server builder. ────
45
+ const sha256Hex = (input) => createHash("sha256").update(input, "utf8").digest("hex");
46
+ // Stable stringify: keys emitted in sorted order at every depth (mirrors canonical() in hash.ts).
47
+ function canonical(value) {
48
+ if (value === undefined)
49
+ return "null";
50
+ if (value === null || typeof value !== "object")
51
+ return JSON.stringify(value);
52
+ if (Array.isArray(value))
53
+ return `[${value.map(canonical).join(",")}]`;
54
+ const record = value;
55
+ const entries = Object.keys(record)
56
+ .sort()
57
+ .map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`);
58
+ return `{${entries.join(",")}}`;
59
+ }
60
+ // Recompute the snapshot-level integrity hash from a loaded record.
61
+ // This exactly mirrors hashSnapshot() in figmaSnapshotHash.ts:
62
+ // sha256( canonical({ screens: sorted [{integrityHash,screenId}], snapshotSchemaVersion, version }) )
63
+ // fetchedAt and links/tokens are excluded by design (non-identity metadata).
64
+ function recomputeSnapshotIntegrityHash(record) {
65
+ const screens = [...record.screens]
66
+ .sort((a, b) => (a.screenId < b.screenId ? -1 : a.screenId > b.screenId ? 1 : 0))
67
+ .map((s) => ({ integrityHash: s.integrityHash, screenId: s.screenId }));
68
+ return sha256Hex(canonical({
69
+ screens,
70
+ snapshotSchemaVersion: record.figmaSnapshotSchemaVersion,
71
+ version: record.provenance.version ?? null,
72
+ }));
73
+ }
74
+ // ─── Helpers ─────────────────────────────────────────────────────────────────────────────────
30
75
  function realBaseForWrite(baseDir, fs) {
31
76
  try {
32
77
  mkdirSync(baseDir, { recursive: true, mode: QI_DIR_MODE });
@@ -121,47 +166,221 @@ function assembleRecord(input, screenRows) {
121
166
  const { redacted, summary } = redactQualityIntelligenceEvidence(draft);
122
167
  return { ...redacted, redactionSummary: summary };
123
168
  }
124
- export function createNodeFigmaSnapshotStore(evidenceDir, options = {}) {
169
+ // Parse one raw JSON string from a snapshot record file into a scope entry, or null when the
170
+ // file does not belong to the requested scope or cannot be parsed.
171
+ function parseScopeEntry(filePath, fileKey, nodeId) {
172
+ try {
173
+ const parsed = JSON.parse(readFileSync(filePath, "utf8"));
174
+ const prov = parsed.provenance;
175
+ if (!prov?.fileKey || prov.fileKey !== fileKey || prov.nodeId !== nodeId)
176
+ return null;
177
+ const runId = typeof parsed.runId === "string" ? parsed.runId : undefined;
178
+ if (runId === undefined)
179
+ return null;
180
+ const fetchedAt = typeof prov.fetchedAt === "string" ? prov.fetchedAt : "";
181
+ const integrityHash = typeof parsed.integrityHash === "string" ? parsed.integrityHash : "";
182
+ return { runId, fetchedAt, integrityHash };
183
+ }
184
+ catch {
185
+ return null;
186
+ }
187
+ }
188
+ // ─── Orphan sweep ─────────────────────────────────────────────────────────────────────────────
189
+ // Removes side-file dirs and stray *.tmp files under sideFileBase that have no matching record
190
+ // in qiDir. Called lazily once per store instance to clean up dirs left by an interrupted
191
+ // record() call (side-files written, JSON write failed).
192
+ function sweepOrphanedSideDirs(qiDir, sideFileBase) {
193
+ const sideBaseStat = lstatSync(sideFileBase, { throwIfNoEntry: false });
194
+ if (!sideBaseStat?.isDirectory())
195
+ return;
196
+ let entries;
197
+ try {
198
+ entries = readdirSync(sideFileBase);
199
+ }
200
+ catch {
201
+ return; // non-fatal: best-effort sweep
202
+ }
203
+ for (const name of entries) {
204
+ // Remove stray temp files at the top level of sideFileBase.
205
+ if (name.endsWith(".tmp")) {
206
+ rmSync(join(sideFileBase, name), { force: true });
207
+ continue;
208
+ }
209
+ // Each subdirectory name should equal a runId that has a matching record.
210
+ const recordPath = join(qiDir, `${name}${SNAPSHOT_SUFFIX}`);
211
+ const hasRecord = lstatSync(recordPath, { throwIfNoEntry: false })?.isFile() === true;
212
+ if (!hasRecord) {
213
+ const runDir = join(sideFileBase, name);
214
+ const stat = lstatSync(runDir, { throwIfNoEntry: false });
215
+ if (stat?.isDirectory() === true) {
216
+ rmSync(runDir, { recursive: true, force: true });
217
+ }
218
+ }
219
+ }
220
+ }
221
+ // Read the fetchedAt timestamp from one snapshot file, or undefined when unparseable.
222
+ function readFetchedAt(filePath) {
223
+ try {
224
+ const parsed = JSON.parse(readFileSync(filePath, "utf8"));
225
+ const prov = parsed.provenance;
226
+ return typeof prov?.fetchedAt === "string" ? prov.fetchedAt : "";
227
+ }
228
+ catch {
229
+ return undefined;
230
+ }
231
+ }
232
+ /**
233
+ * Enforce store-level retention for Figma snapshot records. Deletes the RECORD first, then the
234
+ * side-file dir, so a partially-retained snapshot is never in a state where the record is gone
235
+ * but the side-files remain (the side-files are unreachable without the record). A retained
236
+ * record's side-dir is never touched.
237
+ *
238
+ * Wiring: call this alongside `deleteQualityIntelligenceRun` in the QI retention orchestrator
239
+ * (#274). The profiles are intentionally separate because snapshot retention may differ from
240
+ * run-manifest retention (snapshots are larger, longer-lived evidence artifacts).
241
+ */
242
+ export function enforceFigmaSnapshotRetention(evidenceDir, profile) {
125
243
  const qiDir = join(evidenceDir, QI_SUBDIR);
126
244
  const sideFileBase = join(qiDir, SIDE_FILE_SUBDIR);
127
- const fs = options.fs ?? nodeWorkspaceFs;
128
- const randomSuffix = options.randomSuffix ?? randomUUID;
129
- const record = (input) => {
130
- assertValidRunId(input.runId);
131
- const realBase = realBaseForWrite(qiDir, fs);
132
- const recordPath = containedRecordPath(input.runId, realBase, fs);
133
- // Write-once pre-check BEFORE any side-file is written, so a rejected re-record leaves no
134
- // partial render bytes behind. `atomicWriteOnce` re-checks via O_EXCL to close the TOCTOU gap.
135
- assertSnapshotAbsent(recordPath);
136
- const rows = writeScreenSideFiles(sideFileBase, input.runId, input.screens, fs, randomSuffix);
137
- atomicWriteOnce(recordPath, JSON.stringify(assembleRecord(input, rows)), randomSuffix);
138
- return { recordPath, sideFileDir: join(sideFileBase, input.runId) };
139
- };
140
- const load = (runId) => {
141
- assertValidRunId(runId);
142
- const realBase = realBaseForRead(qiDir, fs);
143
- if (realBase === undefined)
144
- return undefined;
145
- const target = join(realBase, `${runId}${SNAPSHOT_SUFFIX}`);
146
- if (lstatSync(target, { throwIfNoEntry: false })?.isFile() !== true)
147
- return undefined;
148
- let parsed;
149
- try {
150
- parsed = JSON.parse(readFileSync(target, "utf8"));
151
- }
152
- catch (error) {
153
- throw new EvidenceReadError(`Figma snapshot is not valid JSON: ${error instanceof Error ? error.message : "unknown"}`);
245
+ const dirStat = lstatSync(qiDir, { throwIfNoEntry: false });
246
+ if (!dirStat?.isDirectory())
247
+ return;
248
+ // Scan for snapshot records and sort by fetchedAt ascending so we remove the oldest first.
249
+ let entries;
250
+ try {
251
+ entries = readdirSync(qiDir);
252
+ }
253
+ catch {
254
+ return;
255
+ }
256
+ const records = [];
257
+ for (const name of entries) {
258
+ if (!name.endsWith(SNAPSHOT_SUFFIX))
259
+ continue;
260
+ const runId = name.slice(0, -SNAPSHOT_SUFFIX.length);
261
+ const fetchedAt = readFetchedAt(join(qiDir, name));
262
+ // Unparseable records are skipped — do not evict conservatively.
263
+ if (fetchedAt !== undefined)
264
+ records.push({ runId, fetchedAt });
265
+ }
266
+ // Sort oldest first (ascending fetchedAt) so we evict the oldest beyond the cap.
267
+ records.sort((a, b) => (a.fetchedAt < b.fetchedAt ? -1 : a.fetchedAt > b.fetchedAt ? 1 : 0));
268
+ const toEvict = records.slice(0, Math.max(0, records.length - profile.maxRecords));
269
+ for (const { runId } of toEvict) {
270
+ // Delete record first — after this the side-dir is unreachable by any normal path.
271
+ rmSync(join(qiDir, `${runId}${SNAPSHOT_SUFFIX}`), { force: true });
272
+ // Best-effort: remove the side-file dir; failure is non-fatal (it is orphaned, not
273
+ // linked to a live record, and will be removed by the next sweepOrphanedSideDirs pass).
274
+ const runDir = join(sideFileBase, runId);
275
+ const stat = lstatSync(runDir, { throwIfNoEntry: false });
276
+ if (stat?.isDirectory() === true) {
277
+ rmSync(runDir, { recursive: true, force: true });
154
278
  }
155
- if (!validateFigmaSnapshotRecord(parsed).ok)
156
- return undefined;
157
- return parsed;
279
+ }
280
+ }
281
+ function recordOp(ctx, input) {
282
+ assertValidRunId(input.runId);
283
+ ctx.ensureSwept();
284
+ const realBase = realBaseForWrite(ctx.qiDir, ctx.fs);
285
+ const recordPath = containedRecordPath(input.runId, realBase, ctx.fs);
286
+ // Write-once pre-check BEFORE any side-file is written so a rejected re-record leaves no
287
+ // partial render bytes behind. `atomicWriteOnce` re-checks via O_EXCL to close the TOCTOU gap.
288
+ assertSnapshotAbsent(recordPath);
289
+ let rows;
290
+ try {
291
+ rows = writeScreenSideFiles(ctx.sideFileBase, input.runId, input.screens, ctx.fs, ctx.randomSuffix);
292
+ }
293
+ catch (error) {
294
+ // Side-file write failed: best-effort remove the run's side-dir so it is not orphaned.
295
+ rmSync(join(ctx.sideFileBase, input.runId), { recursive: true, force: true });
296
+ throw error;
297
+ }
298
+ try {
299
+ atomicWriteOnce(recordPath, JSON.stringify(assembleRecord(input, rows)), ctx.randomSuffix);
300
+ }
301
+ catch (error) {
302
+ // Record write failed after side-files succeeded: remove side-dir to avoid orphaning.
303
+ rmSync(join(ctx.sideFileBase, input.runId), { recursive: true, force: true });
304
+ throw error;
305
+ }
306
+ return { recordPath, sideFileDir: join(ctx.sideFileBase, input.runId) };
307
+ }
308
+ function loadOp(ctx, runId) {
309
+ assertValidRunId(runId);
310
+ ctx.ensureSwept();
311
+ const realBase = realBaseForRead(ctx.qiDir, ctx.fs);
312
+ if (realBase === undefined)
313
+ return undefined;
314
+ const target = join(realBase, `${runId}${SNAPSHOT_SUFFIX}`);
315
+ if (lstatSync(target, { throwIfNoEntry: false })?.isFile() !== true)
316
+ return undefined;
317
+ let parsed;
318
+ try {
319
+ parsed = JSON.parse(readFileSync(target, "utf8"));
320
+ }
321
+ catch (error) {
322
+ throw new EvidenceReadError(`Figma snapshot is not valid JSON: ${error instanceof Error ? error.message : "unknown"}`);
323
+ }
324
+ if (!validateFigmaSnapshotRecord(parsed).ok)
325
+ return undefined;
326
+ const rec = parsed;
327
+ // Integrity check: recompute and reject on mismatch. The PNG side-files are NOT re-hashed
328
+ // on load — each screen's `sha256` field is the tamper evidence for the image bytes.
329
+ const expected = recomputeSnapshotIntegrityHash(rec);
330
+ if (rec.integrityHash !== expected) {
331
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: hash mismatch`);
332
+ }
333
+ return rec;
334
+ }
335
+ function listByScopeOp(ctx, fileKey, nodeId) {
336
+ const realBase = realBaseForRead(ctx.qiDir, ctx.fs);
337
+ if (realBase === undefined)
338
+ return [];
339
+ let entries;
340
+ try {
341
+ entries = readdirSync(realBase);
342
+ }
343
+ catch {
344
+ return [];
345
+ }
346
+ const results = [];
347
+ for (const name of entries) {
348
+ if (!name.endsWith(SNAPSHOT_SUFFIX))
349
+ continue;
350
+ const entry = parseScopeEntry(join(realBase, name), fileKey, nodeId);
351
+ if (entry !== null)
352
+ results.push(entry);
353
+ }
354
+ results.sort((a, b) => (a.fetchedAt > b.fetchedAt ? -1 : a.fetchedAt < b.fetchedAt ? 1 : 0));
355
+ return results;
356
+ }
357
+ // ─── Store factory ────────────────────────────────────────────────────────────────────────────
358
+ export function createNodeFigmaSnapshotStore(evidenceDir, options = {}) {
359
+ const qiDir = join(evidenceDir, QI_SUBDIR);
360
+ const sideFileBase = join(qiDir, SIDE_FILE_SUBDIR);
361
+ let swept = false;
362
+ const ctx = {
363
+ qiDir,
364
+ sideFileBase,
365
+ fs: options.fs ?? nodeWorkspaceFs,
366
+ randomSuffix: options.randomSuffix ?? randomUUID,
367
+ ensureSwept() {
368
+ if (swept)
369
+ return;
370
+ swept = true;
371
+ sweepOrphanedSideDirs(qiDir, sideFileBase);
372
+ },
158
373
  };
159
- const location = (runId) => {
160
- assertValidRunId(runId);
161
- const realBase = realBaseForRead(qiDir, fs);
162
- return realBase === undefined
163
- ? join(qiDir, `${runId}${SNAPSHOT_SUFFIX}`)
164
- : containedRecordPath(runId, realBase, fs);
374
+ return {
375
+ record: (input) => recordOp(ctx, input),
376
+ load: (runId) => loadOp(ctx, runId),
377
+ location: (runId) => {
378
+ assertValidRunId(runId);
379
+ const realBase = realBaseForRead(qiDir, ctx.fs);
380
+ return realBase === undefined
381
+ ? join(qiDir, `${runId}${SNAPSHOT_SUFFIX}`)
382
+ : containedRecordPath(runId, realBase, ctx.fs);
383
+ },
384
+ listByScope: (fileKey, nodeId) => listByScopeOp(ctx, fileKey, nodeId),
165
385
  };
166
- return { record, load, location };
167
386
  }
@@ -22,17 +22,20 @@ export type QualityIntelligenceDeletionStatus = "deleted" | "absent";
22
22
  export interface QualityIntelligenceDeletionReceipt {
23
23
  readonly runId: string;
24
24
  readonly status: QualityIntelligenceDeletionStatus;
25
+ readonly removedCompanionSuffixes: readonly string[];
25
26
  readonly auditEvent: QualityIntelligenceRunDeletedEvent;
26
27
  }
27
28
  export interface QualityIntelligenceRunDeletedEvent {
28
29
  readonly type: "qi:run:deleted";
29
30
  readonly runId: string;
30
31
  readonly status: QualityIntelligenceDeletionStatus;
32
+ readonly removedCompanionSuffixes: readonly string[];
31
33
  readonly at: string;
32
34
  }
33
35
  export interface QualityIntelligenceDeleteOptions extends QualityIntelligenceLoadOptions {
34
36
  readonly now?: (() => number) | undefined;
35
37
  readonly sideFileRoot?: string | undefined;
38
+ readonly companionSuffixes?: readonly string[] | undefined;
36
39
  }
37
40
  export declare function deleteQualityIntelligenceRun(runId: string, options?: QualityIntelligenceDeleteOptions): QualityIntelligenceDeletionReceipt;
38
41
  export interface QualityIntelligenceQuarantineOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/retention.ts"],"names":[],"mappings":"AAmBA,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EACnC,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,yCAAyC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,mCAAmC,EAAE,CAAC;IAElE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC;CACpD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,oCAAoC,EAAE,CAAC;CACrE;AAoED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,yCAAyC,GAC/C,kCAAkC,CAapC;AAID,MAAM,MAAM,iCAAiC,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,kCAAkC,CAAC;CACzD;AAKD,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IAEnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gCAAiC,SAAQ,8BAA8B;IAEtF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IAM1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAkCD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gCAAqC,GAC7C,kCAAkC,CAcpC;AAaD,MAAM,WAAW,oCAAoC;IAEnD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;CAC3C;AAED,wBAAgB,4CAA4C,CAC1D,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACjD,oCAAoC,CAYtC;AAUD,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,6BAA6B,GACnC,mCAAmC,CAYrC"}
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/retention.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EACnC,MAAM,YAAY,CAAC;AAcpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,yCAAyC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,mCAAmC,EAAE,CAAC;IAElE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC;CACpD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,oCAAoC,EAAE,CAAC;CACrE;AAoED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,yCAAyC,GAC/C,kCAAkC,CAapC;AAID,MAAM,MAAM,iCAAiC,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IAGnD,QAAQ,CAAC,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,kCAAkC,CAAC;CACzD;AAKD,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IAGnD,QAAQ,CAAC,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC;IAErD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gCAAiC,SAAQ,8BAA8B;IAEtF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IAM1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAO3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5D;AA+DD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gCAAqC,GAC7C,kCAAkC,CAqBpC;AAaD,MAAM,WAAW,oCAAoC;IAEnD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;CAC3C;AAED,wBAAgB,4CAA4C,CAC1D,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACjD,oCAAoC,CAYtC;AAUD,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,6BAA6B,GACnC,mCAAmC,CAYrC"}
@@ -2,18 +2,31 @@
2
2
  //
3
3
  // Pure decision function (`applyQualityIntelligenceRetention`) consumed by the orchestrator with
4
4
  // the current store snapshot; the orchestrator does the side effects. Idempotent deletion
5
- // (`deleteQualityIntelligenceRun`) removes the manifest and emits a typed deletion-receipt
6
- // audit event without throwing on a missing run.
5
+ // (`deleteQualityIntelligenceRun`) removes the manifest AND its companion artifacts
6
+ // (`.candidates.json` plus any caller-supplied server-owned suffixes) so a deleted run leaves no
7
+ // orphaned customer-derived content, and emits a typed deletion-receipt audit event without
8
+ // throwing on a missing run.
7
9
  //
8
10
  // Restart recovery is enforced at the WRITE seam: every persist is atomic O_EXCL temp + rename,
9
11
  // so an unclean shutdown leaves at most one `.tmp` (or nothing). The list/load surfaces filter on
10
12
  // the `.qi.json` suffix, so a half-written run is never surfaced. There is no recovery procedure
11
13
  // to call — recovery IS the absence of a code path that surfaces partials.
12
14
  import { lstatSync, renameSync, rmSync } from "node:fs";
13
- import { join } from "node:path";
15
+ import { join, resolve, sep } from "node:path";
14
16
  import { assertValidRunId } from "@oscharko-dev/keiko-security";
17
+ import { CANDIDATES_SUFFIX } from "./candidatesArtifact.js";
18
+ import { deleteQualityIntelligenceCompanionArtifact } from "./companionStore.js";
15
19
  import { getQualityIntelligenceRetentionProfile, } from "./retentionPolicy.js";
16
20
  import { createNodeQualityIntelligenceLocalStore, QI_SUBDIR, } from "./store.js";
21
+ // Companion artifacts that `keiko-evidence` OWNS and writes alongside the run manifest under
22
+ // `qi/`, keyed by `<runId>`. They are swept by default on deletion so a "deleted" run never leaves
23
+ // customer-derived generated content (`.candidates.json`) orphaned on disk (Issue #274 AC4).
24
+ // Higher layers that own their own companions (e.g. keiko-server's `.review.json`, the figma
25
+ // route companions) pass their suffixes via `QualityIntelligenceDeleteOptions.companionSuffixes`;
26
+ // keiko-evidence MUST NOT hard-code suffixes it does not own (layering). The figma-snapshot
27
+ // companion + its `figma-snapshots/<runId>/` side-files are deliberately EXCLUDED here — they have
28
+ // their own retention seam (`enforceFigmaSnapshotRetention`) and are cleaned by that subsystem.
29
+ const QI_EVIDENCE_OWNED_COMPANION_SUFFIXES = Object.freeze([CANDIDATES_SUFFIX]);
17
30
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
18
31
  function profileForEntry(entry) {
19
32
  return { entry, profile: getQualityIntelligenceRetentionProfile(entry.retentionPolicyId) };
@@ -93,7 +106,16 @@ function resolveDeleteStore(options) {
93
106
  // A symlink at the run-dir path is refused (defence against a planted symlink redirecting the
94
107
  // rm into an unrelated tree).
95
108
  function removeSideFileDirIfPresent(runId, sideFileRoot) {
96
- const runDir = join(sideFileRoot, runId);
109
+ const root = resolve(sideFileRoot);
110
+ const runDir = join(root, runId);
111
+ // Defence-in-depth: runId is already `assertValidRunId`-checked (no separators, no `..`, no
112
+ // leading dot) before this is reached, so `runDir` cannot escape `root`. Assert it lexically so
113
+ // a future refactor that relaxes the validation order fails loudly here instead of `rm`-ing an
114
+ // unrelated tree — the one #274 FS op that did not previously route through the containment
115
+ // discipline used by the manifest/companion stores.
116
+ if (!runDir.startsWith(root + sep)) {
117
+ throw new Error(`QI side-file dir escapes the side-file root, refusing to delete: ${runDir}`);
118
+ }
97
119
  const stat = lstatSync(runDir, { throwIfNoEntry: false });
98
120
  if (stat === undefined) {
99
121
  return;
@@ -103,6 +125,21 @@ function removeSideFileDirIfPresent(runId, sideFileRoot) {
103
125
  }
104
126
  rmSync(runDir, { recursive: true, force: true });
105
127
  }
128
+ // Sweep the run's companion artifacts (evidence-owned + caller-supplied) from the contained `qi/`
129
+ // dir. Exact-suffix, idempotent: a companion that does not exist is skipped. Returns the suffixes
130
+ // that were actually removed so the deletion receipt/audit event can attest completeness.
131
+ function removeRunCompanions(evidenceDir, runId, extraSuffixes) {
132
+ const suffixes = [
133
+ ...new Set([...QI_EVIDENCE_OWNED_COMPANION_SUFFIXES, ...(extraSuffixes ?? [])]),
134
+ ];
135
+ const removed = [];
136
+ for (const suffix of suffixes) {
137
+ if (deleteQualityIntelligenceCompanionArtifact(evidenceDir, runId, suffix)) {
138
+ removed.push(suffix);
139
+ }
140
+ }
141
+ return removed.sort();
142
+ }
106
143
  // Idempotent removal of a single QI run's local state. Returns a structured receipt rather than
107
144
  // throwing on a missing run — callers (UI, retention orchestrator) need to distinguish "deleted"
108
145
  // from "absent" without try/catch noise. When options.sideFileRoot is set, also removes
@@ -112,6 +149,11 @@ export function deleteQualityIntelligenceRun(runId, options = {}) {
112
149
  assertValidRunId(runId);
113
150
  const store = resolveDeleteStore(options);
114
151
  const removed = store.delete(runId);
152
+ // Sweep companion artifacts so a deleted run leaves no orphaned customer-derived content on disk
153
+ // (Issue #274 AC4). On-disk only — skipped when just an in-memory store is supplied.
154
+ const removedCompanionSuffixes = options.evidenceDir === undefined
155
+ ? []
156
+ : removeRunCompanions(options.evidenceDir, runId, options.companionSuffixes);
115
157
  if (options.sideFileRoot !== undefined) {
116
158
  removeSideFileDirIfPresent(runId, options.sideFileRoot);
117
159
  }
@@ -120,7 +162,8 @@ export function deleteQualityIntelligenceRun(runId, options = {}) {
120
162
  return {
121
163
  runId,
122
164
  status,
123
- auditEvent: { type: "qi:run:deleted", runId, status, at },
165
+ removedCompanionSuffixes,
166
+ auditEvent: { type: "qi:run:deleted", runId, status, removedCompanionSuffixes, at },
124
167
  };
125
168
  }
126
169
  export function quarantineCorruptQualityIntelligenceManifest(evidenceDir, runId, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/store.ts"],"names":[],"mappings":"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"}