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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +139 -1
  2. package/dist/ui/csp-hashes.json +34 -39
  3. package/dist/ui/static/404.html +1 -1
  4. package/dist/ui/static/__next.__PAGE__.txt +9 -0
  5. package/dist/ui/static/__next._full.txt +18 -0
  6. package/dist/ui/static/__next._head.txt +6 -0
  7. package/dist/ui/static/__next._index.txt +5 -0
  8. package/dist/ui/static/__next._tree.txt +2 -0
  9. package/dist/ui/static/_next/static/Hb6brrvZY2nZtizQlYhVt/_buildManifest.js +11 -0
  10. package/dist/ui/static/_next/static/Hb6brrvZY2nZtizQlYhVt/_clientMiddlewareManifest.js +1 -0
  11. package/dist/ui/static/_next/static/chunks/05-c3ty_6dwfk.js +1 -0
  12. package/dist/ui/static/_next/static/chunks/082obv3v03b-9.js +2 -0
  13. package/dist/ui/static/_next/static/chunks/0iq1i69206cyl.js +31 -0
  14. package/dist/ui/static/_next/static/chunks/0uifns067thv8.js +1 -0
  15. package/dist/ui/static/_next/static/chunks/0x31-j53ab1tt.js +1 -0
  16. package/dist/ui/static/_next/static/chunks/14mrh2-p_w84d.js +1 -0
  17. package/dist/ui/static/_next/static/chunks/1t04tfgin0v_g.js +106 -0
  18. package/dist/ui/static/_next/static/chunks/1v4hrxrm_6_rw.js +1 -0
  19. package/dist/ui/static/_next/static/chunks/27jktro2p5rq9.js +4 -0
  20. package/dist/ui/static/_next/static/chunks/2lypy3ewh0r04.js +1 -0
  21. package/dist/ui/static/_next/static/chunks/32573pyyglqxl.js +1 -0
  22. package/dist/ui/static/_next/static/chunks/3_t_pzet29qtn.js +1 -0
  23. package/dist/ui/static/_next/static/chunks/3jgg_oe0iok0l.js +1 -0
  24. package/dist/ui/static/_next/static/chunks/3o_oia3vsam60.js +1 -0
  25. package/dist/ui/static/_next/static/chunks/3peubv2924kx4.js +1 -0
  26. package/dist/ui/static/_next/static/chunks/3wr_35f2vg6sd.css +1 -0
  27. package/dist/ui/static/_next/static/chunks/turbopack-2lg1g6kbsfm0x.js +1 -0
  28. package/dist/ui/static/_not-found/__next._full.txt +16 -0
  29. package/dist/ui/static/_not-found/__next._head.txt +6 -0
  30. package/dist/ui/static/_not-found/__next._index.txt +5 -0
  31. package/dist/ui/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
  32. package/dist/ui/static/_not-found/__next._not-found.txt +5 -0
  33. package/dist/ui/static/_not-found/__next._tree.txt +2 -0
  34. package/dist/ui/static/_not-found.html +1 -0
  35. package/dist/ui/static/_not-found.txt +16 -0
  36. package/dist/ui/static/index.html +1 -1
  37. package/dist/ui/static/index.txt +16 -18
  38. package/dist/ui/static/launch/__next._full.txt +20 -0
  39. package/dist/ui/static/launch/__next._head.txt +6 -0
  40. package/dist/ui/static/launch/__next._index.txt +5 -0
  41. package/dist/ui/static/launch/__next._tree.txt +2 -0
  42. package/dist/ui/static/launch/__next.launch.__PAGE__.txt +9 -0
  43. package/dist/ui/static/launch/__next.launch.txt +5 -0
  44. package/dist/ui/static/launch.html +1 -1
  45. package/dist/ui/static/launch.txt +17 -17
  46. package/dist/ui/static/local-knowledge/__next._full.txt +20 -0
  47. package/dist/ui/static/local-knowledge/__next._head.txt +6 -0
  48. package/dist/ui/static/local-knowledge/__next._index.txt +5 -0
  49. package/dist/ui/static/local-knowledge/__next._tree.txt +2 -0
  50. package/dist/ui/static/local-knowledge/__next.local-knowledge.__PAGE__.txt +9 -0
  51. package/dist/ui/static/local-knowledge/__next.local-knowledge.txt +5 -0
  52. package/dist/ui/static/local-knowledge/capsule/__next._full.txt +17 -0
  53. package/dist/ui/static/local-knowledge/capsule/__next._head.txt +6 -0
  54. package/dist/ui/static/local-knowledge/capsule/__next._index.txt +5 -0
  55. package/dist/ui/static/local-knowledge/capsule/__next._tree.txt +2 -0
  56. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.__PAGE__.txt +6 -0
  57. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.txt +5 -0
  58. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.txt +5 -0
  59. package/dist/ui/static/local-knowledge/capsule.html +1 -1
  60. package/dist/ui/static/local-knowledge/capsule.txt +14 -14
  61. package/dist/ui/static/local-knowledge.html +1 -1
  62. package/dist/ui/static/local-knowledge.txt +19 -16
  63. package/dist/ui/static/manifest.webmanifest +2 -2
  64. package/dist/ui/static/memoriaviva/__next._full.txt +17 -0
  65. package/dist/ui/static/memoriaviva/__next._head.txt +6 -0
  66. package/dist/ui/static/memoriaviva/__next._index.txt +5 -0
  67. package/dist/ui/static/memoriaviva/__next._tree.txt +2 -0
  68. package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +6 -0
  69. package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +5 -0
  70. package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +17 -0
  71. package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +6 -0
  72. package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +5 -0
  73. package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -0
  74. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +6 -0
  75. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +5 -0
  76. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +5 -0
  77. package/dist/ui/static/memoriaviva/consolidation.html +1 -1
  78. package/dist/ui/static/memoriaviva/consolidation.txt +15 -15
  79. package/dist/ui/static/memoriaviva/detail/__next._full.txt +17 -0
  80. package/dist/ui/static/memoriaviva/detail/__next._head.txt +6 -0
  81. package/dist/ui/static/memoriaviva/detail/__next._index.txt +5 -0
  82. package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -0
  83. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +6 -0
  84. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +5 -0
  85. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +5 -0
  86. package/dist/ui/static/memoriaviva/detail.html +1 -1
  87. package/dist/ui/static/memoriaviva/detail.txt +14 -14
  88. package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +17 -0
  89. package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +6 -0
  90. package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +5 -0
  91. package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -0
  92. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +6 -0
  93. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +5 -0
  94. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +5 -0
  95. package/dist/ui/static/memoriaviva/review-queue.html +1 -1
  96. package/dist/ui/static/memoriaviva/review-queue.txt +15 -15
  97. package/dist/ui/static/memoriaviva.html +1 -1
  98. package/dist/ui/static/memoriaviva.txt +14 -14
  99. package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
  100. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.d.ts.map +1 -1
  101. package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.js +61 -2
  102. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.d.ts.map +1 -1
  103. package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.js +65 -21
  104. package/node_modules/@oscharko-dev/keiko-cli/dist/launcher-platforms.js +3 -3
  105. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts +2 -0
  106. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.d.ts.map +1 -1
  107. package/node_modules/@oscharko-dev/keiko-cli/dist/lifecycle.js +51 -10
  108. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts +3 -1
  109. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts.map +1 -1
  110. package/node_modules/@oscharko-dev/keiko-cli/dist/ui.js +128 -38
  111. package/node_modules/@oscharko-dev/keiko-cli/package.json +2 -2
  112. package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
  113. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts +20 -1
  114. package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts.map +1 -1
  115. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts +1 -1
  116. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts.map +1 -1
  117. package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.js +256 -75
  118. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts +11 -0
  119. package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts.map +1 -1
  120. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +7 -7
  121. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
  122. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +4 -4
  123. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts +11 -0
  124. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts.map +1 -1
  125. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.js +4 -0
  126. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts +1 -1
  127. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts.map +1 -1
  128. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.js +109 -4
  129. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts +2 -0
  130. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts.map +1 -1
  131. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.js +94 -7
  132. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts +5 -0
  133. package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts.map +1 -1
  134. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts +15 -0
  135. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts.map +1 -1
  136. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.js +1 -1
  137. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.d.ts.map +1 -1
  138. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.js +3 -0
  139. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts +1 -1
  140. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts.map +1 -1
  141. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts +14 -0
  142. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts.map +1 -1
  143. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.js +53 -5
  144. package/node_modules/@oscharko-dev/keiko-contracts/package.json +2 -2
  145. package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
  146. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.d.ts.map +1 -1
  147. package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.js +11 -3
  148. package/node_modules/@oscharko-dev/keiko-evaluations/package.json +2 -2
  149. package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
  150. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts +20 -1
  151. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts.map +1 -1
  152. package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.js +34 -2
  153. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts +1 -0
  154. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts.map +1 -1
  155. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.js +3 -1
  156. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts +17 -0
  157. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts.map +1 -1
  158. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.js +19 -0
  159. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +5 -1
  160. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
  161. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +32 -2
  162. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
  163. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +259 -40
  164. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts +3 -0
  165. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts.map +1 -1
  166. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.js +48 -5
  167. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts.map +1 -1
  168. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +30 -13
  169. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts +1 -1
  170. package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts.map +1 -1
  171. package/node_modules/@oscharko-dev/keiko-evidence/package.json +2 -2
  172. package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
  173. package/node_modules/@oscharko-dev/keiko-harness/package.json +2 -2
  174. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
  175. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.d.ts.map +1 -1
  176. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.js +25 -1
  177. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts +1 -1
  178. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts.map +1 -1
  179. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.js +16 -0
  180. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts +3 -1
  181. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts.map +1 -1
  182. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.js +9 -5
  183. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.d.ts.map +1 -1
  184. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.js +22 -7
  185. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts +4 -1
  186. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts.map +1 -1
  187. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.js +61 -9
  188. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.d.ts.map +1 -1
  189. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.js +64 -36
  190. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts +2 -2
  191. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts.map +1 -1
  192. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.js +2 -2
  193. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts +7 -1
  194. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts.map +1 -1
  195. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.js +5 -1
  196. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts +1 -1
  197. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts.map +1 -1
  198. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.js +27 -4
  199. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts +5 -1
  200. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts.map +1 -1
  201. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.js +18 -5
  202. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.d.ts.map +1 -1
  203. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.js +10 -1
  204. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts +4 -1
  205. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts.map +1 -1
  206. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.js +370 -45
  207. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts +2 -0
  208. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts.map +1 -1
  209. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.js +8 -4
  210. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts +1 -1
  211. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts.map +1 -1
  212. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.js +10 -5
  213. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.d.ts.map +1 -1
  214. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.js +65 -20
  215. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts +1 -0
  216. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts.map +1 -1
  217. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.js +79 -0
  218. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts +1 -1
  219. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts.map +1 -1
  220. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.js +1 -1
  221. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.d.ts.map +1 -1
  222. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.js +4 -0
  223. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts +6 -5
  224. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts.map +1 -1
  225. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.js +4 -4
  226. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.d.ts.map +1 -1
  227. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.js +71 -29
  228. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.d.ts.map +1 -1
  229. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.js +258 -132
  230. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts +12 -0
  231. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts.map +1 -1
  232. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.d.ts.map +1 -1
  233. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.js +9 -0
  234. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts +3 -1
  235. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts.map +1 -1
  236. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.js +13 -1
  237. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.d.ts.map +1 -1
  238. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.js +86 -46
  239. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts +1 -1
  240. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts.map +1 -1
  241. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.js +1 -1
  242. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.d.ts.map +1 -1
  243. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.js +50 -22
  244. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts +21 -1
  245. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
  246. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +93 -14
  247. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.d.ts.map +1 -1
  248. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.js +3 -1
  249. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts +7 -2
  250. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts.map +1 -1
  251. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.js +7 -3
  252. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/audit-emitter.js +8 -0
  253. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.d.ts.map +1 -1
  254. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.js +17 -10
  255. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.d.ts.map +1 -1
  256. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.js +7 -0
  257. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts +4 -0
  258. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts.map +1 -1
  259. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/retrieval-runner.js +1 -1
  260. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts +1 -0
  261. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts.map +1 -1
  262. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.js +318 -32
  263. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts +1 -1
  264. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts.map +1 -1
  265. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.js +46 -16
  266. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts +14 -0
  267. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts.map +1 -1
  268. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.js +26 -1
  269. package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +10 -5
  270. package/node_modules/@oscharko-dev/keiko-memory-capture/dist/.tsbuildinfo +1 -1
  271. package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +2 -2
  272. package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/.tsbuildinfo +1 -1
  273. package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +2 -2
  274. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
  275. package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +2 -2
  276. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
  277. package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +2 -2
  278. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
  279. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/paths.d.ts.map +1 -1
  280. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/paths.js +11 -5
  281. package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +2 -2
  282. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
  283. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts +2 -1
  284. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts.map +1 -1
  285. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.js +50 -0
  286. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts +3 -0
  287. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts.map +1 -1
  288. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.js +114 -44
  289. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts +14 -0
  290. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts.map +1 -1
  291. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.js +14 -0
  292. package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +2 -2
  293. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
  294. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.d.ts.map +1 -1
  295. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.js +9 -2
  296. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.js +1 -1
  297. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts +9 -1
  298. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts.map +1 -1
  299. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.js +9 -1
  300. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts +5 -0
  301. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts.map +1 -1
  302. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.js +229 -33
  303. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts +62 -0
  304. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts.map +1 -1
  305. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.d.ts.map +1 -1
  306. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.js +24 -4
  307. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts +4 -2
  308. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts.map +1 -1
  309. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.js +0 -0
  310. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.d.ts.map +1 -1
  311. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.js +119 -5
  312. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts +2 -1
  313. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts.map +1 -1
  314. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.js +26 -11
  315. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
  316. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +86 -9
  317. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.d.ts.map +1 -1
  318. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.js +10 -3
  319. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
  320. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +14 -12
  321. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/sourceMixPlanning.js +0 -0
  322. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts +1 -1
  323. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts.map +1 -1
  324. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.js +9 -1
  325. package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +2 -2
  326. package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
  327. package/node_modules/@oscharko-dev/keiko-sdk/package.json +2 -2
  328. package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
  329. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.d.ts.map +1 -1
  330. package/node_modules/@oscharko-dev/keiko-security/dist/redaction.js +4 -2
  331. package/node_modules/@oscharko-dev/keiko-security/package.json +2 -2
  332. package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
  333. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
  334. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +6 -1
  335. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +2 -0
  336. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
  337. package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +62 -12
  338. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts +1 -1
  339. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts.map +1 -1
  340. package/node_modules/@oscharko-dev/keiko-server/dist/evidence.js +4 -3
  341. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts +18 -3
  342. package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts.map +1 -1
  343. package/node_modules/@oscharko-dev/keiko-server/dist/files.js +208 -72
  344. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.d.ts.map +1 -1
  345. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.js +7 -2
  346. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts +3 -0
  347. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts.map +1 -1
  348. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.js +27 -4
  349. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.d.ts.map +1 -1
  350. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.js +46 -14
  351. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts +1 -0
  352. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts.map +1 -1
  353. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.js +433 -31
  354. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.d.ts.map +1 -1
  355. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.js +5 -3
  356. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts +9 -0
  357. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
  358. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +194 -45
  359. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts +4 -0
  360. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts.map +1 -1
  361. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +100 -24
  362. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts +7 -0
  363. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
  364. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +196 -20
  365. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.d.ts.map +1 -1
  366. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.js +21 -1
  367. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts +1 -1
  368. package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts.map +1 -1
  369. package/node_modules/@oscharko-dev/keiko-server/dist/index.js +1 -1
  370. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts +9 -6
  371. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
  372. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +189 -66
  373. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.d.ts.map +1 -1
  374. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.js +198 -72
  375. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts +1 -1
  376. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts.map +1 -1
  377. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.js +6 -5
  378. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +10 -2
  379. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -1
  380. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.js +110 -30
  381. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +13 -4
  382. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -1
  383. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.js +29 -17
  384. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +13 -3
  385. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -1
  386. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.js +54 -5
  387. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
  388. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +84 -12
  389. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -1
  390. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.js +16 -8
  391. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +6 -2
  392. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
  393. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +13 -1
  394. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -1
  395. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.js +15 -2
  396. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +9 -0
  397. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -1
  398. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.js +2 -2
  399. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +9 -1
  400. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
  401. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +138 -19
  402. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.d.ts.map +1 -1
  403. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.js +26 -7
  404. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
  405. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +26 -7
  406. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
  407. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +28 -5
  408. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.d.ts.map +1 -1
  409. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runExecution.js +11 -0
  410. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
  411. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +90 -19
  412. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts +4 -1
  413. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
  414. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +17 -3
  415. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -1
  416. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.js +19 -2
  417. package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
  418. package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +4 -2
  419. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts.map +1 -1
  420. package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.js +6 -1
  421. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts +2 -2
  422. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts.map +1 -1
  423. package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.js +84 -8
  424. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.d.ts.map +1 -1
  425. package/node_modules/@oscharko-dev/keiko-server/dist/store/db.js +4 -2
  426. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts +1 -1
  427. package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts.map +1 -1
  428. package/node_modules/@oscharko-dev/keiko-server/dist/store/paths.d.ts.map +1 -1
  429. package/node_modules/@oscharko-dev/keiko-server/dist/store/paths.js +9 -2
  430. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts +5 -1
  431. package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts.map +1 -1
  432. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.d.ts.map +1 -1
  433. package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.js +67 -14
  434. package/node_modules/@oscharko-dev/keiko-server/package.json +2 -2
  435. package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
  436. package/node_modules/@oscharko-dev/keiko-tools/package.json +2 -2
  437. package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
  438. package/node_modules/@oscharko-dev/keiko-verification/package.json +2 -2
  439. package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
  440. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts +2 -0
  441. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts.map +1 -1
  442. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.js +45 -10
  443. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts +1 -1
  444. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts.map +1 -1
  445. package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.js +1 -1
  446. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts.map +1 -1
  447. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.js +4 -6
  448. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts +30 -0
  449. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts.map +1 -0
  450. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.js +114 -0
  451. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
  452. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +58 -23
  453. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.d.ts.map +1 -1
  454. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.js +15 -7
  455. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts.map +1 -1
  456. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.js +28 -4
  457. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.d.ts.map +1 -1
  458. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.js +51 -1
  459. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.d.ts.map +1 -1
  460. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.js +8 -3
  461. package/node_modules/@oscharko-dev/keiko-workflows/package.json +2 -2
  462. package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
  463. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts +1 -0
  464. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts.map +1 -1
  465. package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.js +1 -0
  466. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.d.ts.map +1 -1
  467. package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.js +84 -27
  468. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.d.ts.map +1 -1
  469. package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.js +22 -0
  470. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.d.ts.map +1 -1
  471. package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.js +6 -3
  472. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts.map +1 -1
  473. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.js +72 -25
  474. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts +15 -0
  475. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts.map +1 -0
  476. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.js +107 -0
  477. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts +18 -0
  478. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts.map +1 -0
  479. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.js +42 -0
  480. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
  481. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +4 -11
  482. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts +2 -0
  483. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts.map +1 -0
  484. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.js +15 -0
  485. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts +2 -2
  486. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts.map +1 -1
  487. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.js +89 -75
  488. package/node_modules/@oscharko-dev/keiko-workspace/package.json +2 -2
  489. package/node_modules/@types/node/README.md +1 -1
  490. package/node_modules/@types/node/http2.d.ts +1 -0
  491. package/node_modules/@types/node/package.json +2 -2
  492. package/package.json +3 -1
  493. package/dist/ui/static/_next/static/BNiyfCos3TiM2QdurajIZ/_buildManifest.js +0 -1
  494. package/dist/ui/static/_next/static/chunks/18-ac3e3551b4e0ce8a.js +0 -1
  495. package/dist/ui/static/_next/static/chunks/664-6d821dc1aacb6b48.js +0 -1
  496. package/dist/ui/static/_next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
  497. package/dist/ui/static/_next/static/chunks/923-4141696576191bc0.js +0 -1
  498. package/dist/ui/static/_next/static/chunks/982-abc19630e6305864.js +0 -1
  499. package/dist/ui/static/_next/static/chunks/app/_not-found/page-03d642dcd0f15b52.js +0 -1
  500. package/dist/ui/static/_next/static/chunks/app/launch/page-c725ff0c02b50663.js +0 -1
  501. package/dist/ui/static/_next/static/chunks/app/layout-aadefe615729db05.js +0 -1
  502. package/dist/ui/static/_next/static/chunks/app/local-knowledge/capsule/page-4a7f242906e19a07.js +0 -1
  503. package/dist/ui/static/_next/static/chunks/app/local-knowledge/page-3361769b8964e659.js +0 -1
  504. package/dist/ui/static/_next/static/chunks/app/memoriaviva/consolidation/page-44b3f4fa3e10085f.js +0 -1
  505. package/dist/ui/static/_next/static/chunks/app/memoriaviva/detail/page-0cdfb3eeb659daeb.js +0 -1
  506. package/dist/ui/static/_next/static/chunks/app/memoriaviva/page-e78e0cd2876fec41.js +0 -1
  507. package/dist/ui/static/_next/static/chunks/app/memoriaviva/review-queue/page-e32fe86466827484.js +0 -1
  508. package/dist/ui/static/_next/static/chunks/app/page-9ad91065d05ddfa0.js +0 -1
  509. package/dist/ui/static/_next/static/chunks/framework-d8f01f7e25201916.js +0 -1
  510. package/dist/ui/static/_next/static/chunks/main-app-b52a8fa1d8127a5f.js +0 -1
  511. package/dist/ui/static/_next/static/chunks/main-bc552b04f2b6dbe2.js +0 -1
  512. package/dist/ui/static/_next/static/chunks/pages/_app-2e239ff05bfdf6d6.js +0 -1
  513. package/dist/ui/static/_next/static/chunks/pages/_error-bda15e7831eec981.js +0 -1
  514. package/dist/ui/static/_next/static/chunks/webpack-0cfe6f51555ca84e.js +0 -1
  515. package/dist/ui/static/_next/static/css/51fdcfdc624e723d.css +0 -1
  516. /package/dist/ui/static/_next/static/{BNiyfCos3TiM2QdurajIZ → Hb6brrvZY2nZtizQlYhVt}/_ssgManifest.js +0 -0
  517. /package/dist/ui/static/_next/static/chunks/{polyfills-42372ed130431b0a.js → 0cz1d0mv5g_q7.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AASA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAIzF,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC9C;AA4ID,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,GAAE,SAAc,EACnB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AASA,OAAO,EAQL,KAAK,SAAS,EAGf,MAAM,mCAAmC,CAAC;AAI3C,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC9C;AA4ID,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,GAAE,SAAc,EACnB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -6,7 +6,7 @@
6
6
  // applicable dimensions pass AND surface parity passes; 1 on dimension/parity failure or runtime
7
7
  // error; 2 on usage error (unknown flag, mutual exclusion, unknown suite/fixture name).
8
8
  import { writeFileSync } from "node:fs";
9
- import { GatewayError, redact } from "@oscharko-dev/keiko-model-gateway";
9
+ import { ConfigInvalidError, GatewayError, assertConfiguredModel, findConfiguredCapability, listConfiguredCapabilities, loadConfigFromFile, redact, } from "@oscharko-dev/keiko-model-gateway";
10
10
  import { createAuditRedactor, deepRedactStrings } from "@oscharko-dev/keiko-evidence";
11
11
  import { keikoApiKeySecretValues } from "@oscharko-dev/keiko-security";
12
12
  import { parseRunRequest } from "@oscharko-dev/keiko-server";
@@ -156,10 +156,14 @@ export async function runEvaluateCli(args, io, env = {}, deps = {}) {
156
156
  }
157
157
  async function runSuite(parsed, fixtures, io, env, deps) {
158
158
  try {
159
+ const liveModelId = resolveLiveModelId(parsed, io, env);
160
+ if (typeof liveModelId === "number") {
161
+ return liveModelId;
162
+ }
159
163
  const scorecard = await runEvaluationSuite({
160
164
  mode: parsed.live ? "live" : "offline",
161
165
  fixtures,
162
- ...(parsed.model === undefined ? {} : { modelIdOverride: parsed.model }),
166
+ ...(liveModelId === undefined ? {} : { modelIdOverride: liveModelId }),
163
167
  ...(parsed.config === undefined ? {} : { configPath: parsed.config }),
164
168
  },
165
169
  // Provide Date.now as the default wall-clock so a real `keiko evaluate` prints the actual
@@ -185,6 +189,61 @@ async function runSuite(parsed, fixtures, io, env, deps) {
185
189
  return handleRunError(error, parsed, io);
186
190
  }
187
191
  }
192
+ function resolveLiveModelId(parsed, io, env) {
193
+ if (!parsed.live) {
194
+ return parsed.model;
195
+ }
196
+ try {
197
+ const path = parsed.config ?? env.KEIKO_CONFIG_FILE;
198
+ if (path === undefined) {
199
+ throw new ConfigInvalidError("no config source; pass --config PATH or set KEIKO_CONFIG_FILE");
200
+ }
201
+ const config = loadConfigFromFile(path, env);
202
+ if (parsed.model !== undefined) {
203
+ assertLiveEvaluationModel(config, parsed.model);
204
+ return parsed.model;
205
+ }
206
+ const modelId = selectLiveEvaluationModel(config);
207
+ if (modelId === undefined) {
208
+ io.err("Error: no configured workflow-capable chat model is available.\n");
209
+ return 1;
210
+ }
211
+ return modelId;
212
+ }
213
+ catch (error) {
214
+ if (error instanceof GatewayError) {
215
+ io.err(`Error: model gateway configuration problem — ${redact(error.message)}\n` +
216
+ `Provide a gateway config with --config PATH or KEIKO_CONFIG_FILE.\n`);
217
+ return 1;
218
+ }
219
+ throw error;
220
+ }
221
+ }
222
+ function isLiveEvaluationCapable(capability) {
223
+ return (capability?.kind === "chat" &&
224
+ capability.workflowEligible &&
225
+ capability.toolCalling &&
226
+ capability.structuredOutput);
227
+ }
228
+ const COST_RANK = { low: 0, medium: 1, high: 2 };
229
+ function selectLiveEvaluationModel(config) {
230
+ let best;
231
+ for (const capability of listConfiguredCapabilities(config)) {
232
+ if (!isLiveEvaluationCapable(capability)) {
233
+ continue;
234
+ }
235
+ if (best === undefined || COST_RANK[capability.costClass] < COST_RANK[best.costClass]) {
236
+ best = capability;
237
+ }
238
+ }
239
+ return best?.id;
240
+ }
241
+ function assertLiveEvaluationModel(config, modelId) {
242
+ assertConfiguredModel(config, modelId);
243
+ if (!isLiveEvaluationCapable(findConfiguredCapability(config, modelId))) {
244
+ throw new ConfigInvalidError(`model '${modelId}' is not workflow-capable; live evaluation requires chat + tool-calling + structured-output`);
245
+ }
246
+ }
188
247
  function isOutputAlreadyExistsError(error) {
189
248
  return (typeof error === "object" &&
190
249
  error !== null &&
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAQA,OAAO,EAQL,KAAK,aAAa,EAGnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACtC;AA0DD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,IAAI,GAAE,eAAoB,GACzB,MAAM,CAuBR"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAQA,OAAO,EAQL,KAAK,aAAa,EAGnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACtC;AAmID,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,IAAI,GAAE,eAAoB,GACzB,MAAM,CA2BR"}
@@ -13,19 +13,65 @@ const USAGE = `Usage:
13
13
  Lists or shows redacted evidence manifests written by \`keiko run\`. Reads only the
14
14
  evidence base dir (default $KEIKO_EVIDENCE_DIR or ./.keiko/evidence; override with --evidence-dir).
15
15
  `;
16
- function flagValue(args, name) {
17
- const i = args.indexOf(name);
18
- if (i === -1) {
19
- return undefined;
16
+ function parseSubcommand(value) {
17
+ return value === "list" || value === "show" ? value : undefined;
18
+ }
19
+ function parseFlags(args, startIndex) {
20
+ let json = false;
21
+ let evidenceDir;
22
+ let index = startIndex;
23
+ while (index < args.length) {
24
+ const arg = args[index];
25
+ if (arg === "--json") {
26
+ json = true;
27
+ index += 1;
28
+ continue;
29
+ }
30
+ if (arg !== "--evidence-dir") {
31
+ return { ok: false };
32
+ }
33
+ const value = args[index + 1];
34
+ if (value === undefined || value.startsWith("--")) {
35
+ return { ok: false };
36
+ }
37
+ evidenceDir = value;
38
+ index += 2;
20
39
  }
21
- const value = args[i + 1];
22
- return value === undefined || value.startsWith("--") ? undefined : value;
40
+ return { ok: true, json, evidenceDir };
23
41
  }
24
- function resolveStore(args, deps) {
42
+ function invalidArgs(message) {
43
+ return { ok: false, error: message };
44
+ }
45
+ function resolveStore(evidenceDir, deps) {
25
46
  if (deps.store !== undefined) {
26
47
  return deps.store;
27
48
  }
28
- return createNodeEvidenceStore(resolveEvidenceDir(flagValue(args, "--evidence-dir"), deps.env));
49
+ return createNodeEvidenceStore(resolveEvidenceDir(evidenceDir, deps.env));
50
+ }
51
+ function parseEvidenceArgs(args) {
52
+ const subcommand = parseSubcommand(args[0]);
53
+ if (subcommand === undefined) {
54
+ const sub = args[0];
55
+ return invalidArgs(sub === undefined ? USAGE : `keiko evidence: unknown subcommand: ${sub}\n${USAGE}`);
56
+ }
57
+ let index = 1;
58
+ let runId;
59
+ if (subcommand === "show") {
60
+ runId = args[index];
61
+ if (runId === undefined || runId.startsWith("--")) {
62
+ return invalidArgs(`keiko evidence: show requires a <runId>.\n${USAGE}`);
63
+ }
64
+ index += 1;
65
+ }
66
+ const flags = parseFlags(args, index);
67
+ if (!flags.ok) {
68
+ return invalidArgs(`keiko evidence: invalid arguments.\n${USAGE}`);
69
+ }
70
+ return {
71
+ ok: true,
72
+ error: "",
73
+ parsed: { subcommand, runId, evidenceDir: flags.evidenceDir, json: flags.json === true },
74
+ };
29
75
  }
30
76
  function renderListText(entries) {
31
77
  if (entries.length === 0) {
@@ -59,22 +105,20 @@ function exitForAuditError(error, io) {
59
105
  return error instanceof InvalidRunIdError ? 2 : 1;
60
106
  }
61
107
  export function runEvidenceCli(args, io, deps = {}) {
62
- const sub = args[0];
63
- const json = args.includes("--json");
108
+ const parsed = parseEvidenceArgs(args);
109
+ if (!parsed.ok || parsed.parsed === undefined) {
110
+ io.err(parsed.error);
111
+ return 2;
112
+ }
64
113
  try {
65
- if (sub === "list") {
66
- return runList(resolveStore(args, deps), json, io);
114
+ if (parsed.parsed.subcommand === "list") {
115
+ return runList(resolveStore(parsed.parsed.evidenceDir, deps), parsed.parsed.json, io);
67
116
  }
68
- if (sub === "show") {
69
- const runId = args[1];
70
- if (runId === undefined || runId.startsWith("--")) {
71
- io.err(`keiko evidence: show requires a <runId>.\n${USAGE}`);
72
- return 2;
73
- }
74
- return runShow(resolveStore(args, deps), runId, json, io);
117
+ if (parsed.parsed.runId === undefined) {
118
+ io.err(`keiko evidence: show requires a <runId>.\n${USAGE}`);
119
+ return 2;
75
120
  }
76
- io.err(sub === undefined ? USAGE : `keiko evidence: unknown subcommand: ${sub}\n${USAGE}`);
77
- return 2;
121
+ return runShow(resolveStore(parsed.parsed.evidenceDir, deps), parsed.parsed.runId, parsed.parsed.json, io);
78
122
  }
79
123
  catch (error) {
80
124
  if (error instanceof AuditError) {
@@ -7,7 +7,7 @@
7
7
  // any executable path or port that has not been validated by `validateExecPath` /
8
8
  // `validatePort`. The validators are deliberately strict allow-lists: a `keiko` executable
9
9
  // path that contains a space, a shell metacharacter, or any character outside
10
- // `[A-Za-z0-9_\-./\\:]` is rejected. Spaces in the bin location are a documented
10
+ // `[A-Za-z0-9_@\-./\\:]` is rejected. Spaces in the bin location are a documented
11
11
  // unsupported edge case for this release (ADR-0024 D8 / spec §"Per-platform content rules").
12
12
  //
13
13
  // PLATFORMS:
@@ -23,7 +23,7 @@ import { posix as posixPath, win32 as win32Path } from "node:path";
23
23
  // `&`, `|`, `(`, `)`, `<`, `>`, `*`, `?`, `~`, `#`, `!`, `,`, `=`, `+`, control chars —
24
24
  // is rejected. The intent is defense-in-depth even though XDG `.desktop` and `.bat`
25
25
  // have their own quoting rules: no metacharacter ever reaches the file content.
26
- const EXEC_PATH_RE = /^[A-Za-z0-9_\-./\\:]+$/;
26
+ const EXEC_PATH_RE = /^[A-Za-z0-9_@\-./\\:]+$/;
27
27
  export const MIN_PORT = 1024;
28
28
  export const MAX_PORT = 65535;
29
29
  export class LauncherError extends Error {
@@ -42,7 +42,7 @@ export function validateExecPath(path) {
42
42
  throw new LauncherError("EXEC_PATH_TOO_LONG", "keiko launcher: resolved executable path exceeds 4096 chars.");
43
43
  }
44
44
  if (!EXEC_PATH_RE.test(path)) {
45
- throw new LauncherError("EXEC_PATH_UNSAFE", `keiko launcher: resolved executable path contains disallowed characters: ${path}\nOnly [A-Za-z0-9_\\-./\\\\:] are permitted. Re-install keiko under a path without spaces or shell metacharacters.`);
45
+ throw new LauncherError("EXEC_PATH_UNSAFE", `keiko launcher: resolved executable path contains disallowed characters: ${path}\nOnly [A-Za-z0-9_@\\-./\\\\:] are permitted. Re-install keiko under a path without spaces or shell metacharacters.`);
46
46
  }
47
47
  return path;
48
48
  }
@@ -6,6 +6,7 @@ type SpawnFn = (command: string, args: readonly string[], opts: SpawnOptions) =>
6
6
  type FetchFn = (input: string, init?: RequestInit) => Promise<Response>;
7
7
  type SleepFn = (ms: number) => Promise<void>;
8
8
  type ProcessKiller = (pid: number, signal?: NodeJS.Signals | 0) => void;
9
+ type PortAvailabilityFn = (host: string, port: number) => Promise<boolean>;
9
10
  export interface LifecycleCliDeps {
10
11
  readonly cwd?: string | undefined;
11
12
  readonly spawnFn?: SpawnFn | undefined;
@@ -13,6 +14,7 @@ export interface LifecycleCliDeps {
13
14
  readonly sleep?: SleepFn | undefined;
14
15
  readonly isProcessAlive?: ((pid: number) => boolean) | undefined;
15
16
  readonly killProcess?: ProcessKiller | undefined;
17
+ readonly isPortAvailable?: PortAvailabilityFn | undefined;
16
18
  }
17
19
  export declare function runLifecycleCli(command: LifecycleCommand, args: readonly string[], io: CliIo, env: EnvSource, deps?: LifecycleCliDeps): Promise<number>;
18
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AASA,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,KAAK,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAChE,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC;AAC9F,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxE,KAAK,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,KAAK,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;AAgDxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAClD;AAgXD,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AASA,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAGnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,KAAK,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAChE,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC;AAC9F,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxE,KAAK,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,KAAK,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;AACxE,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAgD3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC3D;AAwaD,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -1,5 +1,6 @@
1
1
  import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
2
2
  import { spawn } from "node:child_process";
3
+ import { createServer as createNetServer } from "node:net";
3
4
  import { dirname, isAbsolute, join, resolve } from "node:path";
4
5
  import { fileURLToPath } from "node:url";
5
6
  import { SDK_VERSION } from "@oscharko-dev/keiko-sdk";
@@ -151,6 +152,33 @@ function defaultIsProcessAlive(pid) {
151
152
  return typeof error === "object" && error !== null && "code" in error && error.code === "EPERM";
152
153
  }
153
154
  }
155
+ function defaultIsPortAvailable(host, port) {
156
+ return new Promise((resolveAvailable) => {
157
+ const server = createNetServer();
158
+ let settled = false;
159
+ const settle = (available) => {
160
+ if (settled)
161
+ return;
162
+ settled = true;
163
+ server.removeAllListeners("error");
164
+ server.removeAllListeners("listening");
165
+ if (server.listening) {
166
+ server.close(() => {
167
+ resolveAvailable(available);
168
+ });
169
+ return;
170
+ }
171
+ resolveAvailable(available);
172
+ };
173
+ server.once("error", () => {
174
+ settle(false);
175
+ });
176
+ server.once("listening", () => {
177
+ settle(true);
178
+ });
179
+ server.listen(port, host);
180
+ });
181
+ }
154
182
  function runningPid(options, isAlive) {
155
183
  const path = pidFile(options);
156
184
  const pid = readPid(path);
@@ -193,12 +221,13 @@ function spawnUiProcess(options, env, deps, cwd) {
193
221
  mkdirSync(options.stateDir, { recursive: true, mode: 0o700 });
194
222
  const logPath = logFile(options);
195
223
  const fd = openSync(logPath, "a", 0o600);
224
+ const uiEnv = childEnv({ ...env, KEIKO_STATE_DIR: options.stateDir });
196
225
  try {
197
226
  return {
198
227
  child: deps.spawnFn(process.execPath, [cliEntryPath(), "ui", "--port", String(options.port), "--host", options.host], {
199
228
  cwd,
200
229
  detached: true,
201
- env: childEnv(env),
230
+ env: uiEnv,
202
231
  stdio: ["ignore", fd, fd],
203
232
  }),
204
233
  logPath,
@@ -217,7 +246,7 @@ async function waitForHealth(options, pid, deps) {
217
246
  const response = await deps.fetchImpl(healthUrl(options), {
218
247
  signal: AbortSignal.timeout(1_000),
219
248
  });
220
- if (response.ok) {
249
+ if (response.ok && deps.isProcessAlive(pid)) {
221
250
  return true;
222
251
  }
223
252
  }
@@ -228,6 +257,12 @@ async function waitForHealth(options, pid, deps) {
228
257
  }
229
258
  return false;
230
259
  }
260
+ async function ensureStartPortAvailable(options, io, deps) {
261
+ if (await deps.isPortAvailable(options.host, options.port))
262
+ return true;
263
+ io.err(`keiko start: port ${options.host}:${String(options.port)} is already in use. Stop the existing process or choose another port with --port.\n`);
264
+ return false;
265
+ }
231
266
  async function cmdStart(options, io, env, deps, cwd) {
232
267
  const running = runningPid(options, deps.isProcessAlive);
233
268
  if (running !== undefined) {
@@ -246,6 +281,8 @@ async function cmdStart(options, io, env, deps, cwd) {
246
281
  if (stopped !== 0)
247
282
  return stopped;
248
283
  }
284
+ if (!(await ensureStartPortAvailable(options, io, deps)))
285
+ return 1;
249
286
  const { child, logPath } = spawnUiProcess(options, env, deps, cwd);
250
287
  if (child.pid === undefined) {
251
288
  io.err("keiko start: failed to spawn the UI process.\n");
@@ -308,6 +345,17 @@ async function cmdRestart(options, io, env, deps, cwd) {
308
345
  return stopped;
309
346
  return cmdStart(options, io, env, deps, cwd);
310
347
  }
348
+ function runtimeDeps(deps) {
349
+ return {
350
+ spawnFn: deps.spawnFn ?? spawn,
351
+ fetchImpl: deps.fetchImpl ?? fetch,
352
+ sleep: deps.sleep ??
353
+ ((ms) => new Promise((resolveSleep) => setTimeout(resolveSleep, ms))),
354
+ isProcessAlive: deps.isProcessAlive ?? defaultIsProcessAlive,
355
+ killProcess: deps.killProcess ?? process.kill.bind(process),
356
+ isPortAvailable: deps.isPortAvailable ?? defaultIsPortAvailable,
357
+ };
358
+ }
311
359
  export async function runLifecycleCli(command, args, io, env, deps = {}) {
312
360
  const cwd = deps.cwd ?? process.cwd();
313
361
  const options = parseLifecycleArgs(args, cwd, env);
@@ -319,14 +367,7 @@ export async function runLifecycleCli(command, args, io, env, deps = {}) {
319
367
  io.err(USAGE);
320
368
  return 2;
321
369
  }
322
- const fullDeps = {
323
- spawnFn: deps.spawnFn ?? spawn,
324
- fetchImpl: deps.fetchImpl ?? fetch,
325
- sleep: deps.sleep ??
326
- ((ms) => new Promise((resolveSleep) => setTimeout(resolveSleep, ms))),
327
- isProcessAlive: deps.isProcessAlive ?? defaultIsProcessAlive,
328
- killProcess: deps.killProcess ?? process.kill.bind(process),
329
- };
370
+ const fullDeps = runtimeDeps(deps);
330
371
  const handlers = {
331
372
  start: () => cmdStart(options, io, env, fullDeps, cwd),
332
373
  stop: () => cmdStop(options, io, fullDeps),
@@ -9,6 +9,7 @@ export interface UiCliArgs {
9
9
  readonly config: string | undefined;
10
10
  readonly uiDbPath: string | undefined;
11
11
  }
12
+ type UiParseResult = UiCliArgs | "help" | null;
12
13
  export interface UiCliDeps {
13
14
  readonly createServer?: (deps: {
14
15
  staticRoot: string;
@@ -24,9 +25,10 @@ export interface UiCliDeps {
24
25
  readonly cwd?: string | undefined;
25
26
  }
26
27
  export type SpawnFn = (command: string, args: readonly string[], opts: SpawnOptions) => ChildProcess;
27
- export declare function parseUiArgs(args: readonly string[]): UiCliArgs | null;
28
+ export declare function parseUiArgs(args: readonly string[]): UiParseResult;
28
29
  export declare function applyServerTimeouts(server: Server): void;
29
30
  export declare function waitForShutdown(server: Server): Promise<void>;
30
31
  export declare function reExecWithSqliteFlag(_env: EnvSource, spawnFn: SpawnFn): Promise<number>;
31
32
  export declare function runUiCli(args: readonly string[], io: CliIo, env: EnvSource, deps?: UiCliDeps): Promise<number>;
33
+ export {};
32
34
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxC,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAazC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAID,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,aAAa,CAAC;KAC5B,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAI7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAG3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAEnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,OAAO,GAAG,CACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,YAAY,KACf,YAAY,CAAC;AAqBlB,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAuBrE;AAsDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGxD;AAWD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7D;AA0BD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7F;AAmDD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxC,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAmBzC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,KAAK,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;AAa/C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,aAAa,CAAC;KAC5B,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAI7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAG3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAEnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,OAAO,GAAG,CACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,YAAY,KACf,YAAY,CAAC;AA8DlB,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAYlE;AAkFD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGxD;AAWD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7D;AA0BD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7F;AAqGD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,EACT,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
@@ -11,7 +11,7 @@
11
11
  // inheriting stdio and forwarding SIGINT/SIGTERM to the child, then propagates the child's exit
12
12
  // code. Injected-test invocations skip the guard entirely.
13
13
  import { existsSync, readFileSync } from "node:fs";
14
- import { dirname, join, resolve } from "node:path";
14
+ import { dirname, isAbsolute, join, resolve } from "node:path";
15
15
  import { fileURLToPath } from "node:url";
16
16
  import { createRequire } from "node:module";
17
17
  import { spawn } from "node:child_process";
@@ -19,20 +19,18 @@ import { createUiServer, loadCspHeader, buildUiHandlerDeps, DEFAULT_UI_PORT, UI_
19
19
  const ALLOWED_HOSTS = new Set(["127.0.0.1", "localhost"]);
20
20
  const SQLITE_FLAG = "--experimental-sqlite";
21
21
  const KEIKO_ENV_NAME_RE = /^KEIKO_[A-Z0-9_]+$/;
22
+ // Non-KEIKO names the local .env loader may import. Deliberately a closed allowlist —
23
+ // arbitrary secrets must never be slurped into the server process. FIGMA_ACCESS_TOKEN is
24
+ // part of the documented Figma connector contract (#751): the read-only PAT is configured
25
+ // via .env and consumed server-side only.
26
+ const ENV_NAME_ALLOWLIST = new Set(["FIGMA_ACCESS_TOKEN"]);
27
+ const DEFAULT_STATE_DIR = ".keiko";
22
28
  const USAGE = `Usage:
23
29
  keiko ui [--port PORT] [--host 127.0.0.1|localhost] [--evidence-dir PATH] [--config PATH] [--ui-db PATH]
24
30
 
25
31
  Launches the local Keiko UI on the loopback interface and prints its URL. The server
26
32
  binds 127.0.0.1 only and serves the packaged UI assets (built with \`npm run build:ui\`).
27
33
  `;
28
- function flagValue(args, name) {
29
- const i = args.indexOf(name);
30
- if (i === -1) {
31
- return undefined;
32
- }
33
- const value = args[i + 1];
34
- return value === undefined || value.startsWith("--") ? null : value;
35
- }
36
34
  function parsePort(raw) {
37
35
  if (!/^\d{1,5}$/.test(raw)) {
38
36
  return null;
@@ -40,21 +38,61 @@ function parsePort(raw) {
40
38
  const port = Number(raw);
41
39
  return port >= 1 && port <= 65535 ? port : null;
42
40
  }
41
+ function readFlagValue(args, index) {
42
+ const value = args[index + 1];
43
+ return value === undefined || value.startsWith("--") ? null : value;
44
+ }
45
+ function isUiFlag(arg) {
46
+ return (arg === "--port" ||
47
+ arg === "--host" ||
48
+ arg === "--evidence-dir" ||
49
+ arg === "--config" ||
50
+ arg === "--ui-db");
51
+ }
52
+ function setRawUiOption(raw, flag, value) {
53
+ switch (flag) {
54
+ case "--port":
55
+ raw.portRaw = value;
56
+ return;
57
+ case "--host":
58
+ raw.hostRaw = value;
59
+ return;
60
+ case "--evidence-dir":
61
+ raw.evidenceRaw = value;
62
+ return;
63
+ case "--config":
64
+ raw.configRaw = value;
65
+ return;
66
+ case "--ui-db":
67
+ raw.uiDbRaw = value;
68
+ return;
69
+ }
70
+ }
71
+ function collectUiOptions(args) {
72
+ const raw = {};
73
+ for (let i = 0; i < args.length; i += 1) {
74
+ const arg = args[i];
75
+ if (arg === undefined)
76
+ return null;
77
+ if (arg === "--help" || arg === "-h")
78
+ return "help";
79
+ if (!isUiFlag(arg))
80
+ return null;
81
+ const value = readFlagValue(args, i);
82
+ if (value === null)
83
+ return null;
84
+ setRawUiOption(raw, arg, value);
85
+ i += 1;
86
+ }
87
+ return raw;
88
+ }
43
89
  // Parses flags. Returns the parsed args, or null on any usage error (missing flag value, invalid
44
90
  // port, or a host other than the two loopback names).
45
91
  export function parseUiArgs(args) {
46
- const portRaw = flagValue(args, "--port");
47
- const hostRaw = flagValue(args, "--host");
48
- const evidenceRaw = flagValue(args, "--evidence-dir");
49
- const configRaw = flagValue(args, "--config");
50
- const uiDbRaw = flagValue(args, "--ui-db");
51
- if (portRaw === null ||
52
- hostRaw === null ||
53
- evidenceRaw === null ||
54
- configRaw === null ||
55
- uiDbRaw === null) {
56
- return null;
57
- }
92
+ const raw = collectUiOptions(args);
93
+ if (raw === "help" || raw === null)
94
+ return raw;
95
+ const { portRaw, hostRaw, evidenceRaw, configRaw, uiDbRaw } = raw;
58
96
  if (hostRaw !== undefined && !ALLOWED_HOSTS.has(hostRaw)) {
59
97
  return null;
60
98
  }
@@ -100,7 +138,7 @@ function loadLocalKeikoEnv(cwd, env) {
100
138
  if (equals <= 0)
101
139
  continue;
102
140
  const key = line.slice(0, equals).trim();
103
- if (!KEIKO_ENV_NAME_RE.test(key))
141
+ if (!KEIKO_ENV_NAME_RE.test(key) && !ENV_NAME_ALLOWLIST.has(key))
104
142
  continue;
105
143
  if (merged[key] !== undefined)
106
144
  continue;
@@ -111,6 +149,27 @@ function loadLocalKeikoEnv(cwd, env) {
111
149
  function resolveUiConfigPath(parsed, env) {
112
150
  return parsed.config ?? env.KEIKO_CONFIG_FILE;
113
151
  }
152
+ function hasEnvValue(value) {
153
+ return value !== undefined && value.length > 0;
154
+ }
155
+ function resolveRuntimeStateDir(cwd, env) {
156
+ const raw = env.KEIKO_STATE_DIR;
157
+ if (hasEnvValue(raw)) {
158
+ return isAbsolute(raw) ? raw : resolve(cwd, raw);
159
+ }
160
+ return resolve(cwd, DEFAULT_STATE_DIR);
161
+ }
162
+ function withDefaultLocalRuntimeStateEnv(cwd, parsed, env) {
163
+ const stateDir = resolveRuntimeStateDir(cwd, env);
164
+ const next = { ...env, KEIKO_STATE_DIR: stateDir };
165
+ if (parsed.uiDbPath === undefined && !hasEnvValue(next.KEIKO_UI_DATA_DIR)) {
166
+ next.KEIKO_UI_DATA_DIR = join(stateDir, "ui");
167
+ }
168
+ if (!hasEnvValue(next.KEIKO_MEMORY_DIR)) {
169
+ next.KEIKO_MEMORY_DIR = join(stateDir, "memory");
170
+ }
171
+ return next;
172
+ }
114
173
  // Conservative request/header timeouts on the loopback BFF (defense in depth, L2/L3): even on
115
174
  // 127.0.0.1 a slow or stuck client must not hold a connection indefinitely. headersTimeout must be
116
175
  // at or below requestTimeout so an incomplete request line/header set is cut first.
@@ -211,12 +270,13 @@ async function maybeReExecForSqlite(env, deps) {
211
270
  const spawnFn = deps.spawnFn ?? spawn;
212
271
  return reExecWithSqliteFlag(env, spawnFn);
213
272
  }
214
- function buildHandlerDepsOrReport(parsed, effectiveEnv, io) {
273
+ function buildHandlerDepsOrReport(parsed, cwd, effectiveEnv, io) {
215
274
  try {
216
275
  return buildUiHandlerDeps({
217
276
  configPath: resolveUiConfigPath(parsed, effectiveEnv),
218
277
  evidenceDir: parsed.evidenceDir,
219
278
  uiDbPath: parsed.uiDbPath,
279
+ initialProjectPath: cwd,
220
280
  env: effectiveEnv,
221
281
  });
222
282
  }
@@ -228,6 +288,19 @@ function buildHandlerDepsOrReport(parsed, effectiveEnv, io) {
228
288
  throw error;
229
289
  }
230
290
  }
291
+ function registerLaunchProjectOrReport(cwd, handlerDeps, io) {
292
+ try {
293
+ handlerDeps.store.createProject(cwd);
294
+ return null;
295
+ }
296
+ catch (error) {
297
+ if (error instanceof UiStoreError) {
298
+ io.err(`keiko ui: ${error.message}\n`);
299
+ return 2;
300
+ }
301
+ throw error;
302
+ }
303
+ }
231
304
  function ensureStaticRoot(staticRoot, io) {
232
305
  if (existsSync(staticRoot)) {
233
306
  return true;
@@ -235,37 +308,54 @@ function ensureStaticRoot(staticRoot, io) {
235
308
  io.err(`keiko ui: UI assets not found at ${staticRoot}. Run \`npm run build:ui\` first.\n`);
236
309
  return false;
237
310
  }
311
+ function parseUiArgsOrExit(args, io) {
312
+ const parsed = parseUiArgs(args);
313
+ if (parsed === "help") {
314
+ io.out(USAGE);
315
+ return 0;
316
+ }
317
+ if (parsed === null) {
318
+ io.err(USAGE);
319
+ return 2;
320
+ }
321
+ return parsed;
322
+ }
238
323
  async function maybeWaitForShutdown(server, deps) {
239
324
  if (deps.createServer !== undefined) {
240
325
  return;
241
326
  }
242
327
  await waitForShutdown(server);
243
328
  }
329
+ async function startUiServer(staticRoot, csp, parsed, handlerDeps, io, deps) {
330
+ const factory = deps.createServer ?? createUiServer;
331
+ const server = await factory({ staticRoot, csp, port: parsed.port, handlerDeps });
332
+ applyServerTimeouts(server);
333
+ await listen(server, parsed.port);
334
+ io.out(`Keiko UI listening on http://${UI_HOST}:${String(parsed.port)}\n`);
335
+ // Block only in the real CLI path (no injected factory). Injected-server tests skip blocking so
336
+ // they don't hang; the real process must stay alive until signalled.
337
+ await maybeWaitForShutdown(server, deps);
338
+ }
244
339
  export async function runUiCli(args, io, env, deps = {}) {
245
- const effectiveEnv = loadLocalKeikoEnv(deps.cwd ?? process.cwd(), env);
340
+ const cwd = deps.cwd ?? process.cwd();
341
+ const effectiveEnv = loadLocalKeikoEnv(cwd, env);
342
+ const parsed = parseUiArgsOrExit(args, io);
343
+ if (typeof parsed === "number")
344
+ return parsed;
246
345
  const reExec = await maybeReExecForSqlite(effectiveEnv, deps);
247
346
  if (reExec !== undefined)
248
347
  return reExec;
249
- const parsed = parseUiArgs(args);
250
- if (parsed === null) {
251
- io.err(USAGE);
252
- return 2;
253
- }
254
348
  const staticRoot = deps.staticRoot ?? defaultStaticRoot();
255
349
  if (!ensureStaticRoot(staticRoot, io)) {
256
350
  return 1;
257
351
  }
258
352
  const csp = await loadCspHeader(deps.hashesFile ?? join(staticRoot, "..", "csp-hashes.json"));
259
- const handlerDeps = buildHandlerDepsOrReport(parsed, effectiveEnv, io);
353
+ const handlerDeps = buildHandlerDepsOrReport(parsed, cwd, withDefaultLocalRuntimeStateEnv(cwd, parsed, effectiveEnv), io);
260
354
  if (typeof handlerDeps === "number")
261
355
  return handlerDeps;
262
- const factory = deps.createServer ?? createUiServer;
263
- const server = await factory({ staticRoot, csp, port: parsed.port, handlerDeps });
264
- applyServerTimeouts(server);
265
- await listen(server, parsed.port);
266
- io.out(`Keiko UI listening on http://${UI_HOST}:${String(parsed.port)}\n`);
267
- // Block only in the real CLI path (no injected factory). Injected-server tests skip blocking so
268
- // they don't hang; the real process must stay alive until signalled.
269
- await maybeWaitForShutdown(server, deps);
356
+ const launchProjectResult = registerLaunchProjectOrReport(cwd, handlerDeps, io);
357
+ if (launchProjectResult !== null)
358
+ return launchProjectResult;
359
+ await startUiServer(staticRoot, csp, parsed, handlerDeps, io, deps);
270
360
  return 0;
271
361
  }