@oscharko-dev/keiko 0.2.0-beta.7 → 0.2.0-beta.9

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 (314) hide show
  1. package/dist/ui/csp-hashes.json +14 -14
  2. package/dist/ui/static/404.html +1 -1
  3. package/dist/ui/static/__next.__PAGE__.txt +2 -2
  4. package/dist/ui/static/__next._full.txt +3 -3
  5. package/dist/ui/static/__next._head.txt +1 -1
  6. package/dist/ui/static/__next._index.txt +2 -2
  7. package/dist/ui/static/__next._tree.txt +2 -2
  8. package/dist/ui/static/_next/static/chunks/06-q1ntr51v8r.js +1 -0
  9. package/dist/ui/static/_next/static/chunks/0y9qlvrxsyign.js +109 -0
  10. package/dist/ui/static/_next/static/chunks/1h0v66-p9cx19.css +1 -0
  11. package/dist/ui/static/_next/static/chunks/3ewv4mguqzooj.js +1 -0
  12. package/dist/ui/static/_not-found/__next._full.txt +2 -2
  13. package/dist/ui/static/_not-found/__next._head.txt +1 -1
  14. package/dist/ui/static/_not-found/__next._index.txt +2 -2
  15. package/dist/ui/static/_not-found/__next._not-found.__PAGE__.txt +1 -1
  16. package/dist/ui/static/_not-found/__next._not-found.txt +1 -1
  17. package/dist/ui/static/_not-found/__next._tree.txt +2 -2
  18. package/dist/ui/static/_not-found.html +1 -1
  19. package/dist/ui/static/_not-found.txt +2 -2
  20. package/dist/ui/static/fonts/OFL.txt +93 -0
  21. package/dist/ui/static/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  22. package/dist/ui/static/index.html +1 -1
  23. package/dist/ui/static/index.txt +3 -3
  24. package/dist/ui/static/launch/__next._full.txt +3 -3
  25. package/dist/ui/static/launch/__next._head.txt +1 -1
  26. package/dist/ui/static/launch/__next._index.txt +2 -2
  27. package/dist/ui/static/launch/__next._tree.txt +2 -2
  28. package/dist/ui/static/launch/__next.launch.__PAGE__.txt +2 -2
  29. package/dist/ui/static/launch/__next.launch.txt +1 -1
  30. package/dist/ui/static/launch.html +1 -1
  31. package/dist/ui/static/launch.txt +3 -3
  32. package/dist/ui/static/local-knowledge/__next._full.txt +3 -3
  33. package/dist/ui/static/local-knowledge/__next._head.txt +1 -1
  34. package/dist/ui/static/local-knowledge/__next._index.txt +2 -2
  35. package/dist/ui/static/local-knowledge/__next._tree.txt +2 -2
  36. package/dist/ui/static/local-knowledge/__next.local-knowledge.__PAGE__.txt +2 -2
  37. package/dist/ui/static/local-knowledge/__next.local-knowledge.txt +1 -1
  38. package/dist/ui/static/local-knowledge/capsule/__next._full.txt +3 -3
  39. package/dist/ui/static/local-knowledge/capsule/__next._head.txt +1 -1
  40. package/dist/ui/static/local-knowledge/capsule/__next._index.txt +2 -2
  41. package/dist/ui/static/local-knowledge/capsule/__next._tree.txt +2 -2
  42. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.__PAGE__.txt +2 -2
  43. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.txt +1 -1
  44. package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.txt +1 -1
  45. package/dist/ui/static/local-knowledge/capsule.html +1 -1
  46. package/dist/ui/static/local-knowledge/capsule.txt +3 -3
  47. package/dist/ui/static/local-knowledge.html +1 -1
  48. package/dist/ui/static/local-knowledge.txt +3 -3
  49. package/dist/ui/static/memoriaviva/__next._full.txt +2 -2
  50. package/dist/ui/static/memoriaviva/__next._head.txt +1 -1
  51. package/dist/ui/static/memoriaviva/__next._index.txt +2 -2
  52. package/dist/ui/static/memoriaviva/__next._tree.txt +2 -2
  53. package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +1 -1
  54. package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +1 -1
  55. package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +2 -2
  56. package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +1 -1
  57. package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +2 -2
  58. package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -2
  59. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +1 -1
  60. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +1 -1
  61. package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +1 -1
  62. package/dist/ui/static/memoriaviva/consolidation.html +1 -1
  63. package/dist/ui/static/memoriaviva/consolidation.txt +2 -2
  64. package/dist/ui/static/memoriaviva/detail/__next._full.txt +2 -2
  65. package/dist/ui/static/memoriaviva/detail/__next._head.txt +1 -1
  66. package/dist/ui/static/memoriaviva/detail/__next._index.txt +2 -2
  67. package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -2
  68. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +1 -1
  69. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +1 -1
  70. package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +1 -1
  71. package/dist/ui/static/memoriaviva/detail.html +1 -1
  72. package/dist/ui/static/memoriaviva/detail.txt +2 -2
  73. package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +2 -2
  74. package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +1 -1
  75. package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +2 -2
  76. package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -2
  77. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +1 -1
  78. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +1 -1
  79. package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +1 -1
  80. package/dist/ui/static/memoriaviva/review-queue.html +1 -1
  81. package/dist/ui/static/memoriaviva/review-queue.txt +2 -2
  82. package/dist/ui/static/memoriaviva.html +1 -1
  83. package/dist/ui/static/memoriaviva.txt +2 -2
  84. package/dist/ui/static/sw.js +7 -3
  85. package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
  86. package/node_modules/@oscharko-dev/keiko-cli/dist/memory.d.ts.map +1 -1
  87. package/node_modules/@oscharko-dev/keiko-cli/dist/memory.js +4 -5
  88. package/node_modules/@oscharko-dev/keiko-cli/package.json +1 -1
  89. package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
  90. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +2 -2
  91. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
  92. package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +1 -1
  93. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts +36 -4
  94. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts.map +1 -1
  95. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts +1 -1
  96. package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/index.d.ts.map +1 -1
  97. package/node_modules/@oscharko-dev/keiko-contracts/package.json +1 -1
  98. package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
  99. package/node_modules/@oscharko-dev/keiko-evaluations/package.json +1 -1
  100. package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
  101. package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts +1 -1
  102. package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts.map +1 -1
  103. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +15 -0
  104. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
  105. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.js +13 -3
  106. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +13 -0
  107. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
  108. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +46 -2
  109. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts +2 -2
  110. package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts.map +1 -1
  111. package/node_modules/@oscharko-dev/keiko-evidence/package.json +1 -1
  112. package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
  113. package/node_modules/@oscharko-dev/keiko-harness/package.json +1 -1
  114. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
  115. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
  116. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +0 -10
  117. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts +2 -2
  118. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts.map +1 -1
  119. package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.js +3 -3
  120. package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +1 -1
  121. package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +1 -1
  122. package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +1 -1
  123. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
  124. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/index.d.ts +1 -1
  125. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/index.d.ts.map +1 -1
  126. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/index.js +1 -1
  127. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/maintenance.d.ts +2 -16
  128. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/maintenance.d.ts.map +1 -1
  129. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/maintenance.js +49 -48
  130. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/retention.d.ts +2 -1
  131. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/retention.d.ts.map +1 -1
  132. package/node_modules/@oscharko-dev/keiko-memory-governance/dist/retention.js +15 -0
  133. package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +1 -1
  134. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
  135. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/decay.d.ts +2 -0
  136. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/decay.d.ts.map +1 -0
  137. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/decay.js +22 -0
  138. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/diversity.d.ts +8 -0
  139. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/diversity.d.ts.map +1 -0
  140. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/diversity.js +87 -0
  141. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/index.d.ts +4 -2
  142. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/index.d.ts.map +1 -1
  143. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/index.js +4 -1
  144. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/ranking.d.ts +5 -1
  145. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/ranking.d.ts.map +1 -1
  146. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/ranking.js +140 -21
  147. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/recency.d.ts.map +1 -1
  148. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/recency.js +4 -10
  149. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/retrieve.d.ts.map +1 -1
  150. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/retrieve.js +11 -1
  151. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/strength.d.ts +9 -0
  152. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/strength.d.ts.map +1 -0
  153. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/strength.js +51 -0
  154. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/types.d.ts +11 -0
  155. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/types.d.ts.map +1 -1
  156. package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/types.js +7 -0
  157. package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +1 -1
  158. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
  159. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/access.d.ts +3 -0
  160. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/access.d.ts.map +1 -1
  161. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/access.js +31 -1
  162. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.d.ts +1 -1
  163. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.d.ts.map +1 -1
  164. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/schema.js +16 -1
  165. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/types.d.ts +1 -0
  166. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/types.d.ts.map +1 -1
  167. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/vault.d.ts.map +1 -1
  168. package/node_modules/@oscharko-dev/keiko-memory-vault/dist/vault.js +4 -1
  169. package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +1 -1
  170. package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
  171. package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +1 -1
  172. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
  173. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts +8 -0
  174. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
  175. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +9 -5
  176. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.d.ts +6 -0
  177. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.d.ts.map +1 -1
  178. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testDesignModel.js +116 -21
  179. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testQualityRubric.d.ts +6 -0
  180. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testQualityRubric.d.ts.map +1 -1
  181. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/testQualityRubric.js +12 -0
  182. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
  183. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +8 -7
  184. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/parseGeneratedCandidates.d.ts.map +1 -1
  185. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/parseGeneratedCandidates.js +29 -7
  186. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/prompt.d.ts.map +1 -1
  187. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/generation/prompt.js +61 -24
  188. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.d.ts +1 -1
  189. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.d.ts.map +1 -1
  190. package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/index.js +1 -1
  191. package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +1 -1
  192. package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
  193. package/node_modules/@oscharko-dev/keiko-sdk/package.json +1 -1
  194. package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
  195. package/node_modules/@oscharko-dev/keiko-security/package.json +1 -1
  196. package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
  197. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
  198. package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +44 -65
  199. package/node_modules/@oscharko-dev/keiko-server/dist/conversation-prompt.d.ts.map +1 -1
  200. package/node_modules/@oscharko-dev/keiko-server/dist/conversation-prompt.js +2 -0
  201. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +2 -0
  202. package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
  203. package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +1 -0
  204. package/node_modules/@oscharko-dev/keiko-server/dist/gateway-setup.d.ts.map +1 -1
  205. package/node_modules/@oscharko-dev/keiko-server/dist/gateway-setup.js +333 -70
  206. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts +1 -0
  207. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts.map +1 -1
  208. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.js +410 -18
  209. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.d.ts.map +1 -1
  210. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.js +1 -0
  211. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
  212. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +7 -5
  213. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +4 -3
  214. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts +1 -0
  215. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
  216. package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +4 -1
  217. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts +1 -0
  218. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
  219. package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +8 -3
  220. package/node_modules/@oscharko-dev/keiko-server/dist/memory-conv-handlers.d.ts.map +1 -1
  221. package/node_modules/@oscharko-dev/keiko-server/dist/memory-conv-handlers.js +34 -5
  222. package/node_modules/@oscharko-dev/keiko-server/dist/memory-embedding.d.ts +12 -2
  223. package/node_modules/@oscharko-dev/keiko-server/dist/memory-embedding.d.ts.map +1 -1
  224. package/node_modules/@oscharko-dev/keiko-server/dist/memory-embedding.js +127 -0
  225. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.d.ts.map +1 -1
  226. package/node_modules/@oscharko-dev/keiko-server/dist/memory-handlers.js +40 -11
  227. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.d.ts +16 -3
  228. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.d.ts.map +1 -1
  229. package/node_modules/@oscharko-dev/keiko-server/dist/memory-maintenance-handlers.js +72 -50
  230. package/node_modules/@oscharko-dev/keiko-server/dist/memory-retrieval-signals.d.ts +12 -0
  231. package/node_modules/@oscharko-dev/keiko-server/dist/memory-retrieval-signals.d.ts.map +1 -0
  232. package/node_modules/@oscharko-dev/keiko-server/dist/memory-retrieval-signals.js +84 -0
  233. package/node_modules/@oscharko-dev/keiko-server/dist/memory-salience.d.ts.map +1 -1
  234. package/node_modules/@oscharko-dev/keiko-server/dist/memory-salience.js +11 -6
  235. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnector.d.ts.map +1 -1
  236. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnector.js +9 -4
  237. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts +6 -5
  238. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts.map +1 -1
  239. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaScopedPagination.js +10 -9
  240. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts +2 -1
  241. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
  242. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +62 -26
  243. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts +2 -0
  244. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -1
  245. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.js +6 -3
  246. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +14 -0
  247. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
  248. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +33 -0
  249. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
  250. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +263 -5
  251. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts +19 -0
  252. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts.map +1 -0
  253. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotScreenIds.js +75 -0
  254. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
  255. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +13 -12
  256. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.d.ts +6 -6
  257. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.d.ts.map +1 -1
  258. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/modelSelection.js +12 -7
  259. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
  260. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +34 -3
  261. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts +4 -2
  262. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
  263. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +222 -35
  264. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts +7 -0
  265. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
  266. package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +68 -16
  267. package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
  268. package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +7 -1
  269. package/node_modules/@oscharko-dev/keiko-server/package.json +1 -1
  270. package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
  271. package/node_modules/@oscharko-dev/keiko-tools/package.json +1 -1
  272. package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
  273. package/node_modules/@oscharko-dev/keiko-verification/package.json +1 -1
  274. package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
  275. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/anchors.d.ts.map +1 -1
  276. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/anchors.js +45 -0
  277. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/index.d.ts +2 -0
  278. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/index.d.ts.map +1 -1
  279. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/index.js +1 -0
  280. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/intent.d.ts +8 -0
  281. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/intent.d.ts.map +1 -0
  282. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/intent.js +140 -0
  283. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts +2 -0
  284. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts.map +1 -1
  285. package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.js +21 -5
  286. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
  287. package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +86 -40
  288. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.d.ts.map +1 -1
  289. package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.js +9 -0
  290. package/node_modules/@oscharko-dev/keiko-workflows/package.json +1 -1
  291. package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
  292. package/node_modules/@oscharko-dev/keiko-workspace/dist/index.d.ts +1 -0
  293. package/node_modules/@oscharko-dev/keiko-workspace/dist/index.d.ts.map +1 -1
  294. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts +3 -0
  295. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts.map +1 -1
  296. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.js +23 -6
  297. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts +1 -1
  298. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
  299. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +24 -3
  300. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchPolicy.d.ts +34 -0
  301. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchPolicy.d.ts.map +1 -0
  302. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchPolicy.js +342 -0
  303. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts +6 -1
  304. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts.map +1 -1
  305. package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.js +57 -9
  306. package/node_modules/@oscharko-dev/keiko-workspace/package.json +1 -1
  307. package/package.json +2 -1
  308. package/dist/ui/static/_next/static/chunks/0-qhhdvxg2j_y.js +0 -1
  309. package/dist/ui/static/_next/static/chunks/0ke4ratkgvcxo.css +0 -1
  310. package/dist/ui/static/_next/static/chunks/3vf3oh2-sl2nc.js +0 -1
  311. package/dist/ui/static/_next/static/chunks/3wmd4-2vznp2g.js +0 -106
  312. /package/dist/ui/static/_next/static/{frhs0YcUqCPLHal-wHjDP → a5sUbXeTgQ9A2LRTMu_Q_}/_buildManifest.js +0 -0
  313. /package/dist/ui/static/_next/static/{frhs0YcUqCPLHal-wHjDP → a5sUbXeTgQ9A2LRTMu_Q_}/_clientMiddlewareManifest.js +0 -0
  314. /package/dist/ui/static/_next/static/{frhs0YcUqCPLHal-wHjDP → a5sUbXeTgQ9A2LRTMu_Q_}/_ssgManifest.js +0 -0
@@ -9,7 +9,10 @@ import { apiKeyHeaderValue, ConfigInvalidError, DEFAULT_API_KEY_HEADER_NAME, Gat
9
9
  import { gatewayFetch, readJsonCapped } from "@oscharko-dev/keiko-model-gateway/internal/http";
10
10
  import { redact } from "@oscharko-dev/keiko-security";
11
11
  import { errorBody } from "./routes.js";
12
- import { currentGatewayEgressConfig } from "./deps.js";
12
+ import { currentGatewayConfig, currentGatewayEgressConfig } from "./deps.js";
13
+ import { CONVERSATION_SYSTEM_PROMPT } from "./conversation-prompt.js";
14
+ import { classifyFigmaTransportError, FigmaConnectorError, } from "./qualityIntelligence/figma/figmaConnectorErrors.js";
15
+ import { classifyTokenFailure } from "./qualityIntelligence/figma/figmaTokenSource.js";
13
16
  const MAX_BODY_BYTES = 64_000;
14
17
  // Issue #144: exported so discovery-normalization tests can pin the slice cap
15
18
  // without hardcoding the number. The discovery surface is a public seam.
@@ -18,6 +21,8 @@ const MAX_DEPLOYMENT_NAMES = 100;
18
21
  const MAX_MODEL_ID_LENGTH = 160;
19
22
  const DISCOVERED_MODEL_SMOKE_TIMEOUT_MS = 15_000;
20
23
  const DEPLOYMENT_SMOKE_TIMEOUT_MS = 30_000;
24
+ const FIGMA_CREDENTIAL_SMOKE_TIMEOUT_MS = 15_000;
25
+ const FIGMA_CREDENTIAL_SMOKE_RESPONSE_BYTES = 64_000;
21
26
  const SETUP_SMOKE_CONCURRENCY = 4;
22
27
  const CHAT_COMPATIBLE_MODES = new Set(["chat", "completion", "responses"]);
23
28
  const EMBEDDING_ID_PATTERN = /(?:^|[-_/. ])(?:text-)?embed(?:ding)?s?(?:[-_/. ]|$)|ada-002(?:$|[-_/. ])/i;
@@ -72,12 +77,16 @@ function candidateBaseUrls(baseUrl) {
72
77
  try {
73
78
  const url = new URL(primary);
74
79
  if (url.hostname.endsWith(".services.ai.azure.com")) {
80
+ const openAiV1 = `${url.origin}/openai/v1`;
75
81
  if (url.pathname === "" || url.pathname === "/") {
76
82
  candidates.push(`${url.origin}/openai/v1`);
77
83
  }
78
84
  else if (primary.endsWith("/openai")) {
79
85
  candidates.push(`${primary}/v1`);
80
86
  }
87
+ else if (primary !== openAiV1 && !primary.endsWith("/openai/v1")) {
88
+ candidates.push(openAiV1);
89
+ }
81
90
  }
82
91
  else if (!primary.endsWith("/v1")) {
83
92
  candidates.push(`${primary}/v1`);
@@ -113,7 +122,7 @@ function providerRaw(modelId, baseUrl, apiKey, options = {}) {
113
122
  : defaultCapability,
114
123
  timeoutMs: options.timeoutMs ?? 30_000,
115
124
  maxRetries: options.maxRetries ?? 2,
116
- retryBaseDelayMs: 500,
125
+ retryBaseDelayMs: options.retryBaseDelayMs ?? 500,
117
126
  };
118
127
  }
119
128
  function isLikelyEmbeddingModelId(modelId) {
@@ -161,6 +170,32 @@ function buildRawConfig(baseUrl, apiKey, modelIds, options = {}) {
161
170
  circuitBreaker: { failureThreshold: 5, cooldownMs: 30_000, halfOpenProbes: 2 },
162
171
  };
163
172
  }
173
+ function currentImageInputModelIds(config) {
174
+ return (config?.capabilities
175
+ ?.filter((capability) => capability.kind === "chat" && capability.supportsImageInput)
176
+ .map((capability) => capability.id) ?? []);
177
+ }
178
+ function rawConfigFromCurrent(config, figmaAccessToken) {
179
+ return {
180
+ providers: config.providers.map((provider) => {
181
+ const capability = config.capabilities?.find((item) => item.id === provider.modelId);
182
+ return {
183
+ modelId: provider.modelId,
184
+ baseUrl: provider.baseUrl,
185
+ apiKey: provider.apiKey,
186
+ apiKeyHeaderName: provider.apiKeyHeaderName ?? DEFAULT_API_KEY_HEADER_NAME,
187
+ timeoutMs: provider.timeoutMs,
188
+ maxRetries: provider.maxRetries,
189
+ retryBaseDelayMs: provider.retryBaseDelayMs,
190
+ ...(capability === undefined ? {} : { capability }),
191
+ };
192
+ }),
193
+ circuitBreaker: config.circuitBreaker,
194
+ ...(config.capabilities === undefined ? {} : { capabilities: config.capabilities }),
195
+ ...(config.grounding === undefined ? {} : { grounding: config.grounding }),
196
+ ...(figmaAccessToken === undefined ? {} : { figma: { accessToken: figmaAccessToken } }),
197
+ };
198
+ }
164
199
  function withInheritedEgress(rawConfig, egress) {
165
200
  if (egress === undefined || Object.hasOwn(rawConfig, "egress")) {
166
201
  return rawConfig;
@@ -420,10 +455,53 @@ async function defaultGatewaySetupTester(config, candidateModelIds) {
420
455
  return smokeTestCandidates(candidateModelIds, async (modelId) => {
421
456
  await gateway.chat({
422
457
  modelId,
423
- messages: [{ role: "user", content: "Reply with exactly: OK" }],
458
+ messages: [
459
+ { role: "system", content: CONVERSATION_SYSTEM_PROMPT },
460
+ { role: "user", content: "Reply with exactly: OK" },
461
+ ],
424
462
  });
425
463
  }, SETUP_SMOKE_CONCURRENCY);
426
464
  }
465
+ const FIGMA_ME_ENDPOINT = "https://api.figma.com/v1/me";
466
+ function figmaReason(body) {
467
+ if (!isRecord(body))
468
+ return undefined;
469
+ const reason = body.err ?? body.message;
470
+ return typeof reason === "string" ? reason : undefined;
471
+ }
472
+ async function defaultFigmaCredentialTester(accessToken, egress) {
473
+ try {
474
+ const response = await gatewayFetch(FIGMA_ME_ENDPOINT, {
475
+ method: "GET",
476
+ headers: {
477
+ Accept: "application/json",
478
+ "X-Figma-Token": accessToken,
479
+ },
480
+ redirect: "manual",
481
+ signal: AbortSignal.timeout(FIGMA_CREDENTIAL_SMOKE_TIMEOUT_MS),
482
+ ...(egress !== undefined ? { egress } : {}),
483
+ });
484
+ let body;
485
+ try {
486
+ body = await readJsonCapped(response, FIGMA_CREDENTIAL_SMOKE_RESPONSE_BYTES);
487
+ }
488
+ catch {
489
+ throw new FigmaConnectorError("FIGMA_RESPONSE_TOO_LARGE");
490
+ }
491
+ if (!response.ok) {
492
+ throw classifyTokenFailure(response.status, figmaReason(body));
493
+ }
494
+ if (!isRecord(body)) {
495
+ throw new FigmaConnectorError("FIGMA_INTERNAL");
496
+ }
497
+ }
498
+ catch (error) {
499
+ if (error instanceof FigmaConnectorError) {
500
+ throw error;
501
+ }
502
+ throw new FigmaConnectorError(classifyFigmaTransportError(error));
503
+ }
504
+ }
427
505
  function savePrivateJson(path, raw) {
428
506
  const resolvedPath = resolve(path);
429
507
  const dir = dirname(resolvedPath);
@@ -498,39 +576,111 @@ function readSetupModelLists(raw) {
498
576
  }
499
577
  return { deploymentNames, imageInputModelIds };
500
578
  }
501
- function readSetupRequest(raw, env) {
502
- if (!isRecord(raw)) {
503
- return { status: 400, body: errorBody("BAD_REQUEST", "Request body must be a JSON object.") };
579
+ function optionalSetupSecret(value, path) {
580
+ if (value === undefined) {
581
+ return undefined;
582
+ }
583
+ if (typeof value !== "string") {
584
+ return { status: 400, body: errorBody("BAD_REQUEST", `${path} must be a string.`) };
585
+ }
586
+ const trimmed = value.trim();
587
+ return trimmed.length === 0 ? undefined : trimmed;
588
+ }
589
+ function hasNonBlankStringField(raw, key) {
590
+ const value = raw[key];
591
+ return typeof value === "string" && value.trim().length > 0;
592
+ }
593
+ function hasNonEmptyListField(raw, key) {
594
+ const value = raw[key];
595
+ if (typeof value === "string") {
596
+ return normalizeDeploymentNames(deploymentNameValues(value) ?? []).length > 0;
597
+ }
598
+ return Array.isArray(value) && value.some((item) => typeof item === "string" && item.trim());
599
+ }
600
+ function shouldPreserveExisting(raw, current) {
601
+ return raw.preserveExisting === true && current !== undefined;
602
+ }
603
+ function firstProvider(current) {
604
+ return current?.providers[0];
605
+ }
606
+ function trimmedSubmittedString(raw, key) {
607
+ const value = raw[key];
608
+ if (typeof value !== "string")
609
+ return undefined;
610
+ const trimmed = value.trim();
611
+ return trimmed.length === 0 ? undefined : trimmed;
612
+ }
613
+ function submittedOrInheritedString(raw, key, inherited, preserveExisting) {
614
+ return trimmedSubmittedString(raw, key) ?? (preserveExisting ? (inherited ?? "") : "");
615
+ }
616
+ function setupApiKeyHeaderSource(raw, provider, preserveExisting) {
617
+ if (raw.apiKeyHeaderName !== undefined || !preserveExisting) {
618
+ return raw.apiKeyHeaderName;
504
619
  }
505
- const baseUrl = typeof raw.baseUrl === "string" ? raw.baseUrl.trim() : "";
506
- const apiKey = typeof raw.apiKey === "string" ? raw.apiKey.trim() : "";
620
+ return provider?.apiKeyHeaderName ?? DEFAULT_API_KEY_HEADER_NAME;
621
+ }
622
+ function readSetupGatewayCredentials(raw, env, current, preserveExisting) {
623
+ const provider = firstProvider(current);
624
+ const baseUrl = submittedOrInheritedString(raw, "baseUrl", provider?.baseUrl, preserveExisting);
625
+ const apiKey = submittedOrInheritedString(raw, "apiKey", provider?.apiKey, preserveExisting);
507
626
  if (baseUrl.length === 0 || apiKey.length === 0) {
508
627
  return { status: 400, body: errorBody("BAD_REQUEST", "baseUrl and apiKey are required.") };
509
628
  }
510
- const apiKeyHeaderName = normalizeSetupApiKeyHeaderName(raw.apiKeyHeaderName);
629
+ const apiKeyHeaderSource = setupApiKeyHeaderSource(raw, provider, preserveExisting);
630
+ const apiKeyHeaderName = normalizeSetupApiKeyHeaderName(apiKeyHeaderSource);
511
631
  if (isRouteResult(apiKeyHeaderName)) {
512
632
  return apiKeyHeaderName;
513
633
  }
634
+ const invalidConnection = validateSetupConnection(baseUrl, apiKey, apiKeyHeaderName, env);
635
+ if (invalidConnection !== undefined) {
636
+ return invalidConnection;
637
+ }
638
+ return { baseUrl, apiKey, apiKeyHeaderName };
639
+ }
640
+ function resolveSetupModelLists(modelLists, current, preserveExisting) {
641
+ const existing = preserveExisting ? current : undefined;
642
+ return {
643
+ deploymentNames: existing !== undefined && modelLists.deploymentNames.length === 0
644
+ ? existing.providers.map((item) => item.modelId)
645
+ : modelLists.deploymentNames,
646
+ imageInputModelIds: existing !== undefined && modelLists.imageInputModelIds.length === 0
647
+ ? currentImageInputModelIds(existing)
648
+ : modelLists.imageInputModelIds,
649
+ };
650
+ }
651
+ function setupRequiresGatewayVerification(raw, preserveExisting) {
652
+ return (!preserveExisting ||
653
+ hasNonBlankStringField(raw, "baseUrl") ||
654
+ hasNonBlankStringField(raw, "apiKey") ||
655
+ hasNonBlankStringField(raw, "apiKeyHeaderName") ||
656
+ hasNonEmptyListField(raw, "deploymentNames") ||
657
+ hasNonEmptyListField(raw, "imageInputModelIds"));
658
+ }
659
+ function readSetupRequest(raw, env, current) {
660
+ if (!isRecord(raw)) {
661
+ return { status: 400, body: errorBody("BAD_REQUEST", "Request body must be a JSON object.") };
662
+ }
663
+ const preserveExisting = shouldPreserveExisting(raw, current);
664
+ const credentials = readSetupGatewayCredentials(raw, env, current, preserveExisting);
665
+ if (isRouteResult(credentials)) {
666
+ return credentials;
667
+ }
514
668
  const modelLists = readSetupModelLists(raw);
515
669
  if (isRouteResult(modelLists)) {
516
670
  return modelLists;
517
671
  }
518
- if (Object.hasOwn(raw, "figmaAccessToken")) {
519
- return {
520
- status: 400,
521
- body: errorBody("BAD_REQUEST", "Figma access tokens must be configured server-side, not through gateway setup."),
522
- };
523
- }
524
- const invalidConnection = validateSetupConnection(baseUrl, apiKey, apiKeyHeaderName, env);
525
- if (invalidConnection !== undefined) {
526
- return invalidConnection;
672
+ const figmaAccessToken = optionalSetupSecret(raw.figmaAccessToken, "figmaAccessToken");
673
+ if (isRouteResult(figmaAccessToken)) {
674
+ return figmaAccessToken;
527
675
  }
676
+ const resolvedModelLists = resolveSetupModelLists(modelLists, current, preserveExisting);
528
677
  return {
529
- baseUrl,
530
- apiKey,
531
- apiKeyHeaderName,
532
- deploymentNames: modelLists.deploymentNames,
533
- imageInputModelIds: modelLists.imageInputModelIds,
678
+ ...credentials,
679
+ deploymentNames: resolvedModelLists.deploymentNames,
680
+ imageInputModelIds: resolvedModelLists.imageInputModelIds,
681
+ figmaAccessToken: figmaAccessToken ?? current?.figma?.accessToken,
682
+ verifyGateway: setupRequiresGatewayVerification(raw, preserveExisting),
683
+ verifyFigmaCredential: figmaAccessToken !== undefined,
534
684
  };
535
685
  }
536
686
  function safeError(error, secrets) {
@@ -548,39 +698,72 @@ function assertImageInputModelsWereTested(imageInputModelIds, testedModelIds) {
548
698
  throw new Error("imageInputModelIds must match tested chat-callable model ids.");
549
699
  }
550
700
  }
551
- async function verifySetupCandidate(baseUrl, apiKey, apiKeyHeaderName, deploymentNames, imageInputModelIds, tester, discovery, env, egress) {
701
+ function validationConfigForSetup(input) {
702
+ const validationRawConfig = buildRawConfig(input.baseUrl, input.apiKey, ["setup-validation"], {
703
+ apiKeyHeaderName: input.apiKeyHeaderName,
704
+ imageInputModelIds: input.imageInputModelIds,
705
+ });
706
+ return parseGatewayConfig(withInheritedEgress(validationRawConfig, input.egress), input.env);
707
+ }
708
+ async function candidateModelIdsForSetup(input, validationConfig) {
709
+ return input.deploymentNames.length > 0
710
+ ? input.deploymentNames
711
+ : input.discovery(input.baseUrl, input.apiKey, input.apiKeyHeaderName, validationConfig.egress);
712
+ }
713
+ function finalRawConfigForSetup(input, testedModelIds) {
714
+ const embeddingModelIds = embeddingModelIdsFromDeployments(input.deploymentNames);
715
+ const configuredModelIds = mergeChatAndEmbeddingModelIds(testedModelIds, input.deploymentNames);
716
+ const rawConfig = buildRawConfig(input.baseUrl, input.apiKey, configuredModelIds, {
717
+ apiKeyHeaderName: input.apiKeyHeaderName,
718
+ imageInputModelIds: input.imageInputModelIds,
719
+ embeddingModelIds,
720
+ });
721
+ return {
722
+ ...rawConfig,
723
+ ...(input.current?.grounding === undefined ? {} : { grounding: input.current.grounding }),
724
+ ...(input.figmaAccessToken === undefined
725
+ ? {}
726
+ : { figma: { accessToken: input.figmaAccessToken } }),
727
+ };
728
+ }
729
+ function skippedModelIdsForSetup(candidateModelIds, testedModelIds, deploymentNames) {
730
+ const acceptedModelIds = new Set([
731
+ ...testedModelIds,
732
+ ...embeddingModelIdsFromDeployments(deploymentNames),
733
+ ]);
734
+ return candidateModelIds.filter((modelId) => !acceptedModelIds.has(modelId));
735
+ }
736
+ async function verifySetupCandidate(input) {
552
737
  // Defence-in-depth: never send the credential to a candidate URL that has not passed the same
553
738
  // scheme/credential/loopback validation as the originally submitted base URL.
554
- validateBaseUrl(baseUrl, "candidate");
555
- const validationRawConfig = buildRawConfig(baseUrl, apiKey, ["setup-validation"], {
556
- apiKeyHeaderName,
557
- imageInputModelIds,
558
- });
559
- const validationConfig = parseGatewayConfig(withInheritedEgress(validationRawConfig, egress), env);
560
- const candidateModelIds = deploymentNames.length > 0
561
- ? deploymentNames
562
- : await discovery(baseUrl, apiKey, apiKeyHeaderName, validationConfig.egress);
563
- const smokeTimeoutMs = deploymentNames.length > 0 ? DEPLOYMENT_SMOKE_TIMEOUT_MS : DISCOVERED_MODEL_SMOKE_TIMEOUT_MS;
564
- const candidateRawConfig = buildRawConfig(baseUrl, apiKey, candidateModelIds, {
565
- apiKeyHeaderName,
739
+ validateBaseUrl(input.baseUrl, "candidate");
740
+ const validationConfig = validationConfigForSetup(input);
741
+ const candidateModelIds = await candidateModelIdsForSetup(input, validationConfig);
742
+ const smokeTimeoutMs = input.deploymentNames.length > 0
743
+ ? DEPLOYMENT_SMOKE_TIMEOUT_MS
744
+ : DISCOVERED_MODEL_SMOKE_TIMEOUT_MS;
745
+ const candidateRawConfig = buildRawConfig(input.baseUrl, input.apiKey, candidateModelIds, {
746
+ apiKeyHeaderName: input.apiKeyHeaderName,
566
747
  timeoutMs: smokeTimeoutMs,
567
- maxRetries: 0,
568
- imageInputModelIds,
569
- });
570
- const candidateConfig = parseGatewayConfig(withInheritedEgress(candidateRawConfig, egress), env);
571
- const testedModelIds = await tester(candidateConfig, candidateModelIds);
572
- assertImageInputModelsWereTested(imageInputModelIds, testedModelIds);
573
- const embeddingModelIds = embeddingModelIdsFromDeployments(deploymentNames);
574
- const configuredModelIds = mergeChatAndEmbeddingModelIds(testedModelIds, deploymentNames);
575
- const rawConfig = buildRawConfig(baseUrl, apiKey, configuredModelIds, {
576
- apiKeyHeaderName,
577
- imageInputModelIds,
578
- embeddingModelIds,
748
+ // One retry (not zero) so a single transient blip — 429 rate-limit, brief timeout, momentary
749
+ // content-filter — does not permanently exclude an otherwise-working model from the setup and
750
+ // brand it to the user as incompatible. Still bounded so setup latency stays predictable.
751
+ maxRetries: 1,
752
+ imageInputModelIds: input.imageInputModelIds,
579
753
  });
580
- const config = parseGatewayConfig(withInheritedEgress(rawConfig, egress), env);
581
- return { rawConfig, config, testedModelIds };
754
+ const candidateConfig = parseGatewayConfig(withInheritedEgress(candidateRawConfig, input.egress), input.env);
755
+ const testedModelIds = await input.tester(candidateConfig, candidateModelIds);
756
+ assertImageInputModelsWereTested(input.imageInputModelIds, testedModelIds);
757
+ const rawConfigWithOptionalBlocks = finalRawConfigForSetup(input, testedModelIds);
758
+ const config = parseGatewayConfig(withInheritedEgress(rawConfigWithOptionalBlocks, input.egress), input.env);
759
+ return {
760
+ rawConfig: rawConfigWithOptionalBlocks,
761
+ config,
762
+ testedModelIds,
763
+ skippedModelIds: skippedModelIdsForSetup(candidateModelIds, testedModelIds, input.deploymentNames),
764
+ };
582
765
  }
583
- function setupSuccessResult(config, testedModelIds) {
766
+ function setupSuccessResult(config, testedModelIds, skippedModelIds) {
584
767
  const testedModelId = testedModelIds[0] ?? "unknown";
585
768
  return {
586
769
  status: 200,
@@ -588,6 +771,7 @@ function setupSuccessResult(config, testedModelIds) {
588
771
  ok: true,
589
772
  testedModelId,
590
773
  testedModelIds,
774
+ skippedModelIds,
591
775
  providerCount: config.providers.length,
592
776
  models: listConfiguredCapabilities(config),
593
777
  config: toSafeObject(config),
@@ -600,6 +784,45 @@ function setupFailureResult(errors) {
600
784
  body: errorBody("GATEWAY_SETUP_FAILED", `Credentials could not be verified. ${errors.join(" ")}`),
601
785
  };
602
786
  }
787
+ function figmaFailureStatus(code) {
788
+ switch (code) {
789
+ case "FIGMA_TOKEN_INVALID":
790
+ case "FIGMA_TOKEN_EXPIRED":
791
+ case "FIGMA_TOKEN_REVOKED":
792
+ case "FIGMA_INSUFFICIENT_SCOPE":
793
+ case "FIGMA_CONSENT_REQUIRED":
794
+ return 400;
795
+ case "FIGMA_RATE_LIMITED":
796
+ return 429;
797
+ default:
798
+ return 502;
799
+ }
800
+ }
801
+ function figmaCredentialFailureResult(error, request) {
802
+ if (error instanceof FigmaConnectorError) {
803
+ return {
804
+ status: figmaFailureStatus(error.code),
805
+ body: errorBody(error.code, error.message),
806
+ };
807
+ }
808
+ return {
809
+ status: 502,
810
+ body: errorBody("FIGMA_EGRESS_FAILED", safeError(error, [request.figmaAccessToken, request.apiKey, request.baseUrl])),
811
+ };
812
+ }
813
+ async function verifySubmittedFigmaCredential(request, deps) {
814
+ if (!request.verifyFigmaCredential || request.figmaAccessToken === undefined) {
815
+ return undefined;
816
+ }
817
+ const tester = deps.figmaCredentialTester ?? defaultFigmaCredentialTester;
818
+ try {
819
+ await tester(request.figmaAccessToken, currentGatewayEgressConfig(deps));
820
+ return undefined;
821
+ }
822
+ catch (error) {
823
+ return figmaCredentialFailureResult(error, request);
824
+ }
825
+ }
603
826
  function deploymentNamesRequiredResult() {
604
827
  return {
605
828
  status: 400,
@@ -633,39 +856,60 @@ function gatewayUnavailableResult() {
633
856
  body: errorBody("GATEWAY_SETUP_UNAVAILABLE", "Gateway setup is unavailable."),
634
857
  };
635
858
  }
636
- async function trySetupCandidate(baseUrl, request, deps, gatewayConfig, tester, discovery) {
637
- const verified = await verifySetupCandidate(baseUrl, request.apiKey, request.apiKeyHeaderName, request.deploymentNames, request.imageInputModelIds, tester, discovery, deps.env, currentGatewayEgressConfig(deps));
859
+ async function trySetupCandidate(baseUrl, request, deps, gatewayConfig, tester, discovery, current) {
860
+ const verified = await verifySetupCandidate({
861
+ baseUrl,
862
+ apiKey: request.apiKey,
863
+ apiKeyHeaderName: request.apiKeyHeaderName,
864
+ deploymentNames: request.deploymentNames,
865
+ imageInputModelIds: request.imageInputModelIds,
866
+ tester,
867
+ discovery,
868
+ env: deps.env,
869
+ egress: currentGatewayEgressConfig(deps),
870
+ figmaAccessToken: request.figmaAccessToken,
871
+ current,
872
+ });
638
873
  savePrivateJson(gatewayConfig.storagePath, verified.rawConfig);
639
874
  gatewayConfig.set(verified.config, true);
640
- return setupSuccessResult(verified.config, verified.testedModelIds);
875
+ return setupSuccessResult(verified.config, verified.testedModelIds, verified.skippedModelIds);
641
876
  }
642
877
  function setupCandidateError(error, request, baseUrl) {
643
- return safeError(error, [request.apiKey, request.baseUrl, baseUrl]);
878
+ return safeError(error, [request.apiKey, request.baseUrl, baseUrl, request.figmaAccessToken]);
644
879
  }
645
- export async function handleGatewaySetup(ctx, deps) {
646
- if (deps.gatewayConfig === undefined) {
647
- return gatewayUnavailableResult();
648
- }
649
- const { gatewayConfig } = deps;
650
- const bodyResult = await readJsonSetupBody(ctx);
651
- if ("status" in bodyResult) {
652
- return bodyResult;
653
- }
654
- const request = readSetupRequest(bodyResult.parsed, deps.env);
655
- if ("status" in request) {
656
- return request;
880
+ function saveExistingConfigUpdate(request, current, deps, gatewayConfig) {
881
+ const rawConfig = rawConfigFromCurrent(current, request.figmaAccessToken);
882
+ const config = parseGatewayConfig(withInheritedEgress(rawConfig, currentGatewayEgressConfig(deps)), deps.env);
883
+ savePrivateJson(gatewayConfig.storagePath, rawConfig);
884
+ gatewayConfig.set(config, true);
885
+ return setupSuccessResult(config, config.providers.map((provider) => provider.modelId), []);
886
+ }
887
+ async function verifyAndSaveExistingConfigUpdate(request, current, deps, gatewayConfig) {
888
+ const figmaFailure = await verifySubmittedFigmaCredential(request, deps);
889
+ if (figmaFailure !== undefined) {
890
+ return figmaFailure;
657
891
  }
892
+ return saveExistingConfigUpdate(request, current, deps, gatewayConfig);
893
+ }
894
+ function shouldRequireDeploymentNames(request, baseUrlCandidates) {
895
+ return (request.deploymentNames.length === 0 &&
896
+ baseUrlCandidates.some((baseUrl) => isAzureFoundryBaseUrl(baseUrl)));
897
+ }
898
+ async function verifyAndSaveGatewaySetup(request, current, deps, gatewayConfig) {
658
899
  const tester = deps.gatewaySetupTester ?? defaultGatewaySetupTester;
659
900
  const discovery = deps.gatewayModelDiscovery ?? defaultGatewayModelDiscovery;
901
+ const figmaFailure = await verifySubmittedFigmaCredential(request, deps);
902
+ if (figmaFailure !== undefined) {
903
+ return figmaFailure;
904
+ }
660
905
  const baseUrlCandidates = candidateBaseUrls(request.baseUrl);
661
- if (request.deploymentNames.length === 0 &&
662
- baseUrlCandidates.some((baseUrl) => isAzureFoundryBaseUrl(baseUrl))) {
906
+ if (shouldRequireDeploymentNames(request, baseUrlCandidates)) {
663
907
  return deploymentNamesRequiredResult();
664
908
  }
665
909
  const errors = [];
666
910
  for (const baseUrl of baseUrlCandidates) {
667
911
  try {
668
- return await trySetupCandidate(baseUrl, request, deps, gatewayConfig, tester, discovery);
912
+ return await trySetupCandidate(baseUrl, request, deps, gatewayConfig, tester, discovery, current);
669
913
  }
670
914
  catch (error) {
671
915
  errors.push(`candidate ${String(errors.length + 1)}: ${setupCandidateError(error, request, baseUrl)}`);
@@ -673,3 +917,22 @@ export async function handleGatewaySetup(ctx, deps) {
673
917
  }
674
918
  return setupFailureResult(errors);
675
919
  }
920
+ export async function handleGatewaySetup(ctx, deps) {
921
+ if (deps.gatewayConfig === undefined) {
922
+ return gatewayUnavailableResult();
923
+ }
924
+ const { gatewayConfig } = deps;
925
+ const current = currentGatewayConfig(deps);
926
+ const bodyResult = await readJsonSetupBody(ctx);
927
+ if ("status" in bodyResult) {
928
+ return bodyResult;
929
+ }
930
+ const request = readSetupRequest(bodyResult.parsed, deps.env, current);
931
+ if ("status" in request) {
932
+ return request;
933
+ }
934
+ if (!request.verifyGateway && current !== undefined) {
935
+ return verifyAndSaveExistingConfigUpdate(request, current, deps, gatewayConfig);
936
+ }
937
+ return verifyAndSaveGatewaySetup(request, current, deps, gatewayConfig);
938
+ }
@@ -36,6 +36,7 @@ export declare class ClarificationNeededError extends Error {
36
36
  constructor(clarification: ClarificationPrompt);
37
37
  }
38
38
  export declare function clarificationUserMessage(error: ClarificationNeededError): string;
39
+ export declare function isSymbolDefinitionPath(scopePath: string, term: string): boolean;
39
40
  export declare function retrieveConnectedContextPack(input: OrchestratorInput, deps: OrchestratorDeps): Promise<RetrievalOnlyOutput>;
40
41
  export declare function runGroundedExploration(input: OrchestratorInput, deps: OrchestratorDeps): Promise<OrchestratorOutput>;
41
42
  export { DEFAULT_SEARCH_LIMITS };
@@ -1 +1 @@
1
- {"version":3,"file":"grounded-orchestrator.d.ts","sourceRoot":"","sources":["../src/grounded-orchestrator.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EAGtB,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EASL,KAAK,mBAAmB,EAExB,KAAK,eAAe,EAEpB,KAAK,UAAU,EAGhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qBAAqB,EAarB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIlG,MAAM,WAAW,gBAAgB;IAG/B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAE1C,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAE1B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,KAAK,aAAa,CAAC;IAE5E,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEtD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;CACjC;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC;AAKD,qBAAa,wBAAyB,SAAQ,KAAK;aACd,aAAa,EAAE,mBAAmB;gBAAlC,aAAa,EAAE,mBAAmB;CAItE;AAMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAgBhF;AAmwCD,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAoC9B;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAID,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"grounded-orchestrator.d.ts","sourceRoot":"","sources":["../src/grounded-orchestrator.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EAGtB,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAUL,KAAK,mBAAmB,EAExB,KAAK,eAAe,EAEpB,KAAK,UAAU,EAIhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qBAAqB,EAerB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIlG,MAAM,WAAW,gBAAgB;IAG/B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAE1C,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAE1B,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,KAAK,aAAa,CAAC;IAE5E,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAEtD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;CACjC;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC;AAKD,qBAAa,wBAAyB,SAAQ,KAAK;aACd,aAAa,EAAE,mBAAmB;gBAAlC,aAAa,EAAE,mBAAmB;CAItE;AAMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAgBhF;AA25BD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/E;AA20BD,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,mBAAmB,CAAC,CA4C9B;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAID,OAAO,EAAE,qBAAqB,EAAE,CAAC"}