@oscharko-dev/keiko-server 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -0
- package/dist/assistant-response.d.ts +6 -0
- package/dist/assistant-response.d.ts.map +1 -0
- package/dist/assistant-response.js +12 -0
- package/dist/browser.d.ts +11 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +245 -0
- package/dist/chat-handlers.d.ts +48 -0
- package/dist/chat-handlers.d.ts.map +1 -0
- package/dist/chat-handlers.js +821 -0
- package/dist/chat-stream-handlers.d.ts +4 -0
- package/dist/chat-stream-handlers.d.ts.map +1 -0
- package/dist/chat-stream-handlers.js +136 -0
- package/dist/conversation-prompt.d.ts +8 -0
- package/dist/conversation-prompt.d.ts.map +1 -0
- package/dist/conversation-prompt.js +36 -0
- package/dist/conversation-validation.d.ts +26 -0
- package/dist/conversation-validation.d.ts.map +1 -0
- package/dist/conversation-validation.js +125 -0
- package/dist/credentialPersistence.d.ts +23 -0
- package/dist/credentialPersistence.d.ts.map +1 -0
- package/dist/credentialPersistence.js +93 -0
- package/dist/credentialVault.d.ts +30 -0
- package/dist/credentialVault.d.ts.map +1 -0
- package/dist/credentialVault.js +206 -0
- package/dist/csp.d.ts +3 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +75 -0
- package/dist/deps.d.ts +78 -0
- package/dist/deps.d.ts.map +1 -0
- package/dist/deps.js +457 -0
- package/dist/editor/agentRoutes.d.ts +7 -0
- package/dist/editor/agentRoutes.d.ts.map +1 -0
- package/dist/editor/agentRoutes.js +197 -0
- package/dist/editor/assuredGateRunner.d.ts +36 -0
- package/dist/editor/assuredGateRunner.d.ts.map +1 -0
- package/dist/editor/assuredGateRunner.js +100 -0
- package/dist/editor/assuredPreFilter.d.ts +34 -0
- package/dist/editor/assuredPreFilter.d.ts.map +1 -0
- package/dist/editor/assuredPreFilter.js +134 -0
- package/dist/editor/assuredPreFilterRunner.d.ts +31 -0
- package/dist/editor/assuredPreFilterRunner.d.ts.map +1 -0
- package/dist/editor/assuredPreFilterRunner.js +312 -0
- package/dist/editor/builtinLanguageProviders.d.ts +6 -0
- package/dist/editor/builtinLanguageProviders.d.ts.map +1 -0
- package/dist/editor/builtinLanguageProviders.js +221 -0
- package/dist/editor/codingContext.d.ts +12 -0
- package/dist/editor/codingContext.d.ts.map +1 -0
- package/dist/editor/codingContext.js +121 -0
- package/dist/editor/codingContextEvidence.d.ts +7 -0
- package/dist/editor/codingContextEvidence.d.ts.map +1 -0
- package/dist/editor/codingContextEvidence.js +52 -0
- package/dist/editor/codingContextProviders.d.ts +36 -0
- package/dist/editor/codingContextProviders.d.ts.map +1 -0
- package/dist/editor/codingContextProviders.js +348 -0
- package/dist/editor/completionModelEvidence.d.ts +16 -0
- package/dist/editor/completionModelEvidence.d.ts.map +1 -0
- package/dist/editor/completionModelEvidence.js +50 -0
- package/dist/editor/completionRoutes.d.ts +37 -0
- package/dist/editor/completionRoutes.d.ts.map +1 -0
- package/dist/editor/completionRoutes.js +411 -0
- package/dist/editor/contextRoutes.d.ts +6 -0
- package/dist/editor/contextRoutes.d.ts.map +1 -0
- package/dist/editor/contextRoutes.js +411 -0
- package/dist/editor/disposableAssuredExecution.d.ts +22 -0
- package/dist/editor/disposableAssuredExecution.d.ts.map +1 -0
- package/dist/editor/disposableAssuredExecution.js +57 -0
- package/dist/editor/editorCompletionModel.d.ts +47 -0
- package/dist/editor/editorCompletionModel.d.ts.map +1 -0
- package/dist/editor/editorCompletionModel.js +156 -0
- package/dist/editor/editorInlineCompletionModel.d.ts +34 -0
- package/dist/editor/editorInlineCompletionModel.d.ts.map +1 -0
- package/dist/editor/editorInlineCompletionModel.js +112 -0
- package/dist/editor/editorModelTokenBudget.d.ts +46 -0
- package/dist/editor/editorModelTokenBudget.d.ts.map +1 -0
- package/dist/editor/editorModelTokenBudget.js +121 -0
- package/dist/editor/inlineCompletionRateLimiter.d.ts +19 -0
- package/dist/editor/inlineCompletionRateLimiter.d.ts.map +1 -0
- package/dist/editor/inlineCompletionRateLimiter.js +46 -0
- package/dist/editor/inlineCompletionRoutes.d.ts +26 -0
- package/dist/editor/inlineCompletionRoutes.d.ts.map +1 -0
- package/dist/editor/inlineCompletionRoutes.js +404 -0
- package/dist/editor/inlineCompletionTelemetryEvidence.d.ts +5 -0
- package/dist/editor/inlineCompletionTelemetryEvidence.d.ts.map +1 -0
- package/dist/editor/inlineCompletionTelemetryEvidence.js +42 -0
- package/dist/editor/languageCancellation.d.ts +19 -0
- package/dist/editor/languageCancellation.d.ts.map +1 -0
- package/dist/editor/languageCancellation.js +48 -0
- package/dist/editor/languageProvider.d.ts +39 -0
- package/dist/editor/languageProvider.d.ts.map +1 -0
- package/dist/editor/languageProvider.js +11 -0
- package/dist/editor/languageRoutes.d.ts +15 -0
- package/dist/editor/languageRoutes.d.ts.map +1 -0
- package/dist/editor/languageRoutes.js +106 -0
- package/dist/editor/languageSanitize.d.ts +8 -0
- package/dist/editor/languageSanitize.d.ts.map +1 -0
- package/dist/editor/languageSanitize.js +101 -0
- package/dist/editor/languageService.d.ts +36 -0
- package/dist/editor/languageService.d.ts.map +1 -0
- package/dist/editor/languageService.js +93 -0
- package/dist/editor/languageServiceHost.d.ts +14 -0
- package/dist/editor/languageServiceHost.d.ts.map +1 -0
- package/dist/editor/languageServiceHost.js +242 -0
- package/dist/editor/localKnowledgeRetrieval.d.ts +21 -0
- package/dist/editor/localKnowledgeRetrieval.d.ts.map +1 -0
- package/dist/editor/localKnowledgeRetrieval.js +44 -0
- package/dist/editor/patchApplyEvidence.d.ts +21 -0
- package/dist/editor/patchApplyEvidence.d.ts.map +1 -0
- package/dist/editor/patchApplyEvidence.js +87 -0
- package/dist/editor/patchApplyRoutes.d.ts +16 -0
- package/dist/editor/patchApplyRoutes.d.ts.map +1 -0
- package/dist/editor/patchApplyRoutes.js +307 -0
- package/dist/editor/postApplyVerification.d.ts +42 -0
- package/dist/editor/postApplyVerification.d.ts.map +1 -0
- package/dist/editor/postApplyVerification.js +177 -0
- package/dist/editor/testGenerationEvidence.d.ts +6 -0
- package/dist/editor/testGenerationEvidence.d.ts.map +1 -0
- package/dist/editor/testGenerationEvidence.js +72 -0
- package/dist/editor/testGenerationPatch.d.ts +10 -0
- package/dist/editor/testGenerationPatch.d.ts.map +1 -0
- package/dist/editor/testGenerationPatch.js +66 -0
- package/dist/editor/testGenerationRoutes.d.ts +21 -0
- package/dist/editor/testGenerationRoutes.d.ts.map +1 -0
- package/dist/editor/testGenerationRoutes.js +254 -0
- package/dist/editor/testGenerationRunner.d.ts +23 -0
- package/dist/editor/testGenerationRunner.d.ts.map +1 -0
- package/dist/editor/testGenerationRunner.js +120 -0
- package/dist/editor/textOffsets.d.ts +6 -0
- package/dist/editor/textOffsets.d.ts.map +1 -0
- package/dist/editor/textOffsets.js +82 -0
- package/dist/editor/typescriptLanguageProvider.d.ts +3 -0
- package/dist/editor/typescriptLanguageProvider.d.ts.map +1 -0
- package/dist/editor/typescriptLanguageProvider.js +217 -0
- package/dist/evidence.d.ts +28 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +145 -0
- package/dist/files-deny.d.ts +3 -0
- package/dist/files-deny.d.ts.map +1 -0
- package/dist/files-deny.js +12 -0
- package/dist/files.d.ts +97 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +733 -0
- package/dist/gateway-setup.d.ts +10 -0
- package/dist/gateway-setup.d.ts.map +1 -0
- package/dist/gateway-setup.js +896 -0
- package/dist/governed-workflow.d.ts +17 -0
- package/dist/governed-workflow.d.ts.map +1 -0
- package/dist/governed-workflow.js +147 -0
- package/dist/grounded-answer.d.ts +12 -0
- package/dist/grounded-answer.d.ts.map +1 -0
- package/dist/grounded-answer.js +69 -0
- package/dist/grounded-context-index.d.ts +25 -0
- package/dist/grounded-context-index.d.ts.map +1 -0
- package/dist/grounded-context-index.js +169 -0
- package/dist/grounded-document-evidence.d.ts +28 -0
- package/dist/grounded-document-evidence.d.ts.map +1 -0
- package/dist/grounded-document-evidence.js +430 -0
- package/dist/grounded-handoff.d.ts +4 -0
- package/dist/grounded-handoff.d.ts.map +1 -0
- package/dist/grounded-handoff.js +445 -0
- package/dist/grounded-orchestrator.d.ts +43 -0
- package/dist/grounded-orchestrator.d.ts.map +1 -0
- package/dist/grounded-orchestrator.js +1445 -0
- package/dist/grounded-prompt.d.ts +2 -0
- package/dist/grounded-prompt.d.ts.map +1 -0
- package/dist/grounded-prompt.js +17 -0
- package/dist/grounded-qa-hybrid.d.ts +36 -0
- package/dist/grounded-qa-hybrid.d.ts.map +1 -0
- package/dist/grounded-qa-hybrid.js +762 -0
- package/dist/grounded-qa-multi-source.d.ts +38 -0
- package/dist/grounded-qa-multi-source.d.ts.map +1 -0
- package/dist/grounded-qa-multi-source.js +461 -0
- package/dist/grounded-qa.d.ts +45 -0
- package/dist/grounded-qa.d.ts.map +1 -0
- package/dist/grounded-qa.js +877 -0
- package/dist/grounded-rerank.d.ts +26 -0
- package/dist/grounded-rerank.d.ts.map +1 -0
- package/dist/grounded-rerank.js +72 -0
- package/dist/grounded-turn-registry.d.ts +23 -0
- package/dist/grounded-turn-registry.d.ts.map +1 -0
- package/dist/grounded-turn-registry.js +102 -0
- package/dist/headers.d.ts +3 -0
- package/dist/headers.d.ts.map +1 -0
- package/dist/headers.js +22 -0
- package/dist/host-check.d.ts +3 -0
- package/dist/host-check.d.ts.map +1 -0
- package/dist/host-check.js +58 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/load-csp.d.ts +3 -0
- package/dist/load-csp.d.ts.map +1 -0
- package/dist/load-csp.js +100 -0
- package/dist/local-knowledge-grounded-qa.d.ts +42 -0
- package/dist/local-knowledge-grounded-qa.d.ts.map +1 -0
- package/dist/local-knowledge-grounded-qa.js +678 -0
- package/dist/local-knowledge-handlers.d.ts +24 -0
- package/dist/local-knowledge-handlers.d.ts.map +1 -0
- package/dist/local-knowledge-handlers.js +1285 -0
- package/dist/local-knowledge-indexing-registry.d.ts +13 -0
- package/dist/local-knowledge-indexing-registry.d.ts.map +1 -0
- package/dist/local-knowledge-indexing-registry.js +53 -0
- package/dist/localKnowledgeKeyProvider.d.ts +11 -0
- package/dist/localKnowledgeKeyProvider.d.ts.map +1 -0
- package/dist/localKnowledgeKeyProvider.js +48 -0
- package/dist/memory-audit-event-builders.d.ts +21 -0
- package/dist/memory-audit-event-builders.d.ts.map +1 -0
- package/dist/memory-audit-event-builders.js +187 -0
- package/dist/memory-audit-handler.d.ts +23 -0
- package/dist/memory-audit-handler.d.ts.map +1 -0
- package/dist/memory-audit-handler.js +191 -0
- package/dist/memory-capture-policy.d.ts +10 -0
- package/dist/memory-capture-policy.d.ts.map +1 -0
- package/dist/memory-capture-policy.js +44 -0
- package/dist/memory-consolidation-handlers.d.ts +6 -0
- package/dist/memory-consolidation-handlers.d.ts.map +1 -0
- package/dist/memory-consolidation-handlers.js +491 -0
- package/dist/memory-consolidation-registry.d.ts +47 -0
- package/dist/memory-consolidation-registry.d.ts.map +1 -0
- package/dist/memory-consolidation-registry.js +106 -0
- package/dist/memory-conv-handlers.d.ts +8 -0
- package/dist/memory-conv-handlers.d.ts.map +1 -0
- package/dist/memory-conv-handlers.js +369 -0
- package/dist/memory-conversation-context.d.ts +13 -0
- package/dist/memory-conversation-context.d.ts.map +1 -0
- package/dist/memory-conversation-context.js +22 -0
- package/dist/memory-diagnostics.d.ts +29 -0
- package/dist/memory-diagnostics.d.ts.map +1 -0
- package/dist/memory-diagnostics.js +122 -0
- package/dist/memory-embedding.d.ts +21 -0
- package/dist/memory-embedding.d.ts.map +1 -0
- package/dist/memory-embedding.js +264 -0
- package/dist/memory-handlers.d.ts +19 -0
- package/dist/memory-handlers.d.ts.map +1 -0
- package/dist/memory-handlers.js +1204 -0
- package/dist/memory-maintenance-handlers.d.ts +35 -0
- package/dist/memory-maintenance-handlers.d.ts.map +1 -0
- package/dist/memory-maintenance-handlers.js +219 -0
- package/dist/memory-record-builders.d.ts +4 -0
- package/dist/memory-record-builders.d.ts.map +1 -0
- package/dist/memory-record-builders.js +19 -0
- package/dist/memory-retention.d.ts +31 -0
- package/dist/memory-retention.d.ts.map +1 -0
- package/dist/memory-retention.js +151 -0
- package/dist/memory-retrieval-signals.d.ts +12 -0
- package/dist/memory-retrieval-signals.d.ts.map +1 -0
- package/dist/memory-retrieval-signals.js +100 -0
- package/dist/memory-salience.d.ts +12 -0
- package/dist/memory-salience.d.ts.map +1 -0
- package/dist/memory-salience.js +154 -0
- package/dist/memory-scope-sanitizer.d.ts +6 -0
- package/dist/memory-scope-sanitizer.d.ts.map +1 -0
- package/dist/memory-scope-sanitizer.js +106 -0
- package/dist/memory-target-resolver.d.ts +4 -0
- package/dist/memory-target-resolver.d.ts.map +1 -0
- package/dist/memory-target-resolver.js +73 -0
- package/dist/memory-workflow-port.d.ts +14 -0
- package/dist/memory-workflow-port.d.ts.map +1 -0
- package/dist/memory-workflow-port.js +186 -0
- package/dist/private-json.d.ts +3 -0
- package/dist/private-json.d.ts.map +1 -0
- package/dist/private-json.js +62 -0
- package/dist/promptEnhancer/index.d.ts +3 -0
- package/dist/promptEnhancer/index.d.ts.map +1 -0
- package/dist/promptEnhancer/index.js +5 -0
- package/dist/promptEnhancer/orchestrate.d.ts +2 -0
- package/dist/promptEnhancer/orchestrate.d.ts.map +1 -0
- package/dist/promptEnhancer/orchestrate.js +5 -0
- package/dist/promptEnhancer/routes.d.ts +9 -0
- package/dist/promptEnhancer/routes.d.ts.map +1 -0
- package/dist/promptEnhancer/routes.js +205 -0
- package/dist/qualityIntelligence/capsuleAdapter.d.ts +27 -0
- package/dist/qualityIntelligence/capsuleAdapter.d.ts.map +1 -0
- package/dist/qualityIntelligence/capsuleAdapter.js +57 -0
- package/dist/qualityIntelligence/connectorAuthorization.d.ts +22 -0
- package/dist/qualityIntelligence/connectorAuthorization.d.ts.map +1 -0
- package/dist/qualityIntelligence/connectorAuthorization.js +35 -0
- package/dist/qualityIntelligence/connectorErrors.d.ts +16 -0
- package/dist/qualityIntelligence/connectorErrors.d.ts.map +1 -0
- package/dist/qualityIntelligence/connectorErrors.js +56 -0
- package/dist/qualityIntelligence/connectorRoutes.d.ts +7 -0
- package/dist/qualityIntelligence/connectorRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/connectorRoutes.js +167 -0
- package/dist/qualityIntelligence/editRoutes.d.ts +5 -0
- package/dist/qualityIntelligence/editRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/editRoutes.js +293 -0
- package/dist/qualityIntelligence/exportAssembly.d.ts +22 -0
- package/dist/qualityIntelligence/exportAssembly.d.ts.map +1 -0
- package/dist/qualityIntelligence/exportAssembly.js +352 -0
- package/dist/qualityIntelligence/exportRoutes.d.ts +5 -0
- package/dist/qualityIntelligence/exportRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/exportRoutes.js +320 -0
- package/dist/qualityIntelligence/figma/figmaConcurrency.d.ts +8 -0
- package/dist/qualityIntelligence/figma/figmaConcurrency.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConcurrency.js +34 -0
- package/dist/qualityIntelligence/figma/figmaConnector.d.ts +65 -0
- package/dist/qualityIntelligence/figma/figmaConnector.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConnector.js +184 -0
- package/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts +52 -0
- package/dist/qualityIntelligence/figma/figmaConnectorAudit.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConnectorAudit.js +63 -0
- package/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts +31 -0
- package/dist/qualityIntelligence/figma/figmaConnectorErrors.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConnectorErrors.js +220 -0
- package/dist/qualityIntelligence/figma/figmaConnectorMetrics.d.ts +44 -0
- package/dist/qualityIntelligence/figma/figmaConnectorMetrics.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConnectorMetrics.js +49 -0
- package/dist/qualityIntelligence/figma/figmaConsent.d.ts +39 -0
- package/dist/qualityIntelligence/figma/figmaConsent.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaConsent.js +62 -0
- package/dist/qualityIntelligence/figma/figmaHttpPort.d.ts +28 -0
- package/dist/qualityIntelligence/figma/figmaHttpPort.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaHttpPort.js +70 -0
- package/dist/qualityIntelligence/figma/figmaObservedActions.d.ts +49 -0
- package/dist/qualityIntelligence/figma/figmaObservedActions.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaObservedActions.js +89 -0
- package/dist/qualityIntelligence/figma/figmaReadiness.d.ts +32 -0
- package/dist/qualityIntelligence/figma/figmaReadiness.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaReadiness.js +67 -0
- package/dist/qualityIntelligence/figma/figmaRenderPort.d.ts +29 -0
- package/dist/qualityIntelligence/figma/figmaRenderPort.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaRenderPort.js +93 -0
- package/dist/qualityIntelligence/figma/figmaResnapshot.d.ts +28 -0
- package/dist/qualityIntelligence/figma/figmaResnapshot.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaResnapshot.js +38 -0
- package/dist/qualityIntelligence/figma/figmaRetry.d.ts +31 -0
- package/dist/qualityIntelligence/figma/figmaRetry.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaRetry.js +62 -0
- package/dist/qualityIntelligence/figma/figmaScopeRef.d.ts +9 -0
- package/dist/qualityIntelligence/figma/figmaScopeRef.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaScopeRef.js +18 -0
- package/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts +86 -0
- package/dist/qualityIntelligence/figma/figmaScopedPagination.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaScopedPagination.js +308 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts +31 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotBuilder.js +314 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts +18 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotHash.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotHash.js +63 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts +65 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotTypes.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaSnapshotTypes.js +13 -0
- package/dist/qualityIntelligence/figma/figmaTokenSource.d.ts +9 -0
- package/dist/qualityIntelligence/figma/figmaTokenSource.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaTokenSource.js +61 -0
- package/dist/qualityIntelligence/figma/figmaTokenStore.d.ts +19 -0
- package/dist/qualityIntelligence/figma/figmaTokenStore.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaTokenStore.js +156 -0
- package/dist/qualityIntelligence/figma/figmaUrl.d.ts +6 -0
- package/dist/qualityIntelligence/figma/figmaUrl.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/figmaUrl.js +36 -0
- package/dist/qualityIntelligence/figma/index.d.ts +20 -0
- package/dist/qualityIntelligence/figma/index.d.ts.map +1 -0
- package/dist/qualityIntelligence/figma/index.js +26 -0
- package/dist/qualityIntelligence/figmaCodegenRoutes.d.ts +28 -0
- package/dist/qualityIntelligence/figmaCodegenRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/figmaCodegenRoutes.js +165 -0
- package/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts +55 -0
- package/dist/qualityIntelligence/figmaSnapshotAdapter.d.ts.map +1 -0
- package/dist/qualityIntelligence/figmaSnapshotAdapter.js +219 -0
- package/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts +64 -0
- package/dist/qualityIntelligence/figmaSnapshotOrchestration.d.ts.map +1 -0
- package/dist/qualityIntelligence/figmaSnapshotOrchestration.js +203 -0
- package/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts +112 -0
- package/dist/qualityIntelligence/figmaSnapshotRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/figmaSnapshotRoutes.js +1063 -0
- package/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts +19 -0
- package/dist/qualityIntelligence/figmaSnapshotScreenIds.d.ts.map +1 -0
- package/dist/qualityIntelligence/figmaSnapshotScreenIds.js +75 -0
- package/dist/qualityIntelligence/generationPort.d.ts +15 -0
- package/dist/qualityIntelligence/generationPort.d.ts.map +1 -0
- package/dist/qualityIntelligence/generationPort.js +185 -0
- package/dist/qualityIntelligence/handoffErrors.d.ts +9 -0
- package/dist/qualityIntelligence/handoffErrors.d.ts.map +1 -0
- package/dist/qualityIntelligence/handoffErrors.js +21 -0
- package/dist/qualityIntelligence/handoffRoutes.d.ts +15 -0
- package/dist/qualityIntelligence/handoffRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/handoffRoutes.js +341 -0
- package/dist/qualityIntelligence/index.d.ts +17 -0
- package/dist/qualityIntelligence/index.d.ts.map +1 -0
- package/dist/qualityIntelligence/index.js +36 -0
- package/dist/qualityIntelligence/judgePort.d.ts +30 -0
- package/dist/qualityIntelligence/judgePort.d.ts.map +1 -0
- package/dist/qualityIntelligence/judgePort.js +326 -0
- package/dist/qualityIntelligence/modelSelection.d.ts +58 -0
- package/dist/qualityIntelligence/modelSelection.d.ts.map +1 -0
- package/dist/qualityIntelligence/modelSelection.js +148 -0
- package/dist/qualityIntelligence/reCheckRoutes.d.ts +6 -0
- package/dist/qualityIntelligence/reCheckRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/reCheckRoutes.js +1157 -0
- package/dist/qualityIntelligence/retentionEnforcement.d.ts +13 -0
- package/dist/qualityIntelligence/retentionEnforcement.d.ts.map +1 -0
- package/dist/qualityIntelligence/retentionEnforcement.js +47 -0
- package/dist/qualityIntelligence/retentionRoutes.d.ts +8 -0
- package/dist/qualityIntelligence/retentionRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/retentionRoutes.js +74 -0
- package/dist/qualityIntelligence/reviewRoutes.d.ts +5 -0
- package/dist/qualityIntelligence/reviewRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/reviewRoutes.js +145 -0
- package/dist/qualityIntelligence/reviewStore.d.ts +75 -0
- package/dist/qualityIntelligence/reviewStore.d.ts.map +1 -0
- package/dist/qualityIntelligence/reviewStore.js +170 -0
- package/dist/qualityIntelligence/runExecution.d.ts +36 -0
- package/dist/qualityIntelligence/runExecution.d.ts.map +1 -0
- package/dist/qualityIntelligence/runExecution.js +180 -0
- package/dist/qualityIntelligence/runIngestion.d.ts +70 -0
- package/dist/qualityIntelligence/runIngestion.d.ts.map +1 -0
- package/dist/qualityIntelligence/runIngestion.js +1235 -0
- package/dist/qualityIntelligence/runRegistry.d.ts +31 -0
- package/dist/qualityIntelligence/runRegistry.d.ts.map +1 -0
- package/dist/qualityIntelligence/runRegistry.js +66 -0
- package/dist/qualityIntelligence/runRoutes.d.ts +16 -0
- package/dist/qualityIntelligence/runRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/runRoutes.js +357 -0
- package/dist/qualityIntelligence/traceabilityRoutes.d.ts +5 -0
- package/dist/qualityIntelligence/traceabilityRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/traceabilityRoutes.js +173 -0
- package/dist/qualityIntelligence/uiRoutes.d.ts +7 -0
- package/dist/qualityIntelligence/uiRoutes.d.ts.map +1 -0
- package/dist/qualityIntelligence/uiRoutes.js +336 -0
- package/dist/read-handlers.d.ts +9 -0
- package/dist/read-handlers.d.ts.map +1 -0
- package/dist/read-handlers.js +265 -0
- package/dist/relationship-handlers.d.ts +191 -0
- package/dist/relationship-handlers.d.ts.map +1 -0
- package/dist/relationship-handlers.js +0 -0
- package/dist/routes.d.ts +37 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +507 -0
- package/dist/run-engine.d.ts +25 -0
- package/dist/run-engine.d.ts.map +1 -0
- package/dist/run-engine.js +385 -0
- package/dist/run-handlers.d.ts +9 -0
- package/dist/run-handlers.d.ts.map +1 -0
- package/dist/run-handlers.js +465 -0
- package/dist/run-request.d.ts +17 -0
- package/dist/run-request.d.ts.map +1 -0
- package/dist/run-request.js +219 -0
- package/dist/runs.d.ts +47 -0
- package/dist/runs.d.ts.map +1 -0
- package/dist/runs.js +100 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +152 -0
- package/dist/sink.d.ts +28 -0
- package/dist/sink.d.ts.map +1 -0
- package/dist/sink.js +80 -0
- package/dist/sse-write.d.ts +9 -0
- package/dist/sse-write.d.ts.map +1 -0
- package/dist/sse-write.js +26 -0
- package/dist/sse.d.ts +8 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +27 -0
- package/dist/static.d.ts +5 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/static.js +76 -0
- package/dist/store/chats.d.ts +17 -0
- package/dist/store/chats.d.ts.map +1 -0
- package/dist/store/chats.js +624 -0
- package/dist/store/db.d.ts +11 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +203 -0
- package/dist/store/errors.d.ts +13 -0
- package/dist/store/errors.d.ts.map +1 -0
- package/dist/store/errors.js +30 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +6 -0
- package/dist/store/messages.d.ts +8 -0
- package/dist/store/messages.d.ts.map +1 -0
- package/dist/store/messages.js +149 -0
- package/dist/store/paths.d.ts +5 -0
- package/dist/store/paths.d.ts.map +1 -0
- package/dist/store/paths.js +84 -0
- package/dist/store/projects.d.ts +8 -0
- package/dist/store/projects.d.ts.map +1 -0
- package/dist/store/projects.js +59 -0
- package/dist/store/relationship-audit.d.ts +42 -0
- package/dist/store/relationship-audit.d.ts.map +1 -0
- package/dist/store/relationship-audit.js +155 -0
- package/dist/store/relationships.d.ts +191 -0
- package/dist/store/relationships.d.ts.map +1 -0
- package/dist/store/relationships.js +724 -0
- package/dist/store/schema.d.ts +4 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +220 -0
- package/dist/store/types.d.ts +29 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +8 -0
- package/dist/store/validation.d.ts +7 -0
- package/dist/store/validation.d.ts.map +1 -0
- package/dist/store/validation.js +117 -0
- package/dist/store-handlers.d.ts +17 -0
- package/dist/store-handlers.d.ts.map +1 -0
- package/dist/store-handlers.js +872 -0
- package/dist/terminal-errors.d.ts +22 -0
- package/dist/terminal-errors.d.ts.map +1 -0
- package/dist/terminal-errors.js +45 -0
- package/dist/terminal-evidence.d.ts +21 -0
- package/dist/terminal-evidence.d.ts.map +1 -0
- package/dist/terminal-evidence.js +65 -0
- package/dist/terminal-routes.d.ts +10 -0
- package/dist/terminal-routes.d.ts.map +1 -0
- package/dist/terminal-routes.js +219 -0
- package/dist/terminal.d.ts +68 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +855 -0
- package/package.json +52 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
// BFF routes for governed coding-context retrieval (Issue #1211, ADR-0042 D6). Three routes:
|
|
2
|
+
// POST /api/editor/context — assemble a bounded, redacted coding-context pack for
|
|
3
|
+
// an editor-originated request and return the CONTENT-
|
|
4
|
+
// FREE wire pack (citations + tier + accounting) plus an
|
|
5
|
+
// audit-linkage run id. Excerpt text never leaves the
|
|
6
|
+
// process.
|
|
7
|
+
// POST /api/editor/repo-search — governed lexical repo search returning EvidenceAtom[]
|
|
8
|
+
// (stableId + provenance, content-free) under the same
|
|
9
|
+
// deny/realpath/size governance as the files routes.
|
|
10
|
+
// POST /api/editor/local-knowledge/retrieve — query-only Local Knowledge retrieval returning
|
|
11
|
+
// references/citations only (NO LLM answer).
|
|
12
|
+
// Workspace-root containment reuses the files routes' realpath + deny-list resolution; responses are
|
|
13
|
+
// redacted (D9). The browser never gains direct retrieval, embedding, or model access.
|
|
14
|
+
import { isAbsolute, resolve } from "node:path";
|
|
15
|
+
import { CODING_CONTEXT_SCHEMA_VERSION, isValidScopePath, toCodingContextWirePack, validateCodingContextRequest, } from "@oscharko-dev/keiko-contracts";
|
|
16
|
+
import { DEFAULT_SEARCH_LIMITS, containedRealPathInfo, detectWorkspaceAt, findFiles, readExcerpt, RepoSearchInvalidQueryError, RepoSearchInvalidRangeError, RepoSearchUnsupportedFileError, searchText, } from "@oscharko-dev/keiko-workspace";
|
|
17
|
+
import { nodeWorkspaceFs } from "@oscharko-dev/keiko-workspace/internal/fs";
|
|
18
|
+
import { assembleGroundedContext } from "@oscharko-dev/keiko-local-knowledge";
|
|
19
|
+
import { errorBody } from "../routes.js";
|
|
20
|
+
import { FilesError, readJsonObject, resolveRoot, runFilesHandler } from "../files.js";
|
|
21
|
+
import { DENIED_MESSAGE, pathIsDenied } from "../files-deny.js";
|
|
22
|
+
import { openStoreForDeps } from "../local-knowledge-grounded-qa.js";
|
|
23
|
+
import { assembleCodingContext } from "./codingContext.js";
|
|
24
|
+
import { recordCodingContextEvidence } from "./codingContextEvidence.js";
|
|
25
|
+
import { buildLocalKnowledgeScope, retrieveEditorLocalKnowledge, } from "./localKnowledgeRetrieval.js";
|
|
26
|
+
const MAX_CONTEXT_BODY_BYTES = 64 * 1024;
|
|
27
|
+
const REPO_SEARCH_MAX_RESULTS = 50;
|
|
28
|
+
const MAX_CONTEXT_CHANGED_FILES = 64;
|
|
29
|
+
const MAX_REPO_SEARCH_PATHS = 64;
|
|
30
|
+
const DEFAULT_REPO_SEARCH_EXCERPT_BYTES = 8 * 1024;
|
|
31
|
+
const MAX_REPO_SEARCH_EXCERPT_BYTES = 32 * 1024;
|
|
32
|
+
function isRouteResult(value) {
|
|
33
|
+
return typeof value === "object" && value !== null && "status" in value && "body" in value;
|
|
34
|
+
}
|
|
35
|
+
function rootFieldOf(body) {
|
|
36
|
+
return typeof body.root === "string" ? body.root : null;
|
|
37
|
+
}
|
|
38
|
+
function invalidRequest(message) {
|
|
39
|
+
return { status: 400, body: errorBody("INVALID_REQUEST", message) };
|
|
40
|
+
}
|
|
41
|
+
function isStringArray(value) {
|
|
42
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
43
|
+
}
|
|
44
|
+
function dedupePaths(paths) {
|
|
45
|
+
return [...new Set(paths)];
|
|
46
|
+
}
|
|
47
|
+
function invalidPathShape(field, path) {
|
|
48
|
+
return invalidRequest(`${field} contains an invalid workspace-relative path: ${path}`);
|
|
49
|
+
}
|
|
50
|
+
function validateRelativePathShape(field, path) {
|
|
51
|
+
if (!isValidScopePath(path, { mustBeRelative: true })) {
|
|
52
|
+
return invalidPathShape(field, path);
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
function dedupeAndCapPathList(field, paths, maxCount) {
|
|
57
|
+
const deduped = dedupePaths(paths);
|
|
58
|
+
if (deduped.length > maxCount) {
|
|
59
|
+
return invalidRequest(`${field} must contain at most ${maxCount.toString()} paths.`);
|
|
60
|
+
}
|
|
61
|
+
return deduped;
|
|
62
|
+
}
|
|
63
|
+
function assertContained(realRoot, relativePath) {
|
|
64
|
+
if (isAbsolute(relativePath) || pathIsDenied(relativePath)) {
|
|
65
|
+
throw new FilesError(403, "DENIED", DENIED_MESSAGE);
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
containedRealPathInfo(nodeWorkspaceFs, realRoot, resolve(realRoot, relativePath));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
throw new FilesError(403, "DENIED", DENIED_MESSAGE);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function clientAbortSignal(ctx) {
|
|
75
|
+
const controller = new AbortController();
|
|
76
|
+
ctx.req.on("close", () => {
|
|
77
|
+
controller.abort();
|
|
78
|
+
});
|
|
79
|
+
if (typeof ctx.res.on === "function") {
|
|
80
|
+
ctx.res.on("close", () => {
|
|
81
|
+
if (!ctx.res.writableEnded) {
|
|
82
|
+
controller.abort();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return controller.signal;
|
|
87
|
+
}
|
|
88
|
+
function buildInternalRequest(body) {
|
|
89
|
+
return {
|
|
90
|
+
schemaVersion: CODING_CONTEXT_SCHEMA_VERSION,
|
|
91
|
+
purpose: body.purpose,
|
|
92
|
+
documentPath: body.documentPath,
|
|
93
|
+
symbol: typeof body.symbol === "string" ? body.symbol : undefined,
|
|
94
|
+
queryText: typeof body.queryText === "string" ? body.queryText : undefined,
|
|
95
|
+
changedFiles: Array.isArray(body.changedFiles) ? body.changedFiles : undefined,
|
|
96
|
+
capsuleId: typeof body.capsuleId === "string" ? body.capsuleId : undefined,
|
|
97
|
+
capsuleSetId: typeof body.capsuleSetId === "string" ? body.capsuleSetId : undefined,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function sanitizeCodingContextRequest(request) {
|
|
101
|
+
if (request.capsuleId !== undefined && request.capsuleSetId !== undefined) {
|
|
102
|
+
return invalidRequest("At most one of capsuleId or capsuleSetId may be provided.");
|
|
103
|
+
}
|
|
104
|
+
const changedFiles = dedupeAndCapPathList("changedFiles", request.changedFiles ?? [], MAX_CONTEXT_CHANGED_FILES);
|
|
105
|
+
if (isRouteResult(changedFiles)) {
|
|
106
|
+
return changedFiles;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
...request,
|
|
110
|
+
changedFiles: changedFiles.length > 0 ? changedFiles : undefined,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// ─── POST /api/editor/context ─────────────────────────────────────────────────────
|
|
114
|
+
export async function handleEditorContext(ctx, deps) {
|
|
115
|
+
const body = await readJsonObject(ctx.req, MAX_CONTEXT_BODY_BYTES);
|
|
116
|
+
if (isRouteResult(body)) {
|
|
117
|
+
return body;
|
|
118
|
+
}
|
|
119
|
+
const validation = validateCodingContextRequest(body);
|
|
120
|
+
if (!validation.ok) {
|
|
121
|
+
return { status: 400, body: errorBody("INVALID_REQUEST", validation.reasons.join("; ")) };
|
|
122
|
+
}
|
|
123
|
+
const rootInput = rootFieldOf(body);
|
|
124
|
+
return runFilesHandler(async () => {
|
|
125
|
+
const root = await resolveRoot(deps.store, rootInput, deps.redactor);
|
|
126
|
+
const request = sanitizeCodingContextRequest(buildInternalRequest(body));
|
|
127
|
+
if (isRouteResult(request)) {
|
|
128
|
+
return request;
|
|
129
|
+
}
|
|
130
|
+
assertContained(root.realRoot, request.documentPath);
|
|
131
|
+
const invalidDocument = validateRelativePathShape("documentPath", request.documentPath);
|
|
132
|
+
if (invalidDocument !== undefined) {
|
|
133
|
+
return invalidDocument;
|
|
134
|
+
}
|
|
135
|
+
for (const changed of request.changedFiles ?? []) {
|
|
136
|
+
assertContained(root.realRoot, changed);
|
|
137
|
+
const invalidChanged = validateRelativePathShape("changedFiles", changed);
|
|
138
|
+
if (invalidChanged !== undefined) {
|
|
139
|
+
return invalidChanged;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const nowMs = Date.now();
|
|
143
|
+
const pack = await assembleCodingContext(request, {
|
|
144
|
+
deps,
|
|
145
|
+
realRoot: root.realRoot,
|
|
146
|
+
signal: clientAbortSignal(ctx),
|
|
147
|
+
nowMs,
|
|
148
|
+
});
|
|
149
|
+
const wire = toCodingContextWirePack(pack);
|
|
150
|
+
const evidenceRunId = recordCodingContextEvidence(deps.evidenceStore, deps.redactor, wire, nowMs);
|
|
151
|
+
return { status: 200, body: deps.redactor({ pack: wire, evidenceRunId }) };
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function clampMaxResults(value) {
|
|
155
|
+
const raw = typeof value === "number" ? value : REPO_SEARCH_MAX_RESULTS;
|
|
156
|
+
return Math.max(1, Math.min(REPO_SEARCH_MAX_RESULTS, Math.trunc(raw)));
|
|
157
|
+
}
|
|
158
|
+
function clampMaxBytes(value) {
|
|
159
|
+
const raw = typeof value === "number" ? value : DEFAULT_REPO_SEARCH_EXCERPT_BYTES;
|
|
160
|
+
return Math.max(0, Math.min(MAX_REPO_SEARCH_EXCERPT_BYTES, Math.trunc(raw)));
|
|
161
|
+
}
|
|
162
|
+
function parsePositiveInteger(value, field) {
|
|
163
|
+
if (!Number.isInteger(value) || typeof value !== "number" || value < 1) {
|
|
164
|
+
return invalidRequest(`${field} must be a positive integer.`);
|
|
165
|
+
}
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
function parseRepoSearchOperation(value) {
|
|
169
|
+
if (value === undefined || value === "searchText") {
|
|
170
|
+
return "searchText";
|
|
171
|
+
}
|
|
172
|
+
if (value === "findFiles" || value === "readExcerpt") {
|
|
173
|
+
return value;
|
|
174
|
+
}
|
|
175
|
+
return invalidRequest("operation must be searchText, findFiles, or readExcerpt.");
|
|
176
|
+
}
|
|
177
|
+
function parseRepoSearchBase(body) {
|
|
178
|
+
if (body.symbol !== undefined && typeof body.symbol !== "string") {
|
|
179
|
+
return invalidRequest("symbol must be a string when provided.");
|
|
180
|
+
}
|
|
181
|
+
if (body.paths !== undefined && !isStringArray(body.paths)) {
|
|
182
|
+
return invalidRequest("paths must be an array of strings.");
|
|
183
|
+
}
|
|
184
|
+
const paths = dedupeAndCapPathList("paths", isStringArray(body.paths) ? body.paths : [], MAX_REPO_SEARCH_PATHS);
|
|
185
|
+
if (isRouteResult(paths)) {
|
|
186
|
+
return paths;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
root: rootFieldOf(body),
|
|
190
|
+
symbol: typeof body.symbol === "string" ? body.symbol : undefined,
|
|
191
|
+
paths,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
function parseRepoSearchQueryInput(operation, body, base) {
|
|
195
|
+
if (typeof body.queryText !== "string" || body.queryText.trim().length === 0) {
|
|
196
|
+
return invalidRequest("queryText must be a non-empty string.");
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
...base,
|
|
200
|
+
operation,
|
|
201
|
+
queryText: body.queryText,
|
|
202
|
+
maxResults: clampMaxResults(body.maxResults),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function parseRepoSearchExcerptInput(body, base) {
|
|
206
|
+
if (typeof body.scopePath !== "string" || body.scopePath.trim().length === 0) {
|
|
207
|
+
return invalidRequest("scopePath must be a non-empty string.");
|
|
208
|
+
}
|
|
209
|
+
const startLine = parsePositiveInteger(body.startLine, "startLine");
|
|
210
|
+
if (isRouteResult(startLine)) {
|
|
211
|
+
return startLine;
|
|
212
|
+
}
|
|
213
|
+
const endLine = parsePositiveInteger(body.endLine, "endLine");
|
|
214
|
+
if (isRouteResult(endLine)) {
|
|
215
|
+
return endLine;
|
|
216
|
+
}
|
|
217
|
+
if (endLine < startLine) {
|
|
218
|
+
return invalidRequest("endLine must be greater than or equal to startLine.");
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
...base,
|
|
222
|
+
operation: "readExcerpt",
|
|
223
|
+
queryText: typeof body.queryText === "string" ? body.queryText : undefined,
|
|
224
|
+
maxResults: clampMaxResults(body.maxResults),
|
|
225
|
+
scopePath: body.scopePath,
|
|
226
|
+
startLine,
|
|
227
|
+
endLine,
|
|
228
|
+
maxBytes: clampMaxBytes(body.maxBytes),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
function parseRepoSearchInput(body) {
|
|
232
|
+
const operation = parseRepoSearchOperation(body.operation);
|
|
233
|
+
if (isRouteResult(operation)) {
|
|
234
|
+
return operation;
|
|
235
|
+
}
|
|
236
|
+
const base = parseRepoSearchBase(body);
|
|
237
|
+
if (isRouteResult(base)) {
|
|
238
|
+
return base;
|
|
239
|
+
}
|
|
240
|
+
if (operation === "readExcerpt") {
|
|
241
|
+
return parseRepoSearchExcerptInput(body, base);
|
|
242
|
+
}
|
|
243
|
+
return parseRepoSearchQueryInput(operation, body, base);
|
|
244
|
+
}
|
|
245
|
+
function repoSearchErrorResult(error) {
|
|
246
|
+
if (error instanceof RepoSearchInvalidQueryError || error instanceof RepoSearchInvalidRangeError) {
|
|
247
|
+
return invalidRequest(error.message);
|
|
248
|
+
}
|
|
249
|
+
if (error instanceof RepoSearchUnsupportedFileError) {
|
|
250
|
+
return { status: 400, body: errorBody("UNSUPPORTED_FILE", error.message) };
|
|
251
|
+
}
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
function validateRepoSearchPaths(realRoot, input) {
|
|
255
|
+
for (const path of input.paths) {
|
|
256
|
+
assertContained(realRoot, path);
|
|
257
|
+
const invalid = validateRelativePathShape("paths", path);
|
|
258
|
+
if (invalid !== undefined) {
|
|
259
|
+
return invalid;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (input.operation === "readExcerpt") {
|
|
263
|
+
assertContained(realRoot, input.scopePath);
|
|
264
|
+
return validateRelativePathShape("scopePath", input.scopePath);
|
|
265
|
+
}
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
function buildRepoSearchScope(realRoot, input) {
|
|
269
|
+
return {
|
|
270
|
+
workspace: detectWorkspaceAt(realRoot, nodeWorkspaceFs),
|
|
271
|
+
scopeId: "editor-repo-search",
|
|
272
|
+
relativePaths: input.paths,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function buildRepoSearchQuery(input, nowMs) {
|
|
276
|
+
return {
|
|
277
|
+
kind: input.operation === "findFiles"
|
|
278
|
+
? "file-pattern"
|
|
279
|
+
: input.symbol !== undefined
|
|
280
|
+
? "exact-symbol"
|
|
281
|
+
: "natural-language",
|
|
282
|
+
text: input.operation === "findFiles" ? input.queryText : input.symbol ?? input.queryText,
|
|
283
|
+
caseSensitive: false,
|
|
284
|
+
maxResults: input.maxResults,
|
|
285
|
+
emittedAtMs: nowMs,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
async function runReadExcerptOperation(deps, scope, input, signal) {
|
|
289
|
+
const result = await readExcerpt(scope, {
|
|
290
|
+
scopePath: input.scopePath,
|
|
291
|
+
startLine: input.startLine,
|
|
292
|
+
endLine: input.endLine,
|
|
293
|
+
maxBytes: input.maxBytes,
|
|
294
|
+
}, { signal });
|
|
295
|
+
return {
|
|
296
|
+
status: 200,
|
|
297
|
+
body: deps.redactor({
|
|
298
|
+
atom: result.atom,
|
|
299
|
+
atoms: [result.atom],
|
|
300
|
+
truncated: result.truncated,
|
|
301
|
+
byteCount: new TextEncoder().encode(result.content).length,
|
|
302
|
+
}),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
async function runQueryOperation(deps, scope, input, signal) {
|
|
306
|
+
const query = buildRepoSearchQuery(input, Date.now());
|
|
307
|
+
const result = input.operation === "findFiles"
|
|
308
|
+
? await findFiles(scope, query, DEFAULT_SEARCH_LIMITS, { signal })
|
|
309
|
+
: await searchText(scope, query, DEFAULT_SEARCH_LIMITS, { signal });
|
|
310
|
+
return {
|
|
311
|
+
status: 200,
|
|
312
|
+
body: deps.redactor({
|
|
313
|
+
atoms: result.atoms,
|
|
314
|
+
truncated: result.truncated,
|
|
315
|
+
filesScanned: result.filesScanned,
|
|
316
|
+
}),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
async function runRepoSearchOperation(deps, scope, input, signal) {
|
|
320
|
+
try {
|
|
321
|
+
return input.operation === "readExcerpt"
|
|
322
|
+
? await runReadExcerptOperation(deps, scope, input, signal)
|
|
323
|
+
: await runQueryOperation(deps, scope, input, signal);
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
const routeError = repoSearchErrorResult(error);
|
|
327
|
+
if (routeError !== undefined) {
|
|
328
|
+
return routeError;
|
|
329
|
+
}
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
export async function handleEditorRepoSearch(ctx, deps) {
|
|
334
|
+
const body = await readJsonObject(ctx.req, MAX_CONTEXT_BODY_BYTES);
|
|
335
|
+
if (isRouteResult(body)) {
|
|
336
|
+
return body;
|
|
337
|
+
}
|
|
338
|
+
const input = parseRepoSearchInput(body);
|
|
339
|
+
if (isRouteResult(input)) {
|
|
340
|
+
return input;
|
|
341
|
+
}
|
|
342
|
+
return runFilesHandler(async () => {
|
|
343
|
+
const root = await resolveRoot(deps.store, input.root, deps.redactor);
|
|
344
|
+
const invalid = validateRepoSearchPaths(root.realRoot, input);
|
|
345
|
+
if (invalid !== undefined) {
|
|
346
|
+
return invalid;
|
|
347
|
+
}
|
|
348
|
+
return await runRepoSearchOperation(deps, buildRepoSearchScope(root.realRoot, input), input, clientAbortSignal(ctx));
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function parseLocalKnowledgeRetrieveInput(body) {
|
|
352
|
+
if (typeof body.queryText !== "string" || body.queryText.trim().length === 0) {
|
|
353
|
+
return invalidRequest("queryText must be a non-empty string.");
|
|
354
|
+
}
|
|
355
|
+
const capsuleId = typeof body.capsuleId === "string" ? body.capsuleId : undefined;
|
|
356
|
+
const capsuleSetId = typeof body.capsuleSetId === "string" ? body.capsuleSetId : undefined;
|
|
357
|
+
if ((capsuleId === undefined) === (capsuleSetId === undefined)) {
|
|
358
|
+
return invalidRequest("Exactly one of capsuleId or capsuleSetId is required.");
|
|
359
|
+
}
|
|
360
|
+
return { queryText: body.queryText, capsuleId, capsuleSetId };
|
|
361
|
+
}
|
|
362
|
+
async function localKnowledgeRetrieveResponse(deps, store, input, signal) {
|
|
363
|
+
const scope = buildLocalKnowledgeScope(input.capsuleId, input.capsuleSetId);
|
|
364
|
+
if (scope === undefined) {
|
|
365
|
+
return invalidRequest("Exactly one of capsuleId or capsuleSetId is required.");
|
|
366
|
+
}
|
|
367
|
+
const outcome = await retrieveEditorLocalKnowledge(deps, store, scope, input.queryText, signal);
|
|
368
|
+
if (outcome.kind === "conflict") {
|
|
369
|
+
return outcome.routeResult;
|
|
370
|
+
}
|
|
371
|
+
if (outcome.kind === "not-ready") {
|
|
372
|
+
return {
|
|
373
|
+
status: 409,
|
|
374
|
+
body: errorBody("LOCAL_KNOWLEDGE_CONFLICT", String(deps.redactor(outcome.message))),
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
status: 200,
|
|
379
|
+
body: deps.redactor({
|
|
380
|
+
pack: assembleGroundedContext(outcome.references),
|
|
381
|
+
noEvidence: outcome.noEvidence,
|
|
382
|
+
...(outcome.reason !== undefined ? { reason: outcome.reason } : {}),
|
|
383
|
+
}),
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
export async function handleEditorLocalKnowledgeRetrieve(ctx, deps) {
|
|
387
|
+
const body = await readJsonObject(ctx.req, MAX_CONTEXT_BODY_BYTES);
|
|
388
|
+
if (isRouteResult(body)) {
|
|
389
|
+
return body;
|
|
390
|
+
}
|
|
391
|
+
const input = parseLocalKnowledgeRetrieveInput(body);
|
|
392
|
+
if (isRouteResult(input)) {
|
|
393
|
+
return input;
|
|
394
|
+
}
|
|
395
|
+
let env;
|
|
396
|
+
try {
|
|
397
|
+
env = openStoreForDeps(deps);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return {
|
|
401
|
+
status: 503,
|
|
402
|
+
body: errorBody("LOCAL_KNOWLEDGE_UNAVAILABLE", "Local knowledge storage is unavailable."),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
try {
|
|
406
|
+
return await localKnowledgeRetrieveResponse(deps, env.store, input, clientAbortSignal(ctx));
|
|
407
|
+
}
|
|
408
|
+
finally {
|
|
409
|
+
env.close();
|
|
410
|
+
}
|
|
411
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type AssuredPreFilterConfig, type AssuredPreFilterOutcome } from "./assuredPreFilter.js";
|
|
2
|
+
import { type SandboxedCommand, type SandboxedRunResult } from "./assuredGateRunner.js";
|
|
3
|
+
export declare function sandboxEnforcesAssuredIsolation(cwd: string): boolean;
|
|
4
|
+
export interface DisposableExecutionPorts {
|
|
5
|
+
readonly enforced: boolean;
|
|
6
|
+
readonly makeRoot: () => Promise<string>;
|
|
7
|
+
readonly measureBaseline: (root: string) => Promise<void>;
|
|
8
|
+
readonly applyCandidate: (root: string) => Promise<void>;
|
|
9
|
+
readonly run: (root: string, cmd: SandboxedCommand) => Promise<SandboxedRunResult>;
|
|
10
|
+
readonly readReport: (root: string, relativePath: string) => unknown;
|
|
11
|
+
readonly dispose: (root: string) => Promise<void>;
|
|
12
|
+
readonly buildCommand: SandboxedCommand;
|
|
13
|
+
readonly testCommand: SandboxedCommand;
|
|
14
|
+
readonly coverageCommand: SandboxedCommand;
|
|
15
|
+
readonly mutationCommand: SandboxedCommand;
|
|
16
|
+
readonly baselineCoverageReportPath: string;
|
|
17
|
+
readonly patchedCoverageReportPath: string;
|
|
18
|
+
readonly mutationReportPath: string;
|
|
19
|
+
readonly targetCoverageKeys: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function runDisposableAssuredPreFilter(ports: DisposableExecutionPorts, config?: AssuredPreFilterConfig): Promise<AssuredPreFilterOutcome>;
|
|
22
|
+
//# sourceMappingURL=disposableAssuredExecution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposableAssuredExecution.d.ts","sourceRoot":"","sources":["../../src/editor/disposableAssuredExecution.ts"],"names":[],"mappings":"AAcA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAIhC,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWpE;AAUD,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEnF,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IAErE,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,wBAAwB,EAC/B,MAAM,GAAE,sBAA0D,GACjE,OAAO,CAAC,uBAAuB,CAAC,CA0BlC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Disposable-execution composition for the assured pre-filter (Issue #1202 wave-2; ADR-0043).
|
|
2
|
+
//
|
|
3
|
+
// Determines whether THIS host can enforce a deny-by-default egress boundary (keiko-sandbox) and, when
|
|
4
|
+
// it can, runs the assured pre-filter against a disposable execution root: a throwaway copy of the
|
|
5
|
+
// target project where the candidate is applied, the gates run through the enforced sandboxed command
|
|
6
|
+
// boundary, and which is always disposed — the user's workspace is never written. When the host cannot
|
|
7
|
+
// enforce egress the pre-filter fails closed: the candidate is reported as untrusted evidence only and
|
|
8
|
+
// is never `assured` (owner decision on #1202).
|
|
9
|
+
//
|
|
10
|
+
// The lifecycle is expressed over injectable ports so the composition (copy -> baseline -> apply ->
|
|
11
|
+
// gates -> dispose, with dispose guaranteed) is unit-tested with fakes; the node ports that perform the
|
|
12
|
+
// real filesystem copy and sandboxed command runs are assembled in assuredPreFilterRunner.ts.
|
|
13
|
+
import { currentPlatform, planIsolatedRun, probeBackends } from "@oscharko-dev/keiko-sandbox";
|
|
14
|
+
import { DEFAULT_ASSURED_PRE_FILTER_CONFIG, runAssuredPreFilter, } from "./assuredPreFilter.js";
|
|
15
|
+
import { createSandboxedGateRunner, } from "./assuredGateRunner.js";
|
|
16
|
+
// Whether keiko-sandbox can enforce the full assured boundary for a network:"none" execution-root
|
|
17
|
+
// run on this host (no untrusted command is run during this planning check).
|
|
18
|
+
export function sandboxEnforcesAssuredIsolation(cwd) {
|
|
19
|
+
const decision = planIsolatedRun({ command: "node", args: [], cwd, network: "none", filesystem: "execution-root" }, probeBackends(), currentPlatform());
|
|
20
|
+
return (decision.kind === "wrapped" &&
|
|
21
|
+
decision.attestation.networkEnforced &&
|
|
22
|
+
decision.attestation.filesystemEnforced);
|
|
23
|
+
}
|
|
24
|
+
// A gate runner whose gates must never be invoked (used on the fail-closed path; runAssuredPreFilter
|
|
25
|
+
// returns before calling any gate when `enforced` is false).
|
|
26
|
+
function failClosedRunner() {
|
|
27
|
+
const never = () => Promise.reject(new Error("assured pre-filter gate must not run when egress is not enforced"));
|
|
28
|
+
return { enforced: false, build: never, runTests: never, coverage: never, mutation: never };
|
|
29
|
+
}
|
|
30
|
+
export async function runDisposableAssuredPreFilter(ports, config = DEFAULT_ASSURED_PRE_FILTER_CONFIG) {
|
|
31
|
+
if (!ports.enforced) {
|
|
32
|
+
return runAssuredPreFilter(failClosedRunner(), config);
|
|
33
|
+
}
|
|
34
|
+
const root = await ports.makeRoot();
|
|
35
|
+
try {
|
|
36
|
+
await ports.measureBaseline(root);
|
|
37
|
+
await ports.applyCandidate(root);
|
|
38
|
+
const runner = createSandboxedGateRunner({
|
|
39
|
+
enforced: true,
|
|
40
|
+
run: (cmd) => ports.run(root, cmd),
|
|
41
|
+
readReport: (relativePath) => ports.readReport(root, relativePath),
|
|
42
|
+
buildCommand: ports.buildCommand,
|
|
43
|
+
testCommand: ports.testCommand,
|
|
44
|
+
coverageCommand: ports.coverageCommand,
|
|
45
|
+
mutationCommand: ports.mutationCommand,
|
|
46
|
+
baselineCoverageReportPath: ports.baselineCoverageReportPath,
|
|
47
|
+
patchedCoverageReportPath: ports.patchedCoverageReportPath,
|
|
48
|
+
mutationReportPath: ports.mutationReportPath,
|
|
49
|
+
targetCoverageKeys: ports.targetCoverageKeys,
|
|
50
|
+
minMutantsKilled: config.minMutantsKilled,
|
|
51
|
+
});
|
|
52
|
+
return await runAssuredPreFilter(runner, config);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await ports.dispose(root);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CodingContextPack, LanguageCompletionItemKind, LanguagePosition, UsageMetadata } from "@oscharko-dev/keiko-contracts";
|
|
2
|
+
export interface ModelCompletionItem {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly kind: LanguageCompletionItemKind;
|
|
5
|
+
readonly insertText: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ModelChatRequest {
|
|
8
|
+
readonly system: string;
|
|
9
|
+
readonly user: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ModelChatResult {
|
|
12
|
+
readonly content: string;
|
|
13
|
+
readonly usage?: UsageMetadata | undefined;
|
|
14
|
+
}
|
|
15
|
+
/** The server-side chat seam (the Model Gateway). Returns raw text plus optional usage metadata. */
|
|
16
|
+
export type ModelChatFn = (request: ModelChatRequest, signal: AbortSignal) => Promise<string | ModelChatResult>;
|
|
17
|
+
export interface GenerateModelCompletionsInput {
|
|
18
|
+
readonly overlayText: string;
|
|
19
|
+
readonly position: LanguagePosition;
|
|
20
|
+
readonly languageId: string;
|
|
21
|
+
readonly contextPack?: CodingContextPack | undefined;
|
|
22
|
+
readonly maxItems: number;
|
|
23
|
+
readonly maxInsertTextChars: number;
|
|
24
|
+
/** Optional route-owned prompt redaction applied before prefix/suffix enter the model prompt. */
|
|
25
|
+
readonly redactText?: ((value: string) => string) | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface GenerateModelCompletionsResult {
|
|
28
|
+
readonly items: readonly ModelCompletionItem[];
|
|
29
|
+
readonly promptHash: string;
|
|
30
|
+
readonly truncated: boolean;
|
|
31
|
+
readonly usage?: UsageMetadata | undefined;
|
|
32
|
+
}
|
|
33
|
+
/** Split the overlay text into prefix/suffix around a 0-based {@link LanguagePosition}. */
|
|
34
|
+
export declare function splitAtPosition(text: string, position: LanguagePosition): {
|
|
35
|
+
prefix: string;
|
|
36
|
+
suffix: string;
|
|
37
|
+
};
|
|
38
|
+
/** Build the aligned-infilling prompt; context excerpts are delimited as reference-only material. */
|
|
39
|
+
export declare function buildModelCompletionPrompt(input: GenerateModelCompletionsInput): ModelChatRequest;
|
|
40
|
+
/** Parse the model output into bounded, deduped completion items. Returns `[]` on any malformation. */
|
|
41
|
+
export declare function parseModelCompletionItems(content: string, maxItems: number, maxInsertTextChars: number): {
|
|
42
|
+
items: readonly ModelCompletionItem[];
|
|
43
|
+
truncated: boolean;
|
|
44
|
+
};
|
|
45
|
+
/** Assemble the prompt, call the model, and parse its output into completion items. */
|
|
46
|
+
export declare function generateModelCompletions(input: GenerateModelCompletionsInput, chat: ModelChatFn, signal: AbortSignal): Promise<GenerateModelCompletionsResult>;
|
|
47
|
+
//# sourceMappingURL=editorCompletionModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorCompletionModel.d.ts","sourceRoot":"","sources":["../../src/editor/editorCompletionModel.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,CACxB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AAEvC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC/D;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAqBD,2FAA2F;AAC3F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAUpC;AAcD,qGAAqG;AACrG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,6BAA6B,GAAG,gBAAgB,CAqBjG;AAiDD,uGAAuG;AACvG,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,GACzB;IAAE,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA8B/D;AAED,uFAAuF;AACvF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,6BAA6B,EACpC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,8BAA8B,CAAC,CAOzC"}
|