@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,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TodoWrite / TodoRead tools — Claude-Code-parity task list.
|
|
3
|
+
*
|
|
4
|
+
* The agent uses TodoWrite to track multi-step work. Each call
|
|
5
|
+
* REPLACES the entire list (not append) so the agent owns the full
|
|
6
|
+
* state each turn. TodoRead returns the current list without modifying
|
|
7
|
+
* it, useful at the start of a new turn to check plan state.
|
|
8
|
+
*
|
|
9
|
+
* State is kept per-process (CLI = single process), so a session-long
|
|
10
|
+
* todo list persists across turns until the agent rewrites it.
|
|
11
|
+
*/
|
|
12
|
+
import { formatPlan } from '../utils/planFormatter.js';
|
|
13
|
+
/**
|
|
14
|
+
* Module-scoped state. CLI runs one process per session; the list
|
|
15
|
+
* stays in memory until the process exits or the agent rewrites it.
|
|
16
|
+
*/
|
|
17
|
+
let CURRENT_TODOS = [];
|
|
18
|
+
export function getCurrentTodos() {
|
|
19
|
+
return CURRENT_TODOS;
|
|
20
|
+
}
|
|
21
|
+
export function clearCurrentTodos() {
|
|
22
|
+
CURRENT_TODOS = [];
|
|
23
|
+
}
|
|
24
|
+
function normalize(input) {
|
|
25
|
+
if (!Array.isArray(input))
|
|
26
|
+
return [];
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const item of input) {
|
|
29
|
+
if (!item || typeof item !== 'object')
|
|
30
|
+
continue;
|
|
31
|
+
const rec = item;
|
|
32
|
+
const content = typeof rec['content'] === 'string' ? rec['content'].trim() : '';
|
|
33
|
+
if (!content)
|
|
34
|
+
continue;
|
|
35
|
+
const rawStatus = typeof rec['status'] === 'string' ? rec['status'].toLowerCase() : 'pending';
|
|
36
|
+
const status = rawStatus === 'completed' ? 'completed'
|
|
37
|
+
: rawStatus === 'in_progress' || rawStatus === 'in-progress' ? 'in_progress'
|
|
38
|
+
: 'pending';
|
|
39
|
+
const activeForm = typeof rec['activeForm'] === 'string' ? rec['activeForm'].trim() : undefined;
|
|
40
|
+
out.push({ content, status, ...(activeForm ? { activeForm } : {}) });
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
export function createTodoTools() {
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
name: 'TodoRead',
|
|
48
|
+
description: [
|
|
49
|
+
'Read the current task list without modifying it.',
|
|
50
|
+
'Call this at the start of a new turn to check plan state before deciding',
|
|
51
|
+
'what to do next. Returns the todos as a JSON array.',
|
|
52
|
+
].join(' '),
|
|
53
|
+
parameters: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {},
|
|
56
|
+
required: [],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
},
|
|
59
|
+
handler: async () => {
|
|
60
|
+
if (CURRENT_TODOS.length === 0) {
|
|
61
|
+
return 'No todos. Use TodoWrite to create a plan.';
|
|
62
|
+
}
|
|
63
|
+
return JSON.stringify(CURRENT_TODOS, null, 2);
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'TodoWrite',
|
|
68
|
+
description: [
|
|
69
|
+
'Create or replace the agent\'s working task list. Use proactively for any',
|
|
70
|
+
'multi-step task (3+ distinct steps). Pass the COMPLETE list every time —',
|
|
71
|
+
'each call replaces the previous list. Mark a task `in_progress` BEFORE',
|
|
72
|
+
'starting it and `completed` IMMEDIATELY after, before moving to the next.',
|
|
73
|
+
'The list shows the user what the agent is planning vs. what\'s done.',
|
|
74
|
+
].join(' '),
|
|
75
|
+
parameters: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
todos: {
|
|
79
|
+
type: 'array',
|
|
80
|
+
description: 'The full task list. Replaces the previous one entirely.',
|
|
81
|
+
items: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
content: { type: 'string', description: 'Imperative task title (e.g. "Fix the auth bug").' },
|
|
85
|
+
status: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
enum: ['pending', 'in_progress', 'completed'],
|
|
88
|
+
description: 'Current state. Exactly one task should be in_progress at a time.',
|
|
89
|
+
},
|
|
90
|
+
activeForm: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
description: 'Present-continuous form shown while in_progress (e.g. "Fixing the auth bug"). Optional.',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
required: ['content', 'status'],
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
required: ['todos'],
|
|
100
|
+
additionalProperties: false,
|
|
101
|
+
},
|
|
102
|
+
handler: async (args) => {
|
|
103
|
+
const todos = normalize(args['todos']);
|
|
104
|
+
CURRENT_TODOS = todos;
|
|
105
|
+
// Soft validation: at most one in_progress at a time.
|
|
106
|
+
const inProgressCount = todos.filter((t) => t.status === 'in_progress').length;
|
|
107
|
+
const validationNote = inProgressCount > 1
|
|
108
|
+
? `\n Warning: ${inProgressCount} tasks are in_progress — only one should be active at a time.`
|
|
109
|
+
: '';
|
|
110
|
+
const planItems = todos.map((t) => ({
|
|
111
|
+
step: t.status === 'in_progress' && t.activeForm ? t.activeForm : t.content,
|
|
112
|
+
status: t.status,
|
|
113
|
+
}));
|
|
114
|
+
const formatted = formatPlan(planItems, { heading: 'Updated Plan' });
|
|
115
|
+
return `${formatted}${validationNote}`;
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=todoTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoTools.js","sourceRoot":"","sources":["../../src/tools/todoTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Tools - Web search and content extraction capabilities
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - WebSearch: Search the web using Tavily
|
|
6
|
+
* - WebExtract: Extract and summarize content from URLs
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolDefinition } from '../core/toolRuntime.js';
|
|
9
|
+
interface TavilySearchResult {
|
|
10
|
+
title: string;
|
|
11
|
+
url: string;
|
|
12
|
+
content: string;
|
|
13
|
+
score?: number;
|
|
14
|
+
published_date?: string;
|
|
15
|
+
}
|
|
16
|
+
interface TavilySearchResponse {
|
|
17
|
+
results: TavilySearchResult[];
|
|
18
|
+
answer?: string;
|
|
19
|
+
query: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create web tools for search and extraction.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createWebTools(): ToolDefinition[];
|
|
25
|
+
export type { TavilySearchResponse };
|
|
26
|
+
//# sourceMappingURL=webTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webTools.d.ts","sourceRoot":"","sources":["../../src/tools/webTools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AASD;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAgLjD;AAuSD,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Tools - Web search and content extraction capabilities
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - WebSearch: Search the web using Tavily
|
|
6
|
+
* - WebExtract: Extract and summarize content from URLs
|
|
7
|
+
*/
|
|
8
|
+
import { getSecretValue } from '../core/secretStore.js';
|
|
9
|
+
import { recordTavilySearch } from '../core/usage.js';
|
|
10
|
+
import { buildError } from '../core/errors.js';
|
|
11
|
+
import { isTavilyQuotaResponse, TAVILY_QUOTA_MESSAGE } from '../core/quotaErrors.js';
|
|
12
|
+
/**
|
|
13
|
+
* Create web tools for search and extraction.
|
|
14
|
+
*/
|
|
15
|
+
export function createWebTools() {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
name: 'WebSearch',
|
|
19
|
+
description: 'Search the web for current/up-to-date information using Tavily. Use proactively for news, events, recent releases, library docs that may have changed, or any time-sensitive lookup. Works out of the box via the Trenchwork-hosted proxy; set TAVILY_API_KEY for unlimited use.',
|
|
20
|
+
parameters: {
|
|
21
|
+
type: 'object',
|
|
22
|
+
properties: {
|
|
23
|
+
query: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'The search query',
|
|
26
|
+
},
|
|
27
|
+
maxResults: {
|
|
28
|
+
type: 'number',
|
|
29
|
+
description: 'Maximum number of results to return (default: 5, max: 10)',
|
|
30
|
+
},
|
|
31
|
+
searchDepth: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
enum: ['basic', 'advanced'],
|
|
34
|
+
description: 'Search depth: basic (fast) or advanced (thorough). Default: basic',
|
|
35
|
+
},
|
|
36
|
+
includeAnswer: {
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
description: 'Include AI-generated answer summary. Default: true',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
required: ['query'],
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
},
|
|
44
|
+
handler: async (args) => {
|
|
45
|
+
const query = args['query'];
|
|
46
|
+
if (typeof query !== 'string' || !query.trim()) {
|
|
47
|
+
return 'Error: query is required';
|
|
48
|
+
}
|
|
49
|
+
const maxResults = Math.min(typeof args['maxResults'] === 'number' ? args['maxResults'] : 5, 10);
|
|
50
|
+
const searchDepth = args['searchDepth'] === 'advanced' ? 'advanced' : 'basic';
|
|
51
|
+
const includeAnswer = args['includeAnswer'] !== false;
|
|
52
|
+
try {
|
|
53
|
+
recordTavilySearch(); // meter this install's Tavily consumption
|
|
54
|
+
const tavilyKey = getSecretValue('TAVILY_API_KEY');
|
|
55
|
+
if (tavilyKey) {
|
|
56
|
+
return await searchTavily(query, tavilyKey, { maxResults, searchDepth, includeAnswer });
|
|
57
|
+
}
|
|
58
|
+
// No local key — fall back to the Trenchwork-hosted Tavily proxy so
|
|
59
|
+
// the agent can search proactively out of the box. Counts against
|
|
60
|
+
// the operator's Tavily quota; users wanting unlimited can set
|
|
61
|
+
// TAVILY_API_KEY locally.
|
|
62
|
+
return await searchTavilyViaProxy(query, { maxResults, searchDepth, includeAnswer });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return buildError('WebSearch', error, { query });
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'WebExtract',
|
|
71
|
+
description: 'Extract and summarize content from one or more URLs using Tavily. Use after WebSearch when you need the full content of a specific page (docs, articles, GitHub issues). Requires TAVILY_API_KEY.',
|
|
72
|
+
parameters: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
urls: {
|
|
76
|
+
type: 'array',
|
|
77
|
+
items: { type: 'string' },
|
|
78
|
+
description: 'URLs to extract content from (max 5)',
|
|
79
|
+
},
|
|
80
|
+
url: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Single URL to extract content from (alternative to urls array)',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
additionalProperties: false,
|
|
86
|
+
},
|
|
87
|
+
handler: async (args) => {
|
|
88
|
+
let urls = [];
|
|
89
|
+
if (Array.isArray(args['urls'])) {
|
|
90
|
+
urls = args['urls'].filter((u) => typeof u === 'string');
|
|
91
|
+
}
|
|
92
|
+
else if (typeof args['url'] === 'string') {
|
|
93
|
+
urls = [args['url']];
|
|
94
|
+
}
|
|
95
|
+
if (urls.length === 0) {
|
|
96
|
+
return 'Error: at least one URL is required';
|
|
97
|
+
}
|
|
98
|
+
// Limit to 5 URLs
|
|
99
|
+
urls = urls.slice(0, 5);
|
|
100
|
+
const tavilyKey = getSecretValue('TAVILY_API_KEY');
|
|
101
|
+
if (!tavilyKey) {
|
|
102
|
+
return 'WebExtract requires TAVILY_API_KEY to be configured. Use /secrets set TAVILY_API_KEY to configure.';
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
return await extractTavily(urls, tavilyKey);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return buildError('WebExtract', error, { urls: urls.join(', ') });
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'WebFetch',
|
|
114
|
+
description: 'Fetch the raw content of a single URL via HTTP GET. Returns the response body as text (HTML/JSON/plain). Use this when you need the LITERAL page content (e.g., reading a specific docs page, fetching a JSON API). For research / "what does the web say about X" queries, use WebSearch instead — Tavily returns clean summaries.',
|
|
115
|
+
parameters: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {
|
|
118
|
+
url: { type: 'string', description: 'Absolute http(s):// URL to fetch.' },
|
|
119
|
+
maxBytes: { type: 'number', description: 'Cap the response at this many bytes (default 200_000, max 2_000_000).' },
|
|
120
|
+
},
|
|
121
|
+
required: ['url'],
|
|
122
|
+
additionalProperties: false,
|
|
123
|
+
},
|
|
124
|
+
handler: async (args) => {
|
|
125
|
+
const url = args['url']?.trim();
|
|
126
|
+
if (!url)
|
|
127
|
+
return 'Error: url is required.';
|
|
128
|
+
if (!/^https?:\/\//i.test(url))
|
|
129
|
+
return 'Error: url must start with http:// or https://.';
|
|
130
|
+
const requestedCap = typeof args['maxBytes'] === 'number' ? args['maxBytes'] : 200_000;
|
|
131
|
+
try {
|
|
132
|
+
return await fetchUrlText(url, requestedCap);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error.name === 'AbortError') {
|
|
136
|
+
return `Error: WebFetch timed out (30s) for ${url}`;
|
|
137
|
+
}
|
|
138
|
+
return buildError('WebFetch', error, { url });
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'Helia',
|
|
144
|
+
description: 'Perform a web task on demand: pass `url` to fetch and read a page, or `query` to search the web and return summarized results. Single entry point over WebFetch/WebExtract/WebSearch for when a task needs information from the web. Static HTTP only — does not run JavaScript or interact with pages.',
|
|
145
|
+
parameters: {
|
|
146
|
+
type: 'object',
|
|
147
|
+
properties: {
|
|
148
|
+
url: { type: 'string', description: 'Absolute http(s):// URL to fetch and read.' },
|
|
149
|
+
query: { type: 'string', description: 'Web search query (used when no url is given).' },
|
|
150
|
+
},
|
|
151
|
+
additionalProperties: false,
|
|
152
|
+
},
|
|
153
|
+
handler: async (args) => {
|
|
154
|
+
const url = args['url']?.trim();
|
|
155
|
+
const query = args['query']?.trim();
|
|
156
|
+
if (url) {
|
|
157
|
+
if (!/^https?:\/\//i.test(url))
|
|
158
|
+
return 'Error: url must start with http:// or https://.';
|
|
159
|
+
const tavilyKey = getSecretValue('TAVILY_API_KEY');
|
|
160
|
+
try {
|
|
161
|
+
// Prefer Tavily extraction (clean readable text) when a key
|
|
162
|
+
// is set; otherwise fall back to a raw HTTP fetch.
|
|
163
|
+
if (tavilyKey)
|
|
164
|
+
return await extractTavily([url], tavilyKey);
|
|
165
|
+
return await fetchUrlText(url, 200_000);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (error.name === 'AbortError') {
|
|
169
|
+
return `Error: Helia fetch timed out (30s) for ${url}`;
|
|
170
|
+
}
|
|
171
|
+
return buildError('Helia', error, { url });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (query) {
|
|
175
|
+
try {
|
|
176
|
+
const tavilyKey = getSecretValue('TAVILY_API_KEY');
|
|
177
|
+
const opts = { maxResults: 5, searchDepth: 'basic', includeAnswer: true };
|
|
178
|
+
if (tavilyKey)
|
|
179
|
+
return await searchTavily(query, tavilyKey, opts);
|
|
180
|
+
return await searchTavilyViaProxy(query, opts);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return buildError('Helia', error, { query });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return 'Error: provide either `url` (to fetch a page) or `query` (to search the web).';
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Fetch a URL over HTTP GET and return its body as UTF-8 text, capped to
|
|
193
|
+
* `requestedCap` bytes. Shared by the WebFetch and Helia tools. Throws on
|
|
194
|
+
* network / abort errors so callers translate them.
|
|
195
|
+
*/
|
|
196
|
+
async function fetchUrlText(url, requestedCap) {
|
|
197
|
+
const cap = Math.max(1024, Math.min(2_000_000, requestedCap));
|
|
198
|
+
// 30s upper bound — long enough for slow doc sites, short enough that
|
|
199
|
+
// the user doesn't watch a stalled spinner.
|
|
200
|
+
const controller = new AbortController();
|
|
201
|
+
const timer = setTimeout(() => controller.abort(), 30_000);
|
|
202
|
+
const res = await fetch(url, {
|
|
203
|
+
redirect: 'follow',
|
|
204
|
+
signal: controller.signal,
|
|
205
|
+
headers: { 'User-Agent': 'trenchwork-coder/WebFetch' },
|
|
206
|
+
}).finally(() => clearTimeout(timer));
|
|
207
|
+
if (!res.ok) {
|
|
208
|
+
return `Error: HTTP ${res.status} ${res.statusText} fetching ${url}`;
|
|
209
|
+
}
|
|
210
|
+
const ctype = res.headers.get('content-type') || 'unknown';
|
|
211
|
+
const buf = await res.arrayBuffer();
|
|
212
|
+
const truncated = buf.byteLength > cap;
|
|
213
|
+
const slice = truncated ? buf.slice(0, cap) : buf;
|
|
214
|
+
const raw = new TextDecoder('utf-8', { fatal: false }).decode(slice);
|
|
215
|
+
const text = stripHtml(raw);
|
|
216
|
+
const prefix = [
|
|
217
|
+
`[WebFetch ${url}]`,
|
|
218
|
+
`Status: ${res.status} Content-Type: ${ctype} Size: ${buf.byteLength} bytes${truncated ? ` (truncated to ${cap})` : ''}`,
|
|
219
|
+
'',
|
|
220
|
+
].join('\n');
|
|
221
|
+
const suffix = truncated ? '\n... (truncated)' : '';
|
|
222
|
+
return prefix + text.slice(0, 15000) + suffix;
|
|
223
|
+
}
|
|
224
|
+
function stripHtml(html) {
|
|
225
|
+
const stripped = html
|
|
226
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '\n')
|
|
227
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '\n')
|
|
228
|
+
.replace(/<head[^>]*>[\s\S]*?<\/head>/gi, '\n')
|
|
229
|
+
.replace(/<noscript[^>]*>[\s\S]*?<\/noscript>/gi, '\n')
|
|
230
|
+
.replace(/<svg[^>]*>[\s\S]*?<\/svg>/gi, '\n')
|
|
231
|
+
.replace(/<[^>]+>/g, '\n')
|
|
232
|
+
.replace(/&/g, '&')
|
|
233
|
+
.replace(/</g, '<')
|
|
234
|
+
.replace(/>/g, '>')
|
|
235
|
+
.replace(/"/g, '"')
|
|
236
|
+
.replace(/'/g, "'")
|
|
237
|
+
.replace(/&#(\d+);/g, (_, d) => String.fromCharCode(parseInt(d, 10)))
|
|
238
|
+
.replace(/https?:\/\/\S{40,}/g, '')
|
|
239
|
+
.replace(/[ \t]+/g, ' ')
|
|
240
|
+
.split('\n')
|
|
241
|
+
.map(l => l.trim());
|
|
242
|
+
// Whitelist: only keep lines that look like natural language text
|
|
243
|
+
const content = stripped.filter(l => {
|
|
244
|
+
if (l.length < 10 || l.length > 300)
|
|
245
|
+
return false;
|
|
246
|
+
// Reject lines heavy with non-language characters
|
|
247
|
+
const alpha = (l.match(/[A-Za-z]/g) || []).length;
|
|
248
|
+
const total = l.length;
|
|
249
|
+
if (alpha / total < 0.3)
|
|
250
|
+
return false;
|
|
251
|
+
// Reject code: braces, semicolons, function calls, CSS
|
|
252
|
+
if (/[{}]/.test(l))
|
|
253
|
+
return false;
|
|
254
|
+
if (/;\s*$/.test(l) || /;\s*}/.test(l))
|
|
255
|
+
return false;
|
|
256
|
+
if (/\bfunction\s*\(/.test(l))
|
|
257
|
+
return false;
|
|
258
|
+
if (/\b(?:const|let|var|return|import|export|require|parseInt|toString|fromCharCode|charCodeAt|indexOf|substring|setTimeout|setInterval|addEventListener|querySelector|getElementById|createElement)\b/.test(l))
|
|
259
|
+
return false;
|
|
260
|
+
if (/^(?:--[a-z]|}[^{]*\{|@[a-z])/.test(l))
|
|
261
|
+
return false;
|
|
262
|
+
if (/[a-z-]+:\s*[^;]+;/.test(l) && /px|rem|em|%|#[0-9a-f]{3,6}|rgb/.test(l))
|
|
263
|
+
return false;
|
|
264
|
+
if (/\|/.test(l) && /[|]{2,}/.test(l))
|
|
265
|
+
return false;
|
|
266
|
+
if (/data-styled/.test(l))
|
|
267
|
+
return false;
|
|
268
|
+
if (/\(\s*function\s*\(/.test(l) || /!\[\]/.test(l) || /!!\[\]/.test(l))
|
|
269
|
+
return false;
|
|
270
|
+
// Reject lines that are just CSS selectors/properties
|
|
271
|
+
if (/^[.#][\w-]+\s*\{/.test(l))
|
|
272
|
+
return false;
|
|
273
|
+
if (/^[.#][\w-]+\s*$/.test(l) && l.length < 40)
|
|
274
|
+
return false;
|
|
275
|
+
// Reject all-caps short navigation text
|
|
276
|
+
if (/^[A-Z\s]{5,40}$/.test(l) && l.length < 40)
|
|
277
|
+
return false;
|
|
278
|
+
// Reject URL fragments
|
|
279
|
+
if (/^\/[\w/-]+$/.test(l) && l.length < 40)
|
|
280
|
+
return false;
|
|
281
|
+
return true;
|
|
282
|
+
});
|
|
283
|
+
// Deduplicate consecutive identical/substring lines
|
|
284
|
+
const deduped = [];
|
|
285
|
+
for (let i = 0; i < content.length; i++) {
|
|
286
|
+
const prev = deduped[deduped.length - 1];
|
|
287
|
+
if (prev && (content[i] === prev || (content[i].length > 20 && prev.length > 20 && content[i].slice(0, 40) === prev.slice(0, 40))))
|
|
288
|
+
continue;
|
|
289
|
+
deduped.push(content[i]);
|
|
290
|
+
}
|
|
291
|
+
return deduped.join('\n').replace(/\n{3,}/g, '\n\n').trim();
|
|
292
|
+
}
|
|
293
|
+
// Trenchwork's hosted Tavily proxy (AWS API Gateway → Lambda). Lets the CLI
|
|
294
|
+
// search out of the box for users who haven't set TAVILY_API_KEY locally;
|
|
295
|
+
// counts against the operator's Tavily quota.
|
|
296
|
+
const TRENCHWORK_TAVILY_PROXY_URL = 'https://cfqeqx4lt9.execute-api.us-east-1.amazonaws.com/api/tavilySearch';
|
|
297
|
+
/**
|
|
298
|
+
* Fallback for users without a local TAVILY_API_KEY: hit the Trenchwork
|
|
299
|
+
* server-side proxy which uses the operator's key. Returns the same
|
|
300
|
+
* markdown shape as `searchTavily`. Errors propagate as a string for the
|
|
301
|
+
* tool harness to surface without crashing the agent loop.
|
|
302
|
+
*/
|
|
303
|
+
async function searchTavilyViaProxy(query, options) {
|
|
304
|
+
const controller = new AbortController();
|
|
305
|
+
const timer = setTimeout(() => controller.abort(), 30_000);
|
|
306
|
+
try {
|
|
307
|
+
const res = await fetch(TRENCHWORK_TAVILY_PROXY_URL, {
|
|
308
|
+
method: 'POST',
|
|
309
|
+
headers: { 'Content-Type': 'application/json' },
|
|
310
|
+
body: JSON.stringify({
|
|
311
|
+
query,
|
|
312
|
+
maxResults: options.maxResults,
|
|
313
|
+
depth: options.searchDepth,
|
|
314
|
+
includeAnswer: options.includeAnswer,
|
|
315
|
+
}),
|
|
316
|
+
signal: controller.signal,
|
|
317
|
+
});
|
|
318
|
+
if (!res.ok) {
|
|
319
|
+
const text = await res.text().catch(() => '');
|
|
320
|
+
if (isTavilyQuotaResponse(res.status, text)) {
|
|
321
|
+
return TAVILY_QUOTA_MESSAGE;
|
|
322
|
+
}
|
|
323
|
+
if (res.status === 503) {
|
|
324
|
+
return 'WebSearch is temporarily unavailable on the Trenchwork proxy. Set TAVILY_API_KEY locally with `/secrets set TAVILY_API_KEY` for unlimited use.';
|
|
325
|
+
}
|
|
326
|
+
throw new Error(`Trenchwork Tavily proxy error: ${res.status} ${text.slice(0, 300)}`);
|
|
327
|
+
}
|
|
328
|
+
const data = (await res.json());
|
|
329
|
+
return formatTavilyResults(data, 'Tavily (via Trenchwork)');
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
333
|
+
throw new Error('WebSearch via Trenchwork proxy timed out after 30 seconds');
|
|
334
|
+
}
|
|
335
|
+
throw error;
|
|
336
|
+
}
|
|
337
|
+
finally {
|
|
338
|
+
clearTimeout(timer);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Search using Tavily API (recommended provider)
|
|
343
|
+
*/
|
|
344
|
+
async function searchTavily(query, apiKey, options) {
|
|
345
|
+
const controller = new AbortController();
|
|
346
|
+
const timeout = setTimeout(() => controller.abort(), 30_000); // 30s — matches the abort message + the proxy/extract paths
|
|
347
|
+
try {
|
|
348
|
+
const response = await fetch('https://api.tavily.com/search', {
|
|
349
|
+
method: 'POST',
|
|
350
|
+
headers: {
|
|
351
|
+
'Content-Type': 'application/json',
|
|
352
|
+
},
|
|
353
|
+
body: JSON.stringify({
|
|
354
|
+
api_key: apiKey,
|
|
355
|
+
query,
|
|
356
|
+
search_depth: options.searchDepth,
|
|
357
|
+
include_answer: options.includeAnswer,
|
|
358
|
+
max_results: options.maxResults,
|
|
359
|
+
}),
|
|
360
|
+
signal: controller.signal,
|
|
361
|
+
});
|
|
362
|
+
if (!response.ok) {
|
|
363
|
+
const text = await response.text();
|
|
364
|
+
if (isTavilyQuotaResponse(response.status, text)) {
|
|
365
|
+
return TAVILY_QUOTA_MESSAGE;
|
|
366
|
+
}
|
|
367
|
+
throw new Error(`Tavily API error: ${response.status} ${text}`);
|
|
368
|
+
}
|
|
369
|
+
const data = (await response.json());
|
|
370
|
+
return formatTavilyResults(data, 'Tavily');
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
374
|
+
throw new Error('Tavily search timed out after 30 seconds');
|
|
375
|
+
}
|
|
376
|
+
throw error;
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
clearTimeout(timeout);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Extract content using Tavily Extract API
|
|
384
|
+
*/
|
|
385
|
+
async function extractTavily(urls, apiKey) {
|
|
386
|
+
const response = await fetch('https://api.tavily.com/extract', {
|
|
387
|
+
method: 'POST',
|
|
388
|
+
headers: {
|
|
389
|
+
'Content-Type': 'application/json',
|
|
390
|
+
},
|
|
391
|
+
body: JSON.stringify({
|
|
392
|
+
api_key: apiKey,
|
|
393
|
+
urls,
|
|
394
|
+
}),
|
|
395
|
+
});
|
|
396
|
+
if (!response.ok) {
|
|
397
|
+
const text = await response.text();
|
|
398
|
+
if (isTavilyQuotaResponse(response.status, text)) {
|
|
399
|
+
return TAVILY_QUOTA_MESSAGE;
|
|
400
|
+
}
|
|
401
|
+
throw new Error(`Tavily Extract API error: ${response.status} ${text}`);
|
|
402
|
+
}
|
|
403
|
+
const data = (await response.json());
|
|
404
|
+
return formatExtractResults(data);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Format Tavily search results with enhanced markdown formatting
|
|
408
|
+
*/
|
|
409
|
+
function formatTavilyResults(data, provider) {
|
|
410
|
+
const lines = [`[WebSearch via ${provider}]`, ''];
|
|
411
|
+
if (data.answer) {
|
|
412
|
+
lines.push('**Summary:**', data.answer, '');
|
|
413
|
+
}
|
|
414
|
+
if (!data.results || data.results.length === 0) {
|
|
415
|
+
lines.push('No results found.');
|
|
416
|
+
return lines.join('\n');
|
|
417
|
+
}
|
|
418
|
+
if (data.results.length > 0) {
|
|
419
|
+
lines.push('**Search Results:**');
|
|
420
|
+
lines.push('');
|
|
421
|
+
for (let i = 0; i < data.results.length; i++) {
|
|
422
|
+
const result = data.results[i];
|
|
423
|
+
// Format as numbered list with clickable title link
|
|
424
|
+
lines.push(`${i + 1}. **[${result.title}](${result.url})**`);
|
|
425
|
+
if (result.content) {
|
|
426
|
+
const snippet = result.content.length > 300
|
|
427
|
+
? result.content.slice(0, 300) + '...'
|
|
428
|
+
: result.content;
|
|
429
|
+
lines.push(` ${snippet}`);
|
|
430
|
+
}
|
|
431
|
+
if (result.published_date) {
|
|
432
|
+
lines.push(` *Published: ${result.published_date}*`);
|
|
433
|
+
}
|
|
434
|
+
lines.push('');
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return lines.join('\n');
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Format Tavily extract results with enhanced markdown formatting
|
|
441
|
+
*/
|
|
442
|
+
function formatExtractResults(data) {
|
|
443
|
+
const lines = ['[WebExtract via Tavily]', ''];
|
|
444
|
+
if (!data.results || data.results.length === 0) {
|
|
445
|
+
lines.push('No content extracted.');
|
|
446
|
+
return lines.join('\n');
|
|
447
|
+
}
|
|
448
|
+
for (let i = 0; i < data.results.length; i++) {
|
|
449
|
+
const result = data.results[i];
|
|
450
|
+
lines.push(`### Source ${i + 1}: [${result.url}](${result.url})`);
|
|
451
|
+
lines.push('');
|
|
452
|
+
if (result.raw_content) {
|
|
453
|
+
// Truncate very long content
|
|
454
|
+
const content = result.raw_content.length > 5000
|
|
455
|
+
? result.raw_content.slice(0, 5000) + '\n\n*[Content truncated...]*'
|
|
456
|
+
: result.raw_content;
|
|
457
|
+
lines.push(content);
|
|
458
|
+
}
|
|
459
|
+
lines.push('');
|
|
460
|
+
if (i < data.results.length - 1) {
|
|
461
|
+
lines.push('---');
|
|
462
|
+
lines.push('');
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return lines.join('\n');
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=webTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webTools.js","sourceRoot":"","sources":["../../src/tools/webTools.ts"],"names":[],"mappings":"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"}
|