@oscharko-dev/keiko 0.2.0-beta.5 → 0.2.0-beta.6

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 (622) hide show
  1. package/README.md +39 -14
  2. package/dist/ui/csp-hashes.json +17 -22
  3. package/dist/ui/static/404.html +1 -1
  4. package/dist/ui/static/__next.__PAGE__.txt +2 -2
  5. package/dist/ui/static/__next._full.txt +3 -3
  6. package/dist/ui/static/__next._head.txt +1 -1
  7. package/dist/ui/static/__next._index.txt +2 -2
  8. package/dist/ui/static/__next._tree.txt +2 -2
  9. package/dist/ui/static/_next/static/chunks/0-qhhdvxg2j_y.js +1 -0
  10. package/dist/ui/static/_next/static/chunks/0ke4ratkgvcxo.css +1 -0
  11. package/dist/ui/static/_next/static/chunks/0xhu-pfsyvbmx.js +5 -0
  12. package/dist/ui/static/_next/static/chunks/3vf3oh2-sl2nc.js +1 -0
  13. package/dist/ui/static/_next/static/chunks/3wmd4-2vznp2g.js +106 -0
  14. package/dist/ui/static/_next/static/chunks/turbopack-18q50fp2-1qbt.js +1 -0
  15. package/dist/ui/static/_not-found/__next._full.txt +2 -2
  16. package/dist/ui/static/_not-found/__next._head.txt +1 -1
  17. package/dist/ui/static/_not-found/__next._index.txt +2 -2
  18. package/dist/ui/static/_not-found/__next._not-found.__PAGE__.txt +1 -1
  19. package/dist/ui/static/_not-found/__next._not-found.txt +1 -1
  20. package/dist/ui/static/_not-found/__next._tree.txt +2 -2
  21. package/dist/ui/static/_not-found.html +1 -1
  22. package/dist/ui/static/_not-found.txt +2 -2
  23. package/dist/ui/static/index.html +1 -1
  24. package/dist/ui/static/index.txt +3 -3
  25. package/dist/ui/static/launch/__next._full.txt +3 -3
  26. package/dist/ui/static/launch/__next._head.txt +1 -1
  27. package/dist/ui/static/launch/__next._index.txt +2 -2
  28. package/dist/ui/static/launch/__next._tree.txt +2 -2
  29. package/dist/ui/static/launch/__next.launch.__PAGE__.txt +2 -2
  30. package/dist/ui/static/launch/__next.launch.txt +1 -1
  31. package/dist/ui/static/launch.html +1 -1
  32. package/dist/ui/static/launch.txt +3 -3
  33. package/dist/ui/static/local-knowledge/__next._full.txt +3 -3
  34. package/dist/ui/static/local-knowledge/__next._head.txt +1 -1
  35. package/dist/ui/static/local-knowledge/__next._index.txt +2 -2
  36. package/dist/ui/static/local-knowledge/__next._tree.txt +2 -2
  37. package/dist/ui/static/local-knowledge/__next.local-knowledge.__PAGE__.txt +2 -2
  38. package/dist/ui/static/local-knowledge/__next.local-knowledge.txt +1 -1
  39. package/dist/ui/static/local-knowledge/capsule/__next._full.txt +3 -3
  40. package/dist/ui/static/local-knowledge/capsule/__next._head.txt +1 -1
  41. package/dist/ui/static/local-knowledge/capsule/__next._index.txt +2 -2
  42. package/dist/ui/static/local-knowledge/capsule/__next._tree.txt +2 -2
  43. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.__PAGE__.txt +2 -2
  44. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.txt +1 -1
  45. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.txt +1 -1
  46. package/dist/ui/static/local-knowledge/capsule.html +1 -1
  47. package/dist/ui/static/local-knowledge/capsule.txt +3 -3
  48. package/dist/ui/static/local-knowledge.html +1 -1
  49. package/dist/ui/static/local-knowledge.txt +3 -3
  50. package/dist/ui/static/memoriaviva/__next._full.txt +6 -6
  51. package/dist/ui/static/memoriaviva/__next._head.txt +1 -1
  52. package/dist/ui/static/memoriaviva/__next._index.txt +2 -2
  53. package/dist/ui/static/memoriaviva/__next._tree.txt +2 -2
  54. package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +4 -4
  55. package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +1 -1
  56. package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +4 -4
  57. package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +1 -1
  58. package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +2 -2
  59. package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -2
  60. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +2 -2
  61. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +1 -1
  62. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +1 -1
  63. package/dist/ui/static/memoriaviva/consolidation.html +1 -1
  64. package/dist/ui/static/memoriaviva/consolidation.txt +4 -4
  65. package/dist/ui/static/memoriaviva/detail/__next._full.txt +6 -6
  66. package/dist/ui/static/memoriaviva/detail/__next._head.txt +1 -1
  67. package/dist/ui/static/memoriaviva/detail/__next._index.txt +2 -2
  68. package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -2
  69. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +4 -4
  70. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +1 -1
  71. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +1 -1
  72. package/dist/ui/static/memoriaviva/detail.html +1 -1
  73. package/dist/ui/static/memoriaviva/detail.txt +6 -6
  74. package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +4 -4
  75. package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +1 -1
  76. package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +2 -2
  77. package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -2
  78. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +2 -2
  79. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +1 -1
  80. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +1 -1
  81. package/dist/ui/static/memoriaviva/review-queue.html +1 -1
  82. package/dist/ui/static/memoriaviva/review-queue.txt +4 -4
  83. package/dist/ui/static/memoriaviva.html +1 -1
  84. package/dist/ui/static/memoriaviva.txt +6 -6
  85. package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
  86. package/node_modules/@oscharko-dev/keiko-cli/dist/doctor.d.ts +24 -0
  87. package/node_modules/@oscharko-dev/keiko-cli/dist/doctor.d.ts.map +1 -0
  88. package/node_modules/@oscharko-dev/keiko-cli/dist/doctor.js +108 -0
  89. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.d.ts.map +1 -1
  90. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.js +7 -4
  91. package/node_modules/@oscharko-dev/keiko-cli/dist/index.d.ts +1 -0
  92. package/node_modules/@oscharko-dev/keiko-cli/dist/index.d.ts.map +1 -1
  93. package/node_modules/@oscharko-dev/keiko-cli/dist/index.js +1 -0
  94. package/node_modules/@oscharko-dev/keiko-cli/dist/init.d.ts +2 -2
  95. package/node_modules/@oscharko-dev/keiko-cli/dist/init.d.ts.map +1 -1
  96. package/node_modules/@oscharko-dev/keiko-cli/dist/init.js +4 -4
  97. package/node_modules/@oscharko-dev/keiko-cli/dist/install-layout.d.ts +6 -0
  98. package/node_modules/@oscharko-dev/keiko-cli/dist/install-layout.d.ts.map +1 -0
  99. package/node_modules/@oscharko-dev/keiko-cli/dist/install-layout.js +24 -0
  100. package/node_modules/@oscharko-dev/keiko-cli/dist/launcher.d.ts.map +1 -1
  101. package/node_modules/@oscharko-dev/keiko-cli/dist/launcher.js +5 -7
  102. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts +1 -0
  103. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts.map +1 -1
  104. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.js +75 -30
  105. package/node_modules/@oscharko-dev/keiko-cli/dist/memory.d.ts +3 -0
  106. package/node_modules/@oscharko-dev/keiko-cli/dist/memory.d.ts.map +1 -1
  107. package/node_modules/@oscharko-dev/keiko-cli/dist/memory.js +76 -7
  108. package/node_modules/@oscharko-dev/keiko-cli/dist/run.d.ts.map +1 -1
  109. package/node_modules/@oscharko-dev/keiko-cli/dist/run.js +50 -2
  110. package/node_modules/@oscharko-dev/keiko-cli/dist/runner.d.ts.map +1 -1
  111. package/node_modules/@oscharko-dev/keiko-cli/dist/runner.js +20 -4
  112. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts +1 -1
  113. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts.map +1 -1
  114. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.js +17 -14
  115. package/node_modules/@oscharko-dev/keiko-cli/package.json +1 -1
  116. package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
  117. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts +7 -0
  118. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts.map +1 -1
  119. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts.map +1 -1
  120. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.js +1 -2
  121. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts +1 -0
  122. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts.map +1 -1
  123. package/node_modules/@oscharko-dev/keiko-contracts/dist/gateway.d.ts +12 -0
  124. package/node_modules/@oscharko-dev/keiko-contracts/dist/gateway.d.ts.map +1 -1
  125. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +4 -2
  126. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
  127. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +4 -1
  128. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts.map +1 -1
  129. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-audit-events.d.ts +13 -1
  130. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-audit-events.d.ts.map +1 -1
  131. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-audit-events.js +7 -6
  132. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-internal.d.ts.map +1 -1
  133. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-internal.js +1 -1
  134. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-operations.d.ts.map +1 -1
  135. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-workflow-port.d.ts.map +1 -1
  136. package/node_modules/@oscharko-dev/keiko-contracts/dist/memory-workflow-port.js +1 -1
  137. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts +21 -4
  138. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts.map +1 -1
  139. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts +1 -0
  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/index.js +1 -0
  142. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts +1 -0
  143. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts.map +1 -1
  144. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.js +26 -0
  145. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/testQualityRubric.d.ts +5 -3
  146. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/testQualityRubric.d.ts.map +1 -1
  147. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/testQualityRubric.js +29 -3
  148. package/node_modules/@oscharko-dev/keiko-contracts/dist/text-safety.d.ts +7 -0
  149. package/node_modules/@oscharko-dev/keiko-contracts/dist/text-safety.d.ts.map +1 -0
  150. package/node_modules/@oscharko-dev/keiko-contracts/dist/text-safety.js +58 -0
  151. package/node_modules/@oscharko-dev/keiko-contracts/package.json +5 -1
  152. package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
  153. package/node_modules/@oscharko-dev/keiko-evaluations/dist/surface-parity.d.ts.map +1 -1
  154. package/node_modules/@oscharko-dev/keiko-evaluations/package.json +1 -1
  155. package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
  156. package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts +1 -1
  157. package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts.map +1 -1
  158. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts +7 -0
  159. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts.map +1 -1
  160. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.js +62 -13
  161. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts +3 -3
  162. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts.map +1 -1
  163. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.js +31 -11
  164. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +35 -3
  165. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
  166. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.js +107 -3
  167. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +15 -1
  168. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
  169. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +248 -36
  170. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts +2 -2
  171. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts.map +1 -1
  172. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/manifestSchema.d.ts +17 -3
  173. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/manifestSchema.d.ts.map +1 -1
  174. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts +1 -1
  175. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts.map +1 -1
  176. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +26 -22
  177. package/node_modules/@oscharko-dev/keiko-evidence/dist/side-file.d.ts.map +1 -1
  178. package/node_modules/@oscharko-dev/keiko-evidence/dist/side-file.js +17 -5
  179. package/node_modules/@oscharko-dev/keiko-evidence/dist/store.d.ts.map +1 -1
  180. package/node_modules/@oscharko-dev/keiko-evidence/dist/store.js +128 -12
  181. package/node_modules/@oscharko-dev/keiko-evidence/dist/workflow-evidence.d.ts.map +1 -1
  182. package/node_modules/@oscharko-dev/keiko-evidence/dist/workflow-evidence.js +1 -3
  183. package/node_modules/@oscharko-dev/keiko-evidence/package.json +1 -1
  184. package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
  185. package/node_modules/@oscharko-dev/keiko-harness/package.json +1 -1
  186. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
  187. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts.map +1 -1
  188. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.js +1 -2
  189. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts.map +1 -1
  190. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.js +1 -1
  191. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts.map +1 -1
  192. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.js +45 -21
  193. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/media-type.d.ts.map +1 -1
  194. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/media-type.js +1 -0
  195. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.d.ts.map +1 -1
  196. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.js +11 -3
  197. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/dimensions.d.ts +2 -0
  198. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/dimensions.d.ts.map +1 -1
  199. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/dimensions.js +42 -0
  200. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts.map +1 -1
  201. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.js +34 -0
  202. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts +1 -1
  203. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts.map +1 -1
  204. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.js +1 -1
  205. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/report.d.ts.map +1 -1
  206. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/report.js +7 -6
  207. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner.d.ts.map +1 -1
  208. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner.js +7 -1
  209. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/types.d.ts +4 -0
  210. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/types.d.ts.map +1 -1
  211. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/types.js +2 -0
  212. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts +1 -1
  213. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts.map +1 -1
  214. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.js +1 -1
  215. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.d.ts.map +1 -1
  216. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.js +121 -3
  217. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.d.ts.map +1 -1
  218. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.js +34 -4
  219. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts +1 -0
  220. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts.map +1 -1
  221. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.js +63 -0
  222. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.d.ts.map +1 -1
  223. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.js +4 -7
  224. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/html-parser.d.ts.map +1 -1
  225. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/html-parser.js +67 -11
  226. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts +1 -0
  227. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts.map +1 -1
  228. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.js +3 -0
  229. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.d.ts.map +1 -1
  230. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.js +39 -3
  231. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/ocr/null-ocr-adapter.d.ts.map +1 -1
  232. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/ocr/ocr-pipeline-parser.d.ts.map +1 -1
  233. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/ocr/ocr-pipeline-parser.js +46 -11
  234. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/parser-test-fixtures.d.ts +2 -0
  235. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/parser-test-fixtures.d.ts.map +1 -1
  236. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/parser-test-fixtures.js +2 -0
  237. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
  238. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +114 -0
  239. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/xlsx-parser.d.ts +3 -0
  240. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/xlsx-parser.d.ts.map +1 -0
  241. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/xlsx-parser.js +425 -0
  242. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.d.ts.map +1 -1
  243. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/qualityIntelligence/capsuleCorpus.d.ts +9 -4
  244. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/qualityIntelligence/capsuleCorpus.d.ts.map +1 -1
  245. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/qualityIntelligence/capsuleCorpus.js +11 -6
  246. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/retrieval-runner.js +15 -2
  247. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts +1 -0
  248. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts.map +1 -1
  249. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.js +220 -7
  250. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/types.d.ts +2 -1
  251. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/types.d.ts.map +1 -1
  252. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts.map +1 -1
  253. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.js +3 -1
  254. package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +4 -2
  255. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/.tsbuildinfo +1 -1
  256. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/capture-safety.d.ts +4 -0
  257. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/capture-safety.d.ts.map +1 -0
  258. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/capture-safety.js +17 -0
  259. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/errors.d.ts +1 -1
  260. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/errors.d.ts.map +1 -1
  261. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/index.d.ts +1 -0
  262. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/index.d.ts.map +1 -1
  263. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/index.js +1 -0
  264. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/salience.js +1 -1
  265. package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +1 -1
  266. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/.tsbuildinfo +1 -1
  267. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/_constants.d.ts +3 -0
  268. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/_constants.d.ts.map +1 -1
  269. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/_constants.js +5 -0
  270. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/consolidate.d.ts.map +1 -1
  271. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/consolidate.js +93 -30
  272. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/stale.d.ts.map +1 -1
  273. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/stale.js +3 -1
  274. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/types.d.ts +5 -0
  275. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/types.d.ts.map +1 -1
  276. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/types.js +1 -1
  277. package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +2 -2
  278. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
  279. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/forget.js +1 -1
  280. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/types.js +1 -1
  281. package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +2 -2
  282. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
  283. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/context.d.ts.map +1 -1
  284. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/context.js +61 -18
  285. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/ranking.d.ts.map +1 -1
  286. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/ranking.js +3 -1
  287. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/retrieve.d.ts.map +1 -1
  288. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/retrieve.js +26 -4
  289. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/types.d.ts +9 -1
  290. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/types.d.ts.map +1 -1
  291. package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +1 -1
  292. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
  293. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/embeddings.d.ts +1 -0
  294. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/embeddings.d.ts.map +1 -1
  295. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/embeddings.js +21 -0
  296. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/index.d.ts +1 -1
  297. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/index.d.ts.map +1 -1
  298. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/migrate-encrypt.d.ts.map +1 -1
  299. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/migrate-encrypt.js +24 -4
  300. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.d.ts +1 -1
  301. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.d.ts.map +1 -1
  302. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.js +27 -4
  303. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/tombstones.d.ts +1 -0
  304. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/tombstones.d.ts.map +1 -1
  305. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/tombstones.js +21 -4
  306. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/types.d.ts +22 -1
  307. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/types.d.ts.map +1 -1
  308. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/validate.d.ts.map +1 -1
  309. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/validate.js +3 -0
  310. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/vault.d.ts.map +1 -1
  311. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/vault.js +105 -28
  312. package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +1 -1
  313. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
  314. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts +2 -0
  315. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts.map +1 -1
  316. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.js +83 -69
  317. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/embedding.d.ts +3 -2
  318. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/embedding.d.ts.map +1 -1
  319. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/embedding.js +20 -16
  320. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/gateway.d.ts.map +1 -1
  321. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/gateway.js +9 -3
  322. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts.map +1 -1
  323. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.js +29 -3
  324. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/index.d.ts +4 -4
  325. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/index.d.ts.map +1 -1
  326. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/index.js +3 -3
  327. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-adapter.d.ts.map +1 -1
  328. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-adapter.js +51 -6
  329. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-embedding-adapter.d.ts +20 -1
  330. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-embedding-adapter.d.ts.map +1 -1
  331. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-embedding-adapter.js +122 -7
  332. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityGate.d.ts +10 -1
  333. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityGate.d.ts.map +1 -1
  334. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityGate.js +33 -11
  335. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityMapping.d.ts +4 -0
  336. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityMapping.d.ts.map +1 -0
  337. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/capabilityMapping.js +21 -0
  338. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/index.d.ts +1 -1
  339. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/index.d.ts.map +1 -1
  340. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/index.js +1 -1
  341. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/routing.d.ts.map +1 -1
  342. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/routing.js +2 -13
  343. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/resilience.d.ts +1 -0
  344. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/resilience.d.ts.map +1 -1
  345. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/resilience.js +18 -2
  346. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/types.d.ts +5 -1
  347. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/types.d.ts.map +1 -1
  348. package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +1 -1
  349. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
  350. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/assertions.d.ts +35 -0
  351. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/assertions.d.ts.map +1 -1
  352. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/assertions.js +74 -0
  353. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/deduplication.d.ts.map +1 -1
  354. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/deduplication.js +6 -2
  355. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.d.ts.map +1 -1
  356. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.js +64 -19
  357. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.d.ts.map +1 -1
  358. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.js +3 -0
  359. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/color.d.ts +6 -1
  360. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/color.d.ts.map +1 -1
  361. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/color.js +22 -9
  362. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts +4 -1
  363. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts.map +1 -1
  364. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.js +28 -12
  365. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts.map +1 -1
  366. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.js +123 -33
  367. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/index.d.ts +2 -2
  368. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/index.d.ts.map +1 -1
  369. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts +7 -4
  370. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts.map +1 -1
  371. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.d.ts.map +1 -1
  372. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.js +13 -17
  373. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts.map +1 -1
  374. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.js +35 -12
  375. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.d.ts.map +1 -1
  376. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.js +54 -6
  377. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts +4 -0
  378. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
  379. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +29 -10
  380. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.d.ts.map +1 -1
  381. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.js +10 -4
  382. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/requirementExcerpt.d.ts.map +1 -1
  383. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/requirementExcerpt.js +15 -6
  384. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/staleness.d.ts +4 -0
  385. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/staleness.d.ts.map +1 -1
  386. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/staleness.js +162 -6
  387. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.d.ts +14 -2
  388. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.d.ts.map +1 -1
  389. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.js +50 -12
  390. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
  391. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +4 -2
  392. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/markdown.d.ts.map +1 -1
  393. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/markdown.js +8 -3
  394. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/traceability.d.ts.map +1 -1
  395. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/traceability.js +12 -9
  396. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/textSafety.d.ts +7 -0
  397. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/textSafety.d.ts.map +1 -1
  398. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/textSafety.js +7 -0
  399. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/candidateBounds.d.ts +10 -0
  400. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/candidateBounds.d.ts.map +1 -0
  401. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/candidateBounds.js +14 -0
  402. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/index.d.ts.map +1 -1
  403. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/index.js +3 -2
  404. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/parseGeneratedCandidates.d.ts.map +1 -1
  405. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/parseGeneratedCandidates.js +97 -50
  406. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/prompt.d.ts.map +1 -1
  407. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/prompt.js +35 -7
  408. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.d.ts +2 -2
  409. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.d.ts.map +1 -1
  410. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.js +2 -2
  411. package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +1 -1
  412. package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
  413. package/node_modules/@oscharko-dev/keiko-sdk/package.json +1 -1
  414. package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
  415. package/node_modules/@oscharko-dev/keiko-security/dist/errors/gateway.d.ts +11 -0
  416. package/node_modules/@oscharko-dev/keiko-security/dist/errors/gateway.d.ts.map +1 -1
  417. package/node_modules/@oscharko-dev/keiko-security/dist/errors/gateway.js +13 -0
  418. package/node_modules/@oscharko-dev/keiko-security/package.json +1 -1
  419. package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
  420. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
  421. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +50 -12
  422. package/node_modules/@oscharko-dev/keiko-server/dist/chat-stream-handlers.d.ts.map +1 -1
  423. package/node_modules/@oscharko-dev/keiko-server/dist/chat-stream-handlers.js +10 -8
  424. package/node_modules/@oscharko-dev/keiko-server/dist/conversation-prompt.d.ts +1 -0
  425. package/node_modules/@oscharko-dev/keiko-server/dist/conversation-prompt.d.ts.map +1 -1
  426. package/node_modules/@oscharko-dev/keiko-server/dist/conversation-prompt.js +3 -0
  427. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +4 -2
  428. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
  429. package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +44 -69
  430. package/node_modules/@oscharko-dev/keiko-server/dist/gateway-setup.d.ts.map +1 -1
  431. package/node_modules/@oscharko-dev/keiko-server/dist/gateway-setup.js +120 -28
  432. package/node_modules/@oscharko-dev/keiko-server/dist/governed-workflow.d.ts.map +1 -1
  433. package/node_modules/@oscharko-dev/keiko-server/dist/governed-workflow.js +4 -1
  434. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.d.ts.map +1 -1
  435. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.js +2 -0
  436. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
  437. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +115 -22
  438. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts.map +1 -1
  439. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +54 -21
  440. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
  441. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +11 -4
  442. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts +1 -0
  443. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts.map +1 -1
  444. package/node_modules/@oscharko-dev/keiko-server/dist/index.js +1 -0
  445. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
  446. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +7 -3
  447. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.d.ts.map +1 -1
  448. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.js +26 -14
  449. package/node_modules/@oscharko-dev/keiko-server/dist/memory-audit-handler.d.ts +1 -0
  450. package/node_modules/@oscharko-dev/keiko-server/dist/memory-audit-handler.d.ts.map +1 -1
  451. package/node_modules/@oscharko-dev/keiko-server/dist/memory-audit-handler.js +52 -27
  452. package/node_modules/@oscharko-dev/keiko-server/dist/memory-capture-policy.d.ts +10 -0
  453. package/node_modules/@oscharko-dev/keiko-server/dist/memory-capture-policy.d.ts.map +1 -0
  454. package/node_modules/@oscharko-dev/keiko-server/dist/memory-capture-policy.js +44 -0
  455. package/node_modules/@oscharko-dev/keiko-server/dist/memory-consolidation-handlers.d.ts.map +1 -1
  456. package/node_modules/@oscharko-dev/keiko-server/dist/memory-consolidation-handlers.js +79 -57
  457. package/node_modules/@oscharko-dev/keiko-server/dist/memory-consolidation-registry.d.ts +1 -0
  458. package/node_modules/@oscharko-dev/keiko-server/dist/memory-consolidation-registry.d.ts.map +1 -1
  459. package/node_modules/@oscharko-dev/keiko-server/dist/memory-conv-handlers.d.ts.map +1 -1
  460. package/node_modules/@oscharko-dev/keiko-server/dist/memory-conv-handlers.js +6 -4
  461. package/node_modules/@oscharko-dev/keiko-server/dist/memory-conversation-context.d.ts.map +1 -1
  462. package/node_modules/@oscharko-dev/keiko-server/dist/memory-diagnostics.d.ts.map +1 -1
  463. package/node_modules/@oscharko-dev/keiko-server/dist/memory-diagnostics.js +16 -9
  464. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts +3 -1
  465. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts.map +1 -1
  466. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.js +538 -87
  467. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.d.ts +6 -1
  468. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.d.ts.map +1 -1
  469. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.js +17 -38
  470. package/node_modules/@oscharko-dev/keiko-server/dist/memory-retention.d.ts.map +1 -1
  471. package/node_modules/@oscharko-dev/keiko-server/dist/memory-retention.js +7 -15
  472. package/node_modules/@oscharko-dev/keiko-server/dist/memory-salience.d.ts.map +1 -1
  473. package/node_modules/@oscharko-dev/keiko-server/dist/memory-salience.js +17 -2
  474. package/node_modules/@oscharko-dev/keiko-server/dist/memory-scope-sanitizer.d.ts.map +1 -1
  475. package/node_modules/@oscharko-dev/keiko-server/dist/memory-scope-sanitizer.js +19 -0
  476. package/node_modules/@oscharko-dev/keiko-server/dist/memory-target-resolver.d.ts.map +1 -1
  477. package/node_modules/@oscharko-dev/keiko-server/dist/memory-target-resolver.js +4 -1
  478. package/node_modules/@oscharko-dev/keiko-server/dist/memory-workflow-port.d.ts +1 -0
  479. package/node_modules/@oscharko-dev/keiko-server/dist/memory-workflow-port.d.ts.map +1 -1
  480. package/node_modules/@oscharko-dev/keiko-server/dist/memory-workflow-port.js +108 -27
  481. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/capsuleAdapter.d.ts +4 -0
  482. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/capsuleAdapter.d.ts.map +1 -1
  483. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/capsuleAdapter.js +3 -0
  484. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/editRoutes.d.ts.map +1 -1
  485. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/editRoutes.js +61 -7
  486. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/exportRoutes.d.ts.map +1 -1
  487. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/exportRoutes.js +9 -3
  488. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConcurrency.d.ts.map +1 -1
  489. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConcurrency.js +2 -1
  490. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnector.d.ts +6 -0
  491. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnector.d.ts.map +1 -1
  492. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnector.js +16 -3
  493. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts +7 -0
  494. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts.map +1 -1
  495. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +1 -1
  496. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -1
  497. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.js +3 -1
  498. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConsent.d.ts +2 -2
  499. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConsent.d.ts.map +1 -1
  500. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConsent.js +3 -3
  501. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaObservedActions.d.ts +5 -0
  502. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaObservedActions.d.ts.map +1 -1
  503. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaObservedActions.js +10 -8
  504. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaReadiness.d.ts.map +1 -1
  505. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaReadiness.js +11 -5
  506. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -1
  507. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.js +1 -0
  508. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts +3 -0
  509. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts.map +1 -1
  510. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.js +71 -10
  511. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts +2 -0
  512. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
  513. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +86 -23
  514. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +1 -1
  515. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
  516. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaTokenSource.d.ts.map +1 -1
  517. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaTokenSource.js +4 -3
  518. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaUrl.d.ts.map +1 -1
  519. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaUrl.js +2 -0
  520. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/index.d.ts +1 -1
  521. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/index.d.ts.map +1 -1
  522. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/index.js +1 -1
  523. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaCodegenRoutes.d.ts.map +1 -1
  524. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaCodegenRoutes.js +60 -20
  525. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +11 -6
  526. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -1
  527. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.js +144 -6
  528. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +9 -0
  529. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -1
  530. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.js +84 -15
  531. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +9 -7
  532. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
  533. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +206 -42
  534. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts +3 -1
  535. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
  536. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +69 -65
  537. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.d.ts +15 -1
  538. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.d.ts.map +1 -1
  539. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.js +56 -39
  540. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts +1 -1
  541. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
  542. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +382 -75
  543. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewRoutes.d.ts.map +1 -1
  544. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewRoutes.js +14 -6
  545. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.d.ts +3 -2
  546. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.d.ts.map +1 -1
  547. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.js +44 -16
  548. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts +7 -0
  549. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
  550. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +336 -47
  551. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
  552. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +15 -5
  553. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/traceabilityRoutes.d.ts.map +1 -1
  554. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/traceabilityRoutes.js +36 -4
  555. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -1
  556. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.js +61 -6
  557. package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
  558. package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +16 -5
  559. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts +1 -0
  560. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts.map +1 -1
  561. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.js +3 -0
  562. package/node_modules/@oscharko-dev/keiko-server/dist/run-handlers.d.ts.map +1 -1
  563. package/node_modules/@oscharko-dev/keiko-server/dist/run-handlers.js +2 -0
  564. package/node_modules/@oscharko-dev/keiko-server/dist/sse-write.d.ts +9 -0
  565. package/node_modules/@oscharko-dev/keiko-server/dist/sse-write.d.ts.map +1 -0
  566. package/node_modules/@oscharko-dev/keiko-server/dist/sse-write.js +26 -0
  567. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts.map +1 -1
  568. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.js +16 -8
  569. package/node_modules/@oscharko-dev/keiko-server/dist/store/messages.d.ts.map +1 -1
  570. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.d.ts.map +1 -1
  571. package/node_modules/@oscharko-dev/keiko-server/dist/terminal.d.ts.map +1 -1
  572. package/node_modules/@oscharko-dev/keiko-server/package.json +1 -1
  573. package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
  574. package/node_modules/@oscharko-dev/keiko-tools/dist/patch-normalize.d.ts.map +1 -1
  575. package/node_modules/@oscharko-dev/keiko-tools/dist/patch-normalize.js +13 -7
  576. package/node_modules/@oscharko-dev/keiko-tools/package.json +1 -1
  577. package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
  578. package/node_modules/@oscharko-dev/keiko-verification/package.json +1 -1
  579. package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
  580. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/memory.d.ts +2 -2
  581. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/memory.d.ts.map +1 -1
  582. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/memory.js +16 -18
  583. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/prompt.d.ts.map +1 -1
  584. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/prompt.js +6 -1
  585. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/workflow.d.ts.map +1 -1
  586. package/node_modules/@oscharko-dev/keiko-workflows/dist/bug-investigation/workflow.js +3 -3
  587. package/node_modules/@oscharko-dev/keiko-workflows/dist/governed-handoff.d.ts.map +1 -1
  588. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/descriptors.d.ts +2 -2
  589. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts +18 -2
  590. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
  591. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +209 -54
  592. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts +4 -4
  593. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts.map +1 -1
  594. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.js +4 -1
  595. package/node_modules/@oscharko-dev/keiko-workflows/dist/unit-tests/target-guard.d.ts.map +1 -1
  596. package/node_modules/@oscharko-dev/keiko-workflows/package.json +1 -1
  597. package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
  598. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts.map +1 -1
  599. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.js +1 -2
  600. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts.map +1 -1
  601. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.js +2 -1
  602. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
  603. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +6 -2
  604. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts.map +1 -1
  605. package/node_modules/@oscharko-dev/keiko-workspace/package.json +1 -1
  606. package/package.json +23 -6
  607. package/dist/ui/static/_next/static/chunks/082obv3v03b-9.js +0 -2
  608. package/dist/ui/static/_next/static/chunks/0uifns067thv8.js +0 -1
  609. package/dist/ui/static/_next/static/chunks/0x31-j53ab1tt.js +0 -1
  610. package/dist/ui/static/_next/static/chunks/1m-kvwm6_90_3.css +0 -1
  611. package/dist/ui/static/_next/static/chunks/1v4hrxrm_6_rw.js +0 -1
  612. package/dist/ui/static/_next/static/chunks/27jktro2p5rq9.js +0 -4
  613. package/dist/ui/static/_next/static/chunks/2lypy3ewh0r04.js +0 -1
  614. package/dist/ui/static/_next/static/chunks/2ngm8iwdb1cbv.js +0 -106
  615. package/dist/ui/static/_next/static/chunks/32573pyyglqxl.js +0 -1
  616. package/dist/ui/static/_next/static/chunks/3_t_pzet29qtn.js +0 -1
  617. package/dist/ui/static/_next/static/chunks/3jgg_oe0iok0l.js +0 -1
  618. package/dist/ui/static/_next/static/chunks/3o_oia3vsam60.js +0 -1
  619. package/dist/ui/static/_next/static/chunks/turbopack-2lg1g6kbsfm0x.js +0 -1
  620. /package/dist/ui/static/_next/static/{hR2gBQqCDKdPdSxBqZhqv → fQMXe8UmV01bh25WOoIt3}/_buildManifest.js +0 -0
  621. /package/dist/ui/static/_next/static/{hR2gBQqCDKdPdSxBqZhqv → fQMXe8UmV01bh25WOoIt3}/_clientMiddlewareManifest.js +0 -0
  622. /package/dist/ui/static/_next/static/{hR2gBQqCDKdPdSxBqZhqv → fQMXe8UmV01bh25WOoIt3}/_ssgManifest.js +0 -0
@@ -14,10 +14,12 @@
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
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.
17
+ // Integrity: load() recomputes each persisted screen hash from the stored, redacted IR + image
18
+ // sha256, verifies each PNG side-file against the stored sha256/byteLength, and then recomputes the
19
+ // snapshot integrity hash. Tampered or truncated records are rejected at the read boundary. The
20
+ // optional artifacts (`links`, `tokens`, `metrics`) stay out of the drift hash but carry separate
21
+ // artifact hashes when present; old un-hashed optional artifacts are omitted on load instead of being
22
+ // trusted.
21
23
  //
22
24
  // Retention: `enforceFigmaSnapshotRetention` deletes snapshot records + their side-file dirs in
23
25
  // lock-step with the provided policy. Wiring: call it where the other QI retention enforcement
@@ -27,7 +29,7 @@
27
29
  // files) that have no matching record. It is lazy/once — the store calls it on first use so stale
28
30
  // dirs from a previously interrupted record() are cleaned up without a separate boot step.
29
31
  import { createHash, randomUUID } from "node:crypto";
30
- import { chmodSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
32
+ import { chmodSync, linkSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
31
33
  import { join } from "node:path";
32
34
  import { assertContainedRealPath, resolveWithinWorkspace, } from "@oscharko-dev/keiko-workspace";
33
35
  import { nodeWorkspaceFs } from "@oscharko-dev/keiko-workspace/internal/fs";
@@ -40,9 +42,12 @@ import { FIGMA_SNAPSHOT_SCHEMA_VERSION, validateFigmaSnapshotRecord, } from "./s
40
42
  const QI_DIR_MODE = 0o700;
41
43
  const SNAPSHOT_SUFFIX = ".figma-snapshot.json";
42
44
  const SIDE_FILE_SUBDIR = "figma-snapshots";
45
+ const MAX_SIDE_FILE_NAME_LENGTH = 128;
46
+ const SIDE_FILE_NAME_PATTERN = /^[A-Za-z0-9._-]+$/u;
43
47
  // ─── Integrity hash (mirrors figmaSnapshotHash.ts — inlined so keiko-evidence does not depend
44
48
  // on the private keiko-server package). MUST stay bit-identical with the server builder. ────
45
49
  const sha256Hex = (input) => createHash("sha256").update(input, "utf8").digest("hex");
50
+ const sha256Bytes = (input) => createHash("sha256").update(input).digest("hex");
46
51
  // Stable stringify: keys emitted in sorted order at every depth (mirrors canonical() in hash.ts).
47
52
  function canonical(value) {
48
53
  if (value === undefined)
@@ -57,6 +62,50 @@ function canonical(value) {
57
62
  .map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`);
58
63
  return `{${entries.join(",")}}`;
59
64
  }
65
+ const hashArtifact = (value) => sha256Hex(canonical(value));
66
+ // Hash-neutral IR projection (mirrors figmaSnapshotHash.ts in keiko-server). The store accepts
67
+ // `irJson` as opaque JSON, so malformed legacy/tampered shapes fall back to the raw JSON projection;
68
+ // valid Screen-IR gets the exact same hash-neutral field pruning as the builder.
69
+ const HASH_NEUTRAL_IR_KEYS = new Set([
70
+ "textColor",
71
+ "backgroundColor",
72
+ "layout",
73
+ "sizing",
74
+ "cornerRadius",
75
+ "typography",
76
+ ]);
77
+ const isJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
78
+ const stripHashNeutralChild = (child) => isJsonObject(child) ? stripHashNeutralFields(child) : child;
79
+ const stripHashNeutralFields = (node) => {
80
+ const entries = Object.entries(node).filter(([key]) => key !== "children" && !HASH_NEUTRAL_IR_KEYS.has(key));
81
+ const rawChildren = node.children;
82
+ return {
83
+ ...Object.fromEntries(entries),
84
+ children: Array.isArray(rawChildren)
85
+ ? rawChildren.map(stripHashNeutralChild)
86
+ : [],
87
+ };
88
+ };
89
+ const hashStableIr = (irJson) => {
90
+ if (!isJsonObject(irJson) || !isJsonObject(irJson.root))
91
+ return irJson;
92
+ return { ...irJson, root: stripHashNeutralFields(irJson.root) };
93
+ };
94
+ const recomputeScreenIntegrityHash = (screen) => sha256Hex(canonical({
95
+ imageSha256: screen.image.sha256,
96
+ ir: hashStableIr(screen.irJson),
97
+ screenId: screen.screenId,
98
+ }));
99
+ const artifactHashesFor = (record) => {
100
+ const hashes = {
101
+ ...(record.links !== undefined ? { links: hashArtifact(record.links) } : {}),
102
+ ...(record.tokens !== undefined ? { tokens: hashArtifact(record.tokens) } : {}),
103
+ ...(record.metrics !== undefined ? { metrics: hashArtifact(record.metrics) } : {}),
104
+ };
105
+ return hashes.links === undefined && hashes.tokens === undefined && hashes.metrics === undefined
106
+ ? undefined
107
+ : hashes;
108
+ };
60
109
  // Recompute the snapshot-level integrity hash from a loaded record.
61
110
  // This exactly mirrors hashSnapshot() in figmaSnapshotHash.ts:
62
111
  // sha256( canonical({ screens: sorted [{integrityHash,screenId}], snapshotSchemaVersion, version }) )
@@ -71,6 +120,50 @@ function recomputeSnapshotIntegrityHash(record) {
71
120
  version: record.provenance.version ?? null,
72
121
  }));
73
122
  }
123
+ const rehashRecord = (record) => {
124
+ const screens = record.screens.map((screen) => ({
125
+ ...screen,
126
+ integrityHash: recomputeScreenIntegrityHash(screen),
127
+ }));
128
+ const rehashed = { ...record, screens };
129
+ return { ...rehashed, integrityHash: recomputeSnapshotIntegrityHash(rehashed) };
130
+ };
131
+ const EXTERNAL_LINK_TARGET = /^(?:[a-z][a-z0-9+.-]*:\/\/|mailto:|tel:|data:|javascript:)/iu;
132
+ const isExternalLinkTarget = (targetNodeId) => targetNodeId.startsWith("url:") || EXTERNAL_LINK_TARGET.test(targetNodeId);
133
+ const safeLinkRows = (links) => links?.filter((link) => !isExternalLinkTarget(link.targetNodeId));
134
+ const omitUnverifiedArtifacts = (record, omitLinks, omitTokens, omitMetrics) => {
135
+ if (!omitLinks && !omitTokens && !omitMetrics)
136
+ return record;
137
+ const omitted = new Set([
138
+ ...(omitLinks ? ["links"] : []),
139
+ ...(omitTokens ? ["tokens"] : []),
140
+ ...(omitMetrics ? ["metrics"] : []),
141
+ ]);
142
+ return Object.fromEntries(Object.entries(record).filter(([key]) => !omitted.has(key)));
143
+ };
144
+ function verifyArtifactHash(kind, value, actualHash, runId) {
145
+ if (value === undefined) {
146
+ if (actualHash !== undefined) {
147
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: ${kind} artifact missing`);
148
+ }
149
+ return false;
150
+ }
151
+ if (actualHash === undefined)
152
+ return true;
153
+ if (actualHash !== hashArtifact(value)) {
154
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: ${kind} artifact hash mismatch`);
155
+ }
156
+ return false;
157
+ }
158
+ function verifyOptionalArtifactHashes(record, runId) {
159
+ const actual = record.artifactHashes;
160
+ const omitLinks = verifyArtifactHash("links", record.links, actual?.links, runId);
161
+ const omitTokens = verifyArtifactHash("tokens", record.tokens, actual?.tokens, runId);
162
+ const omitMetrics = verifyArtifactHash("metrics", record.metrics, actual?.metrics, runId);
163
+ // Older records predate artifact hashes. The optional fields remain schema-valid, but we do not
164
+ // trust them for downstream generation without their own tamper evidence.
165
+ return omitUnverifiedArtifacts(record, omitLinks, omitTokens, omitMetrics);
166
+ }
74
167
  // ─── Helpers ─────────────────────────────────────────────────────────────────────────────────
75
168
  function realBaseForWrite(baseDir, fs) {
76
169
  try {
@@ -102,8 +195,40 @@ function assertSnapshotAbsent(target) {
102
195
  throw new EvidenceWriteError("Figma snapshot already exists for this run (write-once)");
103
196
  }
104
197
  }
105
- // Write-once: O_EXCL ("wx") refuses if a record for this runId already exists, closing the TOCTOU
106
- // gap left by the caller's pre-check.
198
+ function runIdFromSnapshotName(name) {
199
+ if (!name.endsWith(SNAPSHOT_SUFFIX))
200
+ return undefined;
201
+ const runId = name.slice(0, -SNAPSHOT_SUFFIX.length);
202
+ try {
203
+ assertValidRunId(runId);
204
+ return runId;
205
+ }
206
+ catch {
207
+ return undefined;
208
+ }
209
+ }
210
+ function snapshotRecordFiles(baseDir) {
211
+ let entries;
212
+ try {
213
+ entries = readdirSync(baseDir, { withFileTypes: true });
214
+ }
215
+ catch {
216
+ return [];
217
+ }
218
+ const files = [];
219
+ for (const entry of entries) {
220
+ if (!entry.isFile() || entry.isSymbolicLink())
221
+ continue;
222
+ const runId = runIdFromSnapshotName(entry.name);
223
+ if (runId === undefined)
224
+ continue;
225
+ files.push({ runId, path: join(baseDir, entry.name) });
226
+ }
227
+ return files;
228
+ }
229
+ // Write-once: create a temp file, then hard-link it into the final target. `linkSync` is the
230
+ // exclusive commit: it fails with EEXIST if another recorder created the target after the
231
+ // pre-check, unlike `rename`, which would overwrite the winner on POSIX.
107
232
  function atomicWriteOnce(target, json, randomSuffix) {
108
233
  assertSnapshotAbsent(target);
109
234
  const temp = `${target}.${randomSuffix()}.tmp`;
@@ -115,7 +240,16 @@ function atomicWriteOnce(target, json, randomSuffix) {
115
240
  catch {
116
241
  // non-fatal: not every filesystem supports chmod (e.g. Windows)
117
242
  }
118
- renameSync(temp, target);
243
+ try {
244
+ linkSync(temp, target);
245
+ }
246
+ catch (error) {
247
+ if (error.code === "EEXIST") {
248
+ throw new EvidenceWriteError("Figma snapshot already exists for this run (write-once)");
249
+ }
250
+ throw error;
251
+ }
252
+ rmSync(temp, { force: true });
119
253
  }
120
254
  catch (error) {
121
255
  rmSync(temp, { force: true });
@@ -145,6 +279,7 @@ function writeScreenSideFiles(sideFileBase, runId, screens, fs, randomSuffix) {
145
279
  });
146
280
  }
147
281
  function assembleRecord(input, screenRows) {
282
+ const links = safeLinkRows(input.links);
148
283
  const draft = {
149
284
  figmaSnapshotSchemaVersion: FIGMA_SNAPSHOT_SCHEMA_VERSION,
150
285
  runId: input.runId,
@@ -158,13 +293,69 @@ function assembleRecord(input, screenRows) {
158
293
  skippedScreens: input.skippedScreens,
159
294
  // Omit `links`/`tokens` entirely when absent so an older snapshot stays byte-minimal and the
160
295
  // optional fields never serialise as `undefined` (exactOptionalPropertyTypes-safe).
161
- ...(input.links !== undefined ? { links: input.links } : {}),
296
+ ...(links !== undefined ? { links } : {}),
162
297
  ...(input.tokens !== undefined ? { tokens: input.tokens } : {}),
298
+ ...(input.metrics !== undefined ? { metrics: input.metrics } : {}),
163
299
  integrityHash: input.integrityHash,
164
300
  redactionSummary: { totalStringsScanned: 0, stringsRedacted: 0, patternsMatched: {} },
165
301
  };
166
302
  const { redacted, summary } = redactQualityIntelligenceEvidence(draft);
167
- return { ...redacted, redactionSummary: summary };
303
+ const rehashed = rehashRecord(redacted);
304
+ const artifactHashes = artifactHashesFor(rehashed);
305
+ return {
306
+ ...rehashed,
307
+ ...(artifactHashes !== undefined ? { artifactHashes } : {}),
308
+ redactionSummary: summary,
309
+ };
310
+ }
311
+ function isAllowedSideFileName(name) {
312
+ if (name.length === 0 || name.length > MAX_SIDE_FILE_NAME_LENGTH)
313
+ return false;
314
+ return !name.startsWith(".") && SIDE_FILE_NAME_PATTERN.test(name);
315
+ }
316
+ function verifyScreenIntegrity(screen, runId) {
317
+ const expected = recomputeScreenIntegrityHash(screen);
318
+ if (screen.integrityHash !== expected) {
319
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: screen ${screen.screenId} hash mismatch`);
320
+ }
321
+ }
322
+ function readVerifiedScreenImageSideFile(ctx, runId, image) {
323
+ const name = image.relativePath;
324
+ if (!isAllowedSideFileName(name)) {
325
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: invalid image side-file path`);
326
+ }
327
+ const runDir = join(ctx.sideFileBase, runId);
328
+ let realRunDir;
329
+ try {
330
+ realRunDir = ctx.fs.realPath(runDir);
331
+ }
332
+ catch {
333
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: image side-file directory missing`);
334
+ }
335
+ const lexical = resolveWithinWorkspace(realRunDir, name);
336
+ const absolute = assertContainedRealPath(ctx.fs, realRunDir, lexical, name);
337
+ const stat = lstatSync(absolute, { throwIfNoEntry: false });
338
+ if (stat === undefined || !stat.isFile() || stat.isSymbolicLink()) {
339
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: image side-file missing`);
340
+ }
341
+ const bytes = readFileSync(absolute);
342
+ if (bytes.byteLength !== image.byteLength || sha256Bytes(bytes) !== image.sha256) {
343
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: image side-file hash mismatch`);
344
+ }
345
+ return bytes;
346
+ }
347
+ function verifyScreenImageSideFile(ctx, runId, screen) {
348
+ readVerifiedScreenImageSideFile(ctx, runId, screen.image);
349
+ }
350
+ function verifyPersistedScreens(ctx, rec, runId) {
351
+ for (const screen of rec.screens) {
352
+ verifyScreenIntegrity(screen, runId);
353
+ verifyScreenImageSideFile(ctx, runId, screen);
354
+ }
355
+ }
356
+ function verifyPersistedScreenMetadata(rec, runId) {
357
+ for (const screen of rec.screens)
358
+ verifyScreenIntegrity(screen, runId);
168
359
  }
169
360
  // Parse one raw JSON string from a snapshot record file into a scope entry, or null when the
170
361
  // file does not belong to the requested scope or cannot be parsed.
@@ -246,22 +437,12 @@ export function enforceFigmaSnapshotRetention(evidenceDir, profile) {
246
437
  if (!dirStat?.isDirectory())
247
438
  return;
248
439
  // 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
440
  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));
441
+ for (const file of snapshotRecordFiles(qiDir)) {
442
+ const fetchedAt = readFetchedAt(file.path);
262
443
  // Unparseable records are skipped — do not evict conservatively.
263
444
  if (fetchedAt !== undefined)
264
- records.push({ runId, fetchedAt });
445
+ records.push({ runId: file.runId, fetchedAt });
265
446
  }
266
447
  // Sort oldest first (ascending fetchedAt) so we evict the oldest beyond the cap.
267
448
  records.sort((a, b) => (a.fetchedAt < b.fetchedAt ? -1 : a.fetchedAt > b.fetchedAt ? 1 : 0));
@@ -324,30 +505,59 @@ function loadOp(ctx, runId) {
324
505
  if (!validateFigmaSnapshotRecord(parsed).ok)
325
506
  return undefined;
326
507
  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.
508
+ // Integrity check: recompute and reject on mismatch. Screen rows are verified before the
509
+ // snapshot-level hash so stale/tampered IR or image refs cannot hide behind an old screen hash.
510
+ verifyPersistedScreens(ctx, rec, runId);
329
511
  const expected = recomputeSnapshotIntegrityHash(rec);
330
512
  if (rec.integrityHash !== expected) {
331
513
  throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: hash mismatch`);
332
514
  }
333
- return rec;
515
+ return verifyOptionalArtifactHashes(rec, runId);
334
516
  }
335
- function listByScopeOp(ctx, fileKey, nodeId) {
517
+ function loadMetadataOp(ctx, runId) {
518
+ assertValidRunId(runId);
519
+ ctx.ensureSwept();
336
520
  const realBase = realBaseForRead(ctx.qiDir, ctx.fs);
337
521
  if (realBase === undefined)
338
- return [];
339
- let entries;
522
+ return undefined;
523
+ const target = join(realBase, `${runId}${SNAPSHOT_SUFFIX}`);
524
+ if (lstatSync(target, { throwIfNoEntry: false })?.isFile() !== true)
525
+ return undefined;
526
+ let parsed;
340
527
  try {
341
- entries = readdirSync(realBase);
528
+ parsed = JSON.parse(readFileSync(target, "utf8"));
342
529
  }
343
- catch {
344
- return [];
530
+ catch (error) {
531
+ throw new EvidenceReadError(`Figma snapshot is not valid JSON: ${error instanceof Error ? error.message : "unknown"}`);
532
+ }
533
+ if (!validateFigmaSnapshotRecord(parsed).ok)
534
+ return undefined;
535
+ const rec = parsed;
536
+ verifyPersistedScreenMetadata(rec, runId);
537
+ const expected = recomputeSnapshotIntegrityHash(rec);
538
+ if (rec.integrityHash !== expected) {
539
+ throw new EvidenceReadError(`Figma snapshot integrity check failed for run ${runId}: hash mismatch`);
345
540
  }
541
+ return verifyOptionalArtifactHashes(rec, runId);
542
+ }
543
+ function loadImageOp(ctx, runId, image) {
544
+ assertValidRunId(runId);
545
+ ctx.ensureSwept();
546
+ const bytes = readVerifiedScreenImageSideFile(ctx, runId, image);
547
+ return {
548
+ mimeType: image.mimeType,
549
+ bytes,
550
+ sha256: image.sha256,
551
+ byteLength: image.byteLength,
552
+ };
553
+ }
554
+ function listByScopeOp(ctx, fileKey, nodeId) {
555
+ const realBase = realBaseForRead(ctx.qiDir, ctx.fs);
556
+ if (realBase === undefined)
557
+ return [];
346
558
  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);
559
+ for (const file of snapshotRecordFiles(realBase)) {
560
+ const entry = parseScopeEntry(file.path, fileKey, nodeId);
351
561
  if (entry !== null)
352
562
  results.push(entry);
353
563
  }
@@ -374,6 +584,8 @@ export function createNodeFigmaSnapshotStore(evidenceDir, options = {}) {
374
584
  return {
375
585
  record: (input) => recordOp(ctx, input),
376
586
  load: (runId) => loadOp(ctx, runId),
587
+ loadMetadata: (runId) => loadMetadataOp(ctx, runId),
588
+ loadImage: (runId, image) => loadImageOp(ctx, runId, image),
377
589
  location: (runId) => {
378
590
  assertValidRunId(runId);
379
591
  const realBase = realBaseForRead(qiDir, ctx.fs);
@@ -1,5 +1,5 @@
1
1
  export { QUALITY_INTELLIGENCE_EVIDENCE_SCHEMA_VERSION, validateQualityIntelligenceEvidenceManifest, } from "./manifestSchema.js";
2
- export type { QualityIntelligenceBinaryExportMode, QualityIntelligenceEvidenceManifest, QualityIntelligenceEvidenceRefRow, QualityIntelligenceExportRow, QualityIntelligenceExportTarget, QualityIntelligenceFindingRow, QualityIntelligenceIntegrityHashes, QualityIntelligenceManifestTotals, QualityIntelligenceProvenanceRefs, QualityIntelligenceRedactionSummary, QualityIntelligenceSchemaValidationResult, QualityIntelligenceCoverageMatrixRow, QualityIntelligenceAtomFingerprintRow, QualityIntelligenceSourceFingerprintRow, } from "./manifestSchema.js";
2
+ export type { QualityIntelligenceBinaryExportMode, QualityIntelligenceTraceabilityExportMode, QualityIntelligenceEvidenceManifest, QualityIntelligenceEvidenceRefRow, QualityIntelligenceExportRow, QualityIntelligenceExportTarget, QualityIntelligenceFindingRow, QualityIntelligenceIntegrityHashes, QualityIntelligenceManifestTotals, QualityIntelligenceProvenanceRefs, QualityIntelligenceRedactionSummary, QualityIntelligenceSchemaValidationResult, QualityIntelligenceCoverageMatrixRow, QualityIntelligenceAtomFingerprintRow, QualityIntelligenceSourceFingerprintRow, } from "./manifestSchema.js";
3
3
  export { redactQualityIntelligenceEvidence } from "./redaction.js";
4
4
  export type { QualityIntelligenceRedactionOptions, QualityIntelligenceRedactionResult, } from "./redaction.js";
5
5
  export { QUALITY_INTELLIGENCE_DEFAULT_RETENTION_PROFILE_ID, QUALITY_INTELLIGENCE_RETENTION_PROFILES, getQualityIntelligenceRetentionProfile, } from "./retentionPolicy.js";
@@ -12,7 +12,7 @@ export { createNodeContainedJsonArtifactStore, type ContainedJsonArtifactStore,
12
12
  export { FIGMA_SNAPSHOT_SCHEMA_VERSION, validateFigmaSnapshotRecord, } from "./figmaSnapshot/schema.js";
13
13
  export type { FigmaSnapshotImageRef, FigmaSnapshotLinkRow, FigmaSnapshotProvenanceRow, FigmaSnapshotRecord, FigmaSnapshotRedactionSummary, FigmaSnapshotScreenRow, FigmaSnapshotSkipReason, FigmaSnapshotSkippedScreenRow, FigmaSnapshotValidationResult, } from "./figmaSnapshot/schema.js";
14
14
  export { createNodeFigmaSnapshotStore } from "./figmaSnapshot/store.js";
15
- export type { FigmaSnapshotStore, FigmaSnapshotStoreOptions, RecordFigmaSnapshotInput, RecordFigmaSnapshotResult, RecordFigmaSnapshotScreenInput, } from "./figmaSnapshot/store.js";
15
+ export type { FigmaSnapshotImageBytes, FigmaSnapshotStore, FigmaSnapshotStoreOptions, RecordFigmaSnapshotInput, RecordFigmaSnapshotResult, RecordFigmaSnapshotScreenInput, } from "./figmaSnapshot/store.js";
16
16
  export { applyQualityIntelligenceRetention, deleteQualityIntelligenceRun, quarantineCorruptQualityIntelligenceManifest, snapshotQualityIntelligenceRunsForRecovery, } from "./retention.js";
17
17
  export type { QualityIntelligenceDeleteOptions, QualityIntelligenceDeletionReceipt, QualityIntelligenceDeletionStatus, QualityIntelligenceQuarantineOptions, QualityIntelligenceQuarantineReceipt, QualityIntelligenceRecoverySnapshot, QualityIntelligenceRetentionDecision, QualityIntelligenceRetentionDecisionInput, QualityIntelligenceRetentionResult, QualityIntelligenceRunDeletedEvent, QualityIntelligenceRunSnapshotEntry, } from "./retention.js";
18
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4CAA4C,EAC5C,2CAA2C,GAC5C,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,mCAAmC,EACnC,mCAAmC,EACnC,iCAAiC,EACjC,4BAA4B,EAC5B,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,iCAAiC,EACjC,iCAAiC,EACjC,mCAAmC,EACnC,yCAAyC,EACzC,oCAAoC,EACpC,qCAAqC,EACrC,uCAAuC,GACxC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EACV,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iDAAiD,EACjD,uCAAuC,EACvC,sCAAsC,GACvC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EACL,kCAAkC,EAClC,2CAA2C,EAC3C,uCAAuC,EACvC,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,sCAAsC,EACtC,8BAA8B,EAC9B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,8CAA8C,EAC9C,mCAAmC,EACnC,iCAAiC,EACjC,mCAAmC,EACnC,qCAAqC,GACtC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,+BAA+B,EAC/B,qCAAqC,EACrC,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,2CAA2C,EAC3C,2CAA2C,GAC5C,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oCAAoC,EACpC,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,GACvC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iCAAiC,EACjC,4BAA4B,EAC5B,4CAA4C,EAC5C,0CAA0C,GAC3C,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gCAAgC,EAChC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,mCAAmC,EACnC,oCAAoC,EACpC,yCAAyC,EACzC,kCAAkC,EAClC,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4CAA4C,EAC5C,2CAA2C,GAC5C,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,mCAAmC,EACnC,yCAAyC,EACzC,mCAAmC,EACnC,iCAAiC,EACjC,4BAA4B,EAC5B,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,iCAAiC,EACjC,iCAAiC,EACjC,mCAAmC,EACnC,yCAAyC,EACzC,oCAAoC,EACpC,qCAAqC,EACrC,uCAAuC,GACxC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EACV,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iDAAiD,EACjD,uCAAuC,EACvC,sCAAsC,GACvC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EACL,kCAAkC,EAClC,2CAA2C,EAC3C,uCAAuC,EACvC,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,sCAAsC,EACtC,8BAA8B,EAC9B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,8CAA8C,EAC9C,mCAAmC,EACnC,iCAAiC,EACjC,mCAAmC,EACnC,qCAAqC,GACtC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,+BAA+B,EAC/B,qCAAqC,EACrC,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,2CAA2C,EAC3C,2CAA2C,GAC5C,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oCAAoC,EACpC,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,GACvC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iCAAiC,EACjC,4BAA4B,EAC5B,4CAA4C,EAC5C,0CAA0C,GAC3C,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gCAAgC,EAChC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,mCAAmC,EACnC,oCAAoC,EACpC,yCAAyC,EACzC,kCAAkC,EAClC,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,gBAAgB,CAAC"}
@@ -7,8 +7,15 @@ type QualityIntelligenceExportAdapter = QualityIntelligence.QualityIntelligenceE
7
7
  * but an export-evidence row must be able to record them faithfully as the produced target type.
8
8
  */
9
9
  export type QualityIntelligenceBinaryExportMode = "pdf" | "zip-bundle";
10
- /** Any target an export-evidence row may record: a domain adapter or a binary bundle mode. */
11
- export type QualityIntelligenceExportTarget = QualityIntelligenceExportAdapter | QualityIntelligenceBinaryExportMode;
10
+ /**
11
+ * Traceability matrix export modes produced by the dedicated traceability route (Epic #734,
12
+ * Issue #740). Like binary modes, these are assembled at the route level — the matrix serializers
13
+ * are separate from the candidate-export adapters — so they extend the evidence target union here
14
+ * rather than the contract `QualityIntelligenceExportAdapter`.
15
+ */
16
+ export type QualityIntelligenceTraceabilityExportMode = "traceability-csv" | "traceability-markdown";
17
+ /** Any target an export-evidence row may record: a domain adapter, a binary bundle mode, or a traceability matrix mode. */
18
+ export type QualityIntelligenceExportTarget = QualityIntelligenceExportAdapter | QualityIntelligenceBinaryExportMode | QualityIntelligenceTraceabilityExportMode;
12
19
  type QualityIntelligenceLifecycleStatus = QualityIntelligence.QualityIntelligenceLifecycleStatus;
13
20
  type QualityIntelligenceRunId = QualityIntelligence.QualityIntelligenceRunId;
14
21
  type QualityIntelligenceValidationFindingKind = QualityIntelligence.QualityIntelligenceValidationFindingKind;
@@ -95,6 +102,13 @@ export interface QualityIntelligenceAtomFingerprintRow {
95
102
  readonly atomId: string;
96
103
  readonly envelopeId: string;
97
104
  readonly canonicalHashSha256Hex: string;
105
+ /**
106
+ * Optional opaque key for finding the current replacement atom during targeted regeneration. This is
107
+ * a hash-derived metadata key, not raw source text or a local filesystem path.
108
+ */
109
+ readonly replacementGroupId?: string;
110
+ /** Stable ordinal within replacementGroupId for same-document requirement replacements. */
111
+ readonly replacementOrdinal?: number;
98
112
  }
99
113
  export interface QualityIntelligenceProvenanceRefs {
100
114
  readonly envelopeIds: readonly string[];
@@ -118,7 +132,7 @@ export interface QualityIntelligenceEvidenceManifest {
118
132
  readonly integrityHashes: QualityIntelligenceIntegrityHashes;
119
133
  /** Optional: per-atom coverage classification (refs + status, no raw text). Added in #738. */
120
134
  readonly coverageMatrix?: readonly QualityIntelligenceCoverageMatrixRow[];
121
- /** Optional: run quality score — percent of judged candidates rated "strong" [0-100]; null when the judge stage was skipped. Added in #736. */
135
+ /** Optional: run quality score — percent of candidates with a strong judge outcome [0-100]; null when the judge stage was skipped. Added in #736. */
122
136
  readonly qualityScore?: number | null;
123
137
  /** Optional: per-envelope content fingerprints for drift detection (Epic #735, Issue #742). */
124
138
  readonly sourceFingerprints?: readonly QualityIntelligenceSourceFingerprintRow[];
@@ -1 +1 @@
1
- {"version":3,"file":"manifestSchema.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/manifestSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifestSchema.d.ts","sourceRoot":"","sources":["../../src/qualityIntelligence/manifestSchema.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export interface QualityIntelligenceRecordInput {
30
30
  readonly provenanceRefs: QualityIntelligenceEvidenceManifest["provenanceRefs"];
31
31
  /** Optional coverage matrix (per-atom status, refs only). Added in #738. */
32
32
  readonly coverageMatrix?: QualityIntelligenceEvidenceManifest["coverageMatrix"];
33
- /** Optional run quality score — percent of judged candidates rated "strong" [0-100]; null when judge was skipped. Added in #736. */
33
+ /** Optional run quality score — percent of candidates with a strong judge outcome [0-100]; null when judge was skipped. Added in #736. */
34
34
  readonly qualityScore?: QualityIntelligenceEvidenceManifest["qualityScore"];
35
35
  /** Optional per-envelope content fingerprints for drift detection (Epic #735). */
36
36
  readonly sourceFingerprints?: readonly QualityIntelligenceSourceFingerprintRow[];
@@ -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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"}
@@ -12,8 +12,8 @@
12
12
  // SQLite" alternative.
13
13
  //
14
14
  // Safety:
15
- // - Base dir is realpath-contained once at construction (reusing the assertContainedRealPath
16
- // primitive); every child path is re-checked before any read/write/delete.
15
+ // - Base dir is realpath-contained once at construction; every child path is derived from a
16
+ // validated runId and the lexical directory entry is inspected before overwrite/delete.
17
17
  // - File names are derived from the VALIDATED runId via assertValidRunId — no separator/`..`/NUL
18
18
  // can reach the resolved path.
19
19
  // - Writes are atomic O_EXCL temp + rename. A partial write leaves a `.tmp` that is invisible to
@@ -24,7 +24,7 @@
24
24
  import { createHash, randomUUID } from "node:crypto";
25
25
  import { chmodSync, mkdirSync, readdirSync, readFileSync, lstatSync, renameSync, rmSync, writeFileSync, } from "node:fs";
26
26
  import { join, resolve } from "node:path";
27
- import { assertContainedRealPath, resolveWithinWorkspace, } from "@oscharko-dev/keiko-workspace";
27
+ import { resolveWithinWorkspace } from "@oscharko-dev/keiko-workspace";
28
28
  import { nodeWorkspaceFs } from "@oscharko-dev/keiko-workspace/internal/fs";
29
29
  import { assertValidRunId } from "@oscharko-dev/keiko-security";
30
30
  import { EvidenceReadError, EvidenceWriteError } from "../errors.js";
@@ -80,10 +80,9 @@ function existingQiBaseDir(baseDir, fs) {
80
80
  throw new EvidenceReadError(`cannot read QI evidence directory: ${error instanceof Error ? error.message : "unknown"}`);
81
81
  }
82
82
  }
83
- function containedQiManifestPath(runId, realBase, fs) {
83
+ function lexicalQiManifestPath(runId, realBase) {
84
84
  assertValidRunId(runId);
85
- const lexical = resolveWithinWorkspace(realBase, `${runId}${QI_MANIFEST_SUFFIX}`);
86
- return assertContainedRealPath(fs, realBase, lexical, `${runId}${QI_MANIFEST_SUFFIX}`);
85
+ return resolveWithinWorkspace(realBase, `${runId}${QI_MANIFEST_SUFFIX}`);
87
86
  }
88
87
  function isQiManifestName(name) {
89
88
  if (!name.endsWith(QI_MANIFEST_SUFFIX)) {
@@ -107,6 +106,14 @@ function isSingleLinkRegularFile(path, fs) {
107
106
  throw new EvidenceReadError(`cannot inspect QI manifest: ${error instanceof Error ? error.message : "unknown"}`);
108
107
  }
109
108
  }
109
+ function assertWritableQiManifestEntry(target, fs) {
110
+ const entry = lstatSync(target, { throwIfNoEntry: false });
111
+ if (entry === undefined)
112
+ return;
113
+ if (!entry.isFile() || !isSingleLinkRegularFile(target, fs)) {
114
+ throw new EvidenceWriteError("cannot overwrite a non-ledger QI manifest");
115
+ }
116
+ }
110
117
  function listQiRunIds(realBase, fs) {
111
118
  const runIds = [];
112
119
  try {
@@ -150,7 +157,7 @@ function reportQiLocation(baseDir, fs, runId) {
150
157
  const realBase = existingQiBaseDir(baseDir, fs);
151
158
  return realBase === undefined
152
159
  ? join(resolve(baseDir), `${runId}${QI_MANIFEST_SUFFIX}`)
153
- : containedQiManifestPath(runId, realBase, fs);
160
+ : lexicalQiManifestPath(runId, realBase);
154
161
  }
155
162
  function parseAndValidateManifest(json) {
156
163
  let parsed;
@@ -179,17 +186,6 @@ function assertHashMatches(label, expected, stored) {
179
186
  throw new EvidenceReadError(`QI manifest ${label} integrity hash mismatch`);
180
187
  }
181
188
  }
182
- // Backward-compatible group check: a group that shipped before it was integrity-hashed (coverageMatrix
183
- // #738, sourceFingerprints #735) may exist on a legacy manifest without a stored hash. Enforce the
184
- // check only once a stored hash is present; new manifests always carry it, so tampering with a current
185
- // group is still caught.
186
- function assertOptionalHashMatches(label, value, stored) {
187
- if (stored === undefined)
188
- return;
189
- if (sha256OfJson(value) !== stored) {
190
- throw new EvidenceReadError(`QI manifest ${label} integrity hash mismatch`);
191
- }
192
- }
193
189
  function assertIntegrityHashesMatch(manifest) {
194
190
  const expected = buildIntegrityHashes(manifest.findings, manifest.exports, manifest.evidenceRefs);
195
191
  assertHashMatches("findings", expected.findings, manifest.integrityHashes.findings);
@@ -199,8 +195,15 @@ function assertIntegrityHashesMatch(manifest) {
199
195
  // directly — a removed or added set (stored present, expected absent or vice versa) is caught too.
200
196
  const expectedAtomFingerprints = manifest.atomFingerprints === undefined ? undefined : sha256OfJson(manifest.atomFingerprints);
201
197
  assertHashMatches("atomFingerprints", expectedAtomFingerprints, manifest.integrityHashes.atomFingerprints);
202
- assertOptionalHashMatches("coverageMatrix", manifest.coverageMatrix, manifest.integrityHashes.coverageMatrix);
203
- assertOptionalHashMatches("sourceFingerprints", manifest.sourceFingerprints, manifest.integrityHashes.sourceFingerprints);
198
+ // coverageMatrix and sourceFingerprints: derive expected = (collection === undefined ? undefined :
199
+ // sha256OfJson(collection)) and compare with assertHashMatches so a present collection with a
200
+ // deleted stored sub-hash FAILS CLOSED (mirrors atomFingerprints above — removal-proof).
201
+ const expectedCoverageMatrix = manifest.coverageMatrix === undefined ? undefined : sha256OfJson(manifest.coverageMatrix);
202
+ assertHashMatches("coverageMatrix", expectedCoverageMatrix, manifest.integrityHashes.coverageMatrix);
203
+ const expectedSourceFingerprints = manifest.sourceFingerprints === undefined
204
+ ? undefined
205
+ : sha256OfJson(manifest.sourceFingerprints);
206
+ assertHashMatches("sourceFingerprints", expectedSourceFingerprints, manifest.integrityHashes.sourceFingerprints);
204
207
  }
205
208
  // Integrity scope (be precise — this is the on-read tamper-detection contract): we verify the
206
209
  // (totals ↔ collection-length) invariant for findings/exports AND the per-group SHA-256 hashes for
@@ -248,7 +251,8 @@ function loadQiManifest(baseDir, fs, runId) {
248
251
  function recordQiManifest(baseDir, fs, randomSuffix, manifest) {
249
252
  assertValidRunId(manifest.runId);
250
253
  const realBase = prepareQiBaseDir(baseDir, fs);
251
- const target = containedQiManifestPath(manifest.runId, realBase, fs);
254
+ const target = lexicalQiManifestPath(manifest.runId, realBase);
255
+ assertWritableQiManifestEntry(target, fs);
252
256
  atomicWriteQiManifest(target, JSON.stringify(manifest), randomSuffix);
253
257
  return target;
254
258
  }
@@ -258,7 +262,7 @@ function deleteQiManifest(baseDir, fs, runId) {
258
262
  if (realBase === undefined) {
259
263
  return false;
260
264
  }
261
- const target = containedQiManifestPath(runId, realBase, fs);
265
+ const target = lexicalQiManifestPath(runId, realBase);
262
266
  if (lstatSync(target, { throwIfNoEntry: false })?.isFile() !== true) {
263
267
  return false;
264
268
  }
@@ -1 +1 @@
1
- {"version":3,"file":"side-file.d.ts","sourceRoot":"","sources":["../src/side-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AASvC,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAwDD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,mBAAmB,CAmBrB"}
1
+ {"version":3,"file":"side-file.d.ts","sourceRoot":"","sources":["../src/side-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AASvC,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AA+DD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,mBAAmB,CA2BrB"}