@oscharko-dev/keiko 0.2.0-beta.3 → 0.2.0-beta.5
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.
- package/README.md +139 -1
- package/dist/ui/csp-hashes.json +33 -39
- package/dist/ui/static/404.html +1 -1
- package/dist/ui/static/__next.__PAGE__.txt +9 -0
- package/dist/ui/static/__next._full.txt +18 -0
- package/dist/ui/static/__next._head.txt +6 -0
- package/dist/ui/static/__next._index.txt +5 -0
- package/dist/ui/static/__next._tree.txt +2 -0
- package/dist/ui/static/_next/static/chunks/05-c3ty_6dwfk.js +1 -0
- package/dist/ui/static/_next/static/chunks/082obv3v03b-9.js +2 -0
- package/dist/ui/static/_next/static/chunks/0iq1i69206cyl.js +31 -0
- package/dist/ui/static/_next/static/chunks/0uifns067thv8.js +1 -0
- package/dist/ui/static/_next/static/chunks/0x31-j53ab1tt.js +1 -0
- package/dist/ui/static/_next/static/chunks/14mrh2-p_w84d.js +1 -0
- package/dist/ui/static/_next/static/chunks/1m-kvwm6_90_3.css +1 -0
- package/dist/ui/static/_next/static/chunks/1v4hrxrm_6_rw.js +1 -0
- package/dist/ui/static/_next/static/chunks/27jktro2p5rq9.js +4 -0
- package/dist/ui/static/_next/static/chunks/2lypy3ewh0r04.js +1 -0
- package/dist/ui/static/_next/static/chunks/2ngm8iwdb1cbv.js +106 -0
- package/dist/ui/static/_next/static/chunks/32573pyyglqxl.js +1 -0
- package/dist/ui/static/_next/static/chunks/3_t_pzet29qtn.js +1 -0
- package/dist/ui/static/_next/static/chunks/3jgg_oe0iok0l.js +1 -0
- package/dist/ui/static/_next/static/chunks/3o_oia3vsam60.js +1 -0
- package/dist/ui/static/_next/static/chunks/3peubv2924kx4.js +1 -0
- package/dist/ui/static/_next/static/chunks/turbopack-2lg1g6kbsfm0x.js +1 -0
- package/dist/ui/static/_next/static/hR2gBQqCDKdPdSxBqZhqv/_buildManifest.js +11 -0
- package/dist/ui/static/_next/static/hR2gBQqCDKdPdSxBqZhqv/_clientMiddlewareManifest.js +1 -0
- package/dist/ui/static/_not-found/__next._full.txt +16 -0
- package/dist/ui/static/_not-found/__next._head.txt +6 -0
- package/dist/ui/static/_not-found/__next._index.txt +5 -0
- package/dist/ui/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
- package/dist/ui/static/_not-found/__next._not-found.txt +5 -0
- package/dist/ui/static/_not-found/__next._tree.txt +2 -0
- package/dist/ui/static/_not-found.html +1 -0
- package/dist/ui/static/_not-found.txt +16 -0
- package/dist/ui/static/index.html +1 -1
- package/dist/ui/static/index.txt +16 -18
- package/dist/ui/static/launch/__next._full.txt +20 -0
- package/dist/ui/static/launch/__next._head.txt +6 -0
- package/dist/ui/static/launch/__next._index.txt +5 -0
- package/dist/ui/static/launch/__next._tree.txt +2 -0
- package/dist/ui/static/launch/__next.launch.__PAGE__.txt +9 -0
- package/dist/ui/static/launch/__next.launch.txt +5 -0
- package/dist/ui/static/launch.html +1 -1
- package/dist/ui/static/launch.txt +17 -17
- package/dist/ui/static/local-knowledge/__next._full.txt +20 -0
- package/dist/ui/static/local-knowledge/__next._head.txt +6 -0
- package/dist/ui/static/local-knowledge/__next._index.txt +5 -0
- package/dist/ui/static/local-knowledge/__next._tree.txt +2 -0
- package/dist/ui/static/local-knowledge/__next.local-knowledge.__PAGE__.txt +9 -0
- package/dist/ui/static/local-knowledge/__next.local-knowledge.txt +5 -0
- package/dist/ui/static/local-knowledge/capsule/__next._full.txt +17 -0
- package/dist/ui/static/local-knowledge/capsule/__next._head.txt +6 -0
- package/dist/ui/static/local-knowledge/capsule/__next._index.txt +5 -0
- package/dist/ui/static/local-knowledge/capsule/__next._tree.txt +2 -0
- package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.__PAGE__.txt +6 -0
- package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.capsule.txt +5 -0
- package/dist/ui/static/local-knowledge/capsule/__next.local-knowledge.txt +5 -0
- package/dist/ui/static/local-knowledge/capsule.html +1 -1
- package/dist/ui/static/local-knowledge/capsule.txt +14 -14
- package/dist/ui/static/local-knowledge.html +1 -1
- package/dist/ui/static/local-knowledge.txt +19 -16
- package/dist/ui/static/memoriaviva/__next._full.txt +17 -0
- package/dist/ui/static/memoriaviva/__next._head.txt +6 -0
- package/dist/ui/static/memoriaviva/__next._index.txt +5 -0
- package/dist/ui/static/memoriaviva/__next._tree.txt +2 -0
- package/dist/ui/static/memoriaviva/__next.memoriaviva.__PAGE__.txt +6 -0
- package/dist/ui/static/memoriaviva/__next.memoriaviva.txt +5 -0
- package/dist/ui/static/memoriaviva/consolidation/__next._full.txt +17 -0
- package/dist/ui/static/memoriaviva/consolidation/__next._head.txt +6 -0
- package/dist/ui/static/memoriaviva/consolidation/__next._index.txt +5 -0
- package/dist/ui/static/memoriaviva/consolidation/__next._tree.txt +2 -0
- package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.__PAGE__.txt +6 -0
- package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.consolidation.txt +5 -0
- package/dist/ui/static/memoriaviva/consolidation/__next.memoriaviva.txt +5 -0
- package/dist/ui/static/memoriaviva/consolidation.html +1 -1
- package/dist/ui/static/memoriaviva/consolidation.txt +15 -15
- package/dist/ui/static/memoriaviva/detail/__next._full.txt +17 -0
- package/dist/ui/static/memoriaviva/detail/__next._head.txt +6 -0
- package/dist/ui/static/memoriaviva/detail/__next._index.txt +5 -0
- package/dist/ui/static/memoriaviva/detail/__next._tree.txt +2 -0
- package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.__PAGE__.txt +6 -0
- package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.detail.txt +5 -0
- package/dist/ui/static/memoriaviva/detail/__next.memoriaviva.txt +5 -0
- package/dist/ui/static/memoriaviva/detail.html +1 -1
- package/dist/ui/static/memoriaviva/detail.txt +14 -14
- package/dist/ui/static/memoriaviva/review-queue/__next._full.txt +17 -0
- package/dist/ui/static/memoriaviva/review-queue/__next._head.txt +6 -0
- package/dist/ui/static/memoriaviva/review-queue/__next._index.txt +5 -0
- package/dist/ui/static/memoriaviva/review-queue/__next._tree.txt +2 -0
- package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.__PAGE__.txt +6 -0
- package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.review-queue.txt +5 -0
- package/dist/ui/static/memoriaviva/review-queue/__next.memoriaviva.txt +5 -0
- package/dist/ui/static/memoriaviva/review-queue.html +1 -1
- package/dist/ui/static/memoriaviva/review-queue.txt +15 -15
- package/dist/ui/static/memoriaviva.html +1 -1
- package/dist/ui/static/memoriaviva.txt +14 -14
- package/node_modules/@oscharko-dev/keiko-cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/evaluate.js +61 -2
- package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/evidence.js +65 -21
- package/node_modules/@oscharko-dev/keiko-cli/dist/launcher-platforms.js +3 -3
- package/node_modules/@oscharko-dev/keiko-cli/dist/run.d.ts +3 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/run.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/run.js +73 -41
- package/node_modules/@oscharko-dev/keiko-cli/dist/ui.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-cli/dist/ui.js +36 -11
- package/node_modules/@oscharko-dev/keiko-cli/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-contracts/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts +20 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/bff-wire.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/connected-context.js +256 -75
- package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts +11 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/evidence.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts +6 -6
- package/node_modules/@oscharko-dev/keiko-contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/index.js +4 -4
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts +11 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-records.js +4 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-schema.js +109 -4
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge-validation.js +94 -7
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts +5 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/local-knowledge.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/bffWire.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/ids.js +3 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts +14 -0
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-contracts/dist/qualityIntelligence/sourceEnvelope.js +53 -5
- package/node_modules/@oscharko-dev/keiko-contracts/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-evaluations/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evaluations/dist/runner.js +11 -3
- package/node_modules/@oscharko-dev/keiko-evaluations/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-evidence/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts +20 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/connected-context-evidence.js +34 -2
- package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/candidatesArtifact.js +3 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts +17 -0
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/companionStore.js +19 -0
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts +5 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/schema.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts +32 -2
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/figmaSnapshot/store.js +259 -40
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts +3 -3
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/manifestSchema.d.ts +18 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/manifestSchema.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts +3 -0
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/retention.js +48 -5
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts +33 -0
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +99 -13
- package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-harness/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-harness/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-lifecycle.js +25 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/capsule-set-lifecycle.js +16 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts +3 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-persist.js +9 -5
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker-runner.js +22 -7
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts +4 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/chunker.js +61 -9
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/citation-mapper.js +64 -36
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts +2 -2
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/index.js +2 -2
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts +7 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/chunking/types.js +5 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/composition.js +27 -4
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/index.d.ts +0 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/index.js +0 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts +5 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/model-gateway-answer-generator.js +25 -6
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/types.js +2 -3
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/discovery-runner.js +10 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts +4 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/extract.js +370 -45
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/test-support.js +8 -4
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/types.js +10 -5
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/discovery/walk.js +65 -20
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/fixtures.js +79 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/evaluations/runner-seed.js +4 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts +6 -5
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/index.js +4 -4
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/embedding-batcher.js +71 -29
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/orchestrator.js +253 -131
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts +12 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/indexing/vector-persist.js +9 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts +3 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/_internal.js +13 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/docx-parser.js +86 -46
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/json-parser.js +50 -22
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts +21 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/pdf-parser.js +90 -13
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/registry.js +3 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts +7 -2
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/parsers/types.js +7 -3
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/audit-emitter.js +8 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/diagnostic-redactor.js +17 -10
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/retention-applier.js +7 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts +4 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/privacy/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/retrieval-runner.js +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/retrieval/scoped-vector-search.js +318 -32
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/source-lifecycle.js +46 -16
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts +14 -0
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/store.js +26 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/package.json +10 -5
- package/node_modules/@oscharko-dev/keiko-memory-capture/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-memory-capture/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-memory-consolidation/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-memory-consolidation/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-memory-governance/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-memory-governance/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-memory-retrieval/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-memory-retrieval/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-memory-vault/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-memory-vault/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts +2 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/config.js +50 -0
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts +3 -0
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/http.js +114 -44
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/normalize.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/normalize.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/normalize.js +22 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-adapter.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/openai-adapter.js +18 -4
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts +14 -0
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-model-gateway/dist/qualityIntelligence/dispatcher.js +14 -0
- package/node_modules/@oscharko-dev/keiko-model-gateway/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/a11yBaseline.js +9 -2
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/cleanToScreenIr.js +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts +9 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/emissionPlan.js +9 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts +5 -0
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/htmlCssAdapter.js +229 -33
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts +62 -0
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/irTypes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/links.js +24 -4
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts +4 -2
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/navGraph.js +0 -0
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/normalize.js +119 -5
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts +2 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/prune.js +26 -11
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/screenIrTestBaseline.js +86 -9
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/figma/tokens.js +10 -3
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/domain/validation.js +14 -12
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/alm.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/alm.js +29 -30
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/markdown.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/markdown.js +29 -5
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/qtest.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/qtest.js +29 -29
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/spreadsheetSafeCsv.d.ts +2 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/spreadsheetSafeCsv.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/spreadsheetSafeCsv.js +40 -2
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/xray.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/export/adapters/xray.js +6 -2
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/sourceMixPlanning.js +0 -0
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/dist/ingestion/untrustedContentNormalisation.js +9 -1
- package/node_modules/@oscharko-dev/keiko-quality-intelligence/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-sdk/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-sdk/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-security/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-security/dist/redaction.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-security/dist/redaction.js +4 -2
- package/node_modules/@oscharko-dev/keiko-security/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/assistant-response.d.ts +6 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/assistant-response.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/assistant-response.js +12 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +17 -5
- package/node_modules/@oscharko-dev/keiko-server/dist/chat-stream-handlers.js +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/deps.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/deps.js +59 -9
- package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/evidence.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/evidence.js +4 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts +18 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/files.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/files.js +208 -72
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-answer.js +7 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts +3 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-context-index.js +27 -4
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-handoff.js +46 -14
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-orchestrator.js +651 -45
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-prompt.js +5 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts +9 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-hybrid.js +197 -46
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts +4 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa-multi-source.js +103 -25
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts +7 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-qa.js +199 -21
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/grounded-turn-registry.js +21 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts +9 -6
- package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-grounded-qa.js +193 -67
- package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/local-knowledge-handlers.js +189 -72
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/connectorErrors.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/connectorErrors.js +11 -8
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/editRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/editRoutes.js +1 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/exportRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/exportRoutes.js +89 -30
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +10 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaConnectorErrors.js +110 -30
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +13 -4
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaHttpPort.js +29 -17
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +13 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaRenderPort.js +54 -5
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +84 -12
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotHash.js +16 -8
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +6 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +13 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotAdapter.js +15 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +9 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotOrchestration.js +2 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +9 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/figmaSnapshotRoutes.js +138 -19
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/generationPort.js +38 -8
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/handoffErrors.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/handoffErrors.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/handoffErrors.js +1 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/handoffRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/handoffRoutes.js +41 -9
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/index.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/index.js +2 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/judgePort.js +43 -10
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reCheckRoutes.js +3 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/retentionRoutes.d.ts +5 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/retentionRoutes.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/retentionRoutes.js +70 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewRoutes.js +6 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewStore.d.ts +25 -4
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewStore.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/reviewStore.js +72 -9
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +97 -18
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRegistry.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRegistry.js +2 -0
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts +4 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runRoutes.js +17 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/uiRoutes.js +18 -4
- package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +8 -3
- package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/run-engine.js +6 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts +2 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/chats.js +84 -8
- package/node_modules/@oscharko-dev/keiko-server/dist/store/db.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/db.js +4 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts +5 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store/types.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/store-handlers.js +71 -15
- package/node_modules/@oscharko-dev/keiko-server/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-tools/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-tools/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-verification/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-verification/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-workflows/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/assemble.js +45 -10
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/contextpack/index.js +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/anchors.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/anchors.js +68 -0
- package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/planner/plan.js +4 -6
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts +30 -0
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/__tests__/fixtures/runEntryFixtures.js +114 -0
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/modelRoutedTestDesign.js +20 -7
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runEntries.js +15 -7
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/qualityIntelligence/runtimeCommon.js +28 -4
- package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/rank.js +51 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workflows/dist/ranking/signals.js +8 -3
- package/node_modules/@oscharko-dev/keiko-workflows/package.json +2 -2
- package/node_modules/@oscharko-dev/keiko-workspace/dist/.tsbuildinfo +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/discovery.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/discovery.js +34 -2
- package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/fs.js +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/gitHistory.js +84 -27
- package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/ignore.js +19 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/importGraph.js +6 -3
- package/node_modules/@oscharko-dev/keiko-workspace/dist/realpath.d.ts +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/realpath.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/realpath.js +2 -2
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearch.js +72 -25
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts +15 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchEntries.js +107 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts +18 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchLineSelection.js +42 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchMatchers.js +72 -11
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts +2 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.d.ts.map +1 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchRegexSafety.js +15 -0
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts +2 -2
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-workspace/dist/repoSearchScan.js +89 -75
- package/node_modules/@oscharko-dev/keiko-workspace/package.json +2 -2
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/http2.d.ts +1 -0
- package/node_modules/@types/node/package.json +2 -2
- package/package.json +3 -1
- package/dist/ui/static/_next/static/RAzN8WLtYaktD-ZePowXl/_buildManifest.js +0 -1
- package/dist/ui/static/_next/static/chunks/18-ac3e3551b4e0ce8a.js +0 -1
- package/dist/ui/static/_next/static/chunks/258-e3b5ee46b0669967.js +0 -1
- package/dist/ui/static/_next/static/chunks/422-4c94c107b90d3ccc.js +0 -1
- package/dist/ui/static/_next/static/chunks/664-6d821dc1aacb6b48.js +0 -1
- package/dist/ui/static/_next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
- package/dist/ui/static/_next/static/chunks/982-abc19630e6305864.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/_not-found/page-c4d800f366186be0.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/launch/page-17ca39367f25f372.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/layout-0f75a39edc90325d.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/local-knowledge/capsule/page-87a2ea239308ed34.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/local-knowledge/page-98bb7704fc7fd0ad.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/memoriaviva/consolidation/page-f912263f1ee5d2dd.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/memoriaviva/detail/page-fa590f135356e0af.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/memoriaviva/page-b8555600c1113f14.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/memoriaviva/review-queue/page-85cfbeb3598c0a36.js +0 -1
- package/dist/ui/static/_next/static/chunks/app/page-2881856ad25d9935.js +0 -1
- package/dist/ui/static/_next/static/chunks/framework-d8f01f7e25201916.js +0 -1
- package/dist/ui/static/_next/static/chunks/main-app-5b043f6c611974ae.js +0 -1
- package/dist/ui/static/_next/static/chunks/main-bc552b04f2b6dbe2.js +0 -1
- package/dist/ui/static/_next/static/chunks/pages/_app-2e239ff05bfdf6d6.js +0 -1
- package/dist/ui/static/_next/static/chunks/pages/_error-bda15e7831eec981.js +0 -1
- package/dist/ui/static/_next/static/chunks/webpack-0cfe6f51555ca84e.js +0 -1
- package/dist/ui/static/_next/static/css/eac94895f3edc5a5.css +0 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/scripted-answer-generator.d.ts +0 -6
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/scripted-answer-generator.d.ts.map +0 -1
- package/node_modules/@oscharko-dev/keiko-local-knowledge/dist/conversation/scripted-answer-generator.js +0 -49
- /package/dist/ui/static/_next/static/chunks/{polyfills-42372ed130431b0a.js → 0cz1d0mv5g_q7.js} +0 -0
- /package/dist/ui/static/_next/static/{RAzN8WLtYaktD-ZePowXl → hR2gBQqCDKdPdSxBqZhqv}/_ssgManifest.js +0 -0
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
// gateway messages, citations, and evidence from the exact same primitives.
|
|
9
9
|
import { basename } from "node:path";
|
|
10
10
|
import { createHash, randomUUID } from "node:crypto";
|
|
11
|
-
import { resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
|
|
11
|
+
import { ContextOverflowError, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
|
|
12
12
|
import { persistConnectedContextEvidence } from "@oscharko-dev/keiko-evidence";
|
|
13
13
|
import { CANDIDATE_OMISSION_REASONS, DEFAULT_EXPLORATION_BUDGET, } from "@oscharko-dev/keiko-contracts/connected-context";
|
|
14
14
|
import { buildGroundedAnswerContextPackSummary, } from "@oscharko-dev/keiko-contracts/bff-wire";
|
|
15
15
|
import { currentRedactionSecrets } from "./deps.js";
|
|
16
|
-
import { ClarificationNeededError, retrieveConnectedContextPack, } from "./grounded-orchestrator.js";
|
|
16
|
+
import { ClarificationNeededError, clarificationUserMessage, retrieveConnectedContextPack, } from "./grounded-orchestrator.js";
|
|
17
17
|
import { microIndexForGroundedScope } from "./grounded-context-index.js";
|
|
18
18
|
import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
|
|
19
19
|
import { rememberGroundedTurn } from "./grounded-turn-registry.js";
|
|
20
|
+
import { assertUsableAssistantContent } from "./assistant-response.js";
|
|
20
21
|
import { normalizeGroundedAnswerPayload, } from "./grounded-answer.js";
|
|
21
|
-
import { badRequest, buildCitations, buildQuery, buildSelectedScopeFrom, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, packBudgetSummary, persistGroundedExchange, redactString, uncertaintyLines, } from "./grounded-qa.js";
|
|
22
|
+
import { badRequest, buildCitations, buildQuery, buildSelectedScopeFrom, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, mappedWorkspaceError, modelInputPromptByteLimit, packBudgetSummary, persistGroundedExchange, promptByteLength, redactString, uncertaintyLines, withPromptExcerptByteLimit, } from "./grounded-qa.js";
|
|
22
23
|
// ─── Canonical reader + label/budget helpers ──────────────────────────────────
|
|
23
24
|
// Canonical reader rule (Epic #532 contract): `connectedScopes` supersedes the legacy single
|
|
24
25
|
// `connectedScope`. Readers must NOT mix the two — the list, when present, is authoritative.
|
|
@@ -170,6 +171,9 @@ function sourceSection(entry, index, redactor) {
|
|
|
170
171
|
// Same system message as the single-source path; the user message lists each source under its own
|
|
171
172
|
// header so the model can attribute every claim to a source label in addition to the file ref.
|
|
172
173
|
export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor) {
|
|
174
|
+
return budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor);
|
|
175
|
+
}
|
|
176
|
+
function buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor) {
|
|
173
177
|
const sections = labeledPacks.flatMap((entry, index) => sourceSection(entry, index, redactor));
|
|
174
178
|
const userContent = [
|
|
175
179
|
"User question:",
|
|
@@ -185,6 +189,41 @@ export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor
|
|
|
185
189
|
{ role: "user", content: userContent },
|
|
186
190
|
];
|
|
187
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
|
+
}
|
|
188
227
|
// Production retriever: retrieval-only orchestrator pass with a per-scope micro-index cache. No
|
|
189
228
|
// modelId is needed — retrieval performs no model call.
|
|
190
229
|
export function defaultRetriever(signal) {
|
|
@@ -207,8 +246,9 @@ export function createMultiSourceAnswerer(model, modelId, redactor, signal) {
|
|
|
207
246
|
stream: false,
|
|
208
247
|
}, signal);
|
|
209
248
|
const content = response.content.trim();
|
|
249
|
+
assertUsableAssistantContent(content, modelId);
|
|
210
250
|
return {
|
|
211
|
-
content
|
|
251
|
+
content,
|
|
212
252
|
usage: {
|
|
213
253
|
promptTokens: response.usage.promptTokens,
|
|
214
254
|
completionTokens: response.usage.completionTokens,
|
|
@@ -216,14 +256,19 @@ export function createMultiSourceAnswerer(model, modelId, redactor, signal) {
|
|
|
216
256
|
};
|
|
217
257
|
};
|
|
218
258
|
}
|
|
259
|
+
// ─── Retrieved-source record + worker ─────────────────────────────────────────
|
|
260
|
+
const MAX_RETRIEVAL_CONCURRENCY = 4;
|
|
219
261
|
async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
|
|
220
|
-
const retrieved =
|
|
221
|
-
|
|
262
|
+
const retrieved = new Array(ctx.scopes.length);
|
|
263
|
+
const skipped = [];
|
|
264
|
+
let nextIndex = 0;
|
|
265
|
+
let firstError;
|
|
266
|
+
async function retrieveOne(i) {
|
|
222
267
|
ensureNotCancelled(ctx.signal);
|
|
223
268
|
const cs = ctx.scopes[i];
|
|
224
269
|
const label = labels[i];
|
|
225
270
|
if (cs === undefined || label === undefined)
|
|
226
|
-
|
|
271
|
+
return;
|
|
227
272
|
const scope = buildSelectedScopeFrom(ctx.chat, cs, deriveScopeIdFrom(ctx.chat, cs, i));
|
|
228
273
|
const out = await ctx.retriever({
|
|
229
274
|
scope,
|
|
@@ -232,24 +277,50 @@ async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
|
|
|
232
277
|
budget: perScopeBudget,
|
|
233
278
|
});
|
|
234
279
|
if (!isValidGroundedPack(out.pack)) {
|
|
235
|
-
|
|
280
|
+
skipped.push({ label, message: "Pack validation failed." });
|
|
281
|
+
firstError ??= internalError("Grounded answer context pack failed validation.");
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
retrieved[i] = { label, pack: out.pack, elapsedMs: out.elapsedMs, scope, plan: out.plan };
|
|
285
|
+
}
|
|
286
|
+
async function worker() {
|
|
287
|
+
for (;;) {
|
|
288
|
+
const i = nextIndex;
|
|
289
|
+
nextIndex += 1;
|
|
290
|
+
if (i >= ctx.scopes.length)
|
|
291
|
+
return;
|
|
292
|
+
await retrieveOne(i);
|
|
236
293
|
}
|
|
237
|
-
retrieved.push({ label, pack: out.pack, elapsedMs: out.elapsedMs, scope });
|
|
238
294
|
}
|
|
239
|
-
|
|
295
|
+
const workerCount = Math.min(MAX_RETRIEVAL_CONCURRENCY, Math.max(1, ctx.scopes.length));
|
|
296
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
297
|
+
const sources = retrieved.filter((source) => source !== undefined);
|
|
298
|
+
if (sources.length === 0 && firstError !== undefined)
|
|
299
|
+
return firstError;
|
|
300
|
+
return { retrieved: sources, skipped, firstError };
|
|
240
301
|
}
|
|
241
302
|
function mergedCitations(sources, redactor) {
|
|
242
303
|
const citations = sources.flatMap((src) => buildCitations(src.pack, redactor).map((c) => ({ ...c, source: src.label })));
|
|
243
304
|
return [...citations].sort((a, b) => b.score - a.score);
|
|
244
305
|
}
|
|
245
|
-
function mergedUncertainty(sources, redactor) {
|
|
246
|
-
|
|
306
|
+
function mergedUncertainty(sources, skipped, preSkipped, redactor) {
|
|
307
|
+
const fromPacks = sources.flatMap((src) => src.pack.uncertainty.map((u) => ({ kind: u.kind, claim: redactString(redactor, u.claim) })));
|
|
308
|
+
const allSkipped = [
|
|
309
|
+
...preSkipped.map((s) => ({ label: s.label, message: s.message })),
|
|
310
|
+
...skipped,
|
|
311
|
+
];
|
|
312
|
+
const fromSkipped = allSkipped.map((entry) => ({
|
|
313
|
+
kind: "source-skipped",
|
|
314
|
+
claim: redactString(redactor, `Source ${entry.label} skipped: ${entry.message}`),
|
|
315
|
+
}));
|
|
316
|
+
return [...fromPacks, ...fromSkipped];
|
|
247
317
|
}
|
|
248
318
|
// Persists ONE evidence run per source, each naming the root that source actually searched (L1
|
|
249
319
|
// honesty rule, mirrored from the single path). Returns the FIRST source's run id, which the
|
|
250
|
-
// answer surfaces as its primary evidenceRunId.
|
|
320
|
+
// answer surfaces as its primary evidenceRunId, plus the full set for audit discovery.
|
|
251
321
|
function persistPerSourceEvidence(ctx, sources) {
|
|
252
322
|
let firstRunId;
|
|
323
|
+
const runIds = [];
|
|
253
324
|
for (const src of sources) {
|
|
254
325
|
const finishedAt = Date.now();
|
|
255
326
|
const startedAt = Math.max(0, finishedAt - src.elapsedMs);
|
|
@@ -259,6 +330,7 @@ function persistPerSourceEvidence(ctx, sources) {
|
|
|
259
330
|
modelId: ctx.modelId,
|
|
260
331
|
workspaceRoot: src.scope.workspaceRoot,
|
|
261
332
|
chatId: ctx.chat.id,
|
|
333
|
+
plan: src.plan,
|
|
262
334
|
pack: src.pack,
|
|
263
335
|
citationCount: buildCitations(src.pack, ctx.deps.redactor).length,
|
|
264
336
|
elapsedMs: src.elapsedMs,
|
|
@@ -271,23 +343,25 @@ function persistPerSourceEvidence(ctx, sources) {
|
|
|
271
343
|
costClassResolver: resolveCostClass,
|
|
272
344
|
});
|
|
273
345
|
firstRunId ??= runId;
|
|
346
|
+
runIds.push(runId);
|
|
274
347
|
}
|
|
275
|
-
return { firstRunId };
|
|
348
|
+
return { firstRunId, runIds };
|
|
276
349
|
}
|
|
277
|
-
function assembleMultiSourceAnswer(ctx, sources, assistant, ids) {
|
|
350
|
+
function assembleMultiSourceAnswer(ctx, sources, skipped, assistant, ids) {
|
|
278
351
|
const { redactor } = ctx.deps;
|
|
279
352
|
const citations = mergedCitations(sources, redactor);
|
|
280
353
|
const summaries = sources.map((src) => buildGroundedAnswerContextPackSummary(src.pack, buildCitations(src.pack, redactor).length, src.elapsedMs));
|
|
281
354
|
const mergedSummary = mergeContextPackSummaries(summaries);
|
|
282
|
-
const { firstRunId } = persistPerSourceEvidence(ctx, sources);
|
|
355
|
+
const { firstRunId, runIds } = persistPerSourceEvidence(ctx, sources);
|
|
283
356
|
return {
|
|
284
357
|
groundingKind: "connected-context",
|
|
285
358
|
userMessageId: ids.userMessageId,
|
|
286
359
|
assistantMessageId: ids.assistantMessageId,
|
|
287
360
|
evidenceRunId: firstRunId,
|
|
361
|
+
evidenceRunIds: runIds,
|
|
288
362
|
content: redactString(redactor, assistant.content),
|
|
289
363
|
citations,
|
|
290
|
-
uncertainty: mergedUncertainty(sources, redactor),
|
|
364
|
+
uncertainty: mergedUncertainty(sources, skipped, ctx.preSkipped ?? [], redactor),
|
|
291
365
|
omittedCount: sources.reduce((acc, src) => acc + src.pack.omitted.length, 0),
|
|
292
366
|
elapsedMs: sources.reduce((acc, src) => acc + src.elapsedMs, 0),
|
|
293
367
|
contextPack: {
|
|
@@ -304,26 +378,27 @@ export async function runMultiSourceAsk(ctx) {
|
|
|
304
378
|
const query = buildQuery(ctx.content, () => Date.now());
|
|
305
379
|
const labels = sourceLabels(ctx.scopes);
|
|
306
380
|
const perScopeBudget = splitExplorationBudget(DEFAULT_EXPLORATION_BUDGET, ctx.scopes.length);
|
|
307
|
-
let
|
|
381
|
+
let outcome;
|
|
308
382
|
try {
|
|
309
|
-
|
|
383
|
+
outcome = await retrieveAllSources(ctx, query, perScopeBudget, labels);
|
|
310
384
|
}
|
|
311
385
|
catch (error) {
|
|
312
386
|
return mapMultiSourceError(error, ctx.deps);
|
|
313
387
|
}
|
|
314
|
-
if (isRouteResult(
|
|
315
|
-
return
|
|
388
|
+
if (isRouteResult(outcome)) {
|
|
389
|
+
return outcome;
|
|
316
390
|
}
|
|
317
|
-
const retrieved =
|
|
391
|
+
const { retrieved, skipped } = outcome;
|
|
318
392
|
let assistant;
|
|
319
393
|
try {
|
|
320
394
|
assistant = normalizeGroundedAnswerPayload(await ctx.answerer(ctx.content, retrieved.map((s) => ({ label: s.label, pack: s.pack }))));
|
|
395
|
+
ensureNotCancelled(ctx.signal);
|
|
321
396
|
}
|
|
322
397
|
catch (error) {
|
|
323
398
|
return mapMultiSourceError(error, ctx.deps);
|
|
324
399
|
}
|
|
325
400
|
const [userMessage, assistantMessage] = persistGroundedExchange(ctx.deps, ctx.chat.id, redactString(ctx.deps.redactor, ctx.content), redactString(ctx.deps.redactor, assistant.content));
|
|
326
|
-
const answer = assembleMultiSourceAnswer(ctx, retrieved, assistant, {
|
|
401
|
+
const answer = assembleMultiSourceAnswer(ctx, retrieved, skipped, assistant, {
|
|
327
402
|
userMessageId: userMessage.id,
|
|
328
403
|
assistantMessageId: assistantMessage.id,
|
|
329
404
|
});
|
|
@@ -337,11 +412,14 @@ export async function runMultiSourceAsk(ctx) {
|
|
|
337
412
|
return { status: 200, body: answer };
|
|
338
413
|
}
|
|
339
414
|
function isRouteResult(value) {
|
|
340
|
-
return
|
|
415
|
+
return "status" in value;
|
|
341
416
|
}
|
|
342
417
|
function mapMultiSourceError(error, deps) {
|
|
343
418
|
if (error instanceof ClarificationNeededError)
|
|
344
|
-
return badRequest(error
|
|
419
|
+
return badRequest(clarificationUserMessage(error));
|
|
420
|
+
const workspaceResult = mappedWorkspaceError(error);
|
|
421
|
+
if (workspaceResult !== undefined)
|
|
422
|
+
return workspaceResult;
|
|
345
423
|
const gatewayResult = mappedGatewayError(error, deps);
|
|
346
424
|
if (gatewayResult !== undefined)
|
|
347
425
|
return gatewayResult;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ChatMessage as GatewayChatMessage } from "@oscharko-dev/keiko-model-gateway";
|
|
1
2
|
import { type ConnectedContextPack, type RetrievalQuery, type SelectedScope } from "@oscharko-dev/keiko-contracts/connected-context";
|
|
2
3
|
import { type GroundedEvidenceCitation, type GroundedUncertainty } from "@oscharko-dev/keiko-contracts/bff-wire";
|
|
3
4
|
import type { RouteContext, RouteResult } from "./routes.js";
|
|
@@ -10,15 +11,21 @@ import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
|
|
|
10
11
|
export declare function badRequest(message: string): RouteResult;
|
|
11
12
|
export declare function internalError(message: string): RouteResult;
|
|
12
13
|
export declare function mappedGatewayError(error: unknown, deps: UiHandlerDeps): RouteResult | undefined;
|
|
14
|
+
export declare function mappedWorkspaceError(error: unknown): RouteResult | undefined;
|
|
13
15
|
export declare function isValidGroundedPack(pack: ConnectedContextPack): boolean;
|
|
14
16
|
export declare function deriveScopeIdFrom(chat: Chat, cs: ChatConnectedScope, index: number): string;
|
|
15
17
|
export declare function buildSelectedScopeFrom(chat: Chat, cs: ChatConnectedScope, scopeId: string): SelectedScope;
|
|
16
18
|
export declare function buildQuery(content: string, nowMs: () => number): RetrievalQuery;
|
|
17
19
|
export declare function ensureNotCancelled(signal: AbortSignal): void;
|
|
20
|
+
export declare function promptSafeExcerptText(value: string): string;
|
|
21
|
+
export declare function promptByteLength(messages: readonly GatewayChatMessage[]): number;
|
|
22
|
+
export declare function modelInputPromptByteLimit(modelInputTokensMax: number): number;
|
|
23
|
+
export declare function withPromptExcerptByteLimit(pack: ConnectedContextPack, maxExcerptBytes: number): ConnectedContextPack;
|
|
18
24
|
export declare function packBudgetSummary(pack: ConnectedContextPack): string;
|
|
19
25
|
export declare function evidenceLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
|
|
20
26
|
export declare function uncertaintyLines(pack: ConnectedContextPack, redactor: Redactor): readonly string[];
|
|
21
27
|
export { GROUNDED_SYSTEM_PROMPT };
|
|
28
|
+
export declare function buildGroundedGatewayMessages(question: string, pack: ConnectedContextPack, redactor: Redactor): readonly GatewayChatMessage[];
|
|
22
29
|
export declare function redactString(redactor: Redactor, value: string): string;
|
|
23
30
|
export declare function buildCitations(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedEvidenceCitation[];
|
|
24
31
|
export declare function buildUncertainty(pack: ConnectedContextPack, redactor: Redactor): readonly GroundedUncertainty[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grounded-qa.d.ts","sourceRoot":"","sources":["../src/grounded-qa.ts"],"names":[],"mappings":"AAUA,OAAO,EAOL,KAAK,WAAW,IAAI,kBAAkB,EAEvC,MAAM,mCAAmC,CAAC;AAU3C,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAyC9D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAEvD;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAE1D;AAkBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,CAE/F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAS5E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAMvE;AA4ED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK3F;AAKD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,kBAAkB,EACtB,OAAO,EAAE,MAAM,GACd,aAAa,CAef;AAyED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,GAAG,cAAc,CAQ/E;AAuCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAI5D;AAYD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAEhF;AAED,wBAAgB,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAE7E;AAsBD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,oBAAoB,EAC1B,eAAe,EAAE,MAAM,GACtB,oBAAoB,CAWtB;AAwCD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAWpE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,CA2B/F;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,MAAM,EAAE,CAKnB;AAOD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAgClC,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,kBAAkB,EAAE,CAE/B;AAsDD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,wBAAwB,EAAE,CAcrC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,GACjB,SAAS,mBAAmB,EAAE,CAUhC;AAOD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAgCvF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAmBrC;AA4KD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AAmID,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;CAClC;AA8CD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,aAAa,EACnB,MAAM,CAAC,EAAE,cAAc,EACvB,WAAW,CAAC,EAAE,eAAe,EAC7B,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAsCtB"}
|
|
@@ -4,20 +4,25 @@
|
|
|
4
4
|
// All path validation runs in the composed layers; this module only validates wire-shape
|
|
5
5
|
// inputs (chatId + content) and enforces that the chat carries a connected scope.
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
|
-
import {
|
|
7
|
+
import { realpathSync } from "node:fs";
|
|
8
|
+
import { basename } from "node:path";
|
|
9
|
+
import { CancelledError, ContextOverflowError, GatewayError, findCapability, findConfiguredCapability, resolveCostClass, } from "@oscharko-dev/keiko-model-gateway";
|
|
8
10
|
import { persistConnectedContextEvidence } from "@oscharko-dev/keiko-evidence";
|
|
9
11
|
import { redact } from "@oscharko-dev/keiko-security";
|
|
12
|
+
import { RepoSearchInvalidQueryError, RepoSearchInvalidRangeError, RepoSearchUnsupportedFileError, } from "@oscharko-dev/keiko-workspace";
|
|
10
13
|
import { CONNECTED_CONTEXT_SCHEMA_VERSION, validateConnectedContextPack, } from "@oscharko-dev/keiko-contracts/connected-context";
|
|
11
14
|
import { buildGroundedAnswerContextPackSummary, } from "@oscharko-dev/keiko-contracts/bff-wire";
|
|
12
15
|
import { errorBody } from "./routes.js";
|
|
13
|
-
import { currentGatewayConfig, currentRedactionSecrets } from "./deps.js";
|
|
14
|
-
import { ClarificationNeededError, runGroundedExploration, } from "./grounded-orchestrator.js";
|
|
16
|
+
import { currentGatewayConfig, currentGroundingLimits, currentRedactionSecrets } from "./deps.js";
|
|
17
|
+
import { ClarificationNeededError, clarificationUserMessage, runGroundedExploration, } from "./grounded-orchestrator.js";
|
|
15
18
|
import { microIndexForGroundedScope } from "./grounded-context-index.js";
|
|
19
|
+
import { pathIsDenied } from "./files-deny.js";
|
|
16
20
|
import { handleLocalKnowledgeGroundedAsk } from "./local-knowledge-grounded-qa.js";
|
|
17
21
|
import { buildConnectedScopes, createMultiSourceAnswerer, defaultRetriever, runMultiSourceAsk, } from "./grounded-qa-multi-source.js";
|
|
18
22
|
import { buildLocalKnowledgeScopes, runHybridGroundedAsk, } from "./grounded-qa-hybrid.js";
|
|
19
23
|
import { GROUNDED_SYSTEM_PROMPT } from "./grounded-prompt.js";
|
|
20
24
|
import { rememberGroundedTurn } from "./grounded-turn-registry.js";
|
|
25
|
+
import { assertUsableAssistantContent } from "./assistant-response.js";
|
|
21
26
|
// ─── Body parsing (mirrors store-handlers' bounded reader) ────────────────────
|
|
22
27
|
const MAX_BODY_BYTES = 128_000;
|
|
23
28
|
const MAX_CONTENT_CHARS = 16_000;
|
|
@@ -85,6 +90,14 @@ function gatewayErrorResult(error, deps) {
|
|
|
85
90
|
export function mappedGatewayError(error, deps) {
|
|
86
91
|
return error instanceof GatewayError ? gatewayErrorResult(error, deps) : undefined;
|
|
87
92
|
}
|
|
93
|
+
export function mappedWorkspaceError(error) {
|
|
94
|
+
if (error instanceof RepoSearchInvalidQueryError ||
|
|
95
|
+
error instanceof RepoSearchInvalidRangeError ||
|
|
96
|
+
error instanceof RepoSearchUnsupportedFileError) {
|
|
97
|
+
return badRequest(error.message);
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
88
101
|
export function isValidGroundedPack(pack) {
|
|
89
102
|
try {
|
|
90
103
|
return validateConnectedContextPack(pack).ok;
|
|
@@ -182,6 +195,52 @@ function buildSelectedScope(chat) {
|
|
|
182
195
|
return undefined;
|
|
183
196
|
return buildSelectedScopeFrom(chat, cs, deriveScopeId(chat));
|
|
184
197
|
}
|
|
198
|
+
function canonicalGroundedRoot(rootInput, deps) {
|
|
199
|
+
if (pathIsDenied(rootInput)) {
|
|
200
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
201
|
+
}
|
|
202
|
+
let realRoot;
|
|
203
|
+
try {
|
|
204
|
+
realRoot = realpathSync(rootInput);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return badRequest("Connected scope root is not accessible.");
|
|
208
|
+
}
|
|
209
|
+
if (pathIsDenied(realRoot)) {
|
|
210
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
211
|
+
}
|
|
212
|
+
const redacted = deps.redactor(realRoot);
|
|
213
|
+
if (typeof redacted === "string" && redacted !== realRoot) {
|
|
214
|
+
return badRequest("Connected scope root contains credential-shaped metadata.");
|
|
215
|
+
}
|
|
216
|
+
return realRoot;
|
|
217
|
+
}
|
|
218
|
+
function skippedFolderMessage(result) {
|
|
219
|
+
const body = result.body;
|
|
220
|
+
return body.error?.message ?? "not accessible";
|
|
221
|
+
}
|
|
222
|
+
// Fail-soft canonicalization: inaccessible/denied scopes are collected in `skipped` instead of
|
|
223
|
+
// aborting the entire request. Callers apply the hard-400 only when NO healthy scope remains.
|
|
224
|
+
function canonicalizeGroundedFolderScopes(chat, deps, scopes) {
|
|
225
|
+
const canonical = [];
|
|
226
|
+
const skipped = [];
|
|
227
|
+
for (const scope of scopes) {
|
|
228
|
+
const rootInput = scope.root ?? chat.projectPath;
|
|
229
|
+
const realRoot = canonicalGroundedRoot(rootInput, deps);
|
|
230
|
+
if (typeof realRoot !== "string") {
|
|
231
|
+
const label = scope.root !== undefined ? basename(scope.root) : "project";
|
|
232
|
+
skipped.push({ label, message: skippedFolderMessage(realRoot), reason: realRoot });
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
canonical.push({ ...scope, root: realRoot });
|
|
236
|
+
}
|
|
237
|
+
return { canonical, skipped };
|
|
238
|
+
}
|
|
239
|
+
function withCanonicalFolderScopes(chat, scopes) {
|
|
240
|
+
if (scopes.length === 0)
|
|
241
|
+
return chat;
|
|
242
|
+
return { ...chat, connectedScopes: scopes, connectedScope: scopes[0] };
|
|
243
|
+
}
|
|
185
244
|
export function buildQuery(content, nowMs) {
|
|
186
245
|
return {
|
|
187
246
|
kind: "natural-language",
|
|
@@ -235,6 +294,76 @@ function redactedString(redactor, value) {
|
|
|
235
294
|
const redacted = redactor(value);
|
|
236
295
|
return typeof redacted === "string" ? redacted : value;
|
|
237
296
|
}
|
|
297
|
+
export function promptSafeExcerptText(value) {
|
|
298
|
+
return value.split("```").join("` ` `");
|
|
299
|
+
}
|
|
300
|
+
const APPROX_BYTES_PER_TOKEN = 4;
|
|
301
|
+
export function promptByteLength(messages) {
|
|
302
|
+
return Buffer.byteLength(messages.map((message) => message.content).join("\n"), "utf8");
|
|
303
|
+
}
|
|
304
|
+
export function modelInputPromptByteLimit(modelInputTokensMax) {
|
|
305
|
+
return Math.max(0, Math.floor(modelInputTokensMax) * APPROX_BYTES_PER_TOKEN);
|
|
306
|
+
}
|
|
307
|
+
function clampUtf8Bytes(value, maxBytes) {
|
|
308
|
+
if (maxBytes <= 0)
|
|
309
|
+
return "";
|
|
310
|
+
if (Buffer.byteLength(value, "utf8") <= maxBytes)
|
|
311
|
+
return value;
|
|
312
|
+
let low = 0;
|
|
313
|
+
let high = value.length;
|
|
314
|
+
while (low < high) {
|
|
315
|
+
const mid = Math.ceil((low + high) / 2);
|
|
316
|
+
if (Buffer.byteLength(value.slice(0, mid), "utf8") <= maxBytes) {
|
|
317
|
+
low = mid;
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
high = mid - 1;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return value.slice(0, low);
|
|
324
|
+
}
|
|
325
|
+
function packExcerptCount(pack) {
|
|
326
|
+
return pack.files.reduce((count, file) => count + file.excerpts.length, 0);
|
|
327
|
+
}
|
|
328
|
+
export function withPromptExcerptByteLimit(pack, maxExcerptBytes) {
|
|
329
|
+
return {
|
|
330
|
+
...pack,
|
|
331
|
+
files: pack.files.map((file) => ({
|
|
332
|
+
...file,
|
|
333
|
+
excerpts: file.excerpts.map((excerpt) => ({
|
|
334
|
+
...excerpt,
|
|
335
|
+
content: clampUtf8Bytes(excerpt.content, maxExcerptBytes),
|
|
336
|
+
})),
|
|
337
|
+
})),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function promptBudgetedMessages(question, pack, redactor, build) {
|
|
341
|
+
const limit = modelInputPromptByteLimit(pack.budget.modelInputTokensMax);
|
|
342
|
+
let messages = build(question, pack, redactor);
|
|
343
|
+
if (limit === 0 || promptByteLength(messages) <= limit)
|
|
344
|
+
return messages;
|
|
345
|
+
const excerptCount = packExcerptCount(pack);
|
|
346
|
+
if (excerptCount === 0)
|
|
347
|
+
return messages;
|
|
348
|
+
const emptyPack = withPromptExcerptByteLimit(pack, 0);
|
|
349
|
+
const emptyMessages = build(question, emptyPack, redactor);
|
|
350
|
+
const overheadBytes = promptByteLength(emptyMessages);
|
|
351
|
+
// When overhead alone (system prompt + question + framing) exceeds the limit, no amount of
|
|
352
|
+
// excerpt trimming can bring the prompt within budget. Throw instead of sending an over-limit
|
|
353
|
+
// prompt to the provider which would result in an opaque 400 context-window error.
|
|
354
|
+
if (overheadBytes > limit) {
|
|
355
|
+
throw new ContextOverflowError(`Grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
|
|
356
|
+
}
|
|
357
|
+
let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
|
|
358
|
+
while (maxExcerptBytes >= 0) {
|
|
359
|
+
messages = build(question, withPromptExcerptByteLimit(pack, maxExcerptBytes), redactor);
|
|
360
|
+
if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
|
|
361
|
+
return messages;
|
|
362
|
+
}
|
|
363
|
+
maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
|
|
364
|
+
}
|
|
365
|
+
return emptyMessages;
|
|
366
|
+
}
|
|
238
367
|
export function packBudgetSummary(pack) {
|
|
239
368
|
const { usage, budget } = pack;
|
|
240
369
|
return [
|
|
@@ -264,7 +393,7 @@ export function evidenceLines(pack, redactor) {
|
|
|
264
393
|
});
|
|
265
394
|
lines.push(`- Evidence ${redactedString(redactor, citation)} (score ${excerpt.atom.score.toFixed(2)}):`);
|
|
266
395
|
lines.push("```");
|
|
267
|
-
lines.push(redactedString(redactor, excerpt.content));
|
|
396
|
+
lines.push(promptSafeExcerptText(redactedString(redactor, excerpt.content)));
|
|
268
397
|
lines.push("```");
|
|
269
398
|
}
|
|
270
399
|
}
|
|
@@ -284,7 +413,7 @@ export function uncertaintyLines(pack, redactor) {
|
|
|
284
413
|
// GROUNDED_SYSTEM_PROMPT now lives in the dependency-free ./grounded-prompt.js leaf (re-exported
|
|
285
414
|
// here for back-compat) so the hybrid path can interpolate it without a circular-import TDZ.
|
|
286
415
|
export { GROUNDED_SYSTEM_PROMPT };
|
|
287
|
-
function
|
|
416
|
+
function buildRawGroundedGatewayMessages(question, pack, redactor) {
|
|
288
417
|
const safeQuestion = redactedString(redactor, question);
|
|
289
418
|
const userContent = [
|
|
290
419
|
"User question:",
|
|
@@ -309,6 +438,9 @@ function buildGroundedGatewayMessages(question, pack, redactor) {
|
|
|
309
438
|
{ role: "user", content: userContent },
|
|
310
439
|
];
|
|
311
440
|
}
|
|
441
|
+
export function buildGroundedGatewayMessages(question, pack, redactor) {
|
|
442
|
+
return promptBudgetedMessages(question, pack, redactor, buildRawGroundedGatewayMessages);
|
|
443
|
+
}
|
|
312
444
|
function createGatewayAnswerer(model, modelId, redactor, signal) {
|
|
313
445
|
return {
|
|
314
446
|
answer: async (question, pack) => {
|
|
@@ -319,8 +451,9 @@ function createGatewayAnswerer(model, modelId, redactor, signal) {
|
|
|
319
451
|
stream: false,
|
|
320
452
|
}, signal);
|
|
321
453
|
const content = response.content.trim();
|
|
454
|
+
assertUsableAssistantContent(content, modelId);
|
|
322
455
|
return {
|
|
323
|
-
content
|
|
456
|
+
content,
|
|
324
457
|
usage: {
|
|
325
458
|
promptTokens: response.usage.promptTokens,
|
|
326
459
|
completionTokens: response.usage.completionTokens,
|
|
@@ -416,6 +549,7 @@ function persistGroundedAuditEvidence(workerCtx, output, citationCount) {
|
|
|
416
549
|
// the real grounding root so the audit trail is honest about which tree produced the answer.
|
|
417
550
|
workspaceRoot: workerCtx.scope.workspaceRoot,
|
|
418
551
|
chatId: workerCtx.chat.id,
|
|
552
|
+
plan: output.plan,
|
|
419
553
|
pack: output.pack,
|
|
420
554
|
citationCount,
|
|
421
555
|
elapsedMs: output.elapsedMs,
|
|
@@ -472,7 +606,7 @@ async function runAsk(workerCtx) {
|
|
|
472
606
|
return { status: 200, body: answer };
|
|
473
607
|
}
|
|
474
608
|
function isRouteResult(value) {
|
|
475
|
-
return "status" in value;
|
|
609
|
+
return typeof value === "object" && value !== null && "status" in value;
|
|
476
610
|
}
|
|
477
611
|
function ensureRouteNotCancelled(signal, deps) {
|
|
478
612
|
try {
|
|
@@ -499,8 +633,11 @@ async function runGroundedRunner(workerCtx, query) {
|
|
|
499
633
|
}
|
|
500
634
|
catch (error) {
|
|
501
635
|
if (error instanceof ClarificationNeededError) {
|
|
502
|
-
return badRequest(error
|
|
636
|
+
return badRequest(clarificationUserMessage(error));
|
|
503
637
|
}
|
|
638
|
+
const workspaceResult = mappedWorkspaceError(error);
|
|
639
|
+
if (workspaceResult !== undefined)
|
|
640
|
+
return workspaceResult;
|
|
504
641
|
const gatewayResult = mappedGatewayError(error, workerCtx.deps);
|
|
505
642
|
if (gatewayResult !== undefined)
|
|
506
643
|
return gatewayResult;
|
|
@@ -553,7 +690,7 @@ function resolveMultiSourceSeam(deps, modelId, signal, override) {
|
|
|
553
690
|
answerer: createMultiSourceAnswerer(model, modelId, deps.redactor, signal),
|
|
554
691
|
};
|
|
555
692
|
}
|
|
556
|
-
async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
|
|
693
|
+
async function dispatchMultiSourceAsk(args, deps, scopes, skippedFolders, seamOverride) {
|
|
557
694
|
const { chat, input, signal } = args;
|
|
558
695
|
// An injected seam (tests) bypasses model-capability resolution exactly as the single-source path
|
|
559
696
|
// does for an injected runner: there is no real model port to validate against. Production (no
|
|
@@ -575,6 +712,7 @@ async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
|
|
|
575
712
|
retriever: seam.retriever,
|
|
576
713
|
answerer: seam.answerer,
|
|
577
714
|
signal,
|
|
715
|
+
preSkipped: skippedFolders.map((s) => ({ label: s.label, message: s.message })),
|
|
578
716
|
});
|
|
579
717
|
}
|
|
580
718
|
// Epic #532 — builds the single-source SelectedScope from the canonical list when the legacy
|
|
@@ -586,18 +724,43 @@ function singleScopeFromList(chat, scopes) {
|
|
|
586
724
|
return undefined;
|
|
587
725
|
return buildSelectedScopeFrom(chat, cs, deriveScopeIdFrom(chat, cs, 0));
|
|
588
726
|
}
|
|
589
|
-
// Epic #532 — the folder-only branch (0
|
|
590
|
-
//
|
|
591
|
-
// dispatcher.
|
|
592
|
-
|
|
727
|
+
// Epic #532 — the folder-only branch (0 handled by caller; 1 → single-source runner unless
|
|
728
|
+
// there are pre-skipped folders, in which case multi-source carries the skip notice; 2+ → the
|
|
729
|
+
// multi-source merge). Extracted so handleGroundedAsk stays the thin count-based dispatcher.
|
|
730
|
+
// Release 0.2.0 — ask-path defense-in-depth (mirror of the hybrid path's capSourcesToLimits):
|
|
731
|
+
// a stored over-cap chat (legacy rows, or an operator who later lowered the limits) must not
|
|
732
|
+
// fan out unboundedly at ask time. The first `cap` folders (connection order) stay live; the
|
|
733
|
+
// rest surface as source-skipped notices (basename label only — no path leak).
|
|
734
|
+
function capFolderScopesForAsk(deps, scopes, skippedFolders) {
|
|
735
|
+
const cap = currentGroundingLimits(deps).maxConnectedSources;
|
|
736
|
+
if (scopes.length <= cap)
|
|
737
|
+
return { scopes, skipped: skippedFolders };
|
|
738
|
+
const overCap = scopes.slice(cap).map((scope) => {
|
|
739
|
+
const label = scope.root !== undefined ? basename(scope.root) : "project";
|
|
740
|
+
const message = "skipped: over the connected-source limit";
|
|
741
|
+
return { label, message, reason: badRequest(`Source "${label}" ${message}.`) };
|
|
742
|
+
});
|
|
743
|
+
return { scopes: scopes.slice(0, cap), skipped: [...skippedFolders, ...overCap] };
|
|
744
|
+
}
|
|
745
|
+
async function dispatchFolderAsk(prepared, deps, allScopes, allSkippedFolders, runner, multiSource) {
|
|
593
746
|
const { chat, input, signal } = prepared;
|
|
594
|
-
|
|
595
|
-
|
|
747
|
+
const { scopes, skipped: skippedFolders } = capFolderScopesForAsk(deps, allScopes, allSkippedFolders);
|
|
748
|
+
// 2+ healthy folders or 1 healthy + some skipped → multi-source (carries skip-notice).
|
|
749
|
+
if (scopes.length >= 2 || (scopes.length === 1 && skippedFolders.length > 0)) {
|
|
750
|
+
return dispatchMultiSourceAsk(prepared, deps, scopes, skippedFolders, multiSource);
|
|
596
751
|
}
|
|
597
752
|
const scope = buildSelectedScope(chat) ?? singleScopeFromList(chat, scopes);
|
|
598
753
|
if (scope === undefined) {
|
|
599
754
|
return badRequest("Chat has no connected scope.");
|
|
600
755
|
}
|
|
756
|
+
// Epic #177 audit (GAP-B) — mirror the PATCH-route deny-list check for the grounded-ask hot
|
|
757
|
+
// path. The PATCH route validates via validateFallbackProjectRoot before persisting a scope;
|
|
758
|
+
// a chat whose projectPath was created before the deny-list was added (or via the test store)
|
|
759
|
+
// could otherwise reach the orchestrator with a credential-dir workspaceRoot. Reject before
|
|
760
|
+
// calling the runner so no filesystem access occurs against a denied path.
|
|
761
|
+
if (pathIsDenied(scope.workspaceRoot)) {
|
|
762
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
763
|
+
}
|
|
601
764
|
const resolved = resolveGroundedRunner(deps, chat, input.modelId, signal, runner);
|
|
602
765
|
if ("status" in resolved)
|
|
603
766
|
return resolved;
|
|
@@ -620,7 +783,7 @@ function hybridSeamFields(seam) {
|
|
|
620
783
|
...(seam.answer !== undefined ? { answer: seam.answer } : {}),
|
|
621
784
|
};
|
|
622
785
|
}
|
|
623
|
-
async function dispatchHybridAsk(prepared, deps, seam) {
|
|
786
|
+
async function dispatchHybridAsk(prepared, deps, skippedFolders, seam) {
|
|
624
787
|
const { chat, input, signal } = prepared;
|
|
625
788
|
// An injected answerer (tests) bypasses model-capability resolution exactly as the multi-source
|
|
626
789
|
// path does: there is no real model port to validate. Production resolves the guardrails once.
|
|
@@ -635,6 +798,11 @@ async function dispatchHybridAsk(prepared, deps, seam) {
|
|
|
635
798
|
modelId,
|
|
636
799
|
deps,
|
|
637
800
|
signal,
|
|
801
|
+
preSkippedFolders: skippedFolders.map((s) => ({
|
|
802
|
+
label: s.label,
|
|
803
|
+
reason: "not-accessible",
|
|
804
|
+
message: s.message,
|
|
805
|
+
})),
|
|
638
806
|
...hybridSeamFields(seam),
|
|
639
807
|
});
|
|
640
808
|
}
|
|
@@ -648,16 +816,26 @@ export async function handleGroundedAsk(ctx, deps, runner, multiSource, hybrid)
|
|
|
648
816
|
// keep the EXISTING folder path (#532, byte-identical). A lone connector with no folders keeps the
|
|
649
817
|
// EXISTING single-connector path (#189, byte-identical). Everything else (folders+connector, or
|
|
650
818
|
// 2+ connectors) is the hybrid merge.
|
|
819
|
+
// Fail-soft: inaccessible/denied folders are skipped; only effective (canonical) counts drive
|
|
820
|
+
// dispatch. A chat with ONLY denied/inaccessible sources still returns the original 400 so the
|
|
821
|
+
// user sees a clear rejection (security preserved).
|
|
651
822
|
const folderScopes = buildConnectedScopes(chat);
|
|
823
|
+
const { canonical: canonicalFolderScopes, skipped: skippedFolders } = canonicalizeGroundedFolderScopes(chat, deps, folderScopes);
|
|
824
|
+
const preparedWithCanonicalFolders = {
|
|
825
|
+
...prepared,
|
|
826
|
+
chat: withCanonicalFolderScopes(chat, canonicalFolderScopes),
|
|
827
|
+
};
|
|
652
828
|
const connectorCount = buildLocalKnowledgeScopes(chat).length;
|
|
653
|
-
|
|
654
|
-
|
|
829
|
+
const effectiveFolders = canonicalFolderScopes.length;
|
|
830
|
+
if (effectiveFolders === 0 && connectorCount === 0) {
|
|
831
|
+
// Hard-fail: return the first skipped reason (preserves exact 400 message) or the generic guard.
|
|
832
|
+
return skippedFolders[0]?.reason ?? badRequest("Chat has no connected scope.");
|
|
655
833
|
}
|
|
656
834
|
if (connectorCount === 0) {
|
|
657
|
-
return dispatchFolderAsk(
|
|
835
|
+
return dispatchFolderAsk(preparedWithCanonicalFolders, deps, canonicalFolderScopes, skippedFolders, runner, multiSource);
|
|
658
836
|
}
|
|
659
|
-
if (
|
|
837
|
+
if (effectiveFolders === 0 && connectorCount === 1) {
|
|
660
838
|
return handleLocalKnowledgeGroundedAsk(chat, prepared.input, deps, prepared.signal);
|
|
661
839
|
}
|
|
662
|
-
return dispatchHybridAsk(
|
|
840
|
+
return dispatchHybridAsk(preparedWithCanonicalFolders, deps, skippedFolders, hybrid);
|
|
663
841
|
}
|