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