@trenchwork/coder 1.3.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/LICENSE +16 -0
- package/README.md +173 -0
- package/agents/trenchwork-code.rules.json +199 -0
- package/dist/bin/deepseek.d.ts +3 -0
- package/dist/bin/deepseek.d.ts.map +1 -0
- package/dist/bin/deepseek.js +23 -0
- package/dist/bin/deepseek.js.map +1 -0
- package/dist/capabilities/baseCapability.d.ts +72 -0
- package/dist/capabilities/baseCapability.d.ts.map +1 -0
- package/dist/capabilities/baseCapability.js +183 -0
- package/dist/capabilities/baseCapability.js.map +1 -0
- package/dist/capabilities/bashCapability.d.ts +13 -0
- package/dist/capabilities/bashCapability.d.ts.map +1 -0
- package/dist/capabilities/bashCapability.js +24 -0
- package/dist/capabilities/bashCapability.js.map +1 -0
- package/dist/capabilities/editCapability.d.ts +17 -0
- package/dist/capabilities/editCapability.d.ts.map +1 -0
- package/dist/capabilities/editCapability.js +27 -0
- package/dist/capabilities/editCapability.js.map +1 -0
- package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
- package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
- package/dist/capabilities/enhancedGitCapability.js +220 -0
- package/dist/capabilities/enhancedGitCapability.js.map +1 -0
- package/dist/capabilities/filesystemCapability.d.ts +13 -0
- package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
- package/dist/capabilities/filesystemCapability.js +24 -0
- package/dist/capabilities/filesystemCapability.js.map +1 -0
- package/dist/capabilities/gitHistoryCapability.d.ts +6 -0
- package/dist/capabilities/gitHistoryCapability.d.ts.map +1 -0
- package/dist/capabilities/gitHistoryCapability.js +184 -0
- package/dist/capabilities/gitHistoryCapability.js.map +1 -0
- package/dist/capabilities/hitlCapability.d.ts +18 -0
- package/dist/capabilities/hitlCapability.d.ts.map +1 -0
- package/dist/capabilities/hitlCapability.js +29 -0
- package/dist/capabilities/hitlCapability.js.map +1 -0
- package/dist/capabilities/index.d.ts +11 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +16 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/memoryCapability.d.ts +10 -0
- package/dist/capabilities/memoryCapability.d.ts.map +1 -0
- package/dist/capabilities/memoryCapability.js +22 -0
- package/dist/capabilities/memoryCapability.js.map +1 -0
- package/dist/capabilities/notebookCapability.d.ts +6 -0
- package/dist/capabilities/notebookCapability.d.ts.map +1 -0
- package/dist/capabilities/notebookCapability.js +17 -0
- package/dist/capabilities/notebookCapability.js.map +1 -0
- package/dist/capabilities/searchCapability.d.ts +19 -0
- package/dist/capabilities/searchCapability.d.ts.map +1 -0
- package/dist/capabilities/searchCapability.js +29 -0
- package/dist/capabilities/searchCapability.js.map +1 -0
- package/dist/capabilities/skillCapability.d.ts +6 -0
- package/dist/capabilities/skillCapability.d.ts.map +1 -0
- package/dist/capabilities/skillCapability.js +17 -0
- package/dist/capabilities/skillCapability.js.map +1 -0
- package/dist/capabilities/todoCapability.d.ts +11 -0
- package/dist/capabilities/todoCapability.d.ts.map +1 -0
- package/dist/capabilities/todoCapability.js +22 -0
- package/dist/capabilities/todoCapability.js.map +1 -0
- package/dist/capabilities/toolManifest.d.ts +3 -0
- package/dist/capabilities/toolManifest.d.ts.map +1 -0
- package/dist/capabilities/toolManifest.js +163 -0
- package/dist/capabilities/toolManifest.js.map +1 -0
- package/dist/capabilities/toolRegistry.d.ts +25 -0
- package/dist/capabilities/toolRegistry.d.ts.map +1 -0
- package/dist/capabilities/toolRegistry.js +150 -0
- package/dist/capabilities/toolRegistry.js.map +1 -0
- package/dist/capabilities/unifiedCodingCapability.d.ts +62 -0
- package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
- package/dist/capabilities/unifiedCodingCapability.js +790 -0
- package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
- package/dist/capabilities/webCapability.d.ts +23 -0
- package/dist/capabilities/webCapability.d.ts.map +1 -0
- package/dist/capabilities/webCapability.js +33 -0
- package/dist/capabilities/webCapability.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +181 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts/agent-profiles.schema.json +25 -0
- package/dist/contracts/agent-schemas.json +158 -0
- package/dist/contracts/models.schema.json +9 -0
- package/dist/contracts/module-schema.json +367 -0
- package/dist/contracts/schemas/agent-profile.schema.json +157 -0
- package/dist/contracts/schemas/agent-rules.schema.json +238 -0
- package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
- package/dist/contracts/schemas/agent.schema.json +90 -0
- package/dist/contracts/schemas/tool-selection.schema.json +174 -0
- package/dist/contracts/tools.schema.json +42 -0
- package/dist/contracts/unified-schema.json +40 -0
- package/dist/contracts/v1/agent.d.ts +225 -0
- package/dist/contracts/v1/agent.d.ts.map +1 -0
- package/dist/contracts/v1/agent.js +8 -0
- package/dist/contracts/v1/agent.js.map +1 -0
- package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
- package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
- package/dist/contracts/v1/agentProfileManifest.js +9 -0
- package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
- package/dist/contracts/v1/agentRules.d.ts +60 -0
- package/dist/contracts/v1/agentRules.d.ts.map +1 -0
- package/dist/contracts/v1/agentRules.js +10 -0
- package/dist/contracts/v1/agentRules.js.map +1 -0
- package/dist/contracts/v1/provider.d.ts +149 -0
- package/dist/contracts/v1/provider.d.ts.map +1 -0
- package/dist/contracts/v1/provider.js +7 -0
- package/dist/contracts/v1/provider.js.map +1 -0
- package/dist/contracts/v1/tool.d.ts +136 -0
- package/dist/contracts/v1/tool.d.ts.map +1 -0
- package/dist/contracts/v1/tool.js +7 -0
- package/dist/contracts/v1/tool.js.map +1 -0
- package/dist/contracts/v1/toolAccess.d.ts +43 -0
- package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
- package/dist/contracts/v1/toolAccess.js +9 -0
- package/dist/contracts/v1/toolAccess.js.map +1 -0
- package/dist/core/adversarial.d.ts +38 -0
- package/dist/core/adversarial.d.ts.map +1 -0
- package/dist/core/adversarial.js +106 -0
- package/dist/core/adversarial.js.map +1 -0
- package/dist/core/adversarialCorrection.d.ts +22 -0
- package/dist/core/adversarialCorrection.d.ts.map +1 -0
- package/dist/core/adversarialCorrection.js +25 -0
- package/dist/core/adversarialCorrection.js.map +1 -0
- package/dist/core/agent.d.ts +331 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +1637 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/agentProfileManifest.d.ts +3 -0
- package/dist/core/agentProfileManifest.d.ts.map +1 -0
- package/dist/core/agentProfileManifest.js +188 -0
- package/dist/core/agentProfileManifest.js.map +1 -0
- package/dist/core/agentProfiles.d.ts +22 -0
- package/dist/core/agentProfiles.d.ts.map +1 -0
- package/dist/core/agentProfiles.js +35 -0
- package/dist/core/agentProfiles.js.map +1 -0
- package/dist/core/agentRegistry.d.ts +111 -0
- package/dist/core/agentRegistry.d.ts.map +1 -0
- package/dist/core/agentRegistry.js +229 -0
- package/dist/core/agentRegistry.js.map +1 -0
- package/dist/core/agentRulebook.d.ts +11 -0
- package/dist/core/agentRulebook.d.ts.map +1 -0
- package/dist/core/agentRulebook.js +136 -0
- package/dist/core/agentRulebook.js.map +1 -0
- package/dist/core/agentSchemaLoader.d.ts +131 -0
- package/dist/core/agentSchemaLoader.d.ts.map +1 -0
- package/dist/core/agentSchemaLoader.js +235 -0
- package/dist/core/agentSchemaLoader.js.map +1 -0
- package/dist/core/aiErrorFixer.d.ts +57 -0
- package/dist/core/aiErrorFixer.d.ts.map +1 -0
- package/dist/core/aiErrorFixer.js +214 -0
- package/dist/core/aiErrorFixer.js.map +1 -0
- package/dist/core/bashCommandGuidance.d.ts +16 -0
- package/dist/core/bashCommandGuidance.d.ts.map +1 -0
- package/dist/core/bashCommandGuidance.js +40 -0
- package/dist/core/bashCommandGuidance.js.map +1 -0
- package/dist/core/compactionNote.d.ts +13 -0
- package/dist/core/compactionNote.d.ts.map +1 -0
- package/dist/core/compactionNote.js +13 -0
- package/dist/core/compactionNote.js.map +1 -0
- package/dist/core/constants.d.ts +31 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +62 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/contextManager.d.ts +271 -0
- package/dist/core/contextManager.d.ts.map +1 -0
- package/dist/core/contextManager.js +1076 -0
- package/dist/core/contextManager.js.map +1 -0
- package/dist/core/contextUsage.d.ts +28 -0
- package/dist/core/contextUsage.d.ts.map +1 -0
- package/dist/core/contextUsage.js +62 -0
- package/dist/core/contextUsage.js.map +1 -0
- package/dist/core/contextWindow.d.ts +42 -0
- package/dist/core/contextWindow.d.ts.map +1 -0
- package/dist/core/contextWindow.js +127 -0
- package/dist/core/contextWindow.js.map +1 -0
- package/dist/core/customCommands.d.ts +19 -0
- package/dist/core/customCommands.d.ts.map +1 -0
- package/dist/core/customCommands.js +85 -0
- package/dist/core/customCommands.js.map +1 -0
- package/dist/core/diffPanel.d.ts +30 -0
- package/dist/core/diffPanel.d.ts.map +1 -0
- package/dist/core/diffPanel.js +48 -0
- package/dist/core/diffPanel.js.map +1 -0
- package/dist/core/errorClassification.d.ts +44 -0
- package/dist/core/errorClassification.d.ts.map +1 -0
- package/dist/core/errorClassification.js +333 -0
- package/dist/core/errorClassification.js.map +1 -0
- package/dist/core/errors/apiKeyErrors.d.ts +11 -0
- package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
- package/dist/core/errors/apiKeyErrors.js +159 -0
- package/dist/core/errors/apiKeyErrors.js.map +1 -0
- package/dist/core/errors/errorTypes.d.ts +111 -0
- package/dist/core/errors/errorTypes.d.ts.map +1 -0
- package/dist/core/errors/errorTypes.js +345 -0
- package/dist/core/errors/errorTypes.js.map +1 -0
- package/dist/core/errors/index.d.ts +50 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +156 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/networkErrors.d.ts +14 -0
- package/dist/core/errors/networkErrors.d.ts.map +1 -0
- package/dist/core/errors/networkErrors.js +53 -0
- package/dist/core/errors/networkErrors.js.map +1 -0
- package/dist/core/errors/safetyValidator.d.ts +109 -0
- package/dist/core/errors/safetyValidator.d.ts.map +1 -0
- package/dist/core/errors/safetyValidator.js +272 -0
- package/dist/core/errors/safetyValidator.js.map +1 -0
- package/dist/core/errors.d.ts +4 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +33 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/failureRegistry.d.ts +30 -0
- package/dist/core/failureRegistry.d.ts.map +1 -0
- package/dist/core/failureRegistry.js +74 -0
- package/dist/core/failureRegistry.js.map +1 -0
- package/dist/core/fileMentions.d.ts +40 -0
- package/dist/core/fileMentions.d.ts.map +1 -0
- package/dist/core/fileMentions.js +136 -0
- package/dist/core/fileMentions.js.map +1 -0
- package/dist/core/finalResponseFormatter.d.ts +10 -0
- package/dist/core/finalResponseFormatter.d.ts.map +1 -0
- package/dist/core/finalResponseFormatter.js +14 -0
- package/dist/core/finalResponseFormatter.js.map +1 -0
- package/dist/core/guardrails.d.ts +146 -0
- package/dist/core/guardrails.d.ts.map +1 -0
- package/dist/core/guardrails.js +361 -0
- package/dist/core/guardrails.js.map +1 -0
- package/dist/core/hitl.d.ts +119 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js +396 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/hooks.d.ts +95 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +236 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/hostedAuth.d.ts +88 -0
- package/dist/core/hostedAuth.d.ts.map +1 -0
- package/dist/core/hostedAuth.js +219 -0
- package/dist/core/hostedAuth.js.map +1 -0
- package/dist/core/inputProtection.d.ts +122 -0
- package/dist/core/inputProtection.d.ts.map +1 -0
- package/dist/core/inputProtection.js +422 -0
- package/dist/core/inputProtection.js.map +1 -0
- package/dist/core/modelDiscovery.d.ts +102 -0
- package/dist/core/modelDiscovery.d.ts.map +1 -0
- package/dist/core/modelDiscovery.js +416 -0
- package/dist/core/modelDiscovery.js.map +1 -0
- package/dist/core/multilinePasteHandler.d.ts +35 -0
- package/dist/core/multilinePasteHandler.d.ts.map +1 -0
- package/dist/core/multilinePasteHandler.js +81 -0
- package/dist/core/multilinePasteHandler.js.map +1 -0
- package/dist/core/permissionMode.d.ts +40 -0
- package/dist/core/permissionMode.d.ts.map +1 -0
- package/dist/core/permissionMode.js +86 -0
- package/dist/core/permissionMode.js.map +1 -0
- package/dist/core/postWriteDiagnostics.d.ts +32 -0
- package/dist/core/postWriteDiagnostics.d.ts.map +1 -0
- package/dist/core/postWriteDiagnostics.js +127 -0
- package/dist/core/postWriteDiagnostics.js.map +1 -0
- package/dist/core/preferences.d.ts +66 -0
- package/dist/core/preferences.d.ts.map +1 -0
- package/dist/core/preferences.js +310 -0
- package/dist/core/preferences.js.map +1 -0
- package/dist/core/quota.d.ts +61 -0
- package/dist/core/quota.d.ts.map +1 -0
- package/dist/core/quota.js +104 -0
- package/dist/core/quota.js.map +1 -0
- package/dist/core/quotaErrors.d.ts +42 -0
- package/dist/core/quotaErrors.d.ts.map +1 -0
- package/dist/core/quotaErrors.js +86 -0
- package/dist/core/quotaErrors.js.map +1 -0
- package/dist/core/refusalDetection.d.ts +2 -0
- package/dist/core/refusalDetection.d.ts.map +1 -0
- package/dist/core/refusalDetection.js +51 -0
- package/dist/core/refusalDetection.js.map +1 -0
- package/dist/core/relativeTime.d.ts +8 -0
- package/dist/core/relativeTime.d.ts.map +1 -0
- package/dist/core/relativeTime.js +29 -0
- package/dist/core/relativeTime.js.map +1 -0
- package/dist/core/resultVerification.d.ts +48 -0
- package/dist/core/resultVerification.d.ts.map +1 -0
- package/dist/core/resultVerification.js +127 -0
- package/dist/core/resultVerification.js.map +1 -0
- package/dist/core/rewind.d.ts +14 -0
- package/dist/core/rewind.d.ts.map +1 -0
- package/dist/core/rewind.js +25 -0
- package/dist/core/rewind.js.map +1 -0
- package/dist/core/schemaValidator.d.ts +49 -0
- package/dist/core/schemaValidator.d.ts.map +1 -0
- package/dist/core/schemaValidator.js +234 -0
- package/dist/core/schemaValidator.js.map +1 -0
- package/dist/core/secretStore.d.ts +59 -0
- package/dist/core/secretStore.d.ts.map +1 -0
- package/dist/core/secretStore.js +278 -0
- package/dist/core/secretStore.js.map +1 -0
- package/dist/core/sessionStorage.d.ts +10 -0
- package/dist/core/sessionStorage.d.ts.map +1 -0
- package/dist/core/sessionStorage.js +46 -0
- package/dist/core/sessionStorage.js.map +1 -0
- package/dist/core/sessionStore.d.ts +35 -0
- package/dist/core/sessionStore.d.ts.map +1 -0
- package/dist/core/sessionStore.js +190 -0
- package/dist/core/sessionStore.js.map +1 -0
- package/dist/core/shutdown.d.ts +34 -0
- package/dist/core/shutdown.d.ts.map +1 -0
- package/dist/core/shutdown.js +186 -0
- package/dist/core/shutdown.js.map +1 -0
- package/dist/core/slashCommands.d.ts +38 -0
- package/dist/core/slashCommands.d.ts.map +1 -0
- package/dist/core/slashCommands.js +72 -0
- package/dist/core/slashCommands.js.map +1 -0
- package/dist/core/subAgentNote.d.ts +15 -0
- package/dist/core/subAgentNote.d.ts.map +1 -0
- package/dist/core/subAgentNote.js +16 -0
- package/dist/core/subAgentNote.js.map +1 -0
- package/dist/core/sudoPasswordManager.d.ts +52 -0
- package/dist/core/sudoPasswordManager.d.ts.map +1 -0
- package/dist/core/sudoPasswordManager.js +115 -0
- package/dist/core/sudoPasswordManager.js.map +1 -0
- package/dist/core/taskCompletionDetector.d.ts +117 -0
- package/dist/core/taskCompletionDetector.d.ts.map +1 -0
- package/dist/core/taskCompletionDetector.js +532 -0
- package/dist/core/taskCompletionDetector.js.map +1 -0
- package/dist/core/testFailureMonitor.d.ts +67 -0
- package/dist/core/testFailureMonitor.d.ts.map +1 -0
- package/dist/core/testFailureMonitor.js +262 -0
- package/dist/core/testFailureMonitor.js.map +1 -0
- package/dist/core/thinkingVerbs.d.ts +31 -0
- package/dist/core/thinkingVerbs.d.ts.map +1 -0
- package/dist/core/thinkingVerbs.js +58 -0
- package/dist/core/thinkingVerbs.js.map +1 -0
- package/dist/core/toolPreconditions.d.ts +34 -0
- package/dist/core/toolPreconditions.d.ts.map +1 -0
- package/dist/core/toolPreconditions.js +242 -0
- package/dist/core/toolPreconditions.js.map +1 -0
- package/dist/core/toolRuntime.d.ts +193 -0
- package/dist/core/toolRuntime.d.ts.map +1 -0
- package/dist/core/toolRuntime.js +526 -0
- package/dist/core/toolRuntime.js.map +1 -0
- package/dist/core/turnGovernor.d.ts +63 -0
- package/dist/core/turnGovernor.d.ts.map +1 -0
- package/dist/core/turnGovernor.js +94 -0
- package/dist/core/turnGovernor.js.map +1 -0
- package/dist/core/types/utilityTypes.d.ts +183 -0
- package/dist/core/types/utilityTypes.d.ts.map +1 -0
- package/dist/core/types/utilityTypes.js +273 -0
- package/dist/core/types/utilityTypes.js.map +1 -0
- package/dist/core/types.d.ts +334 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +76 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/updateChecker.d.ts +148 -0
- package/dist/core/updateChecker.d.ts.map +1 -0
- package/dist/core/updateChecker.js +605 -0
- package/dist/core/updateChecker.js.map +1 -0
- package/dist/core/usage.d.ts +28 -0
- package/dist/core/usage.d.ts.map +1 -0
- package/dist/core/usage.js +77 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/headless/interactiveShell.d.ts +47 -0
- package/dist/headless/interactiveShell.d.ts.map +1 -0
- package/dist/headless/interactiveShell.js +2495 -0
- package/dist/headless/interactiveShell.js.map +1 -0
- package/dist/leanAgent.d.ts +73 -0
- package/dist/leanAgent.d.ts.map +1 -0
- package/dist/leanAgent.js +177 -0
- package/dist/leanAgent.js.map +1 -0
- package/dist/plugins/providers/deepseek/index.d.ts +12 -0
- package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
- package/dist/plugins/providers/deepseek/index.js +123 -0
- package/dist/plugins/providers/deepseek/index.js.map +1 -0
- package/dist/plugins/providers/index.d.ts +2 -0
- package/dist/plugins/providers/index.d.ts.map +1 -0
- package/dist/plugins/providers/index.js +10 -0
- package/dist/plugins/providers/index.js.map +1 -0
- package/dist/providers/baseProvider.d.ts +140 -0
- package/dist/providers/baseProvider.d.ts.map +1 -0
- package/dist/providers/baseProvider.js +230 -0
- package/dist/providers/baseProvider.js.map +1 -0
- package/dist/providers/openaiChatCompletionsProvider.d.ts +70 -0
- package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
- package/dist/providers/openaiChatCompletionsProvider.js +971 -0
- package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
- package/dist/providers/providerFactory.d.ts +22 -0
- package/dist/providers/providerFactory.d.ts.map +1 -0
- package/dist/providers/providerFactory.js +25 -0
- package/dist/providers/providerFactory.js.map +1 -0
- package/dist/providers/resilientProvider.d.ts +96 -0
- package/dist/providers/resilientProvider.d.ts.map +1 -0
- package/dist/providers/resilientProvider.js +251 -0
- package/dist/providers/resilientProvider.js.map +1 -0
- package/dist/runtime/agentController.d.ts +137 -0
- package/dist/runtime/agentController.d.ts.map +1 -0
- package/dist/runtime/agentController.js +784 -0
- package/dist/runtime/agentController.js.map +1 -0
- package/dist/runtime/agentHost.d.ts +61 -0
- package/dist/runtime/agentHost.d.ts.map +1 -0
- package/dist/runtime/agentHost.js +158 -0
- package/dist/runtime/agentHost.js.map +1 -0
- package/dist/runtime/agentSession.d.ts +49 -0
- package/dist/runtime/agentSession.d.ts.map +1 -0
- package/dist/runtime/agentSession.js +218 -0
- package/dist/runtime/agentSession.js.map +1 -0
- package/dist/runtime/agentSpawningWiring.d.ts +32 -0
- package/dist/runtime/agentSpawningWiring.d.ts.map +1 -0
- package/dist/runtime/agentSpawningWiring.js +114 -0
- package/dist/runtime/agentSpawningWiring.js.map +1 -0
- package/dist/runtime/node.d.ts +7 -0
- package/dist/runtime/node.d.ts.map +1 -0
- package/dist/runtime/node.js +50 -0
- package/dist/runtime/node.js.map +1 -0
- package/dist/runtime/universal.d.ts +18 -0
- package/dist/runtime/universal.d.ts.map +1 -0
- package/dist/runtime/universal.js +21 -0
- package/dist/runtime/universal.js.map +1 -0
- package/dist/shell/liveStatus.d.ts +27 -0
- package/dist/shell/liveStatus.d.ts.map +1 -0
- package/dist/shell/liveStatus.js +53 -0
- package/dist/shell/liveStatus.js.map +1 -0
- package/dist/shell/systemPrompt.d.ts +12 -0
- package/dist/shell/systemPrompt.d.ts.map +1 -0
- package/dist/shell/systemPrompt.js +16 -0
- package/dist/shell/systemPrompt.js.map +1 -0
- package/dist/shell/toolPresentation.d.ts +54 -0
- package/dist/shell/toolPresentation.d.ts.map +1 -0
- package/dist/shell/toolPresentation.js +334 -0
- package/dist/shell/toolPresentation.js.map +1 -0
- package/dist/tools/bashTools.d.ts +11 -0
- package/dist/tools/bashTools.d.ts.map +1 -0
- package/dist/tools/bashTools.js +785 -0
- package/dist/tools/bashTools.js.map +1 -0
- package/dist/tools/diffUtils.d.ts +43 -0
- package/dist/tools/diffUtils.d.ts.map +1 -0
- package/dist/tools/diffUtils.js +607 -0
- package/dist/tools/diffUtils.js.map +1 -0
- package/dist/tools/editTools.d.ts +29 -0
- package/dist/tools/editTools.d.ts.map +1 -0
- package/dist/tools/editTools.js +792 -0
- package/dist/tools/editTools.js.map +1 -0
- package/dist/tools/fileChangeTracker.d.ts +47 -0
- package/dist/tools/fileChangeTracker.d.ts.map +1 -0
- package/dist/tools/fileChangeTracker.js +154 -0
- package/dist/tools/fileChangeTracker.js.map +1 -0
- package/dist/tools/fileReadTracker.d.ts +69 -0
- package/dist/tools/fileReadTracker.d.ts.map +1 -0
- package/dist/tools/fileReadTracker.js +213 -0
- package/dist/tools/fileReadTracker.js.map +1 -0
- package/dist/tools/fileTools.d.ts +3 -0
- package/dist/tools/fileTools.d.ts.map +1 -0
- package/dist/tools/fileTools.js +389 -0
- package/dist/tools/fileTools.js.map +1 -0
- package/dist/tools/grepTools.d.ts +3 -0
- package/dist/tools/grepTools.d.ts.map +1 -0
- package/dist/tools/grepTools.js +137 -0
- package/dist/tools/grepTools.js.map +1 -0
- package/dist/tools/hitlTools.d.ts +7 -0
- package/dist/tools/hitlTools.d.ts.map +1 -0
- package/dist/tools/hitlTools.js +185 -0
- package/dist/tools/hitlTools.js.map +1 -0
- package/dist/tools/memoryTools.d.ts +27 -0
- package/dist/tools/memoryTools.d.ts.map +1 -0
- package/dist/tools/memoryTools.js +197 -0
- package/dist/tools/memoryTools.js.map +1 -0
- package/dist/tools/notebookTools.d.ts +20 -0
- package/dist/tools/notebookTools.d.ts.map +1 -0
- package/dist/tools/notebookTools.js +140 -0
- package/dist/tools/notebookTools.js.map +1 -0
- package/dist/tools/searchTools.d.ts +12 -0
- package/dist/tools/searchTools.d.ts.map +1 -0
- package/dist/tools/searchTools.js +414 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/skillTools.d.ts +24 -0
- package/dist/tools/skillTools.d.ts.map +1 -0
- package/dist/tools/skillTools.js +140 -0
- package/dist/tools/skillTools.js.map +1 -0
- package/dist/tools/todoTools.d.ts +23 -0
- package/dist/tools/todoTools.d.ts.map +1 -0
- package/dist/tools/todoTools.js +120 -0
- package/dist/tools/todoTools.js.map +1 -0
- package/dist/tools/webTools.d.ts +26 -0
- package/dist/tools/webTools.d.ts.map +1 -0
- package/dist/tools/webTools.js +467 -0
- package/dist/tools/webTools.js.map +1 -0
- package/dist/ui/ink/App.d.ts +53 -0
- package/dist/ui/ink/App.d.ts.map +1 -0
- package/dist/ui/ink/App.js +13 -0
- package/dist/ui/ink/App.js.map +1 -0
- package/dist/ui/ink/ChatStatic.d.ts +30 -0
- package/dist/ui/ink/ChatStatic.d.ts.map +1 -0
- package/dist/ui/ink/ChatStatic.js +83 -0
- package/dist/ui/ink/ChatStatic.js.map +1 -0
- package/dist/ui/ink/InkPromptController.d.ts +321 -0
- package/dist/ui/ink/InkPromptController.d.ts.map +1 -0
- package/dist/ui/ink/InkPromptController.js +667 -0
- package/dist/ui/ink/InkPromptController.js.map +1 -0
- package/dist/ui/ink/Menu.d.ts +21 -0
- package/dist/ui/ink/Menu.d.ts.map +1 -0
- package/dist/ui/ink/Menu.js +61 -0
- package/dist/ui/ink/Menu.js.map +1 -0
- package/dist/ui/ink/Prompt.d.ts +47 -0
- package/dist/ui/ink/Prompt.d.ts.map +1 -0
- package/dist/ui/ink/Prompt.js +571 -0
- package/dist/ui/ink/Prompt.js.map +1 -0
- package/dist/ui/ink/StatusLine.d.ts +35 -0
- package/dist/ui/ink/StatusLine.d.ts.map +1 -0
- package/dist/ui/ink/StatusLine.js +66 -0
- package/dist/ui/ink/StatusLine.js.map +1 -0
- package/dist/ui/ink/pasteBuffer.d.ts +44 -0
- package/dist/ui/ink/pasteBuffer.d.ts.map +1 -0
- package/dist/ui/ink/pasteBuffer.js +73 -0
- package/dist/ui/ink/pasteBuffer.js.map +1 -0
- package/dist/ui/theme.d.ts +351 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +435 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/analytics.d.ts +2 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +51 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/asyncUtils.d.ts +95 -0
- package/dist/utils/asyncUtils.d.ts.map +1 -0
- package/dist/utils/asyncUtils.js +286 -0
- package/dist/utils/asyncUtils.js.map +1 -0
- package/dist/utils/debugLogger.d.ts +6 -0
- package/dist/utils/debugLogger.d.ts.map +1 -0
- package/dist/utils/debugLogger.js +39 -0
- package/dist/utils/debugLogger.js.map +1 -0
- package/dist/utils/errorUtils.d.ts +12 -0
- package/dist/utils/errorUtils.d.ts.map +1 -0
- package/dist/utils/errorUtils.js +83 -0
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +10 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +78 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/packageInfo.d.ts +14 -0
- package/dist/utils/packageInfo.d.ts.map +1 -0
- package/dist/utils/packageInfo.js +45 -0
- package/dist/utils/packageInfo.js.map +1 -0
- package/dist/utils/planFormatter.d.ts +34 -0
- package/dist/utils/planFormatter.d.ts.map +1 -0
- package/dist/utils/planFormatter.js +141 -0
- package/dist/utils/planFormatter.js.map +1 -0
- package/dist/utils/securityUtils.d.ts +132 -0
- package/dist/utils/securityUtils.d.ts.map +1 -0
- package/dist/utils/securityUtils.js +324 -0
- package/dist/utils/securityUtils.js.map +1 -0
- package/dist/utils/statusReporter.d.ts +6 -0
- package/dist/utils/statusReporter.d.ts.map +1 -0
- package/dist/utils/statusReporter.js +26 -0
- package/dist/utils/statusReporter.js.map +1 -0
- package/dist/workspace.d.ts +8 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +135 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.validator.d.ts +49 -0
- package/dist/workspace.validator.d.ts.map +1 -0
- package/dist/workspace.validator.js +215 -0
- package/dist/workspace.validator.js.map +1 -0
- package/package.json +116 -0
- package/scripts/postinstall.cjs +56 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Protection System - Guards against remote anomalys on chat input
|
|
3
|
+
*
|
|
4
|
+
* Protects against:
|
|
5
|
+
* 1. Remote stdin injection anomalys
|
|
6
|
+
* 2. Automated paste anomalys (superhuman typing speed)
|
|
7
|
+
* 3. Escape sequence injection via clipboard
|
|
8
|
+
* 4. Buffer overflow attempts (massive pastes)
|
|
9
|
+
* 5. Control character injection
|
|
10
|
+
* 6. Unicode-based anomalys (homoglyphs, RTL override)
|
|
11
|
+
* 7. Timing-based anomalys (burst injection)
|
|
12
|
+
*
|
|
13
|
+
* @module inputProtection
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from 'events';
|
|
16
|
+
/** Input validation result */
|
|
17
|
+
export interface InputValidation {
|
|
18
|
+
allowed: boolean;
|
|
19
|
+
sanitized: string;
|
|
20
|
+
blocked: boolean;
|
|
21
|
+
reason?: string;
|
|
22
|
+
anomalyType?: InputAnomalyType;
|
|
23
|
+
riskScore: number;
|
|
24
|
+
}
|
|
25
|
+
/** Types of input anomalys */
|
|
26
|
+
export type InputAnomalyType = 'automated_injection' | 'escape_injection' | 'control_injection' | 'overflow_attempt' | 'unicode_anomaly' | 'timing_burst' | 'remote_paste' | 'stdin_hijack';
|
|
27
|
+
/** Input protection configuration */
|
|
28
|
+
export interface InputProtectionConfig {
|
|
29
|
+
/** Maximum characters per second (human ~12 CPS, paste unlimited) */
|
|
30
|
+
maxCharactersPerSecond?: number;
|
|
31
|
+
/** Maximum paste size in characters */
|
|
32
|
+
maxPasteSize?: number;
|
|
33
|
+
/** Maximum total buffer size */
|
|
34
|
+
maxBufferSize?: number;
|
|
35
|
+
/** Enable timing-based anomaly detection */
|
|
36
|
+
detectTimingAnomalys?: boolean;
|
|
37
|
+
/** Minimum interval between keystrokes in ms (human ~50ms+) */
|
|
38
|
+
minKeystrokeInterval?: number;
|
|
39
|
+
/** Maximum burst size before suspicion */
|
|
40
|
+
maxBurstSize?: number;
|
|
41
|
+
/** Enable strict mode (blocks suspicious input instead of sanitizing) */
|
|
42
|
+
strictMode?: boolean;
|
|
43
|
+
/** Verbose logging */
|
|
44
|
+
verbose?: boolean;
|
|
45
|
+
/** Callback on anomaly detection */
|
|
46
|
+
onAnomalyDetected?: (type: InputAnomalyType, details: string) => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Input Protection System
|
|
50
|
+
*/
|
|
51
|
+
export declare class InputProtection extends EventEmitter {
|
|
52
|
+
private config;
|
|
53
|
+
private inputTimings;
|
|
54
|
+
private lastKeystroke;
|
|
55
|
+
private burstCounter;
|
|
56
|
+
private suspicionScore;
|
|
57
|
+
private blockedAnomalys;
|
|
58
|
+
private sanitizedInputs;
|
|
59
|
+
private isInPasteMode;
|
|
60
|
+
private pasteStartTime;
|
|
61
|
+
private readonly dangerousEscapes;
|
|
62
|
+
private readonly dangerousControls;
|
|
63
|
+
private readonly unicodeAnomalys;
|
|
64
|
+
constructor(config?: InputProtectionConfig);
|
|
65
|
+
/**
|
|
66
|
+
* Validate and sanitize input before it enters the chat buffer
|
|
67
|
+
*/
|
|
68
|
+
validateInput(input: string, isPaste?: boolean): InputValidation;
|
|
69
|
+
/**
|
|
70
|
+
* Enter paste mode (more lenient validation)
|
|
71
|
+
*/
|
|
72
|
+
enterPasteMode(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Exit paste mode
|
|
75
|
+
*/
|
|
76
|
+
exitPasteMode(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Check if currently in paste mode
|
|
79
|
+
*/
|
|
80
|
+
isPasting(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Validate a complete prompt before submission
|
|
83
|
+
*/
|
|
84
|
+
validatePromptSubmission(prompt: string): InputValidation;
|
|
85
|
+
/**
|
|
86
|
+
* Reset protection state (e.g., after idle period)
|
|
87
|
+
*/
|
|
88
|
+
reset(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get protection statistics
|
|
91
|
+
*/
|
|
92
|
+
getStats(): {
|
|
93
|
+
blockedAnomalys: number;
|
|
94
|
+
sanitizedInputs: number;
|
|
95
|
+
currentSuspicion: number;
|
|
96
|
+
currentCPS: number;
|
|
97
|
+
};
|
|
98
|
+
private checkEscapeSequences;
|
|
99
|
+
private checkControlCharacters;
|
|
100
|
+
private checkUnicodeAnomalys;
|
|
101
|
+
private cleanOldTimings;
|
|
102
|
+
private getRecentCharCount;
|
|
103
|
+
private calculateCPS;
|
|
104
|
+
private log;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Initialize global input protection (singleton)
|
|
108
|
+
*/
|
|
109
|
+
export declare function initializeInputProtection(config?: InputProtectionConfig): InputProtection;
|
|
110
|
+
/**
|
|
111
|
+
* Get input protection instance
|
|
112
|
+
*/
|
|
113
|
+
export declare function getInputProtection(): InputProtection | null;
|
|
114
|
+
/**
|
|
115
|
+
* Quick validate function for input
|
|
116
|
+
*/
|
|
117
|
+
export declare function validateChatInput(input: string, isPaste?: boolean): InputValidation;
|
|
118
|
+
/**
|
|
119
|
+
* Validate final prompt before submission
|
|
120
|
+
*/
|
|
121
|
+
export declare function validatePromptSubmit(prompt: string): InputValidation;
|
|
122
|
+
//# sourceMappingURL=inputProtection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputProtection.d.ts","sourceRoot":"","sources":["../../src/core/inputProtection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Protection System - Guards against remote anomalys on chat input
|
|
3
|
+
*
|
|
4
|
+
* Protects against:
|
|
5
|
+
* 1. Remote stdin injection anomalys
|
|
6
|
+
* 2. Automated paste anomalys (superhuman typing speed)
|
|
7
|
+
* 3. Escape sequence injection via clipboard
|
|
8
|
+
* 4. Buffer overflow attempts (massive pastes)
|
|
9
|
+
* 5. Control character injection
|
|
10
|
+
* 6. Unicode-based anomalys (homoglyphs, RTL override)
|
|
11
|
+
* 7. Timing-based anomalys (burst injection)
|
|
12
|
+
*
|
|
13
|
+
* @module inputProtection
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from 'events';
|
|
16
|
+
import { reportStatus } from '../utils/statusReporter.js';
|
|
17
|
+
/** Singleton instance */
|
|
18
|
+
let inputProtectionInstance = null;
|
|
19
|
+
/**
|
|
20
|
+
* Input Protection System
|
|
21
|
+
*/
|
|
22
|
+
export class InputProtection extends EventEmitter {
|
|
23
|
+
config;
|
|
24
|
+
inputTimings = [];
|
|
25
|
+
lastKeystroke = 0;
|
|
26
|
+
burstCounter = 0;
|
|
27
|
+
suspicionScore = 0;
|
|
28
|
+
blockedAnomalys = 0;
|
|
29
|
+
sanitizedInputs = 0;
|
|
30
|
+
isInPasteMode = false;
|
|
31
|
+
pasteStartTime = 0;
|
|
32
|
+
// Dangerous escape sequences to block
|
|
33
|
+
dangerousEscapes = [
|
|
34
|
+
/\x1b\][0-9]+;/, // OSC sequences (can change terminal title, etc.)
|
|
35
|
+
/\x1b[PX^_]/, // DCS, SOS, PM, APC sequences
|
|
36
|
+
/\x1b\[[\d;]*[pls]/i, // Soft reset, various terminal modes
|
|
37
|
+
/\x1b\[\?[\d;]*[hl]/, // Private mode sets (can enable dangerous modes)
|
|
38
|
+
/\x1b\[[\d;]*n/, // Device status queries (info leak)
|
|
39
|
+
/\x1b\[[\d;]*q/, // Keyboard LED control
|
|
40
|
+
/\x1bP[^\\]*\x1b\\/, // Complete DCS sequence
|
|
41
|
+
/\x1b\]0;[^\x07]*\x07/, // Title set sequence
|
|
42
|
+
/\x1b\]52;/, // Clipboard manipulation sequence
|
|
43
|
+
];
|
|
44
|
+
// Dangerous control characters
|
|
45
|
+
dangerousControls = [
|
|
46
|
+
0x00, // NUL - can cause issues
|
|
47
|
+
0x01, // SOH
|
|
48
|
+
0x02, // STX
|
|
49
|
+
0x03, // ETX (Ctrl+C) - allow but track
|
|
50
|
+
0x04, // EOT (Ctrl+D) - allow but track
|
|
51
|
+
0x05, // ENQ
|
|
52
|
+
0x06, // ACK
|
|
53
|
+
0x07, // BEL - annoying beep
|
|
54
|
+
0x0E, // SO - shift out
|
|
55
|
+
0x0F, // SI - shift in
|
|
56
|
+
0x10, // DLE
|
|
57
|
+
0x11, // DC1 (XON)
|
|
58
|
+
0x12, // DC2
|
|
59
|
+
0x13, // DC3 (XOFF)
|
|
60
|
+
0x14, // DC4
|
|
61
|
+
0x15, // NAK
|
|
62
|
+
0x16, // SYN
|
|
63
|
+
0x17, // ETB
|
|
64
|
+
0x18, // CAN
|
|
65
|
+
0x19, // EM
|
|
66
|
+
0x1A, // SUB (Ctrl+Z)
|
|
67
|
+
0x1C, // FS
|
|
68
|
+
0x1D, // GS
|
|
69
|
+
0x1E, // RS
|
|
70
|
+
0x1F, // US
|
|
71
|
+
0x7F, // DEL
|
|
72
|
+
];
|
|
73
|
+
// Unicode anomaly patterns
|
|
74
|
+
unicodeAnomalys = [
|
|
75
|
+
{ pattern: /\u202E/, name: 'RTL override' }, // Right-to-left override
|
|
76
|
+
{ pattern: /\u202D/, name: 'LTR override' }, // Left-to-right override
|
|
77
|
+
{ pattern: /\u202A/, name: 'LTR embedding' }, // Left-to-right embedding
|
|
78
|
+
{ pattern: /\u202B/, name: 'RTL embedding' }, // Right-to-left embedding
|
|
79
|
+
{ pattern: /\u202C/, name: 'Pop direction' }, // Pop directional formatting
|
|
80
|
+
{ pattern: /\u2066/, name: 'LTR isolate' }, // Left-to-right isolate
|
|
81
|
+
{ pattern: /\u2067/, name: 'RTL isolate' }, // Right-to-left isolate
|
|
82
|
+
{ pattern: /\u2068/, name: 'First strong isolate' },
|
|
83
|
+
{ pattern: /\u2069/, name: 'Pop isolate' }, // Pop directional isolate
|
|
84
|
+
{ pattern: /\u200E/, name: 'LTR mark' }, // Left-to-right mark
|
|
85
|
+
{ pattern: /\u200F/, name: 'RTL mark' }, // Right-to-left mark
|
|
86
|
+
{ pattern: /\uFEFF/, name: 'BOM' }, // Byte order mark
|
|
87
|
+
{ pattern: /[\u200B-\u200D]/, name: 'Zero-width chars' }, // Zero-width spaces/joiners
|
|
88
|
+
];
|
|
89
|
+
constructor(config = {}) {
|
|
90
|
+
super();
|
|
91
|
+
this.config = {
|
|
92
|
+
maxCharactersPerSecond: config.maxCharactersPerSecond ?? 500, // Allow fast paste
|
|
93
|
+
maxPasteSize: config.maxPasteSize ?? 100000, // 100KB max paste
|
|
94
|
+
maxBufferSize: config.maxBufferSize ?? 500000, // 500KB max buffer
|
|
95
|
+
detectTimingAnomalys: config.detectTimingAnomalys ?? true,
|
|
96
|
+
minKeystrokeInterval: config.minKeystrokeInterval ?? 5, // 5ms minimum (200 CPS)
|
|
97
|
+
maxBurstSize: config.maxBurstSize ?? 1000, // Chars before suspicion
|
|
98
|
+
strictMode: config.strictMode ?? false,
|
|
99
|
+
verbose: config.verbose ?? false,
|
|
100
|
+
onAnomalyDetected: config.onAnomalyDetected ?? (() => { }),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validate and sanitize input before it enters the chat buffer
|
|
105
|
+
*/
|
|
106
|
+
validateInput(input, isPaste = false) {
|
|
107
|
+
const now = Date.now();
|
|
108
|
+
let sanitized = input;
|
|
109
|
+
let blocked = false;
|
|
110
|
+
let reason;
|
|
111
|
+
let anomalyType;
|
|
112
|
+
let riskScore = 0;
|
|
113
|
+
// Track timing
|
|
114
|
+
this.inputTimings.push({ timestamp: now, charCount: input.length });
|
|
115
|
+
this.cleanOldTimings();
|
|
116
|
+
// === Size validation ===
|
|
117
|
+
if (isPaste && input.length > this.config.maxPasteSize) {
|
|
118
|
+
riskScore += 30;
|
|
119
|
+
if (this.config.strictMode) {
|
|
120
|
+
blocked = true;
|
|
121
|
+
reason = `Paste size ${input.length} exceeds limit ${this.config.maxPasteSize}`;
|
|
122
|
+
anomalyType = 'overflow_attempt';
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
sanitized = input.slice(0, this.config.maxPasteSize);
|
|
126
|
+
reason = `Truncated paste from ${input.length} to ${this.config.maxPasteSize}`;
|
|
127
|
+
}
|
|
128
|
+
this.sanitizedInputs++;
|
|
129
|
+
}
|
|
130
|
+
// === Timing analysis ===
|
|
131
|
+
if (this.config.detectTimingAnomalys && !isPaste) {
|
|
132
|
+
const interval = now - this.lastKeystroke;
|
|
133
|
+
if (interval > 0 && interval < this.config.minKeystrokeInterval) {
|
|
134
|
+
// Suspiciously fast keystrokes
|
|
135
|
+
this.suspicionScore += 5;
|
|
136
|
+
riskScore += 10;
|
|
137
|
+
if (this.suspicionScore > 50) {
|
|
138
|
+
anomalyType = 'automated_injection';
|
|
139
|
+
reason = `Automated input detected (${Math.round(1000 / interval)} CPS)`;
|
|
140
|
+
this.log(`Suspicion score: ${this.suspicionScore}, interval: ${interval}ms`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Normal typing - decrease suspicion
|
|
145
|
+
this.suspicionScore = Math.max(0, this.suspicionScore - 1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.lastKeystroke = now;
|
|
149
|
+
// === Burst detection ===
|
|
150
|
+
const recentChars = this.getRecentCharCount(100); // Last 100ms
|
|
151
|
+
if (recentChars > this.config.maxBurstSize) {
|
|
152
|
+
this.burstCounter++;
|
|
153
|
+
riskScore += 20;
|
|
154
|
+
if (this.burstCounter > 3) {
|
|
155
|
+
anomalyType = 'timing_burst';
|
|
156
|
+
reason = `Burst injection detected (${recentChars} chars in 100ms)`;
|
|
157
|
+
if (this.config.strictMode) {
|
|
158
|
+
blocked = true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
this.burstCounter = Math.max(0, this.burstCounter - 1);
|
|
164
|
+
}
|
|
165
|
+
// === Escape sequence validation ===
|
|
166
|
+
const escapeResult = this.checkEscapeSequences(sanitized);
|
|
167
|
+
if (escapeResult.found) {
|
|
168
|
+
riskScore += 40;
|
|
169
|
+
anomalyType = 'escape_injection';
|
|
170
|
+
reason = `Dangerous escape sequence: ${escapeResult.type}`;
|
|
171
|
+
sanitized = escapeResult.sanitized;
|
|
172
|
+
this.sanitizedInputs++;
|
|
173
|
+
if (this.config.strictMode) {
|
|
174
|
+
blocked = true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// === Control character validation ===
|
|
178
|
+
const controlResult = this.checkControlCharacters(sanitized);
|
|
179
|
+
if (controlResult.found) {
|
|
180
|
+
riskScore += 15;
|
|
181
|
+
if (!anomalyType) {
|
|
182
|
+
anomalyType = 'control_injection';
|
|
183
|
+
reason = `Control characters detected: ${controlResult.chars.join(', ')}`;
|
|
184
|
+
}
|
|
185
|
+
sanitized = controlResult.sanitized;
|
|
186
|
+
this.sanitizedInputs++;
|
|
187
|
+
}
|
|
188
|
+
// === Unicode anomaly detection ===
|
|
189
|
+
const unicodeResult = this.checkUnicodeAnomalys(sanitized);
|
|
190
|
+
if (unicodeResult.found) {
|
|
191
|
+
riskScore += 30;
|
|
192
|
+
if (!anomalyType) {
|
|
193
|
+
anomalyType = 'unicode_anomaly';
|
|
194
|
+
reason = `Unicode anomaly: ${unicodeResult.type}`;
|
|
195
|
+
}
|
|
196
|
+
sanitized = unicodeResult.sanitized;
|
|
197
|
+
this.sanitizedInputs++;
|
|
198
|
+
}
|
|
199
|
+
// === Rate limiting check ===
|
|
200
|
+
const cps = this.calculateCPS();
|
|
201
|
+
if (cps > this.config.maxCharactersPerSecond && !isPaste) {
|
|
202
|
+
riskScore += 25;
|
|
203
|
+
if (!anomalyType) {
|
|
204
|
+
anomalyType = 'automated_injection';
|
|
205
|
+
reason = `Rate limit exceeded: ${Math.round(cps)} CPS`;
|
|
206
|
+
}
|
|
207
|
+
if (this.config.strictMode && cps > this.config.maxCharactersPerSecond * 2) {
|
|
208
|
+
blocked = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Log anomaly detection
|
|
212
|
+
if (anomalyType && riskScore > 30) {
|
|
213
|
+
this.blockedAnomalys++;
|
|
214
|
+
this.config.onAnomalyDetected?.(anomalyType, reason || 'Unknown');
|
|
215
|
+
this.emit('anomaly_detected', { type: anomalyType, reason, riskScore });
|
|
216
|
+
this.log(`Anomaly detected: ${anomalyType} - ${reason} (risk: ${riskScore})`);
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
allowed: !blocked,
|
|
220
|
+
sanitized: blocked ? '' : sanitized,
|
|
221
|
+
blocked,
|
|
222
|
+
reason,
|
|
223
|
+
anomalyType,
|
|
224
|
+
riskScore,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Enter paste mode (more lenient validation)
|
|
229
|
+
*/
|
|
230
|
+
enterPasteMode() {
|
|
231
|
+
this.isInPasteMode = true;
|
|
232
|
+
this.pasteStartTime = Date.now();
|
|
233
|
+
this.log('Entered paste mode');
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Exit paste mode
|
|
237
|
+
*/
|
|
238
|
+
exitPasteMode() {
|
|
239
|
+
const duration = Date.now() - this.pasteStartTime;
|
|
240
|
+
this.isInPasteMode = false;
|
|
241
|
+
this.log(`Exited paste mode (duration: ${duration}ms)`);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Check if currently in paste mode
|
|
245
|
+
*/
|
|
246
|
+
isPasting() {
|
|
247
|
+
return this.isInPasteMode;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Validate a complete prompt before submission
|
|
251
|
+
*/
|
|
252
|
+
validatePromptSubmission(prompt) {
|
|
253
|
+
// Final validation before sending to AI
|
|
254
|
+
let sanitized = prompt;
|
|
255
|
+
let riskScore = 0;
|
|
256
|
+
let anomalyType;
|
|
257
|
+
let reason;
|
|
258
|
+
// Check total size
|
|
259
|
+
if (prompt.length > this.config.maxBufferSize) {
|
|
260
|
+
riskScore += 50;
|
|
261
|
+
anomalyType = 'overflow_attempt';
|
|
262
|
+
reason = `Prompt exceeds buffer limit`;
|
|
263
|
+
sanitized = prompt.slice(0, this.config.maxBufferSize);
|
|
264
|
+
}
|
|
265
|
+
// Final escape sequence check
|
|
266
|
+
const escapeResult = this.checkEscapeSequences(sanitized);
|
|
267
|
+
if (escapeResult.found) {
|
|
268
|
+
riskScore += 30;
|
|
269
|
+
sanitized = escapeResult.sanitized;
|
|
270
|
+
}
|
|
271
|
+
// Final unicode check
|
|
272
|
+
const unicodeResult = this.checkUnicodeAnomalys(sanitized);
|
|
273
|
+
if (unicodeResult.found) {
|
|
274
|
+
riskScore += 20;
|
|
275
|
+
sanitized = unicodeResult.sanitized;
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
allowed: true,
|
|
279
|
+
sanitized,
|
|
280
|
+
blocked: false,
|
|
281
|
+
reason,
|
|
282
|
+
anomalyType,
|
|
283
|
+
riskScore,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Reset protection state (e.g., after idle period)
|
|
288
|
+
*/
|
|
289
|
+
reset() {
|
|
290
|
+
this.inputTimings = [];
|
|
291
|
+
this.lastKeystroke = 0;
|
|
292
|
+
this.burstCounter = 0;
|
|
293
|
+
this.suspicionScore = 0;
|
|
294
|
+
this.isInPasteMode = false;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get protection statistics
|
|
298
|
+
*/
|
|
299
|
+
getStats() {
|
|
300
|
+
return {
|
|
301
|
+
blockedAnomalys: this.blockedAnomalys,
|
|
302
|
+
sanitizedInputs: this.sanitizedInputs,
|
|
303
|
+
currentSuspicion: this.suspicionScore,
|
|
304
|
+
currentCPS: this.calculateCPS(),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
// === Private helper methods ===
|
|
308
|
+
checkEscapeSequences(input) {
|
|
309
|
+
let sanitized = input;
|
|
310
|
+
let found = false;
|
|
311
|
+
let type;
|
|
312
|
+
for (const pattern of this.dangerousEscapes) {
|
|
313
|
+
if (pattern.test(sanitized)) {
|
|
314
|
+
found = true;
|
|
315
|
+
type = pattern.source;
|
|
316
|
+
sanitized = sanitized.replace(new RegExp(pattern.source, 'g'), '');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return { found, type, sanitized };
|
|
320
|
+
}
|
|
321
|
+
checkControlCharacters(input) {
|
|
322
|
+
const foundChars = [];
|
|
323
|
+
let sanitized = '';
|
|
324
|
+
for (let i = 0; i < input.length; i++) {
|
|
325
|
+
const code = input.charCodeAt(i);
|
|
326
|
+
// Allow normal control characters: Tab (9), Newline (10), Carriage Return (13), Escape (27 - for legit sequences)
|
|
327
|
+
if (code === 9 || code === 10 || code === 13) {
|
|
328
|
+
sanitized += input[i];
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
// Block dangerous control characters
|
|
332
|
+
if (this.dangerousControls.includes(code)) {
|
|
333
|
+
foundChars.push(`0x${code.toString(16).padStart(2, '0')}`);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
sanitized += input[i];
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
found: foundChars.length > 0,
|
|
340
|
+
chars: foundChars,
|
|
341
|
+
sanitized,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
checkUnicodeAnomalys(input) {
|
|
345
|
+
let sanitized = input;
|
|
346
|
+
let found = false;
|
|
347
|
+
let type;
|
|
348
|
+
for (const anomaly of this.unicodeAnomalys) {
|
|
349
|
+
const pattern = typeof anomaly.pattern === 'string'
|
|
350
|
+
? new RegExp(anomaly.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')
|
|
351
|
+
: new RegExp(anomaly.pattern.source, anomaly.pattern.flags.includes("g") ? anomaly.pattern.flags : anomaly.pattern.flags + "g");
|
|
352
|
+
if (pattern.test(sanitized)) {
|
|
353
|
+
found = true;
|
|
354
|
+
type = anomaly.name;
|
|
355
|
+
sanitized = sanitized.replace(pattern, '');
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return { found, type, sanitized };
|
|
359
|
+
}
|
|
360
|
+
cleanOldTimings() {
|
|
361
|
+
const cutoff = Date.now() - 1000; // Keep last 1 second
|
|
362
|
+
this.inputTimings = this.inputTimings.filter(t => t.timestamp > cutoff);
|
|
363
|
+
}
|
|
364
|
+
getRecentCharCount(windowMs) {
|
|
365
|
+
const cutoff = Date.now() - windowMs;
|
|
366
|
+
return this.inputTimings
|
|
367
|
+
.filter(t => t.timestamp > cutoff)
|
|
368
|
+
.reduce((sum, t) => sum + t.charCount, 0);
|
|
369
|
+
}
|
|
370
|
+
calculateCPS() {
|
|
371
|
+
if (this.inputTimings.length < 2)
|
|
372
|
+
return 0;
|
|
373
|
+
const now = Date.now();
|
|
374
|
+
const windowMs = 1000;
|
|
375
|
+
const cutoff = now - windowMs;
|
|
376
|
+
const recentTimings = this.inputTimings.filter(t => t.timestamp > cutoff);
|
|
377
|
+
if (recentTimings.length === 0)
|
|
378
|
+
return 0;
|
|
379
|
+
const totalChars = recentTimings.reduce((sum, t) => sum + t.charCount, 0);
|
|
380
|
+
const timeSpan = now - recentTimings[0].timestamp;
|
|
381
|
+
return timeSpan > 0 ? (totalChars / timeSpan) * 1000 : 0;
|
|
382
|
+
}
|
|
383
|
+
log(message) {
|
|
384
|
+
if (this.config.verbose || process.env['TRENCHWORK_DEBUG']) {
|
|
385
|
+
reportStatus(`[InputProtection] ${message}`);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Initialize global input protection (singleton)
|
|
391
|
+
*/
|
|
392
|
+
export function initializeInputProtection(config) {
|
|
393
|
+
if (!inputProtectionInstance) {
|
|
394
|
+
inputProtectionInstance = new InputProtection(config);
|
|
395
|
+
}
|
|
396
|
+
return inputProtectionInstance;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get input protection instance
|
|
400
|
+
*/
|
|
401
|
+
export function getInputProtection() {
|
|
402
|
+
return inputProtectionInstance;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Quick validate function for input
|
|
406
|
+
*/
|
|
407
|
+
export function validateChatInput(input, isPaste = false) {
|
|
408
|
+
const protection = inputProtectionInstance ?? new InputProtection();
|
|
409
|
+
return protection.validateInput(input, isPaste);
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Validate final prompt before submission
|
|
413
|
+
*/
|
|
414
|
+
export function validatePromptSubmit(prompt) {
|
|
415
|
+
const protection = inputProtectionInstance ?? new InputProtection();
|
|
416
|
+
return protection.validatePromptSubmission(prompt);
|
|
417
|
+
}
|
|
418
|
+
// Auto-initialize if environment variable is set
|
|
419
|
+
if (process.env['TRENCHWORK_INPUT_PROTECTION'] === '1' || process.env['TRENCHWORK_PROTECTED_MODE'] === '1') {
|
|
420
|
+
initializeInputProtection({ verbose: process.env['TRENCHWORK_DEBUG'] === '1' });
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=inputProtection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputProtection.js","sourceRoot":"","sources":["../../src/core/inputProtection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model discovery system for auto-detecting new models from providers.
|
|
3
|
+
*
|
|
4
|
+
* This module queries provider APIs to discover available models and caches
|
|
5
|
+
* them for use alongside the static model schema. It never modifies the
|
|
6
|
+
* static schema - discoveries are stored separately and merged at runtime.
|
|
7
|
+
*/
|
|
8
|
+
import type { ProviderId } from './types.js';
|
|
9
|
+
import type { ModelConfig } from './agentSchemaLoader.js';
|
|
10
|
+
/**
|
|
11
|
+
* Infer provider from a model identifier.
|
|
12
|
+
*/
|
|
13
|
+
export declare function inferProviderFromModelId(modelId: string | null | undefined): ProviderId | null;
|
|
14
|
+
/**
|
|
15
|
+
* Model discovery result for a single provider
|
|
16
|
+
*/
|
|
17
|
+
export interface ProviderDiscoveryResult {
|
|
18
|
+
provider: ProviderId;
|
|
19
|
+
success: boolean;
|
|
20
|
+
models: ModelConfig[];
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Complete discovery result
|
|
25
|
+
*/
|
|
26
|
+
export interface DiscoveryResult {
|
|
27
|
+
success: boolean;
|
|
28
|
+
timestamp: string;
|
|
29
|
+
results: ProviderDiscoveryResult[];
|
|
30
|
+
totalModelsDiscovered: number;
|
|
31
|
+
errors: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get cached discovered models
|
|
35
|
+
*/
|
|
36
|
+
export declare function getCachedDiscoveredModels(): ModelConfig[];
|
|
37
|
+
/**
|
|
38
|
+
* Discover models from all configured providers
|
|
39
|
+
*/
|
|
40
|
+
export declare function discoverAllModels(): Promise<DiscoveryResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Clear the discovered models cache
|
|
43
|
+
*/
|
|
44
|
+
export declare function clearDiscoveredModelsCache(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Provider configuration info
|
|
47
|
+
*/
|
|
48
|
+
export interface ProviderInfo {
|
|
49
|
+
id: ProviderId;
|
|
50
|
+
name: string;
|
|
51
|
+
envVar: string;
|
|
52
|
+
configured: boolean;
|
|
53
|
+
latestModel: string;
|
|
54
|
+
models?: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sort models by priority (best first)
|
|
58
|
+
*/
|
|
59
|
+
export declare function sortModelsByPriority(provider: ProviderId, models: string[]): string[];
|
|
60
|
+
/**
|
|
61
|
+
* Get the best/latest model for a provider
|
|
62
|
+
*/
|
|
63
|
+
export declare function getBestModel(provider: ProviderId, models: string[]): string;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a provider is configured (has API key or is accessible)
|
|
66
|
+
*/
|
|
67
|
+
export declare function isProviderConfigured(providerId: ProviderId): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get all providers with their configuration status
|
|
70
|
+
*/
|
|
71
|
+
export declare function getProvidersStatus(): ProviderInfo[];
|
|
72
|
+
/**
|
|
73
|
+
* Get list of configured providers (with valid API keys)
|
|
74
|
+
*/
|
|
75
|
+
export declare function getConfiguredProviders(): ProviderInfo[];
|
|
76
|
+
/**
|
|
77
|
+
* Get list of unconfigured providers
|
|
78
|
+
*/
|
|
79
|
+
export declare function getUnconfiguredProviders(): ProviderInfo[];
|
|
80
|
+
/**
|
|
81
|
+
* Get the first available provider (for auto-selection)
|
|
82
|
+
*/
|
|
83
|
+
export declare function getFirstAvailableProvider(): ProviderInfo | null;
|
|
84
|
+
/**
|
|
85
|
+
* Get latest model for a provider from cache or defaults
|
|
86
|
+
*/
|
|
87
|
+
export declare function getLatestModelForProvider(providerId: ProviderId): string;
|
|
88
|
+
/**
|
|
89
|
+
* Quick provider availability check result
|
|
90
|
+
*/
|
|
91
|
+
export interface QuickProviderStatus {
|
|
92
|
+
provider: ProviderId;
|
|
93
|
+
available: boolean;
|
|
94
|
+
latestModel: string;
|
|
95
|
+
error?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Quickly check if providers are available by querying their APIs
|
|
99
|
+
* Returns actual latest models from each provider
|
|
100
|
+
*/
|
|
101
|
+
export declare function quickCheckProviders(): Promise<QuickProviderStatus[]>;
|
|
102
|
+
//# sourceMappingURL=modelDiscovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelDiscovery.d.ts","sourceRoot":"","sources":["../../src/core/modelDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA4B1D;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAS9F;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,WAAW,EAAE,CAqBzD;AA+DD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC,CAsFlE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAQjD;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAuDD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMrF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAiBpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,EAAE,CAiBnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,EAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,GAAG,IAAI,CAc/D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAaxE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0BD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA4C1E"}
|