@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,526 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
2
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
|
+
import { isAbsolute, resolve as resolvePath } from 'node:path';
|
|
4
|
+
import { ToolArgumentValidationError, coerceToolArguments, validateToolArguments, } from './schemaValidator.js';
|
|
5
|
+
import { validateToolPreconditions, validateAIFlowPatterns, EDIT_WITHOUT_READ } from './toolPreconditions.js';
|
|
6
|
+
import { safeTruncate } from './resultVerification.js';
|
|
7
|
+
import { logDebug } from '../utils/debugLogger.js';
|
|
8
|
+
import { loadHooksConfig, runPreToolUseHooks, runPostToolUseHooks } from './hooks.js';
|
|
9
|
+
import { isAdversarialEnabled, isHighImpactTool, critiqueToolCall, getDefaultCriticProvider } from './adversarial.js';
|
|
10
|
+
import { planModeBlock, shouldSkipPreflight, isEditTool } from './permissionMode.js';
|
|
11
|
+
import { diagnoseWrittenFile, formatDiagnosticBlock } from './postWriteDiagnostics.js';
|
|
12
|
+
/** Resolve the path a write/edit tool just touched, for post-write diagnostics. */
|
|
13
|
+
function pickWrittenPath(args, cwd) {
|
|
14
|
+
const raw = args['file_path'] ?? args['path'] ?? args['filename'];
|
|
15
|
+
if (typeof raw !== 'string' || !raw.trim())
|
|
16
|
+
return null;
|
|
17
|
+
return isAbsolute(raw) ? raw : resolvePath(cwd, raw);
|
|
18
|
+
}
|
|
19
|
+
const toolExecutionContext = new AsyncLocalStorage();
|
|
20
|
+
/**
|
|
21
|
+
* Report incremental progress for the currently executing tool.
|
|
22
|
+
* Tools can call this to surface live status updates (e.g., indexing files).
|
|
23
|
+
*/
|
|
24
|
+
export function reportToolProgress(progress) {
|
|
25
|
+
const context = toolExecutionContext.getStore();
|
|
26
|
+
if (!context?.observer?.onToolProgress) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const current = Number.isFinite(progress.current) ? Math.max(0, progress.current) : 0;
|
|
30
|
+
const total = progress.total !== undefined ? Math.max(current, progress.total) : current;
|
|
31
|
+
try {
|
|
32
|
+
context.observer.onToolProgress(context.call, {
|
|
33
|
+
current,
|
|
34
|
+
total,
|
|
35
|
+
message: progress.message,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Swallow observer errors so they don't break tool execution
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Idempotent tools that can be safely cached
|
|
43
|
+
const CACHEABLE_TOOLS = new Set([
|
|
44
|
+
'Read',
|
|
45
|
+
'read_file',
|
|
46
|
+
'Glob',
|
|
47
|
+
'glob_search',
|
|
48
|
+
'Grep',
|
|
49
|
+
'grep_search',
|
|
50
|
+
'find_definition',
|
|
51
|
+
'analyze_code_quality',
|
|
52
|
+
'extract_exports',
|
|
53
|
+
]);
|
|
54
|
+
function buildOptimizationHint(warning) {
|
|
55
|
+
const code = warning.code;
|
|
56
|
+
const suggestion = warning.suggestion || warning.message;
|
|
57
|
+
switch (code) {
|
|
58
|
+
case 'SEARCH_BROAD_PATTERN':
|
|
59
|
+
case 'SEARCH_CONTEXT_OVERFLOW_RISK':
|
|
60
|
+
return (`\n\n<optimization-hint>\n` +
|
|
61
|
+
`⚡ SEARCH: ${suggestion}\n` +
|
|
62
|
+
`</optimization-hint>`);
|
|
63
|
+
case EDIT_WITHOUT_READ:
|
|
64
|
+
case 'EDIT_PLACEHOLDER':
|
|
65
|
+
return (`\n\n<optimization-hint>\n` +
|
|
66
|
+
`⚡ EDIT: Read the file first to copy exact whitespace. ${suggestion}\n` +
|
|
67
|
+
`</optimization-hint>`);
|
|
68
|
+
case 'NPM_INCOMPLETE_WORKFLOW':
|
|
69
|
+
return (`\n\n<optimization-hint>\n` +
|
|
70
|
+
`⚡ PUBLISH: ${suggestion}\n` +
|
|
71
|
+
`</optimization-hint>`);
|
|
72
|
+
default:
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Type-safe utility functions for tool runtime operations
|
|
78
|
+
*/
|
|
79
|
+
export var ToolRuntimeUtils;
|
|
80
|
+
(function (ToolRuntimeUtils) {
|
|
81
|
+
/**
|
|
82
|
+
* Creates a type-safe tool definition with inferred parameter types
|
|
83
|
+
*/
|
|
84
|
+
function createToolDefinition(definition) {
|
|
85
|
+
return definition;
|
|
86
|
+
}
|
|
87
|
+
ToolRuntimeUtils.createToolDefinition = createToolDefinition;
|
|
88
|
+
/**
|
|
89
|
+
* Creates a type-safe tool suite with inferred tool types
|
|
90
|
+
*/
|
|
91
|
+
function createToolSuite(suite) {
|
|
92
|
+
return suite;
|
|
93
|
+
}
|
|
94
|
+
ToolRuntimeUtils.createToolSuite = createToolSuite;
|
|
95
|
+
/**
|
|
96
|
+
* Type guard to check if a tool definition matches expected parameter schema
|
|
97
|
+
*/
|
|
98
|
+
function isToolDefinition(__tool, expectedSchema) {
|
|
99
|
+
if (!expectedSchema)
|
|
100
|
+
return true;
|
|
101
|
+
// In a real implementation, this would validate against the schema
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
ToolRuntimeUtils.isToolDefinition = isToolDefinition;
|
|
105
|
+
})(ToolRuntimeUtils || (ToolRuntimeUtils = {}));
|
|
106
|
+
export class ToolRuntime {
|
|
107
|
+
registry = new Map();
|
|
108
|
+
registrationOrder = [];
|
|
109
|
+
observer;
|
|
110
|
+
contextManager;
|
|
111
|
+
cache = new Map();
|
|
112
|
+
enableCache;
|
|
113
|
+
cacheTTLMs;
|
|
114
|
+
toolHistory = [];
|
|
115
|
+
maxHistorySize = 50; // Keep last 50 tool calls for AI flow pattern detection
|
|
116
|
+
diffSnapshots = [];
|
|
117
|
+
maxDiffSnapshots = 5; // Keep only the most recent git diff outputs
|
|
118
|
+
maxDiffSnapshotLength = 4000;
|
|
119
|
+
hooks;
|
|
120
|
+
runtimeWorkingDir;
|
|
121
|
+
constructor(baseTools = [], options = {}) {
|
|
122
|
+
this.runtimeWorkingDir = options.workingDir ?? process.cwd();
|
|
123
|
+
this.observer = options.observer ?? null;
|
|
124
|
+
this.contextManager = options.contextManager ?? null;
|
|
125
|
+
this.enableCache = options.enableCache ?? true;
|
|
126
|
+
this.cacheTTLMs = options.cacheTTLMs ?? 5 * 60 * 1000; // 5 minutes default
|
|
127
|
+
// Load hook config eagerly. Hot-reloading on every tool call would
|
|
128
|
+
// give the user faster feedback but at the cost of file I/O on
|
|
129
|
+
// every step — we accept "edit settings → restart CLI" as the
|
|
130
|
+
// tradeoff (matches Claude Code).
|
|
131
|
+
try {
|
|
132
|
+
this.hooks = loadHooksConfig(options.workingDir ?? process.cwd());
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
logDebug('[hooks] config load failed: ' + err.message);
|
|
136
|
+
this.hooks = {};
|
|
137
|
+
}
|
|
138
|
+
if (baseTools.length) {
|
|
139
|
+
this.registerSuite({
|
|
140
|
+
id: 'runtime.core',
|
|
141
|
+
description: 'Core runtime metadata tools',
|
|
142
|
+
tools: baseTools,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
registerSuite(suite) {
|
|
147
|
+
if (!suite?.id?.trim()) {
|
|
148
|
+
throw new Error('Tool suite id cannot be blank.');
|
|
149
|
+
}
|
|
150
|
+
this.unregisterSuite(suite.id);
|
|
151
|
+
for (const definition of suite.tools ?? []) {
|
|
152
|
+
this.addTool(definition, suite.id);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
unregisterSuite(id) {
|
|
156
|
+
if (!id?.trim()) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
for (const [name, record] of this.registry.entries()) {
|
|
160
|
+
if (record.suiteId === id) {
|
|
161
|
+
this.registry.delete(name);
|
|
162
|
+
this.removeFromOrder(name);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
listProviderTools() {
|
|
167
|
+
return this.registrationOrder
|
|
168
|
+
.map((name) => this.registry.get(name))
|
|
169
|
+
.filter((record) => Boolean(record))
|
|
170
|
+
.map(({ definition }) => ({
|
|
171
|
+
name: definition.name,
|
|
172
|
+
description: definition.description,
|
|
173
|
+
...(definition.parameters && { parameters: definition.parameters }),
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
async execute(call, _context) {
|
|
177
|
+
const record = this.registry.get(call.name);
|
|
178
|
+
const rawArgs = normalizeToolArguments(call.arguments);
|
|
179
|
+
const args = coerceToolArguments(record?.definition.parameters, rawArgs);
|
|
180
|
+
const augmentedCall = { ...call, args };
|
|
181
|
+
if (!record) {
|
|
182
|
+
const message = `Tool "${call.name}" is not available.`;
|
|
183
|
+
this.observer?.onToolError?.(augmentedCall, message);
|
|
184
|
+
// Performance monitoring removed - no legacy components
|
|
185
|
+
return message;
|
|
186
|
+
}
|
|
187
|
+
// Check if tool is cacheable
|
|
188
|
+
const isCacheable = record.definition.cacheable ?? CACHEABLE_TOOLS.has(call.name);
|
|
189
|
+
const cacheTtl = typeof record.definition.cacheTtlMs === 'number' && Number.isFinite(record.definition.cacheTtlMs)
|
|
190
|
+
? Math.max(0, Math.floor(record.definition.cacheTtlMs))
|
|
191
|
+
: this.cacheTTLMs;
|
|
192
|
+
const canUseCache = this.enableCache && isCacheable && cacheTtl > 0;
|
|
193
|
+
// Try to get from cache
|
|
194
|
+
if (canUseCache) {
|
|
195
|
+
const cacheKey = this.getCacheKey({ ...call, arguments: args });
|
|
196
|
+
const cached = this.cache.get(cacheKey);
|
|
197
|
+
if (cached && Date.now() - cached.timestamp < cacheTtl) {
|
|
198
|
+
this.observer?.onCacheHit?.(augmentedCall);
|
|
199
|
+
this.observer?.onToolResult?.(augmentedCall, cached.result);
|
|
200
|
+
// Record cache hit as successful execution with 0ms time
|
|
201
|
+
// Performance monitoring removed - no legacy components
|
|
202
|
+
this.recordToolHistory({
|
|
203
|
+
toolName: call.name,
|
|
204
|
+
args,
|
|
205
|
+
timestamp: Date.now(),
|
|
206
|
+
success: true,
|
|
207
|
+
hasOutput: hasNonEmptyOutput(cached.result),
|
|
208
|
+
});
|
|
209
|
+
return cached.result;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
this.observer?.onToolStart?.(augmentedCall);
|
|
213
|
+
// Performance monitoring removed - no legacy components
|
|
214
|
+
try {
|
|
215
|
+
validateToolArguments(record.definition.name, record.definition.parameters, args);
|
|
216
|
+
// Pre-flight AI flow validation - catch common tool usage failures
|
|
217
|
+
const preflightWarnings = validateToolPreconditions(call.name, args);
|
|
218
|
+
for (const warning of preflightWarnings) {
|
|
219
|
+
this.observer?.onToolWarning?.(augmentedCall, warning);
|
|
220
|
+
}
|
|
221
|
+
// Advanced AI flow pattern validation using tool history
|
|
222
|
+
const aiFlowWarnings = validateAIFlowPatterns(call.name, args, this.toolHistory);
|
|
223
|
+
for (const warning of aiFlowWarnings) {
|
|
224
|
+
this.observer?.onToolWarning?.(augmentedCall, warning);
|
|
225
|
+
}
|
|
226
|
+
// Collect optimization hints to inject into result
|
|
227
|
+
const optimizationHints = [];
|
|
228
|
+
const seenOptimizationCodes = new Set();
|
|
229
|
+
for (const warning of [...preflightWarnings, ...aiFlowWarnings]) {
|
|
230
|
+
if (warning.code && seenOptimizationCodes.has(warning.code)) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const hint = buildOptimizationHint(warning);
|
|
234
|
+
if (hint) {
|
|
235
|
+
if (warning.code) {
|
|
236
|
+
seenOptimizationCodes.add(warning.code);
|
|
237
|
+
}
|
|
238
|
+
optimizationHints.push(hint);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// PreToolUse hooks: run user-configured shell commands that
|
|
242
|
+
// can block this tool call. Best-effort — if the hook errors,
|
|
243
|
+
// times out, or returns malformed output, we pass through.
|
|
244
|
+
try {
|
|
245
|
+
const blocked = await runPreToolUseHooks(this.hooks, call.name, args);
|
|
246
|
+
if (blocked) {
|
|
247
|
+
const reason = blocked.reason || 'Blocked by hook';
|
|
248
|
+
const message = `Error: ${call.name} blocked by user hook: ${reason}`;
|
|
249
|
+
this.observer?.onToolError?.(augmentedCall, message);
|
|
250
|
+
this.recordToolHistory({
|
|
251
|
+
toolName: call.name,
|
|
252
|
+
args,
|
|
253
|
+
timestamp: Date.now(),
|
|
254
|
+
success: false,
|
|
255
|
+
hasOutput: false,
|
|
256
|
+
});
|
|
257
|
+
return message;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
// A buggy hook should never crash the agent. Log + continue.
|
|
262
|
+
logDebug('[hooks] PreToolUse error: ' + err.message);
|
|
263
|
+
}
|
|
264
|
+
// Permission mode (Shift+Tab): plan mode is read-only. Any tool that
|
|
265
|
+
// mutates the filesystem, runs a shell command, or commits is blocked
|
|
266
|
+
// here — the one chokepoint every tool flows through, so no alternate
|
|
267
|
+
// call path can bypass it. The block is returned as a normal tool
|
|
268
|
+
// result so the model sees it and can switch to presenting a plan.
|
|
269
|
+
const planBlock = planModeBlock(call.name);
|
|
270
|
+
if (planBlock) {
|
|
271
|
+
this.observer?.onToolError?.(augmentedCall, planBlock);
|
|
272
|
+
this.recordToolHistory({
|
|
273
|
+
toolName: call.name,
|
|
274
|
+
args,
|
|
275
|
+
timestamp: Date.now(),
|
|
276
|
+
success: false,
|
|
277
|
+
hasOutput: false,
|
|
278
|
+
});
|
|
279
|
+
return planBlock;
|
|
280
|
+
}
|
|
281
|
+
// Adversarial pre-flight: critique high-impact (Write/Edit/Bash)
|
|
282
|
+
// calls before they run. Surfaced as a warning, not a hard block —
|
|
283
|
+
// this CLI is intentionally guardrail-free, so the verdict informs
|
|
284
|
+
// rather than halts. Gated by the adversarial flag; read-only tools
|
|
285
|
+
// skip the critic; acceptEdits mode trusts file edits and skips it
|
|
286
|
+
// too; fail-open on any error.
|
|
287
|
+
if (isAdversarialEnabled() && isHighImpactTool(call.name) && !shouldSkipPreflight(call.name)) {
|
|
288
|
+
try {
|
|
289
|
+
const verdict = await critiqueToolCall(await getDefaultCriticProvider(), call.name, args);
|
|
290
|
+
if (verdict.decision === 'block') {
|
|
291
|
+
this.observer?.onToolWarning?.(augmentedCall, `Adversarial pre-flight (${verdict.riskLevel} risk): ${verdict.reason}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
logDebug('[adversarial] pre-flight error: ' + err.message);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const result = await toolExecutionContext.run({ call: augmentedCall, observer: this.observer ?? undefined }, async () => record.definition.handler(args));
|
|
299
|
+
let output = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
300
|
+
// Auto post-write diagnostics: after a successful file edit/write, run a
|
|
301
|
+
// fast file-scoped syntax check on the changed file and feed any failure
|
|
302
|
+
// back to the agent (the way Claude Code surfaces diagnostics on edit) —
|
|
303
|
+
// WITHOUT running the full suite. Skipped under test (keeps the suite
|
|
304
|
+
// fast/deterministic; diagnoseWrittenFile is unit-tested directly).
|
|
305
|
+
if (process.env['NODE_ENV'] !== 'test' && isEditTool(call.name) && !/^error/i.test(output.trim())) {
|
|
306
|
+
try {
|
|
307
|
+
const fp = pickWrittenPath(args, this.runtimeWorkingDir);
|
|
308
|
+
if (fp) {
|
|
309
|
+
const diag = await diagnoseWrittenFile(fp);
|
|
310
|
+
const block = formatDiagnosticBlock(diag);
|
|
311
|
+
if (block)
|
|
312
|
+
output = `${output}${block}`;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
logDebug('[diagnostics] post-write error: ' + err.message);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// PostToolUse hooks: append text from each matching hook so
|
|
320
|
+
// the model sees the augmentation. Useful for "lint after every
|
|
321
|
+
// edit" / "echo every Bash command to a log" patterns.
|
|
322
|
+
try {
|
|
323
|
+
const post = await runPostToolUseHooks(this.hooks, call.name, args, output);
|
|
324
|
+
if (post?.appendToResult) {
|
|
325
|
+
output = `${output}\n\n[hook] ${post.appendToResult}`;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (err) {
|
|
329
|
+
logDebug('[hooks] PostToolUse error: ' + err.message);
|
|
330
|
+
}
|
|
331
|
+
let snapshotCandidate = output;
|
|
332
|
+
// Truncate output if context manager is available
|
|
333
|
+
if (this.contextManager) {
|
|
334
|
+
const truncated = this.contextManager.truncateToolOutput(output, call.name);
|
|
335
|
+
if (truncated.wasTruncated) {
|
|
336
|
+
output = truncated.content;
|
|
337
|
+
// Log truncation for debugging
|
|
338
|
+
if (process.env['DEBUG_CONTEXT']) {
|
|
339
|
+
logDebug(`[Context Manager] Truncated ${call.name} output: ${truncated.originalLength} -> ${truncated.truncatedLength} chars`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
snapshotCandidate = output;
|
|
343
|
+
}
|
|
344
|
+
this.recordDiffSnapshot(args, snapshotCandidate);
|
|
345
|
+
// Cache the result if cacheable
|
|
346
|
+
if (canUseCache) {
|
|
347
|
+
const cacheKey = this.getCacheKey({ ...call, arguments: args });
|
|
348
|
+
this.cache.set(cacheKey, {
|
|
349
|
+
result: output,
|
|
350
|
+
timestamp: Date.now(),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
// Append optimization hints to guide future LLM behavior
|
|
354
|
+
if (optimizationHints.length > 0) {
|
|
355
|
+
output = output + optimizationHints.join('');
|
|
356
|
+
}
|
|
357
|
+
this.observer?.onToolResult?.(augmentedCall, output);
|
|
358
|
+
this.recordToolHistory({
|
|
359
|
+
toolName: call.name,
|
|
360
|
+
args,
|
|
361
|
+
timestamp: Date.now(),
|
|
362
|
+
success: true,
|
|
363
|
+
hasOutput: hasNonEmptyOutput(output),
|
|
364
|
+
});
|
|
365
|
+
// Record successful execution
|
|
366
|
+
// Performance monitoring removed - no legacy components
|
|
367
|
+
return output;
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
let formatted;
|
|
371
|
+
if (error instanceof ToolArgumentValidationError) {
|
|
372
|
+
formatted = error.message;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
376
|
+
formatted = `Failed to run "${call.name}": ${message}`;
|
|
377
|
+
}
|
|
378
|
+
this.observer?.onToolError?.(augmentedCall, formatted);
|
|
379
|
+
this.recordToolHistory({
|
|
380
|
+
toolName: call.name,
|
|
381
|
+
args,
|
|
382
|
+
timestamp: Date.now(),
|
|
383
|
+
success: false,
|
|
384
|
+
hasOutput: hasNonEmptyOutput(formatted),
|
|
385
|
+
error: formatted,
|
|
386
|
+
});
|
|
387
|
+
// Record failed execution - no legacy performance monitoring
|
|
388
|
+
return formatted;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
getCacheKey(call) {
|
|
392
|
+
return `${call.name}:${JSON.stringify(call.arguments)}`;
|
|
393
|
+
}
|
|
394
|
+
clearCache() {
|
|
395
|
+
this.cache.clear();
|
|
396
|
+
}
|
|
397
|
+
getCacheStats() {
|
|
398
|
+
let totalSize = 0;
|
|
399
|
+
for (const entry of this.cache.values()) {
|
|
400
|
+
totalSize += entry.result.length;
|
|
401
|
+
}
|
|
402
|
+
return {
|
|
403
|
+
size: totalSize,
|
|
404
|
+
entries: this.cache.size,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
clearToolHistory() {
|
|
408
|
+
this.toolHistory.length = 0;
|
|
409
|
+
}
|
|
410
|
+
getToolHistory() {
|
|
411
|
+
return this.toolHistory;
|
|
412
|
+
}
|
|
413
|
+
recordToolHistory(entry) {
|
|
414
|
+
this.toolHistory.push(entry);
|
|
415
|
+
if (this.toolHistory.length > this.maxHistorySize) {
|
|
416
|
+
this.toolHistory.shift();
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
clearDiffSnapshots() {
|
|
420
|
+
this.diffSnapshots.length = 0;
|
|
421
|
+
}
|
|
422
|
+
getDiffSnapshots() {
|
|
423
|
+
return this.diffSnapshots;
|
|
424
|
+
}
|
|
425
|
+
addTool(definition, suiteId) {
|
|
426
|
+
if (!definition?.name?.trim()) {
|
|
427
|
+
throw new Error(`Tool names cannot be blank (suite "${suiteId}").`);
|
|
428
|
+
}
|
|
429
|
+
if (this.registry.has(definition.name)) {
|
|
430
|
+
const owner = this.registry.get(definition.name)?.suiteId ?? 'unknown';
|
|
431
|
+
throw new Error(`Tool "${definition.name}" already registered by suite "${owner}".`);
|
|
432
|
+
}
|
|
433
|
+
this.registry.set(definition.name, {
|
|
434
|
+
suiteId,
|
|
435
|
+
definition,
|
|
436
|
+
});
|
|
437
|
+
this.registrationOrder.push(definition.name);
|
|
438
|
+
}
|
|
439
|
+
removeFromOrder(name) {
|
|
440
|
+
const index = this.registrationOrder.indexOf(name);
|
|
441
|
+
if (index >= 0) {
|
|
442
|
+
this.registrationOrder.splice(index, 1);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
recordDiffSnapshot(args, output) {
|
|
446
|
+
const command = this.findGitDiffCommand(args);
|
|
447
|
+
if (!command || !output) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
this.diffSnapshots.push({
|
|
451
|
+
command,
|
|
452
|
+
output: safeTruncate(output, this.maxDiffSnapshotLength, 'git-diff'),
|
|
453
|
+
timestamp: Date.now(),
|
|
454
|
+
});
|
|
455
|
+
if (this.diffSnapshots.length > this.maxDiffSnapshots) {
|
|
456
|
+
this.diffSnapshots.shift();
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
findGitDiffCommand(args) {
|
|
460
|
+
for (const command of this.extractCommands(args)) {
|
|
461
|
+
if (this.isGitDiffCommand(command)) {
|
|
462
|
+
return command;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
extractCommands(args) {
|
|
468
|
+
const commands = [];
|
|
469
|
+
const command = args['command'];
|
|
470
|
+
if (typeof command === 'string' && command.trim()) {
|
|
471
|
+
commands.push(command.trim());
|
|
472
|
+
}
|
|
473
|
+
const commandList = args['commands'];
|
|
474
|
+
if (Array.isArray(commandList)) {
|
|
475
|
+
for (const value of commandList) {
|
|
476
|
+
if (typeof value === 'string' && value.trim()) {
|
|
477
|
+
commands.push(value.trim());
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
return commands;
|
|
482
|
+
}
|
|
483
|
+
isGitDiffCommand(command) {
|
|
484
|
+
return /\bgit\s+(?:--no-pager\s+)?(?:diff|show)\b/i.test(command);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
export function createDefaultToolRuntime(context, toolSuites = [], options = {}) {
|
|
488
|
+
// Start with no default introspection tools - they waste tokens
|
|
489
|
+
// Model knows its capabilities from tool definitions
|
|
490
|
+
const runtime = new ToolRuntime([], options);
|
|
491
|
+
for (const suite of toolSuites) {
|
|
492
|
+
runtime.registerSuite(suite);
|
|
493
|
+
}
|
|
494
|
+
return runtime;
|
|
495
|
+
}
|
|
496
|
+
// Removed unused introspection tools (context_snapshot, capabilities_overview, profile_details)
|
|
497
|
+
// Model already knows capabilities from tool definitions; these just wasted tokens
|
|
498
|
+
function hasNonEmptyOutput(output) {
|
|
499
|
+
return typeof output === 'string' && output.trim().length > 0;
|
|
500
|
+
}
|
|
501
|
+
function normalizeToolArguments(value) {
|
|
502
|
+
if (value instanceof Map) {
|
|
503
|
+
return Object.fromEntries(value.entries());
|
|
504
|
+
}
|
|
505
|
+
if (isRecord(value)) {
|
|
506
|
+
return value;
|
|
507
|
+
}
|
|
508
|
+
if (typeof value === 'string') {
|
|
509
|
+
const trimmed = value.trim();
|
|
510
|
+
if (!trimmed) {
|
|
511
|
+
return {};
|
|
512
|
+
}
|
|
513
|
+
try {
|
|
514
|
+
const parsed = JSON.parse(trimmed);
|
|
515
|
+
return isRecord(parsed) ? parsed : {};
|
|
516
|
+
}
|
|
517
|
+
catch {
|
|
518
|
+
return {};
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return {};
|
|
522
|
+
}
|
|
523
|
+
function isRecord(value) {
|
|
524
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=toolRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolRuntime.js","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn governor — a bounded, stall-aware spine for the auto-continue loop.
|
|
3
|
+
*
|
|
4
|
+
* The auto-continue loop (interactiveShell processPrompt → processPrompt
|
|
5
|
+
* recursion) was UNBOUNDED: an agent that couldn't satisfy the completion
|
|
6
|
+
* heuristic ran forever, re-trying dead ends with no escalation. This caps the
|
|
7
|
+
* turns per user request and detects a stall (the same observable work
|
|
8
|
+
* repeating with no new progress), so the loop yields to the user WITH state
|
|
9
|
+
* instead of thrashing for hours. It also derives the next continuation from
|
|
10
|
+
* the agent's live TODO plan (which the loop previously ignored).
|
|
11
|
+
*
|
|
12
|
+
* Pure + dependency-free so it's unit-testable; the shell instantiates one per
|
|
13
|
+
* user request, resets on a fresh prompt, calls recordTurn() each auto-continue,
|
|
14
|
+
* and breaks on check().stop.
|
|
15
|
+
*/
|
|
16
|
+
export interface TurnMetrics {
|
|
17
|
+
/** tools invoked during the turn */
|
|
18
|
+
toolsUsed: string[];
|
|
19
|
+
/** files written/edited during the turn */
|
|
20
|
+
filesModified: string[];
|
|
21
|
+
/** failing test/build signal in the turn output, or null */
|
|
22
|
+
failingSignal: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface GovernorVerdict {
|
|
25
|
+
stop: boolean;
|
|
26
|
+
reason: 'limit' | 'stall' | null;
|
|
27
|
+
turn: number;
|
|
28
|
+
}
|
|
29
|
+
/** Stable signature of a turn's observable work — the same signature repeating means no progress. */
|
|
30
|
+
export declare function fingerprintTurn(m: TurnMetrics): string;
|
|
31
|
+
export declare class TurnGovernor {
|
|
32
|
+
private turn;
|
|
33
|
+
private fps;
|
|
34
|
+
private readonly max;
|
|
35
|
+
private readonly stallWindow;
|
|
36
|
+
constructor(opts?: {
|
|
37
|
+
maxAutoTurns?: number;
|
|
38
|
+
stallWindow?: number;
|
|
39
|
+
});
|
|
40
|
+
/** A new user request starts a fresh turn budget. */
|
|
41
|
+
reset(): void;
|
|
42
|
+
/** Record one completed auto-continue turn. */
|
|
43
|
+
recordTurn(m: TurnMetrics): void;
|
|
44
|
+
/** Whether the auto-continue loop should stop now, and why. */
|
|
45
|
+
check(): GovernorVerdict;
|
|
46
|
+
get turnCount(): number;
|
|
47
|
+
get maxTurns(): number;
|
|
48
|
+
}
|
|
49
|
+
export interface TodoLike {
|
|
50
|
+
content?: string;
|
|
51
|
+
status?: string;
|
|
52
|
+
activeForm?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Todos still to do (pending or in-progress). */
|
|
55
|
+
export declare function pendingTodos(todos: ReadonlyArray<TodoLike> | null | undefined): TodoLike[];
|
|
56
|
+
/**
|
|
57
|
+
* The next auto-continue prompt derived from the plan — the in-progress item
|
|
58
|
+
* (or first pending). Prefixed IMPORTANT: so the loop treats it as an
|
|
59
|
+
* auto-continue (not a fresh user request) and the no-docs guard holds.
|
|
60
|
+
* Returns null when the plan has no pending work.
|
|
61
|
+
*/
|
|
62
|
+
export declare function nextTodoPrompt(todos: ReadonlyArray<TodoLike> | null | undefined): string | null;
|
|
63
|
+
//# sourceMappingURL=turnGovernor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turnGovernor.d.ts","sourceRoot":"","sources":["../../src/core/turnGovernor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAItD;AASD,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAKtE,qDAAqD;IACrD,KAAK,IAAI,IAAI;IAKb,+CAA+C;IAC/C,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAMhC,+DAA+D;IAC/D,KAAK,IAAI,eAAe;IAiBxB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAKD,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE,CAE1F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO/F"}
|