@oscharko-dev/keiko 0.2.0-beta.3 → 0.2.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/Hb6brrvZY2nZtizQlYhVt/_buildManifest.js +11 -0
- package/dist/ui/static/_next/static/Hb6brrvZY2nZtizQlYhVt/_clientMiddlewareManifest.js +1 -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/1t04tfgin0v_g.js +106 -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/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/3wr_35f2vg6sd.css +1 -0
- package/dist/ui/static/_next/static/chunks/turbopack-2lg1g6kbsfm0x.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/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/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/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/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.map +1 -1
- package/node_modules/@oscharko-dev/keiko-evidence/dist/qualityIntelligence/store.js +30 -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/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 +18 -5
- 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/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/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/chat-handlers.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/chat-handlers.js +6 -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 -0
- 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 +433 -31
- 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 +194 -45
- 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 +100 -24
- 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 +196 -20
- 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 +189 -66
- 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/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 +26 -7
- 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 +26 -7
- 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/runIngestion.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/qualityIntelligence/runIngestion.js +51 -15
- 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 +6 -2
- package/node_modules/@oscharko-dev/keiko-server/dist/routes.d.ts.map +1 -1
- package/node_modules/@oscharko-dev/keiko-server/dist/routes.js +4 -2
- 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 +67 -14
- 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/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/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/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 +4 -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/dist/ui/static/_next/static/{RAzN8WLtYaktD-ZePowXl → Hb6brrvZY2nZtizQlYhVt}/_ssgManifest.js +0 -0
- /package/dist/ui/static/_next/static/chunks/{polyfills-42372ed130431b0a.js → 0cz1d0mv5g_q7.js} +0 -0
|
@@ -8,17 +8,17 @@
|
|
|
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
20
|
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";
|
|
21
|
+
import { badRequest, buildCitations, buildQuery, buildSelectedScopeFrom, deriveScopeIdFrom, ensureNotCancelled, evidenceLines, internalError, isValidGroundedPack, mappedGatewayError, mappedWorkspaceError, modelInputPromptByteLimit, packBudgetSummary, persistGroundedExchange, promptByteLength, redactString, uncertaintyLines, withPromptExcerptByteLimit, } from "./grounded-qa.js";
|
|
22
22
|
// ─── Canonical reader + label/budget helpers ──────────────────────────────────
|
|
23
23
|
// Canonical reader rule (Epic #532 contract): `connectedScopes` supersedes the legacy single
|
|
24
24
|
// `connectedScope`. Readers must NOT mix the two — the list, when present, is authoritative.
|
|
@@ -170,6 +170,9 @@ function sourceSection(entry, index, redactor) {
|
|
|
170
170
|
// Same system message as the single-source path; the user message lists each source under its own
|
|
171
171
|
// header so the model can attribute every claim to a source label in addition to the file ref.
|
|
172
172
|
export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor) {
|
|
173
|
+
return budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor);
|
|
174
|
+
}
|
|
175
|
+
function buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor) {
|
|
173
176
|
const sections = labeledPacks.flatMap((entry, index) => sourceSection(entry, index, redactor));
|
|
174
177
|
const userContent = [
|
|
175
178
|
"User question:",
|
|
@@ -185,6 +188,41 @@ export function buildMultiSourceGatewayMessages(question, labeledPacks, redactor
|
|
|
185
188
|
{ role: "user", content: userContent },
|
|
186
189
|
];
|
|
187
190
|
}
|
|
191
|
+
function multiSourceExcerptCount(labeledPacks) {
|
|
192
|
+
return labeledPacks.reduce((count, entry) => count + entry.pack.files.reduce((fileCount, file) => fileCount + file.excerpts.length, 0), 0);
|
|
193
|
+
}
|
|
194
|
+
function withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes) {
|
|
195
|
+
return labeledPacks.map((entry) => ({
|
|
196
|
+
...entry,
|
|
197
|
+
pack: withPromptExcerptByteLimit(entry.pack, maxExcerptBytes),
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
function budgetedMultiSourceGatewayMessages(question, labeledPacks, redactor) {
|
|
201
|
+
const limit = modelInputPromptByteLimit(labeledPacks.reduce((sum, entry) => sum + entry.pack.budget.modelInputTokensMax, 0));
|
|
202
|
+
let messages = buildRawMultiSourceGatewayMessages(question, labeledPacks, redactor);
|
|
203
|
+
if (limit === 0 || promptByteLength(messages) <= limit)
|
|
204
|
+
return messages;
|
|
205
|
+
const excerptCount = multiSourceExcerptCount(labeledPacks);
|
|
206
|
+
if (excerptCount === 0)
|
|
207
|
+
return messages;
|
|
208
|
+
const emptyPacks = withMultiSourcePromptExcerptByteLimit(labeledPacks, 0);
|
|
209
|
+
const overheadBytes = promptByteLength(buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor));
|
|
210
|
+
// When overhead alone (system prompt + question + framing for all sources) exceeds the limit,
|
|
211
|
+
// no amount of excerpt trimming can bring the prompt within budget. Throw instead of sending
|
|
212
|
+
// an over-limit prompt to the provider which would result in an opaque 400 context-window error.
|
|
213
|
+
if (overheadBytes > limit) {
|
|
214
|
+
throw new ContextOverflowError(`Multi-source grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
|
|
215
|
+
}
|
|
216
|
+
let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
|
|
217
|
+
while (maxExcerptBytes >= 0) {
|
|
218
|
+
messages = buildRawMultiSourceGatewayMessages(question, withMultiSourcePromptExcerptByteLimit(labeledPacks, maxExcerptBytes), redactor);
|
|
219
|
+
if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
|
|
220
|
+
return messages;
|
|
221
|
+
}
|
|
222
|
+
maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
|
|
223
|
+
}
|
|
224
|
+
return buildRawMultiSourceGatewayMessages(question, emptyPacks, redactor);
|
|
225
|
+
}
|
|
188
226
|
// Production retriever: retrieval-only orchestrator pass with a per-scope micro-index cache. No
|
|
189
227
|
// modelId is needed — retrieval performs no model call.
|
|
190
228
|
export function defaultRetriever(signal) {
|
|
@@ -216,14 +254,19 @@ export function createMultiSourceAnswerer(model, modelId, redactor, signal) {
|
|
|
216
254
|
};
|
|
217
255
|
};
|
|
218
256
|
}
|
|
257
|
+
// ─── Retrieved-source record + worker ─────────────────────────────────────────
|
|
258
|
+
const MAX_RETRIEVAL_CONCURRENCY = 4;
|
|
219
259
|
async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
|
|
220
|
-
const retrieved =
|
|
221
|
-
|
|
260
|
+
const retrieved = new Array(ctx.scopes.length);
|
|
261
|
+
const skipped = [];
|
|
262
|
+
let nextIndex = 0;
|
|
263
|
+
let firstError;
|
|
264
|
+
async function retrieveOne(i) {
|
|
222
265
|
ensureNotCancelled(ctx.signal);
|
|
223
266
|
const cs = ctx.scopes[i];
|
|
224
267
|
const label = labels[i];
|
|
225
268
|
if (cs === undefined || label === undefined)
|
|
226
|
-
|
|
269
|
+
return;
|
|
227
270
|
const scope = buildSelectedScopeFrom(ctx.chat, cs, deriveScopeIdFrom(ctx.chat, cs, i));
|
|
228
271
|
const out = await ctx.retriever({
|
|
229
272
|
scope,
|
|
@@ -232,24 +275,50 @@ async function retrieveAllSources(ctx, query, perScopeBudget, labels) {
|
|
|
232
275
|
budget: perScopeBudget,
|
|
233
276
|
});
|
|
234
277
|
if (!isValidGroundedPack(out.pack)) {
|
|
235
|
-
|
|
278
|
+
skipped.push({ label, message: "Pack validation failed." });
|
|
279
|
+
firstError ??= internalError("Grounded answer context pack failed validation.");
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
retrieved[i] = { label, pack: out.pack, elapsedMs: out.elapsedMs, scope, plan: out.plan };
|
|
283
|
+
}
|
|
284
|
+
async function worker() {
|
|
285
|
+
for (;;) {
|
|
286
|
+
const i = nextIndex;
|
|
287
|
+
nextIndex += 1;
|
|
288
|
+
if (i >= ctx.scopes.length)
|
|
289
|
+
return;
|
|
290
|
+
await retrieveOne(i);
|
|
236
291
|
}
|
|
237
|
-
retrieved.push({ label, pack: out.pack, elapsedMs: out.elapsedMs, scope });
|
|
238
292
|
}
|
|
239
|
-
|
|
293
|
+
const workerCount = Math.min(MAX_RETRIEVAL_CONCURRENCY, Math.max(1, ctx.scopes.length));
|
|
294
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
295
|
+
const sources = retrieved.filter((source) => source !== undefined);
|
|
296
|
+
if (sources.length === 0 && firstError !== undefined)
|
|
297
|
+
return firstError;
|
|
298
|
+
return { retrieved: sources, skipped, firstError };
|
|
240
299
|
}
|
|
241
300
|
function mergedCitations(sources, redactor) {
|
|
242
301
|
const citations = sources.flatMap((src) => buildCitations(src.pack, redactor).map((c) => ({ ...c, source: src.label })));
|
|
243
302
|
return [...citations].sort((a, b) => b.score - a.score);
|
|
244
303
|
}
|
|
245
|
-
function mergedUncertainty(sources, redactor) {
|
|
246
|
-
|
|
304
|
+
function mergedUncertainty(sources, skipped, preSkipped, redactor) {
|
|
305
|
+
const fromPacks = sources.flatMap((src) => src.pack.uncertainty.map((u) => ({ kind: u.kind, claim: redactString(redactor, u.claim) })));
|
|
306
|
+
const allSkipped = [
|
|
307
|
+
...preSkipped.map((s) => ({ label: s.label, message: s.message })),
|
|
308
|
+
...skipped,
|
|
309
|
+
];
|
|
310
|
+
const fromSkipped = allSkipped.map((entry) => ({
|
|
311
|
+
kind: "source-skipped",
|
|
312
|
+
claim: redactString(redactor, `Source ${entry.label} skipped: ${entry.message}`),
|
|
313
|
+
}));
|
|
314
|
+
return [...fromPacks, ...fromSkipped];
|
|
247
315
|
}
|
|
248
316
|
// Persists ONE evidence run per source, each naming the root that source actually searched (L1
|
|
249
317
|
// honesty rule, mirrored from the single path). Returns the FIRST source's run id, which the
|
|
250
|
-
// answer surfaces as its primary evidenceRunId.
|
|
318
|
+
// answer surfaces as its primary evidenceRunId, plus the full set for audit discovery.
|
|
251
319
|
function persistPerSourceEvidence(ctx, sources) {
|
|
252
320
|
let firstRunId;
|
|
321
|
+
const runIds = [];
|
|
253
322
|
for (const src of sources) {
|
|
254
323
|
const finishedAt = Date.now();
|
|
255
324
|
const startedAt = Math.max(0, finishedAt - src.elapsedMs);
|
|
@@ -259,6 +328,7 @@ function persistPerSourceEvidence(ctx, sources) {
|
|
|
259
328
|
modelId: ctx.modelId,
|
|
260
329
|
workspaceRoot: src.scope.workspaceRoot,
|
|
261
330
|
chatId: ctx.chat.id,
|
|
331
|
+
plan: src.plan,
|
|
262
332
|
pack: src.pack,
|
|
263
333
|
citationCount: buildCitations(src.pack, ctx.deps.redactor).length,
|
|
264
334
|
elapsedMs: src.elapsedMs,
|
|
@@ -271,23 +341,25 @@ function persistPerSourceEvidence(ctx, sources) {
|
|
|
271
341
|
costClassResolver: resolveCostClass,
|
|
272
342
|
});
|
|
273
343
|
firstRunId ??= runId;
|
|
344
|
+
runIds.push(runId);
|
|
274
345
|
}
|
|
275
|
-
return { firstRunId };
|
|
346
|
+
return { firstRunId, runIds };
|
|
276
347
|
}
|
|
277
|
-
function assembleMultiSourceAnswer(ctx, sources, assistant, ids) {
|
|
348
|
+
function assembleMultiSourceAnswer(ctx, sources, skipped, assistant, ids) {
|
|
278
349
|
const { redactor } = ctx.deps;
|
|
279
350
|
const citations = mergedCitations(sources, redactor);
|
|
280
351
|
const summaries = sources.map((src) => buildGroundedAnswerContextPackSummary(src.pack, buildCitations(src.pack, redactor).length, src.elapsedMs));
|
|
281
352
|
const mergedSummary = mergeContextPackSummaries(summaries);
|
|
282
|
-
const { firstRunId } = persistPerSourceEvidence(ctx, sources);
|
|
353
|
+
const { firstRunId, runIds } = persistPerSourceEvidence(ctx, sources);
|
|
283
354
|
return {
|
|
284
355
|
groundingKind: "connected-context",
|
|
285
356
|
userMessageId: ids.userMessageId,
|
|
286
357
|
assistantMessageId: ids.assistantMessageId,
|
|
287
358
|
evidenceRunId: firstRunId,
|
|
359
|
+
evidenceRunIds: runIds,
|
|
288
360
|
content: redactString(redactor, assistant.content),
|
|
289
361
|
citations,
|
|
290
|
-
uncertainty: mergedUncertainty(sources, redactor),
|
|
362
|
+
uncertainty: mergedUncertainty(sources, skipped, ctx.preSkipped ?? [], redactor),
|
|
291
363
|
omittedCount: sources.reduce((acc, src) => acc + src.pack.omitted.length, 0),
|
|
292
364
|
elapsedMs: sources.reduce((acc, src) => acc + src.elapsedMs, 0),
|
|
293
365
|
contextPack: {
|
|
@@ -304,26 +376,27 @@ export async function runMultiSourceAsk(ctx) {
|
|
|
304
376
|
const query = buildQuery(ctx.content, () => Date.now());
|
|
305
377
|
const labels = sourceLabels(ctx.scopes);
|
|
306
378
|
const perScopeBudget = splitExplorationBudget(DEFAULT_EXPLORATION_BUDGET, ctx.scopes.length);
|
|
307
|
-
let
|
|
379
|
+
let outcome;
|
|
308
380
|
try {
|
|
309
|
-
|
|
381
|
+
outcome = await retrieveAllSources(ctx, query, perScopeBudget, labels);
|
|
310
382
|
}
|
|
311
383
|
catch (error) {
|
|
312
384
|
return mapMultiSourceError(error, ctx.deps);
|
|
313
385
|
}
|
|
314
|
-
if (isRouteResult(
|
|
315
|
-
return
|
|
386
|
+
if (isRouteResult(outcome)) {
|
|
387
|
+
return outcome;
|
|
316
388
|
}
|
|
317
|
-
const retrieved =
|
|
389
|
+
const { retrieved, skipped } = outcome;
|
|
318
390
|
let assistant;
|
|
319
391
|
try {
|
|
320
392
|
assistant = normalizeGroundedAnswerPayload(await ctx.answerer(ctx.content, retrieved.map((s) => ({ label: s.label, pack: s.pack }))));
|
|
393
|
+
ensureNotCancelled(ctx.signal);
|
|
321
394
|
}
|
|
322
395
|
catch (error) {
|
|
323
396
|
return mapMultiSourceError(error, ctx.deps);
|
|
324
397
|
}
|
|
325
398
|
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, {
|
|
399
|
+
const answer = assembleMultiSourceAnswer(ctx, retrieved, skipped, assistant, {
|
|
327
400
|
userMessageId: userMessage.id,
|
|
328
401
|
assistantMessageId: assistantMessage.id,
|
|
329
402
|
});
|
|
@@ -337,11 +410,14 @@ export async function runMultiSourceAsk(ctx) {
|
|
|
337
410
|
return { status: 200, body: answer };
|
|
338
411
|
}
|
|
339
412
|
function isRouteResult(value) {
|
|
340
|
-
return
|
|
413
|
+
return "status" in value;
|
|
341
414
|
}
|
|
342
415
|
function mapMultiSourceError(error, deps) {
|
|
343
416
|
if (error instanceof ClarificationNeededError)
|
|
344
|
-
return badRequest(error
|
|
417
|
+
return badRequest(clarificationUserMessage(error));
|
|
418
|
+
const workspaceResult = mappedWorkspaceError(error);
|
|
419
|
+
if (workspaceResult !== undefined)
|
|
420
|
+
return workspaceResult;
|
|
345
421
|
const gatewayResult = mappedGatewayError(error, deps);
|
|
346
422
|
if (gatewayResult !== undefined)
|
|
347
423
|
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;AAwC9D,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;AAqDD,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,15 +4,19 @@
|
|
|
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";
|
|
@@ -85,6 +89,14 @@ function gatewayErrorResult(error, deps) {
|
|
|
85
89
|
export function mappedGatewayError(error, deps) {
|
|
86
90
|
return error instanceof GatewayError ? gatewayErrorResult(error, deps) : undefined;
|
|
87
91
|
}
|
|
92
|
+
export function mappedWorkspaceError(error) {
|
|
93
|
+
if (error instanceof RepoSearchInvalidQueryError ||
|
|
94
|
+
error instanceof RepoSearchInvalidRangeError ||
|
|
95
|
+
error instanceof RepoSearchUnsupportedFileError) {
|
|
96
|
+
return badRequest(error.message);
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
88
100
|
export function isValidGroundedPack(pack) {
|
|
89
101
|
try {
|
|
90
102
|
return validateConnectedContextPack(pack).ok;
|
|
@@ -182,6 +194,52 @@ function buildSelectedScope(chat) {
|
|
|
182
194
|
return undefined;
|
|
183
195
|
return buildSelectedScopeFrom(chat, cs, deriveScopeId(chat));
|
|
184
196
|
}
|
|
197
|
+
function canonicalGroundedRoot(rootInput, deps) {
|
|
198
|
+
if (pathIsDenied(rootInput)) {
|
|
199
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
200
|
+
}
|
|
201
|
+
let realRoot;
|
|
202
|
+
try {
|
|
203
|
+
realRoot = realpathSync(rootInput);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return badRequest("Connected scope root is not accessible.");
|
|
207
|
+
}
|
|
208
|
+
if (pathIsDenied(realRoot)) {
|
|
209
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
210
|
+
}
|
|
211
|
+
const redacted = deps.redactor(realRoot);
|
|
212
|
+
if (typeof redacted === "string" && redacted !== realRoot) {
|
|
213
|
+
return badRequest("Connected scope root contains credential-shaped metadata.");
|
|
214
|
+
}
|
|
215
|
+
return realRoot;
|
|
216
|
+
}
|
|
217
|
+
function skippedFolderMessage(result) {
|
|
218
|
+
const body = result.body;
|
|
219
|
+
return body.error?.message ?? "not accessible";
|
|
220
|
+
}
|
|
221
|
+
// Fail-soft canonicalization: inaccessible/denied scopes are collected in `skipped` instead of
|
|
222
|
+
// aborting the entire request. Callers apply the hard-400 only when NO healthy scope remains.
|
|
223
|
+
function canonicalizeGroundedFolderScopes(chat, deps, scopes) {
|
|
224
|
+
const canonical = [];
|
|
225
|
+
const skipped = [];
|
|
226
|
+
for (const scope of scopes) {
|
|
227
|
+
const rootInput = scope.root ?? chat.projectPath;
|
|
228
|
+
const realRoot = canonicalGroundedRoot(rootInput, deps);
|
|
229
|
+
if (typeof realRoot !== "string") {
|
|
230
|
+
const label = scope.root !== undefined ? basename(scope.root) : "project";
|
|
231
|
+
skipped.push({ label, message: skippedFolderMessage(realRoot), reason: realRoot });
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
canonical.push({ ...scope, root: realRoot });
|
|
235
|
+
}
|
|
236
|
+
return { canonical, skipped };
|
|
237
|
+
}
|
|
238
|
+
function withCanonicalFolderScopes(chat, scopes) {
|
|
239
|
+
if (scopes.length === 0)
|
|
240
|
+
return chat;
|
|
241
|
+
return { ...chat, connectedScopes: scopes, connectedScope: scopes[0] };
|
|
242
|
+
}
|
|
185
243
|
export function buildQuery(content, nowMs) {
|
|
186
244
|
return {
|
|
187
245
|
kind: "natural-language",
|
|
@@ -235,6 +293,76 @@ function redactedString(redactor, value) {
|
|
|
235
293
|
const redacted = redactor(value);
|
|
236
294
|
return typeof redacted === "string" ? redacted : value;
|
|
237
295
|
}
|
|
296
|
+
export function promptSafeExcerptText(value) {
|
|
297
|
+
return value.split("```").join("` ` `");
|
|
298
|
+
}
|
|
299
|
+
const APPROX_BYTES_PER_TOKEN = 4;
|
|
300
|
+
export function promptByteLength(messages) {
|
|
301
|
+
return Buffer.byteLength(messages.map((message) => message.content).join("\n"), "utf8");
|
|
302
|
+
}
|
|
303
|
+
export function modelInputPromptByteLimit(modelInputTokensMax) {
|
|
304
|
+
return Math.max(0, Math.floor(modelInputTokensMax) * APPROX_BYTES_PER_TOKEN);
|
|
305
|
+
}
|
|
306
|
+
function clampUtf8Bytes(value, maxBytes) {
|
|
307
|
+
if (maxBytes <= 0)
|
|
308
|
+
return "";
|
|
309
|
+
if (Buffer.byteLength(value, "utf8") <= maxBytes)
|
|
310
|
+
return value;
|
|
311
|
+
let low = 0;
|
|
312
|
+
let high = value.length;
|
|
313
|
+
while (low < high) {
|
|
314
|
+
const mid = Math.ceil((low + high) / 2);
|
|
315
|
+
if (Buffer.byteLength(value.slice(0, mid), "utf8") <= maxBytes) {
|
|
316
|
+
low = mid;
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
high = mid - 1;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return value.slice(0, low);
|
|
323
|
+
}
|
|
324
|
+
function packExcerptCount(pack) {
|
|
325
|
+
return pack.files.reduce((count, file) => count + file.excerpts.length, 0);
|
|
326
|
+
}
|
|
327
|
+
export function withPromptExcerptByteLimit(pack, maxExcerptBytes) {
|
|
328
|
+
return {
|
|
329
|
+
...pack,
|
|
330
|
+
files: pack.files.map((file) => ({
|
|
331
|
+
...file,
|
|
332
|
+
excerpts: file.excerpts.map((excerpt) => ({
|
|
333
|
+
...excerpt,
|
|
334
|
+
content: clampUtf8Bytes(excerpt.content, maxExcerptBytes),
|
|
335
|
+
})),
|
|
336
|
+
})),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function promptBudgetedMessages(question, pack, redactor, build) {
|
|
340
|
+
const limit = modelInputPromptByteLimit(pack.budget.modelInputTokensMax);
|
|
341
|
+
let messages = build(question, pack, redactor);
|
|
342
|
+
if (limit === 0 || promptByteLength(messages) <= limit)
|
|
343
|
+
return messages;
|
|
344
|
+
const excerptCount = packExcerptCount(pack);
|
|
345
|
+
if (excerptCount === 0)
|
|
346
|
+
return messages;
|
|
347
|
+
const emptyPack = withPromptExcerptByteLimit(pack, 0);
|
|
348
|
+
const emptyMessages = build(question, emptyPack, redactor);
|
|
349
|
+
const overheadBytes = promptByteLength(emptyMessages);
|
|
350
|
+
// When overhead alone (system prompt + question + framing) exceeds the limit, no amount of
|
|
351
|
+
// excerpt trimming can bring the prompt within budget. Throw instead of sending an over-limit
|
|
352
|
+
// prompt to the provider which would result in an opaque 400 context-window error.
|
|
353
|
+
if (overheadBytes > limit) {
|
|
354
|
+
throw new ContextOverflowError(`Grounded prompt overhead (${String(overheadBytes)} bytes) exceeds model input limit (${String(limit)} bytes).`);
|
|
355
|
+
}
|
|
356
|
+
let maxExcerptBytes = Math.max(0, Math.floor((limit - overheadBytes) / excerptCount));
|
|
357
|
+
while (maxExcerptBytes >= 0) {
|
|
358
|
+
messages = build(question, withPromptExcerptByteLimit(pack, maxExcerptBytes), redactor);
|
|
359
|
+
if (promptByteLength(messages) <= limit || maxExcerptBytes === 0) {
|
|
360
|
+
return messages;
|
|
361
|
+
}
|
|
362
|
+
maxExcerptBytes = Math.max(0, Math.floor(maxExcerptBytes * 0.8));
|
|
363
|
+
}
|
|
364
|
+
return emptyMessages;
|
|
365
|
+
}
|
|
238
366
|
export function packBudgetSummary(pack) {
|
|
239
367
|
const { usage, budget } = pack;
|
|
240
368
|
return [
|
|
@@ -264,7 +392,7 @@ export function evidenceLines(pack, redactor) {
|
|
|
264
392
|
});
|
|
265
393
|
lines.push(`- Evidence ${redactedString(redactor, citation)} (score ${excerpt.atom.score.toFixed(2)}):`);
|
|
266
394
|
lines.push("```");
|
|
267
|
-
lines.push(redactedString(redactor, excerpt.content));
|
|
395
|
+
lines.push(promptSafeExcerptText(redactedString(redactor, excerpt.content)));
|
|
268
396
|
lines.push("```");
|
|
269
397
|
}
|
|
270
398
|
}
|
|
@@ -284,7 +412,7 @@ export function uncertaintyLines(pack, redactor) {
|
|
|
284
412
|
// GROUNDED_SYSTEM_PROMPT now lives in the dependency-free ./grounded-prompt.js leaf (re-exported
|
|
285
413
|
// here for back-compat) so the hybrid path can interpolate it without a circular-import TDZ.
|
|
286
414
|
export { GROUNDED_SYSTEM_PROMPT };
|
|
287
|
-
function
|
|
415
|
+
function buildRawGroundedGatewayMessages(question, pack, redactor) {
|
|
288
416
|
const safeQuestion = redactedString(redactor, question);
|
|
289
417
|
const userContent = [
|
|
290
418
|
"User question:",
|
|
@@ -309,6 +437,9 @@ function buildGroundedGatewayMessages(question, pack, redactor) {
|
|
|
309
437
|
{ role: "user", content: userContent },
|
|
310
438
|
];
|
|
311
439
|
}
|
|
440
|
+
export function buildGroundedGatewayMessages(question, pack, redactor) {
|
|
441
|
+
return promptBudgetedMessages(question, pack, redactor, buildRawGroundedGatewayMessages);
|
|
442
|
+
}
|
|
312
443
|
function createGatewayAnswerer(model, modelId, redactor, signal) {
|
|
313
444
|
return {
|
|
314
445
|
answer: async (question, pack) => {
|
|
@@ -416,6 +547,7 @@ function persistGroundedAuditEvidence(workerCtx, output, citationCount) {
|
|
|
416
547
|
// the real grounding root so the audit trail is honest about which tree produced the answer.
|
|
417
548
|
workspaceRoot: workerCtx.scope.workspaceRoot,
|
|
418
549
|
chatId: workerCtx.chat.id,
|
|
550
|
+
plan: output.plan,
|
|
419
551
|
pack: output.pack,
|
|
420
552
|
citationCount,
|
|
421
553
|
elapsedMs: output.elapsedMs,
|
|
@@ -472,7 +604,7 @@ async function runAsk(workerCtx) {
|
|
|
472
604
|
return { status: 200, body: answer };
|
|
473
605
|
}
|
|
474
606
|
function isRouteResult(value) {
|
|
475
|
-
return "status" in value;
|
|
607
|
+
return typeof value === "object" && value !== null && "status" in value;
|
|
476
608
|
}
|
|
477
609
|
function ensureRouteNotCancelled(signal, deps) {
|
|
478
610
|
try {
|
|
@@ -499,8 +631,11 @@ async function runGroundedRunner(workerCtx, query) {
|
|
|
499
631
|
}
|
|
500
632
|
catch (error) {
|
|
501
633
|
if (error instanceof ClarificationNeededError) {
|
|
502
|
-
return badRequest(error
|
|
634
|
+
return badRequest(clarificationUserMessage(error));
|
|
503
635
|
}
|
|
636
|
+
const workspaceResult = mappedWorkspaceError(error);
|
|
637
|
+
if (workspaceResult !== undefined)
|
|
638
|
+
return workspaceResult;
|
|
504
639
|
const gatewayResult = mappedGatewayError(error, workerCtx.deps);
|
|
505
640
|
if (gatewayResult !== undefined)
|
|
506
641
|
return gatewayResult;
|
|
@@ -553,7 +688,7 @@ function resolveMultiSourceSeam(deps, modelId, signal, override) {
|
|
|
553
688
|
answerer: createMultiSourceAnswerer(model, modelId, deps.redactor, signal),
|
|
554
689
|
};
|
|
555
690
|
}
|
|
556
|
-
async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
|
|
691
|
+
async function dispatchMultiSourceAsk(args, deps, scopes, skippedFolders, seamOverride) {
|
|
557
692
|
const { chat, input, signal } = args;
|
|
558
693
|
// An injected seam (tests) bypasses model-capability resolution exactly as the single-source path
|
|
559
694
|
// does for an injected runner: there is no real model port to validate against. Production (no
|
|
@@ -575,6 +710,7 @@ async function dispatchMultiSourceAsk(args, deps, scopes, seamOverride) {
|
|
|
575
710
|
retriever: seam.retriever,
|
|
576
711
|
answerer: seam.answerer,
|
|
577
712
|
signal,
|
|
713
|
+
preSkipped: skippedFolders.map((s) => ({ label: s.label, message: s.message })),
|
|
578
714
|
});
|
|
579
715
|
}
|
|
580
716
|
// Epic #532 — builds the single-source SelectedScope from the canonical list when the legacy
|
|
@@ -586,18 +722,43 @@ function singleScopeFromList(chat, scopes) {
|
|
|
586
722
|
return undefined;
|
|
587
723
|
return buildSelectedScopeFrom(chat, cs, deriveScopeIdFrom(chat, cs, 0));
|
|
588
724
|
}
|
|
589
|
-
// Epic #532 — the folder-only branch (0
|
|
590
|
-
//
|
|
591
|
-
// dispatcher.
|
|
592
|
-
|
|
725
|
+
// Epic #532 — the folder-only branch (0 handled by caller; 1 → single-source runner unless
|
|
726
|
+
// there are pre-skipped folders, in which case multi-source carries the skip notice; 2+ → the
|
|
727
|
+
// multi-source merge). Extracted so handleGroundedAsk stays the thin count-based dispatcher.
|
|
728
|
+
// Release 0.2.0 — ask-path defense-in-depth (mirror of the hybrid path's capSourcesToLimits):
|
|
729
|
+
// a stored over-cap chat (legacy rows, or an operator who later lowered the limits) must not
|
|
730
|
+
// fan out unboundedly at ask time. The first `cap` folders (connection order) stay live; the
|
|
731
|
+
// rest surface as source-skipped notices (basename label only — no path leak).
|
|
732
|
+
function capFolderScopesForAsk(deps, scopes, skippedFolders) {
|
|
733
|
+
const cap = currentGroundingLimits(deps).maxConnectedSources;
|
|
734
|
+
if (scopes.length <= cap)
|
|
735
|
+
return { scopes, skipped: skippedFolders };
|
|
736
|
+
const overCap = scopes.slice(cap).map((scope) => {
|
|
737
|
+
const label = scope.root !== undefined ? basename(scope.root) : "project";
|
|
738
|
+
const message = "skipped: over the connected-source limit";
|
|
739
|
+
return { label, message, reason: badRequest(`Source "${label}" ${message}.`) };
|
|
740
|
+
});
|
|
741
|
+
return { scopes: scopes.slice(0, cap), skipped: [...skippedFolders, ...overCap] };
|
|
742
|
+
}
|
|
743
|
+
async function dispatchFolderAsk(prepared, deps, allScopes, allSkippedFolders, runner, multiSource) {
|
|
593
744
|
const { chat, input, signal } = prepared;
|
|
594
|
-
|
|
595
|
-
|
|
745
|
+
const { scopes, skipped: skippedFolders } = capFolderScopesForAsk(deps, allScopes, allSkippedFolders);
|
|
746
|
+
// 2+ healthy folders or 1 healthy + some skipped → multi-source (carries skip-notice).
|
|
747
|
+
if (scopes.length >= 2 || (scopes.length === 1 && skippedFolders.length > 0)) {
|
|
748
|
+
return dispatchMultiSourceAsk(prepared, deps, scopes, skippedFolders, multiSource);
|
|
596
749
|
}
|
|
597
750
|
const scope = buildSelectedScope(chat) ?? singleScopeFromList(chat, scopes);
|
|
598
751
|
if (scope === undefined) {
|
|
599
752
|
return badRequest("Chat has no connected scope.");
|
|
600
753
|
}
|
|
754
|
+
// Epic #177 audit (GAP-B) — mirror the PATCH-route deny-list check for the grounded-ask hot
|
|
755
|
+
// path. The PATCH route validates via validateFallbackProjectRoot before persisting a scope;
|
|
756
|
+
// a chat whose projectPath was created before the deny-list was added (or via the test store)
|
|
757
|
+
// could otherwise reach the orchestrator with a credential-dir workspaceRoot. Reject before
|
|
758
|
+
// calling the runner so no filesystem access occurs against a denied path.
|
|
759
|
+
if (pathIsDenied(scope.workspaceRoot)) {
|
|
760
|
+
return badRequest("Connected scope is excluded from Keiko's safe read surface.");
|
|
761
|
+
}
|
|
601
762
|
const resolved = resolveGroundedRunner(deps, chat, input.modelId, signal, runner);
|
|
602
763
|
if ("status" in resolved)
|
|
603
764
|
return resolved;
|
|
@@ -620,7 +781,7 @@ function hybridSeamFields(seam) {
|
|
|
620
781
|
...(seam.answer !== undefined ? { answer: seam.answer } : {}),
|
|
621
782
|
};
|
|
622
783
|
}
|
|
623
|
-
async function dispatchHybridAsk(prepared, deps, seam) {
|
|
784
|
+
async function dispatchHybridAsk(prepared, deps, skippedFolders, seam) {
|
|
624
785
|
const { chat, input, signal } = prepared;
|
|
625
786
|
// An injected answerer (tests) bypasses model-capability resolution exactly as the multi-source
|
|
626
787
|
// path does: there is no real model port to validate. Production resolves the guardrails once.
|
|
@@ -635,6 +796,11 @@ async function dispatchHybridAsk(prepared, deps, seam) {
|
|
|
635
796
|
modelId,
|
|
636
797
|
deps,
|
|
637
798
|
signal,
|
|
799
|
+
preSkippedFolders: skippedFolders.map((s) => ({
|
|
800
|
+
label: s.label,
|
|
801
|
+
reason: "not-accessible",
|
|
802
|
+
message: s.message,
|
|
803
|
+
})),
|
|
638
804
|
...hybridSeamFields(seam),
|
|
639
805
|
});
|
|
640
806
|
}
|
|
@@ -648,16 +814,26 @@ export async function handleGroundedAsk(ctx, deps, runner, multiSource, hybrid)
|
|
|
648
814
|
// keep the EXISTING folder path (#532, byte-identical). A lone connector with no folders keeps the
|
|
649
815
|
// EXISTING single-connector path (#189, byte-identical). Everything else (folders+connector, or
|
|
650
816
|
// 2+ connectors) is the hybrid merge.
|
|
817
|
+
// Fail-soft: inaccessible/denied folders are skipped; only effective (canonical) counts drive
|
|
818
|
+
// dispatch. A chat with ONLY denied/inaccessible sources still returns the original 400 so the
|
|
819
|
+
// user sees a clear rejection (security preserved).
|
|
651
820
|
const folderScopes = buildConnectedScopes(chat);
|
|
821
|
+
const { canonical: canonicalFolderScopes, skipped: skippedFolders } = canonicalizeGroundedFolderScopes(chat, deps, folderScopes);
|
|
822
|
+
const preparedWithCanonicalFolders = {
|
|
823
|
+
...prepared,
|
|
824
|
+
chat: withCanonicalFolderScopes(chat, canonicalFolderScopes),
|
|
825
|
+
};
|
|
652
826
|
const connectorCount = buildLocalKnowledgeScopes(chat).length;
|
|
653
|
-
|
|
654
|
-
|
|
827
|
+
const effectiveFolders = canonicalFolderScopes.length;
|
|
828
|
+
if (effectiveFolders === 0 && connectorCount === 0) {
|
|
829
|
+
// Hard-fail: return the first skipped reason (preserves exact 400 message) or the generic guard.
|
|
830
|
+
return skippedFolders[0]?.reason ?? badRequest("Chat has no connected scope.");
|
|
655
831
|
}
|
|
656
832
|
if (connectorCount === 0) {
|
|
657
|
-
return dispatchFolderAsk(
|
|
833
|
+
return dispatchFolderAsk(preparedWithCanonicalFolders, deps, canonicalFolderScopes, skippedFolders, runner, multiSource);
|
|
658
834
|
}
|
|
659
|
-
if (
|
|
835
|
+
if (effectiveFolders === 0 && connectorCount === 1) {
|
|
660
836
|
return handleLocalKnowledgeGroundedAsk(chat, prepared.input, deps, prepared.signal);
|
|
661
837
|
}
|
|
662
|
-
return dispatchHybridAsk(
|
|
838
|
+
return dispatchHybridAsk(preparedWithCanonicalFolders, deps, skippedFolders, hybrid);
|
|
663
839
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grounded-turn-registry.d.ts","sourceRoot":"","sources":["../src/grounded-turn-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAK5F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"grounded-turn-registry.d.ts","sourceRoot":"","sources":["../src/grounded-turn-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAK5F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD;AA4BD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IAC7F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAyBD,wBAAgB,0BAA0B,CACxC,KAAK,SAAiB,EACtB,UAAU,SAAsB,GAC/B,oBAAoB,CA2CtB;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAE3F;AAED,wBAAgB,kBAAkB,CAChC,kBAAkB,EAAE,MAAM,EAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GACnB,kBAAkB,GAAG,SAAS,CAEhC;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|