@oscharko-dev/keiko-server 0.2.0

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 (509) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/assistant-response.d.ts +6 -0
  3. package/dist/assistant-response.d.ts.map +1 -0
  4. package/dist/assistant-response.js +12 -0
  5. package/dist/browser.d.ts +11 -0
  6. package/dist/browser.d.ts.map +1 -0
  7. package/dist/browser.js +245 -0
  8. package/dist/chat-handlers.d.ts +48 -0
  9. package/dist/chat-handlers.d.ts.map +1 -0
  10. package/dist/chat-handlers.js +821 -0
  11. package/dist/chat-stream-handlers.d.ts +4 -0
  12. package/dist/chat-stream-handlers.d.ts.map +1 -0
  13. package/dist/chat-stream-handlers.js +136 -0
  14. package/dist/conversation-prompt.d.ts +8 -0
  15. package/dist/conversation-prompt.d.ts.map +1 -0
  16. package/dist/conversation-prompt.js +36 -0
  17. package/dist/conversation-validation.d.ts +26 -0
  18. package/dist/conversation-validation.d.ts.map +1 -0
  19. package/dist/conversation-validation.js +125 -0
  20. package/dist/credentialPersistence.d.ts +23 -0
  21. package/dist/credentialPersistence.d.ts.map +1 -0
  22. package/dist/credentialPersistence.js +93 -0
  23. package/dist/credentialVault.d.ts +30 -0
  24. package/dist/credentialVault.d.ts.map +1 -0
  25. package/dist/credentialVault.js +206 -0
  26. package/dist/csp.d.ts +3 -0
  27. package/dist/csp.d.ts.map +1 -0
  28. package/dist/csp.js +75 -0
  29. package/dist/deps.d.ts +78 -0
  30. package/dist/deps.d.ts.map +1 -0
  31. package/dist/deps.js +457 -0
  32. package/dist/editor/agentRoutes.d.ts +7 -0
  33. package/dist/editor/agentRoutes.d.ts.map +1 -0
  34. package/dist/editor/agentRoutes.js +197 -0
  35. package/dist/editor/assuredGateRunner.d.ts +36 -0
  36. package/dist/editor/assuredGateRunner.d.ts.map +1 -0
  37. package/dist/editor/assuredGateRunner.js +100 -0
  38. package/dist/editor/assuredPreFilter.d.ts +34 -0
  39. package/dist/editor/assuredPreFilter.d.ts.map +1 -0
  40. package/dist/editor/assuredPreFilter.js +134 -0
  41. package/dist/editor/assuredPreFilterRunner.d.ts +31 -0
  42. package/dist/editor/assuredPreFilterRunner.d.ts.map +1 -0
  43. package/dist/editor/assuredPreFilterRunner.js +312 -0
  44. package/dist/editor/builtinLanguageProviders.d.ts +6 -0
  45. package/dist/editor/builtinLanguageProviders.d.ts.map +1 -0
  46. package/dist/editor/builtinLanguageProviders.js +221 -0
  47. package/dist/editor/codingContext.d.ts +12 -0
  48. package/dist/editor/codingContext.d.ts.map +1 -0
  49. package/dist/editor/codingContext.js +121 -0
  50. package/dist/editor/codingContextEvidence.d.ts +7 -0
  51. package/dist/editor/codingContextEvidence.d.ts.map +1 -0
  52. package/dist/editor/codingContextEvidence.js +52 -0
  53. package/dist/editor/codingContextProviders.d.ts +36 -0
  54. package/dist/editor/codingContextProviders.d.ts.map +1 -0
  55. package/dist/editor/codingContextProviders.js +348 -0
  56. package/dist/editor/completionModelEvidence.d.ts +16 -0
  57. package/dist/editor/completionModelEvidence.d.ts.map +1 -0
  58. package/dist/editor/completionModelEvidence.js +50 -0
  59. package/dist/editor/completionRoutes.d.ts +37 -0
  60. package/dist/editor/completionRoutes.d.ts.map +1 -0
  61. package/dist/editor/completionRoutes.js +411 -0
  62. package/dist/editor/contextRoutes.d.ts +6 -0
  63. package/dist/editor/contextRoutes.d.ts.map +1 -0
  64. package/dist/editor/contextRoutes.js +411 -0
  65. package/dist/editor/disposableAssuredExecution.d.ts +22 -0
  66. package/dist/editor/disposableAssuredExecution.d.ts.map +1 -0
  67. package/dist/editor/disposableAssuredExecution.js +57 -0
  68. package/dist/editor/editorCompletionModel.d.ts +47 -0
  69. package/dist/editor/editorCompletionModel.d.ts.map +1 -0
  70. package/dist/editor/editorCompletionModel.js +156 -0
  71. package/dist/editor/editorInlineCompletionModel.d.ts +34 -0
  72. package/dist/editor/editorInlineCompletionModel.d.ts.map +1 -0
  73. package/dist/editor/editorInlineCompletionModel.js +112 -0
  74. package/dist/editor/editorModelTokenBudget.d.ts +46 -0
  75. package/dist/editor/editorModelTokenBudget.d.ts.map +1 -0
  76. package/dist/editor/editorModelTokenBudget.js +121 -0
  77. package/dist/editor/inlineCompletionRateLimiter.d.ts +19 -0
  78. package/dist/editor/inlineCompletionRateLimiter.d.ts.map +1 -0
  79. package/dist/editor/inlineCompletionRateLimiter.js +46 -0
  80. package/dist/editor/inlineCompletionRoutes.d.ts +26 -0
  81. package/dist/editor/inlineCompletionRoutes.d.ts.map +1 -0
  82. package/dist/editor/inlineCompletionRoutes.js +404 -0
  83. package/dist/editor/inlineCompletionTelemetryEvidence.d.ts +5 -0
  84. package/dist/editor/inlineCompletionTelemetryEvidence.d.ts.map +1 -0
  85. package/dist/editor/inlineCompletionTelemetryEvidence.js +42 -0
  86. package/dist/editor/languageCancellation.d.ts +19 -0
  87. package/dist/editor/languageCancellation.d.ts.map +1 -0
  88. package/dist/editor/languageCancellation.js +48 -0
  89. package/dist/editor/languageProvider.d.ts +39 -0
  90. package/dist/editor/languageProvider.d.ts.map +1 -0
  91. package/dist/editor/languageProvider.js +11 -0
  92. package/dist/editor/languageRoutes.d.ts +15 -0
  93. package/dist/editor/languageRoutes.d.ts.map +1 -0
  94. package/dist/editor/languageRoutes.js +106 -0
  95. package/dist/editor/languageSanitize.d.ts +8 -0
  96. package/dist/editor/languageSanitize.d.ts.map +1 -0
  97. package/dist/editor/languageSanitize.js +101 -0
  98. package/dist/editor/languageService.d.ts +36 -0
  99. package/dist/editor/languageService.d.ts.map +1 -0
  100. package/dist/editor/languageService.js +93 -0
  101. package/dist/editor/languageServiceHost.d.ts +14 -0
  102. package/dist/editor/languageServiceHost.d.ts.map +1 -0
  103. package/dist/editor/languageServiceHost.js +242 -0
  104. package/dist/editor/localKnowledgeRetrieval.d.ts +21 -0
  105. package/dist/editor/localKnowledgeRetrieval.d.ts.map +1 -0
  106. package/dist/editor/localKnowledgeRetrieval.js +44 -0
  107. package/dist/editor/patchApplyEvidence.d.ts +21 -0
  108. package/dist/editor/patchApplyEvidence.d.ts.map +1 -0
  109. package/dist/editor/patchApplyEvidence.js +87 -0
  110. package/dist/editor/patchApplyRoutes.d.ts +16 -0
  111. package/dist/editor/patchApplyRoutes.d.ts.map +1 -0
  112. package/dist/editor/patchApplyRoutes.js +307 -0
  113. package/dist/editor/postApplyVerification.d.ts +42 -0
  114. package/dist/editor/postApplyVerification.d.ts.map +1 -0
  115. package/dist/editor/postApplyVerification.js +177 -0
  116. package/dist/editor/testGenerationEvidence.d.ts +6 -0
  117. package/dist/editor/testGenerationEvidence.d.ts.map +1 -0
  118. package/dist/editor/testGenerationEvidence.js +72 -0
  119. package/dist/editor/testGenerationPatch.d.ts +10 -0
  120. package/dist/editor/testGenerationPatch.d.ts.map +1 -0
  121. package/dist/editor/testGenerationPatch.js +66 -0
  122. package/dist/editor/testGenerationRoutes.d.ts +21 -0
  123. package/dist/editor/testGenerationRoutes.d.ts.map +1 -0
  124. package/dist/editor/testGenerationRoutes.js +254 -0
  125. package/dist/editor/testGenerationRunner.d.ts +23 -0
  126. package/dist/editor/testGenerationRunner.d.ts.map +1 -0
  127. package/dist/editor/testGenerationRunner.js +120 -0
  128. package/dist/editor/textOffsets.d.ts +6 -0
  129. package/dist/editor/textOffsets.d.ts.map +1 -0
  130. package/dist/editor/textOffsets.js +82 -0
  131. package/dist/editor/typescriptLanguageProvider.d.ts +3 -0
  132. package/dist/editor/typescriptLanguageProvider.d.ts.map +1 -0
  133. package/dist/editor/typescriptLanguageProvider.js +217 -0
  134. package/dist/evidence.d.ts +28 -0
  135. package/dist/evidence.d.ts.map +1 -0
  136. package/dist/evidence.js +145 -0
  137. package/dist/files-deny.d.ts +3 -0
  138. package/dist/files-deny.d.ts.map +1 -0
  139. package/dist/files-deny.js +12 -0
  140. package/dist/files.d.ts +97 -0
  141. package/dist/files.d.ts.map +1 -0
  142. package/dist/files.js +733 -0
  143. package/dist/gateway-setup.d.ts +10 -0
  144. package/dist/gateway-setup.d.ts.map +1 -0
  145. package/dist/gateway-setup.js +896 -0
  146. package/dist/governed-workflow.d.ts +17 -0
  147. package/dist/governed-workflow.d.ts.map +1 -0
  148. package/dist/governed-workflow.js +147 -0
  149. package/dist/grounded-answer.d.ts +12 -0
  150. package/dist/grounded-answer.d.ts.map +1 -0
  151. package/dist/grounded-answer.js +69 -0
  152. package/dist/grounded-context-index.d.ts +25 -0
  153. package/dist/grounded-context-index.d.ts.map +1 -0
  154. package/dist/grounded-context-index.js +169 -0
  155. package/dist/grounded-document-evidence.d.ts +28 -0
  156. package/dist/grounded-document-evidence.d.ts.map +1 -0
  157. package/dist/grounded-document-evidence.js +430 -0
  158. package/dist/grounded-handoff.d.ts +4 -0
  159. package/dist/grounded-handoff.d.ts.map +1 -0
  160. package/dist/grounded-handoff.js +445 -0
  161. package/dist/grounded-orchestrator.d.ts +43 -0
  162. package/dist/grounded-orchestrator.d.ts.map +1 -0
  163. package/dist/grounded-orchestrator.js +1445 -0
  164. package/dist/grounded-prompt.d.ts +2 -0
  165. package/dist/grounded-prompt.d.ts.map +1 -0
  166. package/dist/grounded-prompt.js +17 -0
  167. package/dist/grounded-qa-hybrid.d.ts +36 -0
  168. package/dist/grounded-qa-hybrid.d.ts.map +1 -0
  169. package/dist/grounded-qa-hybrid.js +762 -0
  170. package/dist/grounded-qa-multi-source.d.ts +38 -0
  171. package/dist/grounded-qa-multi-source.d.ts.map +1 -0
  172. package/dist/grounded-qa-multi-source.js +461 -0
  173. package/dist/grounded-qa.d.ts +45 -0
  174. package/dist/grounded-qa.d.ts.map +1 -0
  175. package/dist/grounded-qa.js +877 -0
  176. package/dist/grounded-rerank.d.ts +26 -0
  177. package/dist/grounded-rerank.d.ts.map +1 -0
  178. package/dist/grounded-rerank.js +72 -0
  179. package/dist/grounded-turn-registry.d.ts +23 -0
  180. package/dist/grounded-turn-registry.d.ts.map +1 -0
  181. package/dist/grounded-turn-registry.js +102 -0
  182. package/dist/headers.d.ts +3 -0
  183. package/dist/headers.d.ts.map +1 -0
  184. package/dist/headers.js +22 -0
  185. package/dist/host-check.d.ts +3 -0
  186. package/dist/host-check.d.ts.map +1 -0
  187. package/dist/host-check.js +58 -0
  188. package/dist/index.d.ts +26 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +33 -0
  191. package/dist/load-csp.d.ts +3 -0
  192. package/dist/load-csp.d.ts.map +1 -0
  193. package/dist/load-csp.js +100 -0
  194. package/dist/local-knowledge-grounded-qa.d.ts +42 -0
  195. package/dist/local-knowledge-grounded-qa.d.ts.map +1 -0
  196. package/dist/local-knowledge-grounded-qa.js +678 -0
  197. package/dist/local-knowledge-handlers.d.ts +24 -0
  198. package/dist/local-knowledge-handlers.d.ts.map +1 -0
  199. package/dist/local-knowledge-handlers.js +1285 -0
  200. package/dist/local-knowledge-indexing-registry.d.ts +13 -0
  201. package/dist/local-knowledge-indexing-registry.d.ts.map +1 -0
  202. package/dist/local-knowledge-indexing-registry.js +53 -0
  203. package/dist/localKnowledgeKeyProvider.d.ts +11 -0
  204. package/dist/localKnowledgeKeyProvider.d.ts.map +1 -0
  205. package/dist/localKnowledgeKeyProvider.js +48 -0
  206. package/dist/memory-audit-event-builders.d.ts +21 -0
  207. package/dist/memory-audit-event-builders.d.ts.map +1 -0
  208. package/dist/memory-audit-event-builders.js +187 -0
  209. package/dist/memory-audit-handler.d.ts +23 -0
  210. package/dist/memory-audit-handler.d.ts.map +1 -0
  211. package/dist/memory-audit-handler.js +191 -0
  212. package/dist/memory-capture-policy.d.ts +10 -0
  213. package/dist/memory-capture-policy.d.ts.map +1 -0
  214. package/dist/memory-capture-policy.js +44 -0
  215. package/dist/memory-consolidation-handlers.d.ts +6 -0
  216. package/dist/memory-consolidation-handlers.d.ts.map +1 -0
  217. package/dist/memory-consolidation-handlers.js +491 -0
  218. package/dist/memory-consolidation-registry.d.ts +47 -0
  219. package/dist/memory-consolidation-registry.d.ts.map +1 -0
  220. package/dist/memory-consolidation-registry.js +106 -0
  221. package/dist/memory-conv-handlers.d.ts +8 -0
  222. package/dist/memory-conv-handlers.d.ts.map +1 -0
  223. package/dist/memory-conv-handlers.js +369 -0
  224. package/dist/memory-conversation-context.d.ts +13 -0
  225. package/dist/memory-conversation-context.d.ts.map +1 -0
  226. package/dist/memory-conversation-context.js +22 -0
  227. package/dist/memory-diagnostics.d.ts +29 -0
  228. package/dist/memory-diagnostics.d.ts.map +1 -0
  229. package/dist/memory-diagnostics.js +122 -0
  230. package/dist/memory-embedding.d.ts +21 -0
  231. package/dist/memory-embedding.d.ts.map +1 -0
  232. package/dist/memory-embedding.js +264 -0
  233. package/dist/memory-handlers.d.ts +19 -0
  234. package/dist/memory-handlers.d.ts.map +1 -0
  235. package/dist/memory-handlers.js +1204 -0
  236. package/dist/memory-maintenance-handlers.d.ts +35 -0
  237. package/dist/memory-maintenance-handlers.d.ts.map +1 -0
  238. package/dist/memory-maintenance-handlers.js +219 -0
  239. package/dist/memory-record-builders.d.ts +4 -0
  240. package/dist/memory-record-builders.d.ts.map +1 -0
  241. package/dist/memory-record-builders.js +19 -0
  242. package/dist/memory-retention.d.ts +31 -0
  243. package/dist/memory-retention.d.ts.map +1 -0
  244. package/dist/memory-retention.js +151 -0
  245. package/dist/memory-retrieval-signals.d.ts +12 -0
  246. package/dist/memory-retrieval-signals.d.ts.map +1 -0
  247. package/dist/memory-retrieval-signals.js +100 -0
  248. package/dist/memory-salience.d.ts +12 -0
  249. package/dist/memory-salience.d.ts.map +1 -0
  250. package/dist/memory-salience.js +154 -0
  251. package/dist/memory-scope-sanitizer.d.ts +6 -0
  252. package/dist/memory-scope-sanitizer.d.ts.map +1 -0
  253. package/dist/memory-scope-sanitizer.js +106 -0
  254. package/dist/memory-target-resolver.d.ts +4 -0
  255. package/dist/memory-target-resolver.d.ts.map +1 -0
  256. package/dist/memory-target-resolver.js +73 -0
  257. package/dist/memory-workflow-port.d.ts +14 -0
  258. package/dist/memory-workflow-port.d.ts.map +1 -0
  259. package/dist/memory-workflow-port.js +186 -0
  260. package/dist/private-json.d.ts +3 -0
  261. package/dist/private-json.d.ts.map +1 -0
  262. package/dist/private-json.js +62 -0
  263. package/dist/promptEnhancer/index.d.ts +3 -0
  264. package/dist/promptEnhancer/index.d.ts.map +1 -0
  265. package/dist/promptEnhancer/index.js +5 -0
  266. package/dist/promptEnhancer/orchestrate.d.ts +2 -0
  267. package/dist/promptEnhancer/orchestrate.d.ts.map +1 -0
  268. package/dist/promptEnhancer/orchestrate.js +5 -0
  269. package/dist/promptEnhancer/routes.d.ts +9 -0
  270. package/dist/promptEnhancer/routes.d.ts.map +1 -0
  271. package/dist/promptEnhancer/routes.js +205 -0
  272. package/dist/qualityIntelligence/capsuleAdapter.d.ts +27 -0
  273. package/dist/qualityIntelligence/capsuleAdapter.d.ts.map +1 -0
  274. package/dist/qualityIntelligence/capsuleAdapter.js +57 -0
  275. package/dist/qualityIntelligence/connectorAuthorization.d.ts +22 -0
  276. package/dist/qualityIntelligence/connectorAuthorization.d.ts.map +1 -0
  277. package/dist/qualityIntelligence/connectorAuthorization.js +35 -0
  278. package/dist/qualityIntelligence/connectorErrors.d.ts +16 -0
  279. package/dist/qualityIntelligence/connectorErrors.d.ts.map +1 -0
  280. package/dist/qualityIntelligence/connectorErrors.js +56 -0
  281. package/dist/qualityIntelligence/connectorRoutes.d.ts +7 -0
  282. package/dist/qualityIntelligence/connectorRoutes.d.ts.map +1 -0
  283. package/dist/qualityIntelligence/connectorRoutes.js +167 -0
  284. package/dist/qualityIntelligence/editRoutes.d.ts +5 -0
  285. package/dist/qualityIntelligence/editRoutes.d.ts.map +1 -0
  286. package/dist/qualityIntelligence/editRoutes.js +293 -0
  287. package/dist/qualityIntelligence/exportAssembly.d.ts +22 -0
  288. package/dist/qualityIntelligence/exportAssembly.d.ts.map +1 -0
  289. package/dist/qualityIntelligence/exportAssembly.js +352 -0
  290. package/dist/qualityIntelligence/exportRoutes.d.ts +5 -0
  291. package/dist/qualityIntelligence/exportRoutes.d.ts.map +1 -0
  292. package/dist/qualityIntelligence/exportRoutes.js +320 -0
  293. package/dist/qualityIntelligence/figma/figmaConcurrency.d.ts +8 -0
  294. package/dist/qualityIntelligence/figma/figmaConcurrency.d.ts.map +1 -0
  295. package/dist/qualityIntelligence/figma/figmaConcurrency.js +34 -0
  296. package/dist/qualityIntelligence/figma/figmaConnector.d.ts +65 -0
  297. package/dist/qualityIntelligence/figma/figmaConnector.d.ts.map +1 -0
  298. package/dist/qualityIntelligence/figma/figmaConnector.js +184 -0
  299. package/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts +52 -0
  300. package/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts.map +1 -0
  301. package/dist/qualityIntelligence/figma/figmaConnectorAudit.js +63 -0
  302. package/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +31 -0
  303. package/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -0
  304. package/dist/qualityIntelligence/figma/figmaConnectorErrors.js +220 -0
  305. package/dist/qualityIntelligence/figma/figmaConnectorMetrics.d.ts +44 -0
  306. package/dist/qualityIntelligence/figma/figmaConnectorMetrics.d.ts.map +1 -0
  307. package/dist/qualityIntelligence/figma/figmaConnectorMetrics.js +49 -0
  308. package/dist/qualityIntelligence/figma/figmaConsent.d.ts +39 -0
  309. package/dist/qualityIntelligence/figma/figmaConsent.d.ts.map +1 -0
  310. package/dist/qualityIntelligence/figma/figmaConsent.js +62 -0
  311. package/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +28 -0
  312. package/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -0
  313. package/dist/qualityIntelligence/figma/figmaHttpPort.js +70 -0
  314. package/dist/qualityIntelligence/figma/figmaObservedActions.d.ts +49 -0
  315. package/dist/qualityIntelligence/figma/figmaObservedActions.d.ts.map +1 -0
  316. package/dist/qualityIntelligence/figma/figmaObservedActions.js +89 -0
  317. package/dist/qualityIntelligence/figma/figmaReadiness.d.ts +32 -0
  318. package/dist/qualityIntelligence/figma/figmaReadiness.d.ts.map +1 -0
  319. package/dist/qualityIntelligence/figma/figmaReadiness.js +67 -0
  320. package/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +29 -0
  321. package/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -0
  322. package/dist/qualityIntelligence/figma/figmaRenderPort.js +93 -0
  323. package/dist/qualityIntelligence/figma/figmaResnapshot.d.ts +28 -0
  324. package/dist/qualityIntelligence/figma/figmaResnapshot.d.ts.map +1 -0
  325. package/dist/qualityIntelligence/figma/figmaResnapshot.js +38 -0
  326. package/dist/qualityIntelligence/figma/figmaRetry.d.ts +31 -0
  327. package/dist/qualityIntelligence/figma/figmaRetry.d.ts.map +1 -0
  328. package/dist/qualityIntelligence/figma/figmaRetry.js +62 -0
  329. package/dist/qualityIntelligence/figma/figmaScopeRef.d.ts +9 -0
  330. package/dist/qualityIntelligence/figma/figmaScopeRef.d.ts.map +1 -0
  331. package/dist/qualityIntelligence/figma/figmaScopeRef.js +18 -0
  332. package/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts +86 -0
  333. package/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts.map +1 -0
  334. package/dist/qualityIntelligence/figma/figmaScopedPagination.js +308 -0
  335. package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts +31 -0
  336. package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -0
  337. package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +314 -0
  338. package/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts +18 -0
  339. package/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -0
  340. package/dist/qualityIntelligence/figma/figmaSnapshotHash.js +63 -0
  341. package/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +65 -0
  342. package/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -0
  343. package/dist/qualityIntelligence/figma/figmaSnapshotTypes.js +13 -0
  344. package/dist/qualityIntelligence/figma/figmaTokenSource.d.ts +9 -0
  345. package/dist/qualityIntelligence/figma/figmaTokenSource.d.ts.map +1 -0
  346. package/dist/qualityIntelligence/figma/figmaTokenSource.js +61 -0
  347. package/dist/qualityIntelligence/figma/figmaTokenStore.d.ts +19 -0
  348. package/dist/qualityIntelligence/figma/figmaTokenStore.d.ts.map +1 -0
  349. package/dist/qualityIntelligence/figma/figmaTokenStore.js +156 -0
  350. package/dist/qualityIntelligence/figma/figmaUrl.d.ts +6 -0
  351. package/dist/qualityIntelligence/figma/figmaUrl.d.ts.map +1 -0
  352. package/dist/qualityIntelligence/figma/figmaUrl.js +36 -0
  353. package/dist/qualityIntelligence/figma/index.d.ts +20 -0
  354. package/dist/qualityIntelligence/figma/index.d.ts.map +1 -0
  355. package/dist/qualityIntelligence/figma/index.js +26 -0
  356. package/dist/qualityIntelligence/figmaCodegenRoutes.d.ts +28 -0
  357. package/dist/qualityIntelligence/figmaCodegenRoutes.d.ts.map +1 -0
  358. package/dist/qualityIntelligence/figmaCodegenRoutes.js +165 -0
  359. package/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +55 -0
  360. package/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -0
  361. package/dist/qualityIntelligence/figmaSnapshotAdapter.js +219 -0
  362. package/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +64 -0
  363. package/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -0
  364. package/dist/qualityIntelligence/figmaSnapshotOrchestration.js +203 -0
  365. package/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +112 -0
  366. package/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -0
  367. package/dist/qualityIntelligence/figmaSnapshotRoutes.js +1063 -0
  368. package/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts +19 -0
  369. package/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts.map +1 -0
  370. package/dist/qualityIntelligence/figmaSnapshotScreenIds.js +75 -0
  371. package/dist/qualityIntelligence/generationPort.d.ts +15 -0
  372. package/dist/qualityIntelligence/generationPort.d.ts.map +1 -0
  373. package/dist/qualityIntelligence/generationPort.js +185 -0
  374. package/dist/qualityIntelligence/handoffErrors.d.ts +9 -0
  375. package/dist/qualityIntelligence/handoffErrors.d.ts.map +1 -0
  376. package/dist/qualityIntelligence/handoffErrors.js +21 -0
  377. package/dist/qualityIntelligence/handoffRoutes.d.ts +15 -0
  378. package/dist/qualityIntelligence/handoffRoutes.d.ts.map +1 -0
  379. package/dist/qualityIntelligence/handoffRoutes.js +341 -0
  380. package/dist/qualityIntelligence/index.d.ts +17 -0
  381. package/dist/qualityIntelligence/index.d.ts.map +1 -0
  382. package/dist/qualityIntelligence/index.js +36 -0
  383. package/dist/qualityIntelligence/judgePort.d.ts +30 -0
  384. package/dist/qualityIntelligence/judgePort.d.ts.map +1 -0
  385. package/dist/qualityIntelligence/judgePort.js +326 -0
  386. package/dist/qualityIntelligence/modelSelection.d.ts +58 -0
  387. package/dist/qualityIntelligence/modelSelection.d.ts.map +1 -0
  388. package/dist/qualityIntelligence/modelSelection.js +148 -0
  389. package/dist/qualityIntelligence/reCheckRoutes.d.ts +6 -0
  390. package/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -0
  391. package/dist/qualityIntelligence/reCheckRoutes.js +1157 -0
  392. package/dist/qualityIntelligence/retentionEnforcement.d.ts +13 -0
  393. package/dist/qualityIntelligence/retentionEnforcement.d.ts.map +1 -0
  394. package/dist/qualityIntelligence/retentionEnforcement.js +47 -0
  395. package/dist/qualityIntelligence/retentionRoutes.d.ts +8 -0
  396. package/dist/qualityIntelligence/retentionRoutes.d.ts.map +1 -0
  397. package/dist/qualityIntelligence/retentionRoutes.js +74 -0
  398. package/dist/qualityIntelligence/reviewRoutes.d.ts +5 -0
  399. package/dist/qualityIntelligence/reviewRoutes.d.ts.map +1 -0
  400. package/dist/qualityIntelligence/reviewRoutes.js +145 -0
  401. package/dist/qualityIntelligence/reviewStore.d.ts +75 -0
  402. package/dist/qualityIntelligence/reviewStore.d.ts.map +1 -0
  403. package/dist/qualityIntelligence/reviewStore.js +170 -0
  404. package/dist/qualityIntelligence/runExecution.d.ts +36 -0
  405. package/dist/qualityIntelligence/runExecution.d.ts.map +1 -0
  406. package/dist/qualityIntelligence/runExecution.js +180 -0
  407. package/dist/qualityIntelligence/runIngestion.d.ts +70 -0
  408. package/dist/qualityIntelligence/runIngestion.d.ts.map +1 -0
  409. package/dist/qualityIntelligence/runIngestion.js +1235 -0
  410. package/dist/qualityIntelligence/runRegistry.d.ts +31 -0
  411. package/dist/qualityIntelligence/runRegistry.d.ts.map +1 -0
  412. package/dist/qualityIntelligence/runRegistry.js +66 -0
  413. package/dist/qualityIntelligence/runRoutes.d.ts +16 -0
  414. package/dist/qualityIntelligence/runRoutes.d.ts.map +1 -0
  415. package/dist/qualityIntelligence/runRoutes.js +357 -0
  416. package/dist/qualityIntelligence/traceabilityRoutes.d.ts +5 -0
  417. package/dist/qualityIntelligence/traceabilityRoutes.d.ts.map +1 -0
  418. package/dist/qualityIntelligence/traceabilityRoutes.js +173 -0
  419. package/dist/qualityIntelligence/uiRoutes.d.ts +7 -0
  420. package/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -0
  421. package/dist/qualityIntelligence/uiRoutes.js +336 -0
  422. package/dist/read-handlers.d.ts +9 -0
  423. package/dist/read-handlers.d.ts.map +1 -0
  424. package/dist/read-handlers.js +265 -0
  425. package/dist/relationship-handlers.d.ts +191 -0
  426. package/dist/relationship-handlers.d.ts.map +1 -0
  427. package/dist/relationship-handlers.js +0 -0
  428. package/dist/routes.d.ts +37 -0
  429. package/dist/routes.d.ts.map +1 -0
  430. package/dist/routes.js +507 -0
  431. package/dist/run-engine.d.ts +25 -0
  432. package/dist/run-engine.d.ts.map +1 -0
  433. package/dist/run-engine.js +385 -0
  434. package/dist/run-handlers.d.ts +9 -0
  435. package/dist/run-handlers.d.ts.map +1 -0
  436. package/dist/run-handlers.js +465 -0
  437. package/dist/run-request.d.ts +17 -0
  438. package/dist/run-request.d.ts.map +1 -0
  439. package/dist/run-request.js +219 -0
  440. package/dist/runs.d.ts +47 -0
  441. package/dist/runs.d.ts.map +1 -0
  442. package/dist/runs.js +100 -0
  443. package/dist/server.d.ts +13 -0
  444. package/dist/server.d.ts.map +1 -0
  445. package/dist/server.js +152 -0
  446. package/dist/sink.d.ts +28 -0
  447. package/dist/sink.d.ts.map +1 -0
  448. package/dist/sink.js +80 -0
  449. package/dist/sse-write.d.ts +9 -0
  450. package/dist/sse-write.d.ts.map +1 -0
  451. package/dist/sse-write.js +26 -0
  452. package/dist/sse.d.ts +8 -0
  453. package/dist/sse.d.ts.map +1 -0
  454. package/dist/sse.js +27 -0
  455. package/dist/static.d.ts +5 -0
  456. package/dist/static.d.ts.map +1 -0
  457. package/dist/static.js +76 -0
  458. package/dist/store/chats.d.ts +17 -0
  459. package/dist/store/chats.d.ts.map +1 -0
  460. package/dist/store/chats.js +624 -0
  461. package/dist/store/db.d.ts +11 -0
  462. package/dist/store/db.d.ts.map +1 -0
  463. package/dist/store/db.js +203 -0
  464. package/dist/store/errors.d.ts +13 -0
  465. package/dist/store/errors.d.ts.map +1 -0
  466. package/dist/store/errors.js +30 -0
  467. package/dist/store/index.d.ts +7 -0
  468. package/dist/store/index.d.ts.map +1 -0
  469. package/dist/store/index.js +6 -0
  470. package/dist/store/messages.d.ts +8 -0
  471. package/dist/store/messages.d.ts.map +1 -0
  472. package/dist/store/messages.js +149 -0
  473. package/dist/store/paths.d.ts +5 -0
  474. package/dist/store/paths.d.ts.map +1 -0
  475. package/dist/store/paths.js +84 -0
  476. package/dist/store/projects.d.ts +8 -0
  477. package/dist/store/projects.d.ts.map +1 -0
  478. package/dist/store/projects.js +59 -0
  479. package/dist/store/relationship-audit.d.ts +42 -0
  480. package/dist/store/relationship-audit.d.ts.map +1 -0
  481. package/dist/store/relationship-audit.js +155 -0
  482. package/dist/store/relationships.d.ts +191 -0
  483. package/dist/store/relationships.d.ts.map +1 -0
  484. package/dist/store/relationships.js +724 -0
  485. package/dist/store/schema.d.ts +4 -0
  486. package/dist/store/schema.d.ts.map +1 -0
  487. package/dist/store/schema.js +220 -0
  488. package/dist/store/types.d.ts +29 -0
  489. package/dist/store/types.d.ts.map +1 -0
  490. package/dist/store/types.js +8 -0
  491. package/dist/store/validation.d.ts +7 -0
  492. package/dist/store/validation.d.ts.map +1 -0
  493. package/dist/store/validation.js +117 -0
  494. package/dist/store-handlers.d.ts +17 -0
  495. package/dist/store-handlers.d.ts.map +1 -0
  496. package/dist/store-handlers.js +872 -0
  497. package/dist/terminal-errors.d.ts +22 -0
  498. package/dist/terminal-errors.d.ts.map +1 -0
  499. package/dist/terminal-errors.js +45 -0
  500. package/dist/terminal-evidence.d.ts +21 -0
  501. package/dist/terminal-evidence.d.ts.map +1 -0
  502. package/dist/terminal-evidence.js +65 -0
  503. package/dist/terminal-routes.d.ts +10 -0
  504. package/dist/terminal-routes.d.ts.map +1 -0
  505. package/dist/terminal-routes.js +219 -0
  506. package/dist/terminal.d.ts +68 -0
  507. package/dist/terminal.d.ts.map +1 -0
  508. package/dist/terminal.js +855 -0
  509. package/package.json +52 -0
@@ -0,0 +1,38 @@
1
+ import { type ChatMessage as GatewayChatMessage } from "@oscharko-dev/keiko-model-gateway";
2
+ import type { ModelPort } from "@oscharko-dev/keiko-harness";
3
+ import { type ConnectedContextPack, type ExplorationBudget } from "@oscharko-dev/keiko-contracts/connected-context";
4
+ import { type ChatConnectedScope, type GroundedAnswerContextPackSummary } from "@oscharko-dev/keiko-contracts/bff-wire";
5
+ import type { RouteResult } from "./routes.js";
6
+ import type { Redactor, UiHandlerDeps } from "./deps.js";
7
+ import type { Chat } from "./store/index.js";
8
+ import { type OrchestratorInput, type RetrievalOnlyOutput } from "./grounded-orchestrator.js";
9
+ import { type GroundedAnswerPayload } from "./grounded-answer.js";
10
+ export declare function buildConnectedScopes(chat: Chat): readonly ChatConnectedScope[];
11
+ export declare function splitExplorationBudget(base: ExplorationBudget, n: number): ExplorationBudget;
12
+ export declare function sourceLabels(scopes: readonly ChatConnectedScope[]): readonly string[];
13
+ export declare function mergeContextPackSummaries(summaries: readonly GroundedAnswerContextPackSummary[]): GroundedAnswerContextPackSummary;
14
+ export interface LabeledPack {
15
+ readonly label: string;
16
+ readonly pack: ConnectedContextPack;
17
+ }
18
+ export declare function buildMultiSourceGatewayMessages(question: string, labeledPacks: readonly LabeledPack[], redactor: Redactor): readonly GatewayChatMessage[];
19
+ export type GroundedRetriever = (input: OrchestratorInput) => Promise<RetrievalOnlyOutput>;
20
+ export declare function defaultRetriever(signal: AbortSignal): GroundedRetriever;
21
+ export type MultiSourceAnswerer = (question: string, labeledPacks: readonly LabeledPack[]) => Promise<GroundedAnswerPayload>;
22
+ export declare function createMultiSourceAnswerer(model: ModelPort, modelId: string, redactor: Redactor, signal: AbortSignal): MultiSourceAnswerer;
23
+ export interface MultiSourceAskInput {
24
+ readonly chat: Chat;
25
+ readonly scopes: readonly ChatConnectedScope[];
26
+ readonly content: string;
27
+ readonly modelId: string;
28
+ readonly deps: UiHandlerDeps;
29
+ readonly retriever: GroundedRetriever;
30
+ readonly answerer: MultiSourceAnswerer;
31
+ readonly signal: AbortSignal;
32
+ readonly preSkipped?: readonly {
33
+ readonly label: string;
34
+ readonly message: string;
35
+ }[];
36
+ }
37
+ export declare function runMultiSourceAsk(ctx: MultiSourceAskInput): Promise<RouteResult>;
38
+ //# sourceMappingURL=grounded-qa-multi-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounded-qa-multi-source.d.ts","sourceRoot":"","sources":["../src/grounded-qa-multi-source.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,KAAK,WAAW,IAAI,kBAAkB,EACvC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAGvB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,gCAAgC,EAGtC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AA0B9B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,kBAAkB,EAAE,CAE9E;AAOD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAY5F;AAgBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,MAAM,EAAE,CAUrF;AAgFD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,gCAAgC,EAAE,GACrD,gCAAgC,CAsBlC;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;CACrC;AAoBD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,QAAQ,EAAE,QAAQ,GACjB,SAAS,kBAAkB,EAAE,CAE/B;AAmFD,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAI3F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAUvE;AAID,MAAM,MAAM,mBAAmB,GAAG,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,SAAS,WAAW,EAAE,KACjC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpC,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,GAClB,mBAAmB,CAqBrB;AAyBD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAG7B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvF;AAgND,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4CtF"}
@@ -0,0 +1,461 @@
1
+ // Epic #532 — multi-source (1+N) grounded retrieval merge. A chat may connect N folders/files at
2
+ // once; asking one question must search EVERY connected source and return ONE merged answer with
3
+ // per-source attribution. This module owns the new branch only. The single-source path
4
+ // (`grounded-qa.ts`) is deliberately untouched so its wire output stays byte-identical (AC5).
5
+ //
6
+ // The path is split out of `grounded-qa.ts` to keep both files under the 400-LOC bound; it imports
7
+ // the shared formatters/projection/persistence helpers (now exported) so the two paths build their
8
+ // gateway messages, citations, and evidence from the exact same primitives.
9
+ import { basename } from "node:path";
10
+ import { createHash, randomUUID } from "node:crypto";
11
+ import { ContextOverflowError, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
12
+ import { persistConnectedContextEvidence } from "@oscharko-dev/keiko-evidence";
13
+ import { CANDIDATE_OMISSION_REASONS, DEFAULT_EXPLORATION_BUDGET, } from "@oscharko-dev/keiko-contracts/connected-context";
14
+ import { buildGroundedAnswerContextPackSummary, } from "@oscharko-dev/keiko-contracts/bff-wire";
15
+ import { currentRedactionSecrets } from "./deps.js";
16
+ import { ClarificationNeededError, clarificationUserMessage, retrieveConnectedContextPack, } from "./grounded-orchestrator.js";
17
+ import { microIndexForGroundedScope } from "./grounded-context-index.js";
18
+ import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
19
+ import { rememberGroundedTurn } from "./grounded-turn-registry.js";
20
+ import { assertUsableAssistantContent } from "./assistant-response.js";
21
+ import { normalizeGroundedAnswerPayload, } from "./grounded-answer.js";
22
+ import { buildCitations, buildQuery, buildSelectedScopeFrom, clarificationRequest, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, mappedWorkspaceError, modelInputPromptByteLimit, packBudgetSummary, persistGroundedExchange, promptByteLength, redactString, uncertaintyLines, withPromptExcerptByteLimit, } from "./grounded-qa.js";
23
+ // ─── Canonical reader + label/budget helpers ──────────────────────────────────
24
+ // Canonical reader rule (Epic #532 contract): `connectedScopes` supersedes the legacy single
25
+ // `connectedScope`. Readers must NOT mix the two — the list, when present, is authoritative.
26
+ export function buildConnectedScopes(chat) {
27
+ return chat.connectedScopes ?? (chat.connectedScope ? [chat.connectedScope] : []);
28
+ }
29
+ // Splits a base budget across n sources so total fan-out work stays bounded regardless of N.
30
+ // Per-source dimensions floor-divide with a Math.max(1, …) floor so a source is never starved to
31
+ // zero. `rerankCallsMax` is left UNCHANGED (it is 0 by default and is a per-source cap, not a
32
+ // shared pool). n=1 returns the base unchanged so the single path is unaffected if it ever routes
33
+ // through here.
34
+ export function splitExplorationBudget(base, n) {
35
+ if (n <= 1)
36
+ return base;
37
+ const split = (value) => Math.max(1, Math.floor(value / n));
38
+ return {
39
+ searchCallsMax: split(base.searchCallsMax),
40
+ filesReadMax: split(base.filesReadMax),
41
+ excerptBytesMax: split(base.excerptBytesMax),
42
+ modelInputTokensMax: split(base.modelInputTokensMax),
43
+ modelOutputTokensMax: split(base.modelOutputTokensMax),
44
+ elapsedMsMax: split(base.elapsedMsMax),
45
+ rerankCallsMax: base.rerankCallsMax,
46
+ };
47
+ }
48
+ function rawSourceLabel(cs) {
49
+ return cs.root === undefined ? "project" : basename(cs.root);
50
+ }
51
+ function labelDisambiguator(cs) {
52
+ const hash = createHash("sha256")
53
+ .update(cs.root ?? "")
54
+ .digest("hex");
55
+ return `~${hash.slice(0, 6)}`;
56
+ }
57
+ // Human-readable per-source labels, stable in scopes order. Label = basename(root) or "project"
58
+ // when root is undefined. Duplicate labels are disambiguated by appending a short hash of the full
59
+ // root so two sources that share a basename remain distinguishable in citations.
60
+ export function sourceLabels(scopes) {
61
+ const counts = new Map();
62
+ for (const cs of scopes) {
63
+ const raw = rawSourceLabel(cs);
64
+ counts.set(raw, (counts.get(raw) ?? 0) + 1);
65
+ }
66
+ return scopes.map((cs) => {
67
+ const raw = rawSourceLabel(cs);
68
+ return (counts.get(raw) ?? 0) > 1 ? `${raw}${labelDisambiguator(cs)}` : raw;
69
+ });
70
+ }
71
+ // ─── Merged context-pack summary ──────────────────────────────────────────────
72
+ function zeroOmittedCounts() {
73
+ const counts = {};
74
+ for (const reason of CANDIDATE_OMISSION_REASONS)
75
+ counts[reason] = 0;
76
+ return counts;
77
+ }
78
+ function sumUsage(summaries) {
79
+ return summaries.reduce((acc, s) => ({
80
+ searchCalls: acc.searchCalls + s.usage.searchCalls,
81
+ filesRead: acc.filesRead + s.usage.filesRead,
82
+ excerptBytes: acc.excerptBytes + s.usage.excerptBytes,
83
+ modelInputTokens: acc.modelInputTokens + s.usage.modelInputTokens,
84
+ modelOutputTokens: acc.modelOutputTokens + s.usage.modelOutputTokens,
85
+ elapsedMs: acc.elapsedMs + s.usage.elapsedMs,
86
+ rerankCalls: acc.rerankCalls + s.usage.rerankCalls,
87
+ }), {
88
+ searchCalls: 0,
89
+ filesRead: 0,
90
+ excerptBytes: 0,
91
+ modelInputTokens: 0,
92
+ modelOutputTokens: 0,
93
+ elapsedMs: 0,
94
+ rerankCalls: 0,
95
+ });
96
+ }
97
+ function sumBudget(summaries) {
98
+ return summaries.reduce((acc, s) => ({
99
+ searchCallsMax: acc.searchCallsMax + s.budget.searchCallsMax,
100
+ filesReadMax: acc.filesReadMax + s.budget.filesReadMax,
101
+ excerptBytesMax: acc.excerptBytesMax + s.budget.excerptBytesMax,
102
+ modelInputTokensMax: acc.modelInputTokensMax + s.budget.modelInputTokensMax,
103
+ modelOutputTokensMax: acc.modelOutputTokensMax + s.budget.modelOutputTokensMax,
104
+ elapsedMsMax: acc.elapsedMsMax + s.budget.elapsedMsMax,
105
+ rerankCallsMax: acc.rerankCallsMax + s.budget.rerankCallsMax,
106
+ }), {
107
+ searchCallsMax: 0,
108
+ filesReadMax: 0,
109
+ excerptBytesMax: 0,
110
+ modelInputTokensMax: 0,
111
+ modelOutputTokensMax: 0,
112
+ elapsedMsMax: 0,
113
+ rerankCallsMax: 0,
114
+ });
115
+ }
116
+ function mergeOmittedCounts(summaries) {
117
+ const merged = zeroOmittedCounts();
118
+ for (const s of summaries) {
119
+ for (const reason of CANDIDATE_OMISSION_REASONS) {
120
+ merged[reason] += s.omittedCounts[reason];
121
+ }
122
+ }
123
+ return merged;
124
+ }
125
+ // `fileCount` is -1 (the workspace-root sentinel) if ANY source is a workspace-root scope; else it
126
+ // is the sum of the per-source file counts. `scopeId` folds every source's display fingerprint into
127
+ // one deterministic id so the merged summary is stable for a given chat-scope binding.
128
+ function mergedFileCount(summaries) {
129
+ if (summaries.some((s) => s.fileCount === -1))
130
+ return -1;
131
+ return summaries.reduce((acc, s) => acc + s.fileCount, 0);
132
+ }
133
+ export function mergeContextPackSummaries(summaries) {
134
+ const [first] = summaries;
135
+ if (first === undefined) {
136
+ throw new Error("mergeContextPackSummaries requires at least one summary");
137
+ }
138
+ return {
139
+ schemaVersion: first.schemaVersion,
140
+ scopeId: `scope-${createHash("sha256")
141
+ .update(summaries.map((s) => s.scopeId).join("|"))
142
+ .digest("hex")
143
+ .slice(0, 8)}`,
144
+ scopeKind: first.scopeKind,
145
+ fileCount: mergedFileCount(summaries),
146
+ queryKind: first.queryKind,
147
+ usage: sumUsage(summaries),
148
+ budget: sumBudget(summaries),
149
+ citationCount: summaries.reduce((acc, s) => acc + s.citationCount, 0),
150
+ omittedCount: summaries.reduce((acc, s) => acc + s.omittedCount, 0),
151
+ omittedCounts: mergeOmittedCounts(summaries),
152
+ uncertaintyCount: summaries.reduce((acc, s) => acc + s.uncertaintyCount, 0),
153
+ elapsedMs: summaries.reduce((acc, s) => acc + s.elapsedMs, 0),
154
+ };
155
+ }
156
+ function sourceSection(entry, index, redactor) {
157
+ const { label, pack } = entry;
158
+ return [
159
+ `### Source ${String(index + 1)}: ${label}`,
160
+ `- budget/usage: ${packBudgetSummary(pack)}`,
161
+ `- omitted evidence atoms: ${String(pack.omitted.length)}`,
162
+ "",
163
+ "Repository evidence excerpts:",
164
+ ...evidenceLines(pack, redactor),
165
+ "",
166
+ "Known uncertainty from retrieval:",
167
+ ...uncertaintyLines(pack, redactor),
168
+ "",
169
+ ];
170
+ }
171
+ // Same system message as the single-source path; the user message lists each source under its own
172
+ // header so the model can attribute every claim to a source label in addition to the file ref.
173
+ export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor) {
174
+ return budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor);
175
+ }
176
+ function buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor) {
177
+ const sections = labeledPacks.flatMap((entry, index) => sourceSection(entry, index, redactor));
178
+ const userContent = [
179
+ "User question:",
180
+ redactString(redactor, question),
181
+ "",
182
+ `Connected sources (${String(labeledPacks.length)}). For every repository claim, attribute it`,
183
+ "to its source label (e.g. [source: api] src/file.ts:10-20) in addition to the file reference.",
184
+ "",
185
+ ...sections,
186
+ ].join("\n");
187
+ return [
188
+ { role: "system", content: GROUNDED_SYSTEM_PROMPT },
189
+ { role: "user", content: userContent },
190
+ ];
191
+ }
192
+ function multiSourceExcerptCount(labeledPacks) {
193
+ return labeledPacks.reduce((count, entry) => count + entry.pack.files.reduce((fileCount, file) => fileCount + file.excerpts.length, 0), 0);
194
+ }
195
+ function withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes) {
196
+ return labeledPacks.map((entry) => ({
197
+ ...entry,
198
+ pack: withPromptExcerptByteLimit(entry.pack, maxExcerptBytes),
199
+ }));
200
+ }
201
+ function budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor) {
202
+ const limit = modelInputPromptByteLimit(labeledPacks.reduce((sum, entry) => sum + entry.pack.budget.modelInputTokensMax, 0));
203
+ let messages = buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor);
204
+ if (limit === 0 || promptByteLength(messages) <= limit)
205
+ return messages;
206
+ const excerptCount = multiSourceExcerptCount(labeledPacks);
207
+ if (excerptCount === 0)
208
+ return messages;
209
+ const emptyPacks = withMultiSourcePromptExcerptByteLimit(labeledPacks, 0);
210
+ const overheadBytes = promptByteLength(buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor));
211
+ // When overhead alone (system prompt + question + framing for all sources) exceeds the limit,
212
+ // no amount of excerpt trimming can bring the prompt within budget. Throw instead of sending
213
+ // an over-limit prompt to the provider which would result in an opaque 400 context-window error.
214
+ if (overheadBytes > limit) {
215
+ throw new ContextOverflowError(`Multi-source grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
216
+ }
217
+ let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
218
+ while (maxExcerptBytes >= 0) {
219
+ messages = buildRawMultiSourceGatewayMessages(question, withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes), redactor);
220
+ if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
221
+ return messages;
222
+ }
223
+ maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
224
+ }
225
+ return buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor);
226
+ }
227
+ // Production retriever: retrieval-only orchestrator pass with a per-scope micro-index cache. No
228
+ // modelId is needed — retrieval performs no model call.
229
+ export function defaultRetriever(signal) {
230
+ return (input) => {
231
+ const nowMs = Date.now;
232
+ return retrieveConnectedContextPack(input, {
233
+ answerer: { answer: () => Promise.resolve("") },
234
+ nowMs,
235
+ signal,
236
+ microIndex: microIndexForGroundedScope(input.scope, nowMs),
237
+ });
238
+ };
239
+ }
240
+ export function createMultiSourceAnswerer(model, modelId, redactor, signal) {
241
+ return async (question, labeledPacks) => {
242
+ ensureNotCancelled(signal);
243
+ const response = await model.call({
244
+ modelId,
245
+ messages: buildMultiSourceGatewayMessages(question, labeledPacks, redactor),
246
+ stream: false,
247
+ }, signal);
248
+ const content = response.content.trim();
249
+ assertUsableAssistantContent(content, modelId);
250
+ return {
251
+ content,
252
+ usage: {
253
+ promptTokens: response.usage.promptTokens,
254
+ completionTokens: response.usage.completionTokens,
255
+ },
256
+ };
257
+ };
258
+ }
259
+ // ─── Retrieved-source record + worker ─────────────────────────────────────────
260
+ const MAX_RETRIEVAL_CONCURRENCY = 4;
261
+ // GRD-006: classify a thrown per-source retrieve error. A recoverable workspace error becomes a
262
+ // skip (with the mapped RouteResult preserved as the all-bad fallback); anything else returns
263
+ // undefined so the caller re-throws it to the outer handler (ClarificationNeededError, cancel, …).
264
+ function classifyPerSourceRetrieveError(error, label) {
265
+ const mapped = mappedWorkspaceError(error);
266
+ if (mapped === undefined)
267
+ return undefined;
268
+ return {
269
+ skipped: {
270
+ label,
271
+ message: error instanceof Error ? error.message : "Connected source is not readable.",
272
+ },
273
+ mapped,
274
+ };
275
+ }
276
+ // Retrieve one source into the shared accumulator. GRD-006: a recoverable workspace error skips
277
+ // just that source (preserving the all-bad 400 fallback in `firstError`); any other error
278
+ // propagates to the outer handler.
279
+ async function retrieveOneSource(ctx, query, perScopeBudget, labels, acc, i) {
280
+ ensureNotCancelled(ctx.signal);
281
+ const cs = ctx.scopes[i];
282
+ const label = labels[i];
283
+ if (cs === undefined || label === undefined)
284
+ return;
285
+ const scope = buildSelectedScopeFrom(ctx.chat, cs, deriveScopeIdFrom(ctx.chat, cs, i));
286
+ let out;
287
+ try {
288
+ out = await ctx.retriever({
289
+ scope,
290
+ query,
291
+ workspaceRoot: scope.workspaceRoot,
292
+ budget: perScopeBudget,
293
+ });
294
+ }
295
+ catch (error) {
296
+ const classified = classifyPerSourceRetrieveError(error, label);
297
+ if (classified === undefined)
298
+ throw error; // non-workspace error → outer handler
299
+ acc.skipped.push(classified.skipped);
300
+ acc.firstError ??= classified.mapped;
301
+ return;
302
+ }
303
+ if (!isValidGroundedPack(out.pack)) {
304
+ acc.skipped.push({ label, message: "Pack validation failed." });
305
+ acc.firstError ??= internalError("Grounded answer context pack failed validation.");
306
+ return;
307
+ }
308
+ acc.retrieved[i] = { label, pack: out.pack, elapsedMs: out.elapsedMs, scope, plan: out.plan };
309
+ }
310
+ async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
311
+ const acc = {
312
+ retrieved: new Array(ctx.scopes.length),
313
+ skipped: [],
314
+ firstError: undefined,
315
+ };
316
+ let nextIndex = 0;
317
+ async function worker() {
318
+ for (;;) {
319
+ const i = nextIndex;
320
+ nextIndex += 1;
321
+ if (i >= ctx.scopes.length)
322
+ return;
323
+ await retrieveOneSource(ctx, query, perScopeBudget, labels, acc, i);
324
+ }
325
+ }
326
+ const workerCount = Math.min(MAX_RETRIEVAL_CONCURRENCY, Math.max(1, ctx.scopes.length));
327
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
328
+ const sources = acc.retrieved.filter((source) => source !== undefined);
329
+ const skipped = acc.skipped;
330
+ const firstError = acc.firstError;
331
+ if (sources.length === 0 && firstError !== undefined)
332
+ return firstError;
333
+ return { retrieved: sources, skipped, firstError };
334
+ }
335
+ function mergedCitations(sources, redactor) {
336
+ const citations = sources.flatMap((src) => buildCitations(src.pack, redactor).map((c) => ({ ...c, source: src.label })));
337
+ return [...citations].sort((a, b) => b.score - a.score);
338
+ }
339
+ function mergedUncertainty(sources, skipped, preSkipped, redactor) {
340
+ const fromPacks = sources.flatMap((src) => src.pack.uncertainty.map((u) => ({ kind: u.kind, claim: redactString(redactor, u.claim) })));
341
+ const allSkipped = [
342
+ ...preSkipped.map((s) => ({ label: s.label, message: s.message })),
343
+ ...skipped,
344
+ ];
345
+ const fromSkipped = allSkipped.map((entry) => ({
346
+ kind: "source-skipped",
347
+ claim: redactString(redactor, `Source ${entry.label} skipped: ${entry.message}`),
348
+ }));
349
+ return [...fromPacks, ...fromSkipped];
350
+ }
351
+ // Persists ONE evidence run per source, each naming the root that source actually searched (L1
352
+ // honesty rule, mirrored from the single path). Returns the FIRST source's run id, which the
353
+ // answer surfaces as its primary evidenceRunId, plus the full set for audit discovery.
354
+ function persistPerSourceEvidence(ctx, sources) {
355
+ let firstRunId;
356
+ const runIds = [];
357
+ for (const src of sources) {
358
+ const finishedAt = Date.now();
359
+ const startedAt = Math.max(0, finishedAt - src.elapsedMs);
360
+ const runId = `grounded-${randomUUID()}`;
361
+ persistConnectedContextEvidence({
362
+ runId,
363
+ modelId: ctx.modelId,
364
+ workspaceRoot: src.scope.workspaceRoot,
365
+ chatId: ctx.chat.id,
366
+ plan: src.plan,
367
+ pack: src.pack,
368
+ citationCount: buildCitations(src.pack, ctx.deps.redactor).length,
369
+ elapsedMs: src.elapsedMs,
370
+ startedAt,
371
+ finishedAt,
372
+ }, {
373
+ store: ctx.deps.evidenceStore,
374
+ env: ctx.deps.env,
375
+ additionalSecrets: currentRedactionSecrets(ctx.deps),
376
+ costClassResolver: resolveCostClass,
377
+ });
378
+ firstRunId ??= runId;
379
+ runIds.push(runId);
380
+ }
381
+ return { firstRunId, runIds };
382
+ }
383
+ function assembleMultiSourceAnswer(ctx, sources, skipped, assistant, ids) {
384
+ const { redactor } = ctx.deps;
385
+ const citations = mergedCitations(sources, redactor);
386
+ const summaries = sources.map((src) => buildGroundedAnswerContextPackSummary(src.pack, buildCitations(src.pack, redactor).length, src.elapsedMs));
387
+ const mergedSummary = mergeContextPackSummaries(summaries);
388
+ const { firstRunId, runIds } = persistPerSourceEvidence(ctx, sources);
389
+ return {
390
+ groundingKind: "connected-context",
391
+ userMessageId: ids.userMessageId,
392
+ assistantMessageId: ids.assistantMessageId,
393
+ evidenceRunId: firstRunId,
394
+ evidenceRunIds: runIds,
395
+ content: redactString(redactor, assistant.content),
396
+ citations,
397
+ uncertainty: mergedUncertainty(sources, skipped, ctx.preSkipped ?? [], redactor),
398
+ omittedCount: sources.reduce((acc, src) => acc + src.pack.omitted.length, 0),
399
+ elapsedMs: sources.reduce((acc, src) => acc + src.elapsedMs, 0),
400
+ contextPack: {
401
+ ...mergedSummary,
402
+ usage: {
403
+ ...mergedSummary.usage,
404
+ modelInputTokens: mergedSummary.usage.modelInputTokens + assistant.usage.promptTokens,
405
+ modelOutputTokens: mergedSummary.usage.modelOutputTokens + assistant.usage.completionTokens,
406
+ },
407
+ },
408
+ };
409
+ }
410
+ export async function runMultiSourceAsk(ctx) {
411
+ const query = buildQuery(ctx.content, () => Date.now());
412
+ const labels = sourceLabels(ctx.scopes);
413
+ const perScopeBudget = splitExplorationBudget(DEFAULT_EXPLORATION_BUDGET, ctx.scopes.length);
414
+ let outcome;
415
+ try {
416
+ outcome = await retrieveAllSources(ctx, query, perScopeBudget, labels);
417
+ }
418
+ catch (error) {
419
+ return mapMultiSourceError(error, ctx.deps);
420
+ }
421
+ if (isRouteResult(outcome)) {
422
+ return outcome;
423
+ }
424
+ const { retrieved, skipped } = outcome;
425
+ let assistant;
426
+ try {
427
+ assistant = normalizeGroundedAnswerPayload(await ctx.answerer(ctx.content, retrieved.map((s) => ({ label: s.label, pack: s.pack }))));
428
+ ensureNotCancelled(ctx.signal);
429
+ }
430
+ catch (error) {
431
+ return mapMultiSourceError(error, ctx.deps);
432
+ }
433
+ const [userMessage, assistantMessage] = persistGroundedExchange(ctx.deps, ctx.chat.id, redactString(ctx.deps.redactor, ctx.content), redactString(ctx.deps.redactor, assistant.content));
434
+ const answer = assembleMultiSourceAnswer(ctx, retrieved, skipped, assistant, {
435
+ userMessageId: userMessage.id,
436
+ assistantMessageId: assistantMessage.id,
437
+ });
438
+ rememberGroundedTurn({
439
+ assistantMessageId: assistantMessage.id,
440
+ chatId: ctx.chat.id,
441
+ workspaceRoot: retrieved[0]?.pack.scope.workspaceRoot ?? ctx.chat.projectPath,
442
+ evidenceRunId: answer.evidenceRunId,
443
+ packs: retrieved.map((source) => source.pack),
444
+ });
445
+ return { status: 200, body: answer };
446
+ }
447
+ function isRouteResult(value) {
448
+ return "status" in value;
449
+ }
450
+ function mapMultiSourceError(error, deps) {
451
+ if (error instanceof ClarificationNeededError) {
452
+ return clarificationRequest(clarificationUserMessage(error));
453
+ }
454
+ const workspaceResult = mappedWorkspaceError(error);
455
+ if (workspaceResult !== undefined)
456
+ return workspaceResult;
457
+ const gatewayResult = mappedGatewayError(error, deps);
458
+ if (gatewayResult !== undefined)
459
+ return gatewayResult;
460
+ throw error;
461
+ }
@@ -0,0 +1,45 @@
1
+ import { type ChatMessage as GatewayChatMessage } from "@oscharko-dev/keiko-model-gateway";
2
+ import { type ConnectedContextPack, type RetrievalQuery, type SelectedScope } from "@oscharko-dev/keiko-contracts/connected-context";
3
+ import { type GroundedEvidenceCitation, type GroundedUncertainty } from "@oscharko-dev/keiko-contracts/bff-wire";
4
+ import type { RouteContext, RouteResult } from "./routes.js";
5
+ import type { Redactor, UiHandlerDeps } from "./deps.js";
6
+ import type { Chat, ChatConnectedScope, ChatMessage } from "./store/index.js";
7
+ import { type OrchestratorInput, type OrchestratorOutput } from "./grounded-orchestrator.js";
8
+ import { type GroundedRetriever, type MultiSourceAnswerer } from "./grounded-qa-multi-source.js";
9
+ import { type ConnectorRetrieve, type FolderRetriever, type HybridAnswerer } from "./grounded-qa-hybrid.js";
10
+ import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
11
+ export declare function badRequest(message: string): RouteResult;
12
+ export declare function clarificationRequest(message: string): RouteResult;
13
+ export declare function internalError(message: string): RouteResult;
14
+ export declare function mappedGatewayError(error: unknown, deps: UiHandlerDeps): RouteResult | undefined;
15
+ export declare function mappedWorkspaceError(error: unknown): RouteResult | undefined;
16
+ export declare function isValidGroundedPack(pack: ConnectedContextPack): boolean;
17
+ export declare function deriveScopeIdFrom(chat: Chat, cs: ChatConnectedScope, index: number): string;
18
+ export declare function buildSelectedScopeFrom(chat: Chat, cs: ChatConnectedScope, scopeId: string): SelectedScope;
19
+ export declare function buildQuery(content: string, nowMs: () => number): RetrievalQuery;
20
+ export declare function ensureNotCancelled(signal: AbortSignal): void;
21
+ export declare function promptSafeExcerptText(value: string): string;
22
+ export declare function promptByteLength(messages: readonly GatewayChatMessage[]): number;
23
+ export declare function modelInputPromptByteLimit(modelInputTokensMax: number): number;
24
+ export declare function withPromptExcerptByteLimit(pack: ConnectedContextPack, maxExcerptBytes: number): ConnectedContextPack;
25
+ export declare function packBudgetSummary(pack: ConnectedContextPack): string;
26
+ export declare function evidenceLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
27
+ export declare function uncertaintyLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
28
+ export { GROUNDED_SYSTEM_PROMPT };
29
+ export declare function buildGroundedGatewayMessages(question: string, pack: ConnectedContextPack, redactor: Redactor): readonly GatewayChatMessage[];
30
+ export declare function redactString(redactor: Redactor, value: string): string;
31
+ export declare function buildCitations(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedEvidenceCitation[];
32
+ export declare function buildUncertainty(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedUncertainty[];
33
+ export type GroundedRunner = (input: OrchestratorInput) => Promise<OrchestratorOutput>;
34
+ export declare function persistGroundedExchange(deps: UiHandlerDeps, chatId: string, userContent: string, assistantContent: string): readonly [ChatMessage, ChatMessage];
35
+ export interface MultiSourceSeam {
36
+ readonly retriever: GroundedRetriever;
37
+ readonly answerer: MultiSourceAnswerer;
38
+ }
39
+ export interface HybridSeam {
40
+ readonly folderRetriever?: FolderRetriever;
41
+ readonly connectorRetrieve?: ConnectorRetrieve;
42
+ readonly answer?: HybridAnswerer;
43
+ }
44
+ export declare function handleGroundedAsk(ctx: RouteContext, deps: UiHandlerDeps, runner?: GroundedRunner, multiSource?: MultiSourceSeam, hybrid?: HybridSeam): Promise<RouteResult>;
45
+ //# sourceMappingURL=grounded-qa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"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"}