@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,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HITL Tools - The ONLY human-in-the-loop tools in the repository
|
|
3
|
+
* Provides decision points for critical operations
|
|
4
|
+
*/
|
|
5
|
+
import { getHITL, hitl } from '../core/hitl.js';
|
|
6
|
+
export function createHITLTools() {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
name: 'HITL_Decision',
|
|
10
|
+
description: 'Pause execution and ask the human to choose between 4 distinct alternatives YOU generate. Always provide exactly 4 substantively different options that span the realistic decision space (e.g. conservative vs. aggressive, narrow vs. broad scope, fast vs. thorough). The UI also offers an "Enter your own" write-in, so the user can always reject all 4 and propose their own plan. Use HITL_YesNo for genuine binary decisions instead.',
|
|
11
|
+
parameters: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {
|
|
14
|
+
title: { type: 'string', description: 'Decision title/question' },
|
|
15
|
+
description: { type: 'string', description: 'Detailed description of the decision' },
|
|
16
|
+
context: { type: 'string', description: 'Additional context information' },
|
|
17
|
+
options: {
|
|
18
|
+
type: 'array',
|
|
19
|
+
description: 'Exactly 4 distinct candidate options. The UI automatically appends an "Enter your own" write-in so the user can also propose an alternative.',
|
|
20
|
+
minItems: 4,
|
|
21
|
+
maxItems: 4,
|
|
22
|
+
items: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
properties: {
|
|
25
|
+
id: { type: 'string' },
|
|
26
|
+
label: { type: 'string' },
|
|
27
|
+
description: { type: 'string' },
|
|
28
|
+
shortcut: { type: 'string' }
|
|
29
|
+
},
|
|
30
|
+
required: ['id', 'label', 'description']
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
defaultOptionId: { type: 'string', description: 'Default option ID' },
|
|
34
|
+
requiresExplicitChoice: { type: 'boolean', description: 'Require explicit user choice' },
|
|
35
|
+
autoPause: { type: 'boolean', description: 'Auto-pause execution for decision' },
|
|
36
|
+
timeoutMs: { type: 'number', description: 'Timeout in milliseconds (0 = no timeout)' }
|
|
37
|
+
},
|
|
38
|
+
required: ['title', 'description', 'options']
|
|
39
|
+
},
|
|
40
|
+
handler: async (args) => {
|
|
41
|
+
const typedArgs = args;
|
|
42
|
+
const hitlSystem = getHITL({
|
|
43
|
+
autoPause: typedArgs.autoPause ?? true,
|
|
44
|
+
timeoutMs: typedArgs.timeoutMs ?? 0,
|
|
45
|
+
logLevel: 'detailed'
|
|
46
|
+
});
|
|
47
|
+
const options = (typedArgs.options || []).map(opt => ({
|
|
48
|
+
id: opt.id,
|
|
49
|
+
label: opt.label,
|
|
50
|
+
description: opt.description,
|
|
51
|
+
shortcut: opt.shortcut
|
|
52
|
+
}));
|
|
53
|
+
// Enforce the 4-option contract at runtime — schemas can be ignored
|
|
54
|
+
// by some LLM providers. The "Enter your own" write-in is added by
|
|
55
|
+
// the HITL UI, so the human always sees 5 menu items.
|
|
56
|
+
if (options.length !== 4) {
|
|
57
|
+
throw new Error(`HITL_Decision requires exactly 4 options, got ${options.length}. ` +
|
|
58
|
+
`Generate 4 substantively different alternatives spanning the realistic decision space ` +
|
|
59
|
+
`(e.g. conservative vs. aggressive, narrow vs. broad scope, fast vs. thorough). ` +
|
|
60
|
+
`Use HITL_YesNo for binary decisions instead.`);
|
|
61
|
+
}
|
|
62
|
+
const selectedOptionId = await hitlSystem.requestDecision({
|
|
63
|
+
id: `hitl-tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,
|
|
64
|
+
title: typedArgs.title,
|
|
65
|
+
description: typedArgs.description,
|
|
66
|
+
context: typedArgs.context || '',
|
|
67
|
+
options,
|
|
68
|
+
defaultOptionId: typedArgs.defaultOptionId,
|
|
69
|
+
requiresExplicitChoice: typedArgs.requiresExplicitChoice ?? true
|
|
70
|
+
});
|
|
71
|
+
const selectedOption = options.find(opt => opt.id === selectedOptionId);
|
|
72
|
+
return `HITL decision: ${selectedOption?.label || selectedOptionId}
|
|
73
|
+
Selected option ID: ${selectedOptionId}
|
|
74
|
+
Timestamp: ${new Date().toISOString()}
|
|
75
|
+
Note: HITL decision recorded. This is the ONLY human-in-the-loop system in the repository.`;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'HITL_YesNo',
|
|
80
|
+
description: 'Simple yes/no decision point',
|
|
81
|
+
parameters: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
title: { type: 'string', description: 'Decision title/question' },
|
|
85
|
+
description: { type: 'string', description: 'Detailed description' },
|
|
86
|
+
context: { type: 'string', description: 'Additional context' },
|
|
87
|
+
defaultYes: { type: 'boolean', description: 'Default to yes (true) or no (false)' }
|
|
88
|
+
},
|
|
89
|
+
required: ['title', 'description']
|
|
90
|
+
},
|
|
91
|
+
handler: async (args) => {
|
|
92
|
+
const typedArgs = args;
|
|
93
|
+
const result = await hitl.askYesNo(typedArgs.title, typedArgs.description, typedArgs.context || '', typedArgs.defaultYes ?? true);
|
|
94
|
+
return `HITL yes/no decision: ${result ? 'yes' : 'no'}
|
|
95
|
+
Approved: ${result}
|
|
96
|
+
Timestamp: ${new Date().toISOString()}
|
|
97
|
+
Note: HITL yes/no decision recorded`;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'HITL_Select',
|
|
102
|
+
description: 'Select from multiple options',
|
|
103
|
+
parameters: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
title: { type: 'string', description: 'Selection title' },
|
|
107
|
+
description: { type: 'string', description: 'Detailed description' },
|
|
108
|
+
options: { type: 'string', description: 'JSON array of options: [{id, label, description}]' },
|
|
109
|
+
context: { type: 'string', description: 'Additional context' },
|
|
110
|
+
defaultOptionId: { type: 'string', description: 'Default option ID' }
|
|
111
|
+
},
|
|
112
|
+
required: ['title', 'description', 'options']
|
|
113
|
+
},
|
|
114
|
+
handler: async (args) => {
|
|
115
|
+
const typedArgs = args;
|
|
116
|
+
let options;
|
|
117
|
+
try {
|
|
118
|
+
options = JSON.parse(typedArgs.options);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
throw new Error(`Invalid options JSON: ${error}`);
|
|
122
|
+
}
|
|
123
|
+
const result = await hitl.selectOption(typedArgs.title, typedArgs.description, options, typedArgs.context || '', typedArgs.defaultOptionId);
|
|
124
|
+
const selectedOption = options.find(opt => opt.id === result);
|
|
125
|
+
return `HITL selection: ${selectedOption?.label || result}
|
|
126
|
+
Selected option ID: ${result}
|
|
127
|
+
Timestamp: ${new Date().toISOString()}
|
|
128
|
+
Note: HITL selection recorded`;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'HITL_Approval',
|
|
133
|
+
description: 'Request approval for risky operation',
|
|
134
|
+
parameters: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
title: { type: 'string', description: 'Approval title' },
|
|
138
|
+
riskDescription: { type: 'string', description: 'Description of risks' },
|
|
139
|
+
operationDetails: { type: 'string', description: 'Detailed operation description' }
|
|
140
|
+
},
|
|
141
|
+
required: ['title', 'riskDescription']
|
|
142
|
+
},
|
|
143
|
+
handler: async (args) => {
|
|
144
|
+
const typedArgs = args;
|
|
145
|
+
const result = await hitl.requestApproval(typedArgs.title, typedArgs.riskDescription, typedArgs.operationDetails || '');
|
|
146
|
+
return `HITL approval: ${result ? 'approved' : 'rejected'}
|
|
147
|
+
Approved: ${result}
|
|
148
|
+
Timestamp: ${new Date().toISOString()}
|
|
149
|
+
Note: ${result ? 'Operation approved via HITL' : 'Operation rejected via HITL'}`;
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: 'HITL_Status',
|
|
154
|
+
description: 'Get HITL system status and history',
|
|
155
|
+
parameters: {
|
|
156
|
+
type: 'object',
|
|
157
|
+
properties: {
|
|
158
|
+
clearHistory: { type: 'boolean', description: 'Clear decision history' }
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
handler: async (args) => {
|
|
162
|
+
const hitlSystem = getHITL();
|
|
163
|
+
if (args.clearHistory) {
|
|
164
|
+
hitlSystem.clearHistory();
|
|
165
|
+
return `HITL history cleared
|
|
166
|
+
Timestamp: ${new Date().toISOString()}`;
|
|
167
|
+
}
|
|
168
|
+
const history = hitlSystem.getHistory();
|
|
169
|
+
const recentDecisions = history.slice(-5).map(decision => ({
|
|
170
|
+
requestId: decision.requestId,
|
|
171
|
+
selectedOptionId: decision.selectedOptionId,
|
|
172
|
+
timestamp: decision.timestamp.toISOString(),
|
|
173
|
+
hasCustomInput: !!decision.userInput
|
|
174
|
+
}));
|
|
175
|
+
return `HITL System Status
|
|
176
|
+
Status: active
|
|
177
|
+
Total decisions: ${history.length}
|
|
178
|
+
Recent decisions:
|
|
179
|
+
${recentDecisions.map(d => ` • ${d.selectedOptionId} at ${d.timestamp}${d.hasCustomInput ? ' (custom input)' : ''}`).join('\n')}
|
|
180
|
+
Note: This is the ONLY human-in-the-loop system in the repository`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=hitlTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitlTools.js","sourceRoot":"","sources":["../../src/tools/hitlTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent memory tools — save/recall facts across CLI sessions.
|
|
3
|
+
* Mirrors the Claude Agent SDK memory pattern: a per-project
|
|
4
|
+
* directory of markdown files, each with a name + brief description,
|
|
5
|
+
* indexed so the agent can browse and selectively load.
|
|
6
|
+
*
|
|
7
|
+
* Storage layout (all paths relative to the working directory):
|
|
8
|
+
* .trenchwork/memory/
|
|
9
|
+
* MEMORY.md — index file the agent maintains
|
|
10
|
+
* <name>.md — individual memory entries
|
|
11
|
+
*
|
|
12
|
+
* Tools provided:
|
|
13
|
+
* memory_save(name, content, description?)
|
|
14
|
+
* memory_list()
|
|
15
|
+
* memory_load(name)
|
|
16
|
+
* memory_delete(name)
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolDefinition } from '../core/toolRuntime.js';
|
|
19
|
+
/**
|
|
20
|
+
* Append a one-line note to the project's `notes` memory entry — the `#<note>`
|
|
21
|
+
* quick-capture shortcut (Claude Code parity). Lands in the same store the
|
|
22
|
+
* agent reads (.trenchwork/memory/), so captured notes survive across sessions
|
|
23
|
+
* and show up in the index. Returns false for a blank note.
|
|
24
|
+
*/
|
|
25
|
+
export declare function appendMemoryNote(workingDir: string, note: string): boolean;
|
|
26
|
+
export declare function createMemoryTools(workingDir: string): ToolDefinition[];
|
|
27
|
+
//# sourceMappingURL=memoryTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryTools.d.ts","sourceRoot":"","sources":["../../src/tools/memoryTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA0B7D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAS1E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAoGtE"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent memory tools — save/recall facts across CLI sessions.
|
|
3
|
+
* Mirrors the Claude Agent SDK memory pattern: a per-project
|
|
4
|
+
* directory of markdown files, each with a name + brief description,
|
|
5
|
+
* indexed so the agent can browse and selectively load.
|
|
6
|
+
*
|
|
7
|
+
* Storage layout (all paths relative to the working directory):
|
|
8
|
+
* .trenchwork/memory/
|
|
9
|
+
* MEMORY.md — index file the agent maintains
|
|
10
|
+
* <name>.md — individual memory entries
|
|
11
|
+
*
|
|
12
|
+
* Tools provided:
|
|
13
|
+
* memory_save(name, content, description?)
|
|
14
|
+
* memory_list()
|
|
15
|
+
* memory_load(name)
|
|
16
|
+
* memory_delete(name)
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, unlinkSync } from 'node:fs';
|
|
19
|
+
import { join } from 'node:path';
|
|
20
|
+
function memoryDir(workingDir) {
|
|
21
|
+
return join(workingDir, '.trenchwork', 'memory');
|
|
22
|
+
}
|
|
23
|
+
function ensureDir(workingDir) {
|
|
24
|
+
const dir = memoryDir(workingDir);
|
|
25
|
+
if (!existsSync(dir)) {
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
return dir;
|
|
29
|
+
}
|
|
30
|
+
/** Sanitize a memory name for use as a filename. Strict allow-list. */
|
|
31
|
+
function safeName(name) {
|
|
32
|
+
if (typeof name !== 'string')
|
|
33
|
+
return null;
|
|
34
|
+
const trimmed = name.trim();
|
|
35
|
+
if (!trimmed)
|
|
36
|
+
return null;
|
|
37
|
+
// Allow letters, digits, underscore, hyphen. Reject path traversal,
|
|
38
|
+
// dots (so the name can't escape .md), spaces.
|
|
39
|
+
if (!/^[A-Za-z0-9_-]+$/.test(trimmed))
|
|
40
|
+
return null;
|
|
41
|
+
if (trimmed.length > 80)
|
|
42
|
+
return null;
|
|
43
|
+
return trimmed;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Append a one-line note to the project's `notes` memory entry — the `#<note>`
|
|
47
|
+
* quick-capture shortcut (Claude Code parity). Lands in the same store the
|
|
48
|
+
* agent reads (.trenchwork/memory/), so captured notes survive across sessions
|
|
49
|
+
* and show up in the index. Returns false for a blank note.
|
|
50
|
+
*/
|
|
51
|
+
export function appendMemoryNote(workingDir, note) {
|
|
52
|
+
const text = (note || '').trim();
|
|
53
|
+
if (!text)
|
|
54
|
+
return false;
|
|
55
|
+
const dir = ensureDir(workingDir);
|
|
56
|
+
const file = join(dir, 'notes.md');
|
|
57
|
+
const existing = existsSync(file) ? readFileSync(file, 'utf-8') : '> Quick notes captured with #';
|
|
58
|
+
writeFileSync(file, `${existing.replace(/\s+$/, '')}\n- ${text}\n`, 'utf-8');
|
|
59
|
+
rebuildIndex(dir);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
export function createMemoryTools(workingDir) {
|
|
63
|
+
return [
|
|
64
|
+
{
|
|
65
|
+
name: 'memory_save',
|
|
66
|
+
description: 'Save a piece of context (project facts, user preferences, prior decisions) to persistent memory so it survives across CLI sessions. Use for non-obvious facts the user shares OR validated approaches you want to repeat. Overwrites any existing entry with the same name.',
|
|
67
|
+
parameters: {
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties: {
|
|
70
|
+
name: { type: 'string', description: 'Unique short identifier ([A-Za-z0-9_-]+, max 80 chars). Becomes the filename.' },
|
|
71
|
+
content: { type: 'string', description: 'The memory body. Markdown is fine.' },
|
|
72
|
+
description: { type: 'string', description: 'One-line summary used for the index. Optional but recommended.' },
|
|
73
|
+
},
|
|
74
|
+
required: ['name', 'content'],
|
|
75
|
+
additionalProperties: false,
|
|
76
|
+
},
|
|
77
|
+
handler: async (args) => {
|
|
78
|
+
const name = safeName(args['name']);
|
|
79
|
+
if (!name)
|
|
80
|
+
return 'Error: name must match [A-Za-z0-9_-]+ (letters, digits, _, -).';
|
|
81
|
+
const content = args['content'];
|
|
82
|
+
if (typeof content !== 'string')
|
|
83
|
+
return 'Error: content must be a string.';
|
|
84
|
+
const description = args['description'];
|
|
85
|
+
const dir = ensureDir(workingDir);
|
|
86
|
+
const filePath = join(dir, `${name}.md`);
|
|
87
|
+
const body = description && typeof description === 'string'
|
|
88
|
+
? `> ${description.trim()}\n\n${content}`
|
|
89
|
+
: content;
|
|
90
|
+
writeFileSync(filePath, body, 'utf-8');
|
|
91
|
+
// Update MEMORY.md index — append/replace this entry.
|
|
92
|
+
rebuildIndex(dir);
|
|
93
|
+
return `⏺ memory_save(${name}) — saved (${Buffer.byteLength(body, 'utf8')} bytes)`;
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'memory_list',
|
|
98
|
+
description: 'List all saved memories with their one-line descriptions. Use BEFORE memory_load to see what\'s available.',
|
|
99
|
+
parameters: { type: 'object', properties: {}, additionalProperties: false },
|
|
100
|
+
handler: async () => {
|
|
101
|
+
const dir = memoryDir(workingDir);
|
|
102
|
+
if (!existsSync(dir))
|
|
103
|
+
return 'No memories saved yet.';
|
|
104
|
+
const entries = readdirSync(dir).filter((f) => f.endsWith('.md') && f !== 'MEMORY.md');
|
|
105
|
+
if (entries.length === 0)
|
|
106
|
+
return 'No memories saved yet.';
|
|
107
|
+
const lines = [`Memories (${entries.length}):`];
|
|
108
|
+
for (const file of entries.sort()) {
|
|
109
|
+
const name = file.slice(0, -3);
|
|
110
|
+
let desc = '';
|
|
111
|
+
try {
|
|
112
|
+
const body = readFileSync(join(dir, file), 'utf-8');
|
|
113
|
+
const firstLine = body.split('\n')[0]?.trim() ?? '';
|
|
114
|
+
if (firstLine.startsWith('>')) {
|
|
115
|
+
desc = firstLine.slice(1).trim();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { /* skip */ }
|
|
119
|
+
lines.push(` - ${name}${desc ? ` — ${desc}` : ''}`);
|
|
120
|
+
}
|
|
121
|
+
return lines.join('\n');
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'memory_load',
|
|
126
|
+
description: 'Load the full content of a previously saved memory by name. Use after memory_list to pull in relevant context.',
|
|
127
|
+
parameters: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
properties: {
|
|
130
|
+
name: { type: 'string', description: 'The memory identifier passed to memory_save.' },
|
|
131
|
+
},
|
|
132
|
+
required: ['name'],
|
|
133
|
+
additionalProperties: false,
|
|
134
|
+
},
|
|
135
|
+
handler: async (args) => {
|
|
136
|
+
const name = safeName(args['name']);
|
|
137
|
+
if (!name)
|
|
138
|
+
return 'Error: name must match [A-Za-z0-9_-]+.';
|
|
139
|
+
const filePath = join(memoryDir(workingDir), `${name}.md`);
|
|
140
|
+
if (!existsSync(filePath))
|
|
141
|
+
return `Memory not found: ${name}. Use memory_list to see what's saved.`;
|
|
142
|
+
return readFileSync(filePath, 'utf-8');
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'memory_delete',
|
|
147
|
+
description: 'Delete a memory permanently. Use sparingly — prefer overwriting via memory_save with the same name.',
|
|
148
|
+
parameters: {
|
|
149
|
+
type: 'object',
|
|
150
|
+
properties: {
|
|
151
|
+
name: { type: 'string', description: 'The memory identifier to remove.' },
|
|
152
|
+
},
|
|
153
|
+
required: ['name'],
|
|
154
|
+
additionalProperties: false,
|
|
155
|
+
},
|
|
156
|
+
handler: async (args) => {
|
|
157
|
+
const name = safeName(args['name']);
|
|
158
|
+
if (!name)
|
|
159
|
+
return 'Error: name must match [A-Za-z0-9_-]+.';
|
|
160
|
+
const dir = memoryDir(workingDir);
|
|
161
|
+
const filePath = join(dir, `${name}.md`);
|
|
162
|
+
if (!existsSync(filePath))
|
|
163
|
+
return `Memory not found: ${name}.`;
|
|
164
|
+
unlinkSync(filePath);
|
|
165
|
+
rebuildIndex(dir);
|
|
166
|
+
return `⏺ memory_delete(${name}) — removed.`;
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Rebuild MEMORY.md from the current set of entries. The index is a
|
|
173
|
+
* simple bulleted list — agents that load all of MEMORY.md at the
|
|
174
|
+
* start of a session see the catalogue without reading every entry.
|
|
175
|
+
*/
|
|
176
|
+
function rebuildIndex(dir) {
|
|
177
|
+
if (!existsSync(dir))
|
|
178
|
+
return;
|
|
179
|
+
const entries = readdirSync(dir).filter((f) => f.endsWith('.md') && f !== 'MEMORY.md').sort();
|
|
180
|
+
const lines = ['# Memory index', '', 'Saved entries:', ''];
|
|
181
|
+
for (const file of entries) {
|
|
182
|
+
const name = file.slice(0, -3);
|
|
183
|
+
let desc = '';
|
|
184
|
+
try {
|
|
185
|
+
const body = readFileSync(join(dir, file), 'utf-8');
|
|
186
|
+
const firstLine = body.split('\n')[0]?.trim() ?? '';
|
|
187
|
+
if (firstLine.startsWith('>'))
|
|
188
|
+
desc = firstLine.slice(1).trim();
|
|
189
|
+
}
|
|
190
|
+
catch { /* skip */ }
|
|
191
|
+
lines.push(`- [${name}](./${name}.md)${desc ? ` — ${desc}` : ''}`);
|
|
192
|
+
}
|
|
193
|
+
if (entries.length === 0)
|
|
194
|
+
lines.push('_(empty)_');
|
|
195
|
+
writeFileSync(join(dir, 'MEMORY.md'), lines.join('\n') + '\n', 'utf-8');
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=memoryTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryTools.js","sourceRoot":"","sources":["../../src/tools/memoryTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notebook tools — Claude-Code-parity for .ipynb editing.
|
|
3
|
+
*
|
|
4
|
+
* Jupyter notebooks are JSON files where the bulk of useful content
|
|
5
|
+
* lives in `cells: [{ cell_type, source: string|string[], … }]`. Doing
|
|
6
|
+
* source edits via the generic Edit tool is brittle because the
|
|
7
|
+
* `source` field is sometimes a string and sometimes a string[],
|
|
8
|
+
* and surrounding JSON whitespace varies. This module exposes a
|
|
9
|
+
* structured tool — `NotebookEdit` — that addresses cells by index
|
|
10
|
+
* and rewrites just that cell's source while preserving everything
|
|
11
|
+
* else.
|
|
12
|
+
*
|
|
13
|
+
* Capabilities:
|
|
14
|
+
* NotebookEdit({ notebook_path, cell_index, new_source, mode? })
|
|
15
|
+
* mode: "replace" (default), "insert", "delete"
|
|
16
|
+
* Returns a short summary of the change.
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolDefinition } from '../core/toolRuntime.js';
|
|
19
|
+
export declare function createNotebookTools(workingDir: string): ToolDefinition[];
|
|
20
|
+
//# sourceMappingURL=notebookTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notebookTools.d.ts","sourceRoot":"","sources":["../../src/tools/notebookTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA4C7D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAmGxE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notebook tools — Claude-Code-parity for .ipynb editing.
|
|
3
|
+
*
|
|
4
|
+
* Jupyter notebooks are JSON files where the bulk of useful content
|
|
5
|
+
* lives in `cells: [{ cell_type, source: string|string[], … }]`. Doing
|
|
6
|
+
* source edits via the generic Edit tool is brittle because the
|
|
7
|
+
* `source` field is sometimes a string and sometimes a string[],
|
|
8
|
+
* and surrounding JSON whitespace varies. This module exposes a
|
|
9
|
+
* structured tool — `NotebookEdit` — that addresses cells by index
|
|
10
|
+
* and rewrites just that cell's source while preserving everything
|
|
11
|
+
* else.
|
|
12
|
+
*
|
|
13
|
+
* Capabilities:
|
|
14
|
+
* NotebookEdit({ notebook_path, cell_index, new_source, mode? })
|
|
15
|
+
* mode: "replace" (default), "insert", "delete"
|
|
16
|
+
* Returns a short summary of the change.
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, readFileSync, writeFileSync, statSync } from 'node:fs';
|
|
19
|
+
import { isAbsolute, join } from 'node:path';
|
|
20
|
+
function resolvePath(workingDir, p) {
|
|
21
|
+
return isAbsolute(p) ? p : join(workingDir, p);
|
|
22
|
+
}
|
|
23
|
+
function sourceToString(src) {
|
|
24
|
+
if (typeof src === 'string')
|
|
25
|
+
return src;
|
|
26
|
+
if (Array.isArray(src))
|
|
27
|
+
return src.join('');
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
function stringToSource(text) {
|
|
31
|
+
// Jupyter convention: source is an array of lines, each ending
|
|
32
|
+
// with \n EXCEPT the last (matching how nb-format JSON serializes).
|
|
33
|
+
if (!text)
|
|
34
|
+
return [];
|
|
35
|
+
const parts = text.split('\n');
|
|
36
|
+
const out = [];
|
|
37
|
+
for (let i = 0; i < parts.length; i++) {
|
|
38
|
+
const isLast = i === parts.length - 1;
|
|
39
|
+
out.push(isLast ? parts[i] : `${parts[i]}\n`);
|
|
40
|
+
}
|
|
41
|
+
// Trim trailing empty entry if text ended with \n.
|
|
42
|
+
if (out.length && out[out.length - 1] === '')
|
|
43
|
+
out.pop();
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
export function createNotebookTools(workingDir) {
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
name: 'NotebookEdit',
|
|
50
|
+
description: 'Edit a Jupyter notebook (.ipynb) cell by index. Use mode "replace" (default) to rewrite a cell\'s source, "insert" to add a new cell at the index (existing cells shift down), or "delete" to remove the cell. The notebook\'s structure (metadata, nbformat, other cells) is preserved exactly. PREFER this over Edit for .ipynb files — generic string edits break on the string|string[] source format.',
|
|
51
|
+
parameters: {
|
|
52
|
+
type: 'object',
|
|
53
|
+
properties: {
|
|
54
|
+
notebook_path: { type: 'string', description: 'Path to the .ipynb file (relative to working dir or absolute).' },
|
|
55
|
+
cell_index: { type: 'number', description: '0-based index of the cell to operate on.' },
|
|
56
|
+
new_source: { type: 'string', description: 'New cell source (text). Required for replace/insert; ignored for delete.' },
|
|
57
|
+
cell_type: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
enum: ['code', 'markdown', 'raw'],
|
|
60
|
+
description: 'Cell type for insert mode. Default: code.',
|
|
61
|
+
},
|
|
62
|
+
mode: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
enum: ['replace', 'insert', 'delete'],
|
|
65
|
+
description: 'Operation. Default: replace.',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
required: ['notebook_path', 'cell_index'],
|
|
69
|
+
additionalProperties: false,
|
|
70
|
+
},
|
|
71
|
+
handler: async (args) => {
|
|
72
|
+
const pathArg = args['notebook_path'];
|
|
73
|
+
if (typeof pathArg !== 'string' || !pathArg.trim()) {
|
|
74
|
+
return 'Error: notebook_path must be a non-empty string.';
|
|
75
|
+
}
|
|
76
|
+
const absPath = resolvePath(workingDir, pathArg);
|
|
77
|
+
if (!existsSync(absPath))
|
|
78
|
+
return `Error: notebook not found: ${absPath}`;
|
|
79
|
+
if (!absPath.toLowerCase().endsWith('.ipynb')) {
|
|
80
|
+
return `Error: notebook_path must end in .ipynb (got ${absPath}).`;
|
|
81
|
+
}
|
|
82
|
+
const stats = statSync(absPath);
|
|
83
|
+
if (stats.size > 5 * 1024 * 1024) {
|
|
84
|
+
return `Error: notebook too large for direct edit (${Math.round(stats.size / 1024)}KB > 5MB cap).`;
|
|
85
|
+
}
|
|
86
|
+
const mode = (typeof args['mode'] === 'string' ? args['mode'] : 'replace');
|
|
87
|
+
const cellIndex = typeof args['cell_index'] === 'number' ? args['cell_index'] : -1;
|
|
88
|
+
const newSource = typeof args['new_source'] === 'string' ? args['new_source'] : '';
|
|
89
|
+
const cellType = (typeof args['cell_type'] === 'string' ? args['cell_type'] : 'code');
|
|
90
|
+
let nb;
|
|
91
|
+
try {
|
|
92
|
+
nb = JSON.parse(readFileSync(absPath, 'utf-8'));
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
return `Error: notebook JSON parse failed (${err.message}).`;
|
|
96
|
+
}
|
|
97
|
+
if (!Array.isArray(nb.cells)) {
|
|
98
|
+
return 'Error: notebook has no cells[] array.';
|
|
99
|
+
}
|
|
100
|
+
if (cellIndex < 0 || cellIndex > nb.cells.length) {
|
|
101
|
+
return `Error: cell_index ${cellIndex} out of range (0..${nb.cells.length}).`;
|
|
102
|
+
}
|
|
103
|
+
if (mode === 'replace') {
|
|
104
|
+
if (cellIndex >= nb.cells.length) {
|
|
105
|
+
return `Error: replace mode needs an existing cell. Use insert for cell_index ${cellIndex}.`;
|
|
106
|
+
}
|
|
107
|
+
const before = sourceToString(nb.cells[cellIndex].source);
|
|
108
|
+
nb.cells[cellIndex].source = stringToSource(newSource);
|
|
109
|
+
// Reset outputs + execution count for code cells when source changes.
|
|
110
|
+
if (nb.cells[cellIndex].cell_type === 'code') {
|
|
111
|
+
nb.cells[cellIndex].outputs = [];
|
|
112
|
+
nb.cells[cellIndex].execution_count = null;
|
|
113
|
+
}
|
|
114
|
+
writeFileSync(absPath, JSON.stringify(nb, null, 1) + '\n', 'utf-8');
|
|
115
|
+
const beforeLines = before.split('\n').length;
|
|
116
|
+
const afterLines = newSource.split('\n').length;
|
|
117
|
+
return `⏺ NotebookEdit(${pathArg}) — replaced cell ${cellIndex} (${beforeLines} → ${afterLines} lines, ${nb.cells[cellIndex].cell_type})`;
|
|
118
|
+
}
|
|
119
|
+
if (mode === 'insert') {
|
|
120
|
+
const newCell = cellType === 'code'
|
|
121
|
+
? { cell_type: 'code', source: stringToSource(newSource), metadata: {}, execution_count: null, outputs: [] }
|
|
122
|
+
: { cell_type: cellType, source: stringToSource(newSource), metadata: {} };
|
|
123
|
+
nb.cells.splice(cellIndex, 0, newCell);
|
|
124
|
+
writeFileSync(absPath, JSON.stringify(nb, null, 1) + '\n', 'utf-8');
|
|
125
|
+
return `⏺ NotebookEdit(${pathArg}) — inserted ${cellType} cell at index ${cellIndex} (${newSource.split('\n').length} lines)`;
|
|
126
|
+
}
|
|
127
|
+
if (mode === 'delete') {
|
|
128
|
+
if (cellIndex >= nb.cells.length) {
|
|
129
|
+
return `Error: cell_index ${cellIndex} out of range for delete (have ${nb.cells.length} cells).`;
|
|
130
|
+
}
|
|
131
|
+
const removed = nb.cells.splice(cellIndex, 1)[0];
|
|
132
|
+
writeFileSync(absPath, JSON.stringify(nb, null, 1) + '\n', 'utf-8');
|
|
133
|
+
return `⏺ NotebookEdit(${pathArg}) — deleted cell ${cellIndex} (${removed.cell_type})`;
|
|
134
|
+
}
|
|
135
|
+
return `Error: unknown mode "${mode}".`;
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=notebookTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notebookTools.js","sourceRoot":"","sources":["../../src/tools/notebookTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Search Tools - Combines file pattern matching and content search
|
|
3
|
+
*
|
|
4
|
+
* Provides a single, powerful Search tool that handles:
|
|
5
|
+
* - File pattern matching (glob)
|
|
6
|
+
* - Content search (regex/grep)
|
|
7
|
+
* - Definition finding
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolDefinition } from '../core/toolRuntime.js';
|
|
10
|
+
export declare function createSearchTools(workingDir: string): ToolDefinition[];
|
|
11
|
+
export { createSearchTools as createGrepTools };
|
|
12
|
+
//# sourceMappingURL=searchTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchTools.d.ts","sourceRoot":"","sources":["../../src/tools/searchTools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgF7D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAmGtE;AAiSD,OAAO,EAAE,iBAAiB,IAAI,eAAe,EAAE,CAAC"}
|