@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,605 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Checker & Auto-Updater for agi-cli
|
|
3
|
+
*
|
|
4
|
+
* This module provides a FULLY NON-INTERACTIVE update system that does not
|
|
5
|
+
* rely on stdin/raw mode, avoiding conflicts with the chat box input handling.
|
|
6
|
+
*
|
|
7
|
+
* Update behavior is controlled by user preferences:
|
|
8
|
+
* - autoUpdate: true -> Automatically update in background
|
|
9
|
+
* - autoUpdate: false -> Silently skip updates
|
|
10
|
+
* - autoUpdate: null -> Show notification banner with instructions
|
|
11
|
+
*/
|
|
12
|
+
import { exec, spawn } from 'node:child_process';
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { promisify } from 'node:util';
|
|
17
|
+
import { theme } from '../ui/theme.js';
|
|
18
|
+
const execAsync = promisify(exec);
|
|
19
|
+
let updateCheckCache = null;
|
|
20
|
+
let lastCheckTime = 0;
|
|
21
|
+
const CACHE_DURATION = 1000 * 60 * 60; // 1 hour
|
|
22
|
+
const AUTO_UPDATE_STATE_FILE = join(homedir(), '.trenchwork', 'update-state.json');
|
|
23
|
+
const AUTO_UPDATE_RETRY_INTERVAL = 1000 * 60 * 60 * 6; // 6 hours between install attempts
|
|
24
|
+
const INSTALL_TIMEOUT_MS = 1000 * 60 * 2; // 2 minutes
|
|
25
|
+
const QUIET_PERIOD = 1000 * 60 * 60 * 2; // 2 hours after an attempt
|
|
26
|
+
/**
|
|
27
|
+
* Check for updates from npm registry.
|
|
28
|
+
*/
|
|
29
|
+
export async function checkForUpdates(currentVersion, force = false) {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
// `force` bypasses the 1-hour cache — used by the on-demand /update command
|
|
32
|
+
// so a user who just heard about a release isn't told a stale "up to date".
|
|
33
|
+
if (!force && updateCheckCache && now - lastCheckTime < CACHE_DURATION) {
|
|
34
|
+
return updateCheckCache;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
// CRITICAL: must use the SCOPED package name `@trenchwork/coder`.
|
|
38
|
+
// Unscoped names on npm may be owned by unrelated publishers (the
|
|
39
|
+
// legacy unscoped `erosolar-coder` was someone else's, last published
|
|
40
|
+
// v1.0.86) — querying one of those returns a stale/foreign version
|
|
41
|
+
// that looks "older" than ours, so the update check silently never
|
|
42
|
+
// fires and users sit on outdated builds until they manually reinstall.
|
|
43
|
+
const { stdout } = await execAsync('npm view @trenchwork/coder version', {
|
|
44
|
+
timeout: 5000,
|
|
45
|
+
encoding: 'utf8',
|
|
46
|
+
});
|
|
47
|
+
const latest = stdout.trim();
|
|
48
|
+
const updateAvailable = compareVersions(latest, currentVersion) > 0;
|
|
49
|
+
updateCheckCache = {
|
|
50
|
+
current: currentVersion,
|
|
51
|
+
latest,
|
|
52
|
+
updateAvailable,
|
|
53
|
+
};
|
|
54
|
+
lastCheckTime = now;
|
|
55
|
+
return updateCheckCache;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Silently fail - don't block startup for update checks
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Attempt to auto-update the CLI when a newer version is available.
|
|
64
|
+
* This is throttled and disabled in CI/test environments or when explicitly opted out.
|
|
65
|
+
*/
|
|
66
|
+
export async function maybeAutoUpdate(currentVersion, options = {}) {
|
|
67
|
+
const { enabled, reason } = resolveAutoUpdateEnabled();
|
|
68
|
+
if (!enabled) {
|
|
69
|
+
return {
|
|
70
|
+
attempted: false,
|
|
71
|
+
updated: false,
|
|
72
|
+
skippedReason: reason ?? 'disabled',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
const state = readAutoUpdateState();
|
|
77
|
+
if (state.lastAttempt && now - state.lastAttempt < AUTO_UPDATE_RETRY_INTERVAL) {
|
|
78
|
+
return {
|
|
79
|
+
attempted: false,
|
|
80
|
+
updated: false,
|
|
81
|
+
skippedReason: 'recent-attempt',
|
|
82
|
+
latestVersion: state.lastSeenLatest,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const updateInfo = options.updateInfo ?? (await checkForUpdates(currentVersion));
|
|
86
|
+
if (!updateInfo) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
writeAutoUpdateState({
|
|
90
|
+
...state,
|
|
91
|
+
lastCheck: now,
|
|
92
|
+
lastSeenLatest: updateInfo.latest,
|
|
93
|
+
});
|
|
94
|
+
if (!updateInfo.updateAvailable) {
|
|
95
|
+
return {
|
|
96
|
+
attempted: false,
|
|
97
|
+
updated: false,
|
|
98
|
+
skippedReason: 'up-to-date',
|
|
99
|
+
latestVersion: updateInfo.latest,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (state.lastUpdatedVersion === updateInfo.latest) {
|
|
103
|
+
return {
|
|
104
|
+
attempted: false,
|
|
105
|
+
updated: false,
|
|
106
|
+
skippedReason: 'already-updated',
|
|
107
|
+
latestVersion: updateInfo.latest,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const command = resolveUpdateCommand();
|
|
111
|
+
options.logger?.(theme.info(`Updating trenchwork-coder to v${updateInfo.latest} (current v${updateInfo.current})...`));
|
|
112
|
+
try {
|
|
113
|
+
await execAsync(command, {
|
|
114
|
+
timeout: INSTALL_TIMEOUT_MS,
|
|
115
|
+
maxBuffer: 1024 * 1024 * 4,
|
|
116
|
+
env: {
|
|
117
|
+
...process.env,
|
|
118
|
+
npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
writeAutoUpdateState({
|
|
122
|
+
...state,
|
|
123
|
+
lastCheck: now,
|
|
124
|
+
lastSeenLatest: updateInfo.latest,
|
|
125
|
+
lastAttempt: now,
|
|
126
|
+
lastAttemptedVersion: updateInfo.latest,
|
|
127
|
+
lastUpdatedVersion: updateInfo.latest,
|
|
128
|
+
});
|
|
129
|
+
options.logger?.(theme.success(`Auto-update complete. Restart agi to use v${updateInfo.latest}.`));
|
|
130
|
+
return {
|
|
131
|
+
attempted: true,
|
|
132
|
+
updated: true,
|
|
133
|
+
latestVersion: updateInfo.latest,
|
|
134
|
+
command,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
139
|
+
writeAutoUpdateState({
|
|
140
|
+
...state,
|
|
141
|
+
lastCheck: now,
|
|
142
|
+
lastSeenLatest: updateInfo.latest,
|
|
143
|
+
lastAttempt: now,
|
|
144
|
+
lastAttemptedVersion: updateInfo.latest,
|
|
145
|
+
});
|
|
146
|
+
options.logger?.(theme.warning(`Auto-update failed: ${message}. Run "${command}" manually if you want the latest build.`));
|
|
147
|
+
return {
|
|
148
|
+
attempted: true,
|
|
149
|
+
updated: false,
|
|
150
|
+
latestVersion: updateInfo.latest,
|
|
151
|
+
skippedReason: 'install-failed',
|
|
152
|
+
error: message,
|
|
153
|
+
command,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Compare semantic versions
|
|
159
|
+
* Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
|
|
160
|
+
*/
|
|
161
|
+
function compareVersions(v1, v2) {
|
|
162
|
+
const parts1 = v1.replace(/^v/, '').split('.').map(Number);
|
|
163
|
+
const parts2 = v2.replace(/^v/, '').split('.').map(Number);
|
|
164
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
165
|
+
const p1 = parts1[i] || 0;
|
|
166
|
+
const p2 = parts2[i] || 0;
|
|
167
|
+
if (p1 > p2)
|
|
168
|
+
return 1;
|
|
169
|
+
if (p1 < p2)
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Format update notification message
|
|
176
|
+
*/
|
|
177
|
+
export function formatUpdateNotification(updateInfo, note) {
|
|
178
|
+
const width = 57;
|
|
179
|
+
const border = '─'.repeat(width - 2);
|
|
180
|
+
const padLine = (text, colorize = (v) => v) => {
|
|
181
|
+
const raw = text.length > width - 4 ? text.slice(0, width - 7) + '...' : text;
|
|
182
|
+
const padding = ' '.repeat(Math.max(0, width - 4 - raw.length));
|
|
183
|
+
return `${theme.warning('│')} ${colorize(raw)}${padding}${theme.warning('│')}`;
|
|
184
|
+
};
|
|
185
|
+
const lines = [
|
|
186
|
+
'',
|
|
187
|
+
theme.warning(`╭${border}╮`),
|
|
188
|
+
padLine('📦 Update Available!', theme.info),
|
|
189
|
+
padLine(`Current: ${updateInfo.current} → Latest: ${updateInfo.latest}`, (text) => {
|
|
190
|
+
return text
|
|
191
|
+
.replace(updateInfo.current, theme.ui.muted(updateInfo.current))
|
|
192
|
+
.replace(updateInfo.latest, theme.success(updateInfo.latest));
|
|
193
|
+
}),
|
|
194
|
+
];
|
|
195
|
+
if (note) {
|
|
196
|
+
lines.push(padLine(note, theme.ui.muted));
|
|
197
|
+
}
|
|
198
|
+
lines.push(padLine('Run: npm install -g @trenchwork/coder@latest', theme.primary), theme.warning(`╰${border}╯`), '');
|
|
199
|
+
return lines.join('\n');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Format a simple update notification banner (non-interactive).
|
|
203
|
+
* Returns a string that can be displayed to the user.
|
|
204
|
+
*/
|
|
205
|
+
export function formatUpdateBanner(updateInfo, preference) {
|
|
206
|
+
const lines = [];
|
|
207
|
+
lines.push(theme.info(`Update available: ${theme.ui.muted(updateInfo.current)} → ${theme.success(updateInfo.latest)}`));
|
|
208
|
+
if (preference === 'auto') {
|
|
209
|
+
lines.push(theme.ui.muted(' Auto-update enabled. Installing in background...'));
|
|
210
|
+
}
|
|
211
|
+
else if (preference === 'skip') {
|
|
212
|
+
lines.push(theme.ui.muted(' Auto-update disabled. Run /update check to update manually.'));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
lines.push(theme.ui.muted(' Run /update auto to enable auto-updates, or /update check to update now.'));
|
|
216
|
+
}
|
|
217
|
+
return lines.join('\n');
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get the user's update decision based on their saved preference.
|
|
221
|
+
* No interactive input required - purely preference-based.
|
|
222
|
+
*/
|
|
223
|
+
export function getUpdateDecision(autoUpdatePref) {
|
|
224
|
+
if (autoUpdatePref === true)
|
|
225
|
+
return 'auto';
|
|
226
|
+
if (autoUpdatePref === false)
|
|
227
|
+
return 'skip';
|
|
228
|
+
return 'ask';
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check if we should show update notification (respects quiet period after recent attempts).
|
|
232
|
+
*/
|
|
233
|
+
export function shouldShowUpdateNotification(state) {
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
if (state.lastAttempt && now - state.lastAttempt < QUIET_PERIOD) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
function resolveAutoUpdateEnabled() {
|
|
241
|
+
const disabledEnv = process.env['TRENCHWORK_DISABLE_AUTO_UPDATE'];
|
|
242
|
+
const autoEnv = process.env['TRENCHWORK_AUTO_UPDATE'];
|
|
243
|
+
const explicitDisable = parseBoolean(autoEnv) === false ||
|
|
244
|
+
(typeof disabledEnv === 'string' && parseBoolean(disabledEnv) !== false);
|
|
245
|
+
if (explicitDisable) {
|
|
246
|
+
return { enabled: false, reason: 'disabled-by-env' };
|
|
247
|
+
}
|
|
248
|
+
if (process.env['CI'] === 'true' || process.env['CI'] === '1') {
|
|
249
|
+
return { enabled: false, reason: 'ci' };
|
|
250
|
+
}
|
|
251
|
+
if (process.env['NODE_ENV'] === 'test' || process.env['JEST_WORKER_ID']) {
|
|
252
|
+
return { enabled: false, reason: 'test' };
|
|
253
|
+
}
|
|
254
|
+
if (isRunningFromSource()) {
|
|
255
|
+
return { enabled: false, reason: 'dev-mode' };
|
|
256
|
+
}
|
|
257
|
+
return { enabled: true };
|
|
258
|
+
}
|
|
259
|
+
function isRunningFromSource() {
|
|
260
|
+
try {
|
|
261
|
+
const filePath = new URL(import.meta.url).pathname;
|
|
262
|
+
return filePath.includes('/src/');
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function parseBoolean(value) {
|
|
269
|
+
if (typeof value !== 'string')
|
|
270
|
+
return null;
|
|
271
|
+
const normalized = value.trim().toLowerCase();
|
|
272
|
+
if (['1', 'true', 'yes', 'on', 'y'].includes(normalized))
|
|
273
|
+
return true;
|
|
274
|
+
if (['0', 'false', 'no', 'off', 'n'].includes(normalized))
|
|
275
|
+
return false;
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Read the auto-update state from disk.
|
|
280
|
+
*/
|
|
281
|
+
export function readAutoUpdateState() {
|
|
282
|
+
try {
|
|
283
|
+
if (!existsSync(AUTO_UPDATE_STATE_FILE)) {
|
|
284
|
+
return {};
|
|
285
|
+
}
|
|
286
|
+
const raw = readFileSync(AUTO_UPDATE_STATE_FILE, 'utf8');
|
|
287
|
+
const parsed = JSON.parse(raw);
|
|
288
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
289
|
+
return {};
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
lastCheck: typeof parsed.lastCheck === 'number' ? parsed.lastCheck : undefined,
|
|
293
|
+
lastSeenLatest: typeof parsed.lastSeenLatest === 'string' && parsed.lastSeenLatest.trim()
|
|
294
|
+
? parsed.lastSeenLatest.trim()
|
|
295
|
+
: undefined,
|
|
296
|
+
lastAttempt: typeof parsed.lastAttempt === 'number' ? parsed.lastAttempt : undefined,
|
|
297
|
+
lastAttemptedVersion: typeof parsed.lastAttemptedVersion === 'string' && parsed.lastAttemptedVersion.trim()
|
|
298
|
+
? parsed.lastAttemptedVersion.trim()
|
|
299
|
+
: undefined,
|
|
300
|
+
lastUpdatedVersion: typeof parsed.lastUpdatedVersion === 'string' && parsed.lastUpdatedVersion.trim()
|
|
301
|
+
? parsed.lastUpdatedVersion.trim()
|
|
302
|
+
: undefined,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return {};
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function writeAutoUpdateState(state) {
|
|
310
|
+
try {
|
|
311
|
+
mkdirSync(join(homedir(), '.trenchwork'), { recursive: true });
|
|
312
|
+
writeFileSync(AUTO_UPDATE_STATE_FILE, JSON.stringify(state, null, 2));
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// Best-effort only
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function resolveUpdateCommand() {
|
|
319
|
+
const override = process.env['TRENCHWORK_UPDATE_COMMAND'];
|
|
320
|
+
if (override && override.trim()) {
|
|
321
|
+
return override.trim();
|
|
322
|
+
}
|
|
323
|
+
return 'npm install -g @trenchwork/coder@latest';
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* DEPRECATED: Interactive prompts conflict with chat box input handling.
|
|
327
|
+
* Use getUpdateDecision() for preference-based decisions instead.
|
|
328
|
+
*
|
|
329
|
+
* This function now returns skip without any interaction.
|
|
330
|
+
* The interactive prompt has been removed to avoid stdin conflicts.
|
|
331
|
+
*/
|
|
332
|
+
export async function promptForUpdate(_updateInfo) {
|
|
333
|
+
// Always skip - preferences should be used via getUpdateDecision() instead
|
|
334
|
+
// This function is kept for backward compatibility but should not be used
|
|
335
|
+
return { choice: 'skip', rememberChoice: false };
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Perform a background update without blocking the main process.
|
|
339
|
+
* Spawns the update command in a detached process.
|
|
340
|
+
*/
|
|
341
|
+
export async function performBackgroundUpdate(updateInfo, logger) {
|
|
342
|
+
const command = resolveUpdateCommand();
|
|
343
|
+
logger?.(theme.info(`Updating agi-cli to v${updateInfo.latest} in background...`));
|
|
344
|
+
try {
|
|
345
|
+
// Parse command into executable and args
|
|
346
|
+
const parts = command.split(/\s+/).filter(Boolean);
|
|
347
|
+
const executable = parts[0];
|
|
348
|
+
if (!executable) {
|
|
349
|
+
throw new Error('Invalid update command');
|
|
350
|
+
}
|
|
351
|
+
const args = parts.slice(1);
|
|
352
|
+
// Spawn detached process that continues after parent exits
|
|
353
|
+
const child = spawn(executable, args, {
|
|
354
|
+
detached: true,
|
|
355
|
+
stdio: 'ignore',
|
|
356
|
+
env: {
|
|
357
|
+
...process.env,
|
|
358
|
+
npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
// Unref so parent can exit independently
|
|
362
|
+
if (child.unref) {
|
|
363
|
+
child.unref();
|
|
364
|
+
}
|
|
365
|
+
// Record that we started an update
|
|
366
|
+
const state = readAutoUpdateState();
|
|
367
|
+
writeAutoUpdateState({
|
|
368
|
+
...state,
|
|
369
|
+
lastCheck: Date.now(),
|
|
370
|
+
lastSeenLatest: updateInfo.latest,
|
|
371
|
+
lastAttempt: Date.now(),
|
|
372
|
+
lastAttemptedVersion: updateInfo.latest,
|
|
373
|
+
// Don't set lastUpdatedVersion until we confirm success
|
|
374
|
+
});
|
|
375
|
+
logger?.(theme.ui.muted(`Update started. New version will be available on next launch.`));
|
|
376
|
+
return { started: true };
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
380
|
+
logger?.(theme.warning(`Background update failed to start: ${message}`));
|
|
381
|
+
return { started: false, error: message };
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Perform the update with progress feedback (blocking).
|
|
386
|
+
*/
|
|
387
|
+
export async function performUpdate(updateInfo, logger) {
|
|
388
|
+
const command = resolveUpdateCommand();
|
|
389
|
+
logger?.(theme.info(`Updating agi-cli to v${updateInfo.latest}...`));
|
|
390
|
+
try {
|
|
391
|
+
await execAsync(command, {
|
|
392
|
+
timeout: INSTALL_TIMEOUT_MS,
|
|
393
|
+
maxBuffer: 1024 * 1024 * 4,
|
|
394
|
+
env: {
|
|
395
|
+
...process.env,
|
|
396
|
+
npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
const state = readAutoUpdateState();
|
|
400
|
+
writeAutoUpdateState({
|
|
401
|
+
...state,
|
|
402
|
+
lastCheck: Date.now(),
|
|
403
|
+
lastSeenLatest: updateInfo.latest,
|
|
404
|
+
lastAttempt: Date.now(),
|
|
405
|
+
lastAttemptedVersion: updateInfo.latest,
|
|
406
|
+
lastUpdatedVersion: updateInfo.latest,
|
|
407
|
+
});
|
|
408
|
+
logger?.(theme.success(`Updated to v${updateInfo.latest}. Restart agi to use the new version.`));
|
|
409
|
+
return { success: true };
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
413
|
+
logger?.(theme.warning(`Update failed: ${message}`));
|
|
414
|
+
logger?.(theme.ui.muted(`Run "${command}" manually to update.`));
|
|
415
|
+
return { success: false, error: message };
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
// Session state file for resuming work after updates
|
|
419
|
+
const SESSION_STATE_FILE = join(homedir(), '.trenchwork', 'session-state.json');
|
|
420
|
+
/**
|
|
421
|
+
* Save session state before update for resumption after restart.
|
|
422
|
+
*/
|
|
423
|
+
export function saveSessionState(state) {
|
|
424
|
+
try {
|
|
425
|
+
mkdirSync(join(homedir(), '.trenchwork'), { recursive: true });
|
|
426
|
+
const fullState = {
|
|
427
|
+
...state,
|
|
428
|
+
timestamp: Date.now(),
|
|
429
|
+
};
|
|
430
|
+
writeFileSync(SESSION_STATE_FILE, JSON.stringify(fullState, null, 2));
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
// Best-effort only
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Load session state for resumption after update.
|
|
438
|
+
*/
|
|
439
|
+
export function loadSessionState() {
|
|
440
|
+
try {
|
|
441
|
+
if (!existsSync(SESSION_STATE_FILE)) {
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
const raw = readFileSync(SESSION_STATE_FILE, 'utf8');
|
|
445
|
+
const parsed = JSON.parse(raw);
|
|
446
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
return parsed;
|
|
450
|
+
}
|
|
451
|
+
catch {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Clear session state after successful resumption.
|
|
457
|
+
*/
|
|
458
|
+
export function clearSessionState() {
|
|
459
|
+
try {
|
|
460
|
+
if (existsSync(SESSION_STATE_FILE)) {
|
|
461
|
+
writeFileSync(SESSION_STATE_FILE, '{}');
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
catch {
|
|
465
|
+
// Best-effort only
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Check if there's a pending session to resume.
|
|
470
|
+
*/
|
|
471
|
+
export function hasPendingSession() {
|
|
472
|
+
const state = loadSessionState();
|
|
473
|
+
if (!state || !state.timestamp)
|
|
474
|
+
return false;
|
|
475
|
+
// Session is valid if less than 24 hours old
|
|
476
|
+
const maxAge = 1000 * 60 * 60 * 24;
|
|
477
|
+
return Date.now() - state.timestamp < maxAge;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Perform update and automatically restart to continue work.
|
|
481
|
+
* Saves session state, performs update, then spawns new process with --resume flag.
|
|
482
|
+
*/
|
|
483
|
+
export async function updateAndContinue(updateInfo, sessionState, logger) {
|
|
484
|
+
// Save current session state
|
|
485
|
+
logger?.(theme.info('Saving session state before update...'));
|
|
486
|
+
saveSessionState(sessionState);
|
|
487
|
+
// Perform the update
|
|
488
|
+
const updateResult = await performUpdate(updateInfo, logger);
|
|
489
|
+
if (!updateResult.success) {
|
|
490
|
+
return { success: false, error: updateResult.error };
|
|
491
|
+
}
|
|
492
|
+
// Spawn new process to continue work
|
|
493
|
+
logger?.(theme.info('Restarting to continue with updated version...'));
|
|
494
|
+
try {
|
|
495
|
+
const cliPath = process.argv[1] || 'agi';
|
|
496
|
+
const args = ['--resume'];
|
|
497
|
+
// Add working directory
|
|
498
|
+
if (sessionState.workingDirectory) {
|
|
499
|
+
args.push('--cwd', sessionState.workingDirectory);
|
|
500
|
+
}
|
|
501
|
+
// Spawn new process
|
|
502
|
+
const child = spawn(process.execPath, [cliPath, ...args], {
|
|
503
|
+
detached: true,
|
|
504
|
+
stdio: 'inherit',
|
|
505
|
+
cwd: sessionState.workingDirectory || process.cwd(),
|
|
506
|
+
env: {
|
|
507
|
+
...process.env,
|
|
508
|
+
TRENCHWORK_RESUMED: 'true',
|
|
509
|
+
TRENCHWORK_RESUME_VERSION: updateInfo.latest,
|
|
510
|
+
},
|
|
511
|
+
});
|
|
512
|
+
// Don't wait for child
|
|
513
|
+
if (child.unref) {
|
|
514
|
+
child.unref();
|
|
515
|
+
}
|
|
516
|
+
logger?.(theme.success(`Updated and restarting. New process launched.`));
|
|
517
|
+
// Exit current process after a short delay
|
|
518
|
+
setTimeout(() => {
|
|
519
|
+
process.exit(0);
|
|
520
|
+
}, 500);
|
|
521
|
+
return { success: true, restarting: true };
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
525
|
+
logger?.(theme.warning(`Failed to restart: ${message}`));
|
|
526
|
+
// The update itself succeeded (performUpdate returned ok above); only the
|
|
527
|
+
// auto-restart spawn failed. Report that honestly — success with
|
|
528
|
+
// restarting:false — instead of success:true alongside a populated `error`
|
|
529
|
+
// (a self-contradiction). The restart failure is surfaced via the warning.
|
|
530
|
+
return { success: true, restarting: false };
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Install specific npm package version and optionally restart.
|
|
535
|
+
*/
|
|
536
|
+
export async function installPackageVersion(packageName, version, options = {}) {
|
|
537
|
+
const { global: isGlobal = true, restart = false, sessionState, logger } = options;
|
|
538
|
+
const globalFlag = isGlobal ? '-g ' : '';
|
|
539
|
+
const command = `npm install ${globalFlag}${packageName}@${version}`;
|
|
540
|
+
logger?.(theme.info(`Installing ${packageName}@${version}...`));
|
|
541
|
+
// Save session if restart requested
|
|
542
|
+
if (restart && sessionState) {
|
|
543
|
+
saveSessionState(sessionState);
|
|
544
|
+
}
|
|
545
|
+
try {
|
|
546
|
+
await execAsync(command, {
|
|
547
|
+
timeout: INSTALL_TIMEOUT_MS,
|
|
548
|
+
maxBuffer: 1024 * 1024 * 4,
|
|
549
|
+
env: {
|
|
550
|
+
...process.env,
|
|
551
|
+
npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
|
|
552
|
+
},
|
|
553
|
+
});
|
|
554
|
+
logger?.(theme.success(`Installed ${packageName}@${version}`));
|
|
555
|
+
// Restart if requested
|
|
556
|
+
if (restart) {
|
|
557
|
+
logger?.(theme.info('Restarting...'));
|
|
558
|
+
const cliPath = process.argv[1] || 'agi';
|
|
559
|
+
const args = ['--resume'];
|
|
560
|
+
spawn(process.execPath, [cliPath, ...args], {
|
|
561
|
+
detached: true,
|
|
562
|
+
stdio: 'inherit',
|
|
563
|
+
cwd: sessionState?.workingDirectory || process.cwd(),
|
|
564
|
+
env: {
|
|
565
|
+
...process.env,
|
|
566
|
+
TRENCHWORK_RESUMED: 'true',
|
|
567
|
+
TRENCHWORK_RESUME_VERSION: version,
|
|
568
|
+
},
|
|
569
|
+
}).unref();
|
|
570
|
+
setTimeout(() => process.exit(0), 500);
|
|
571
|
+
}
|
|
572
|
+
return { success: true };
|
|
573
|
+
}
|
|
574
|
+
catch (error) {
|
|
575
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
576
|
+
logger?.(theme.warning(`Installation failed: ${message}`));
|
|
577
|
+
return { success: false, error: message };
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Run npm install in current directory.
|
|
582
|
+
*/
|
|
583
|
+
export async function runNpmInstall(cwd, logger) {
|
|
584
|
+
const workingDir = cwd || process.cwd();
|
|
585
|
+
logger?.(theme.info(`Running npm install in ${workingDir}...`));
|
|
586
|
+
try {
|
|
587
|
+
await execAsync('npm install', {
|
|
588
|
+
timeout: INSTALL_TIMEOUT_MS * 2, // Allow more time for full install
|
|
589
|
+
maxBuffer: 1024 * 1024 * 10,
|
|
590
|
+
cwd: workingDir,
|
|
591
|
+
env: {
|
|
592
|
+
...process.env,
|
|
593
|
+
npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'warn',
|
|
594
|
+
},
|
|
595
|
+
});
|
|
596
|
+
logger?.(theme.success('npm install completed'));
|
|
597
|
+
return { success: true };
|
|
598
|
+
}
|
|
599
|
+
catch (error) {
|
|
600
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
601
|
+
logger?.(theme.warning(`npm install failed: ${message}`));
|
|
602
|
+
return { success: false, error: message };
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=updateChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateChecker.js","sourceRoot":"","sources":["../../src/core/updateChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local usage meter — counts what THIS install consumed: DeepSeek tokens
|
|
3
|
+
* (input + output) and Tavily searches. Persisted across sessions in
|
|
4
|
+
* ~/.trenchwork/usage.json (or $TRENCHWORK_HOME), plus a per-session tally.
|
|
5
|
+
*
|
|
6
|
+
* This is the per-install half of the picture. The FREE POOL totals and
|
|
7
|
+
* account-wide *remaining* are operator/backend numbers (the hosted Tavily
|
|
8
|
+
* account's 1,000/mo + 5,000 one-time bonus, and the operator's hosted DeepSeek
|
|
9
|
+
* budget) — the portal aggregates every install's usage against them. The quota
|
|
10
|
+
* constants below are exported so the backend + portal share one definition.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TAVILY_MONTHLY_FREE = 1000;
|
|
13
|
+
export declare const TAVILY_ONE_TIME_BONUS = 5000;
|
|
14
|
+
export interface UsageTotals {
|
|
15
|
+
deepseekInputTokens: number;
|
|
16
|
+
deepseekOutputTokens: number;
|
|
17
|
+
tavilySearches: number;
|
|
18
|
+
}
|
|
19
|
+
/** Record a DeepSeek turn's token usage (input/prompt + output/completion). */
|
|
20
|
+
export declare function recordDeepSeekUsage(inputTokens: unknown, outputTokens: unknown): void;
|
|
21
|
+
/** Record one Tavily web search. */
|
|
22
|
+
export declare function recordTavilySearch(): void;
|
|
23
|
+
/** Usage so far — this session and all-time (persisted). */
|
|
24
|
+
export declare function getUsage(): {
|
|
25
|
+
session: UsageTotals;
|
|
26
|
+
cumulative: UsageTotals;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/core/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAwCD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAUrF;AAED,oCAAoC;AACpC,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,IAAI;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAE5E"}
|