deepseek-coder-cli 1.0.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 +21 -0
- package/README.md +422 -0
- package/agents/agi-code.rules.json +87 -0
- package/agents/general.rules.json +171 -0
- package/dist/bin/cliMode.d.ts +8 -0
- package/dist/bin/cliMode.d.ts.map +1 -0
- package/dist/bin/cliMode.js +20 -0
- package/dist/bin/cliMode.js.map +1 -0
- package/dist/bin/deepseek.d.ts +16 -0
- package/dist/bin/deepseek.d.ts.map +1 -0
- package/dist/bin/deepseek.js +737 -0
- package/dist/bin/deepseek.js.map +1 -0
- package/dist/bin/erosolar.d.ts +7 -0
- package/dist/bin/erosolar.d.ts.map +1 -0
- package/dist/bin/erosolar.js +7 -0
- package/dist/bin/erosolar.js.map +1 -0
- package/dist/bin/selfTest.d.ts +14 -0
- package/dist/bin/selfTest.d.ts.map +1 -0
- package/dist/bin/selfTest.js +304 -0
- package/dist/bin/selfTest.js.map +1 -0
- package/dist/capabilities/appleSecurityCapability.d.ts +57 -0
- package/dist/capabilities/appleSecurityCapability.d.ts.map +1 -0
- package/dist/capabilities/appleSecurityCapability.js +197 -0
- package/dist/capabilities/appleSecurityCapability.js.map +1 -0
- package/dist/capabilities/authorizedSecurityCapability.d.ts +17 -0
- package/dist/capabilities/authorizedSecurityCapability.d.ts.map +1 -0
- package/dist/capabilities/authorizedSecurityCapability.js +333 -0
- package/dist/capabilities/authorizedSecurityCapability.js.map +1 -0
- package/dist/capabilities/autoEnhancementCapability.d.ts +98 -0
- package/dist/capabilities/autoEnhancementCapability.d.ts.map +1 -0
- package/dist/capabilities/autoEnhancementCapability.js +455 -0
- package/dist/capabilities/autoEnhancementCapability.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/biocognitiveWarfare.d.ts +136 -0
- package/dist/capabilities/biocognitiveWarfare.d.ts.map +1 -0
- package/dist/capabilities/biocognitiveWarfare.js +603 -0
- package/dist/capabilities/biocognitiveWarfare.js.map +1 -0
- package/dist/capabilities/chineseCnoIntegration.d.ts +60 -0
- package/dist/capabilities/chineseCnoIntegration.d.ts.map +1 -0
- package/dist/capabilities/chineseCnoIntegration.js +253 -0
- package/dist/capabilities/chineseCnoIntegration.js.map +1 -0
- package/dist/capabilities/cnoCapability.d.ts +110 -0
- package/dist/capabilities/cnoCapability.d.ts.map +1 -0
- package/dist/capabilities/cnoCapability.js +785 -0
- package/dist/capabilities/cnoCapability.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/eliteCryptoMilitaryCapability.d.ts +99 -0
- package/dist/capabilities/eliteCryptoMilitaryCapability.d.ts.map +1 -0
- package/dist/capabilities/eliteCryptoMilitaryCapability.js +618 -0
- package/dist/capabilities/eliteCryptoMilitaryCapability.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 +160 -0
- package/dist/capabilities/gitHistoryCapability.js.map +1 -0
- package/dist/capabilities/index.d.ts +26 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +26 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/integratedUnifiedCapability.d.ts +105 -0
- package/dist/capabilities/integratedUnifiedCapability.d.ts.map +1 -0
- package/dist/capabilities/integratedUnifiedCapability.js +422 -0
- package/dist/capabilities/integratedUnifiedCapability.js.map +1 -0
- package/dist/capabilities/maxOffensiveUkraineCapability.d.ts +46 -0
- package/dist/capabilities/maxOffensiveUkraineCapability.d.ts.map +1 -0
- package/dist/capabilities/maxOffensiveUkraineCapability.js +725 -0
- package/dist/capabilities/maxOffensiveUkraineCapability.js.map +1 -0
- package/dist/capabilities/migrationUtilities.d.ts +128 -0
- package/dist/capabilities/migrationUtilities.d.ts.map +1 -0
- package/dist/capabilities/migrationUtilities.js +658 -0
- package/dist/capabilities/migrationUtilities.js.map +1 -0
- package/dist/capabilities/offensiveDestructionCapability.d.ts +98 -0
- package/dist/capabilities/offensiveDestructionCapability.d.ts.map +1 -0
- package/dist/capabilities/offensiveDestructionCapability.js +848 -0
- package/dist/capabilities/offensiveDestructionCapability.js.map +1 -0
- package/dist/capabilities/quantumSpaceWarfare.d.ts +108 -0
- package/dist/capabilities/quantumSpaceWarfare.d.ts.map +1 -0
- package/dist/capabilities/quantumSpaceWarfare.js +342 -0
- package/dist/capabilities/quantumSpaceWarfare.js.map +1 -0
- package/dist/capabilities/readmeIntegration.d.ts +161 -0
- package/dist/capabilities/readmeIntegration.d.ts.map +1 -0
- package/dist/capabilities/readmeIntegration.js +1034 -0
- package/dist/capabilities/readmeIntegration.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/selfUpdateSystem.d.ts +122 -0
- package/dist/capabilities/selfUpdateSystem.d.ts.map +1 -0
- package/dist/capabilities/selfUpdateSystem.js +725 -0
- package/dist/capabilities/selfUpdateSystem.js.map +1 -0
- package/dist/capabilities/sharedMilitaryInfrastructure.d.ts +89 -0
- package/dist/capabilities/sharedMilitaryInfrastructure.d.ts.map +1 -0
- package/dist/capabilities/sharedMilitaryInfrastructure.js +233 -0
- package/dist/capabilities/sharedMilitaryInfrastructure.js.map +1 -0
- package/dist/capabilities/simpleSecurityCapability.d.ts +36 -0
- package/dist/capabilities/simpleSecurityCapability.d.ts.map +1 -0
- package/dist/capabilities/simpleSecurityCapability.js +271 -0
- package/dist/capabilities/simpleSecurityCapability.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/ultimateChineseCno.d.ts +115 -0
- package/dist/capabilities/ultimateChineseCno.d.ts.map +1 -0
- package/dist/capabilities/ultimateChineseCno.js +516 -0
- package/dist/capabilities/ultimateChineseCno.js.map +1 -0
- package/dist/capabilities/ultimateIntegrationDemo.d.ts +54 -0
- package/dist/capabilities/ultimateIntegrationDemo.d.ts.map +1 -0
- package/dist/capabilities/ultimateIntegrationDemo.js +423 -0
- package/dist/capabilities/ultimateIntegrationDemo.js.map +1 -0
- package/dist/capabilities/unifiedMilitaryCapability.d.ts +63 -0
- package/dist/capabilities/unifiedMilitaryCapability.d.ts.map +1 -0
- package/dist/capabilities/unifiedMilitaryCapability.js +384 -0
- package/dist/capabilities/unifiedMilitaryCapability.js.map +1 -0
- package/dist/capabilities/universalCapabilityFramework.d.ts +352 -0
- package/dist/capabilities/universalCapabilityFramework.d.ts.map +1 -0
- package/dist/capabilities/universalCapabilityFramework.js +1056 -0
- package/dist/capabilities/universalCapabilityFramework.js.map +1 -0
- package/dist/capabilities/universalSecurityCapability.d.ts +46 -0
- package/dist/capabilities/universalSecurityCapability.d.ts.map +1 -0
- package/dist/capabilities/universalSecurityCapability.js +580 -0
- package/dist/capabilities/universalSecurityCapability.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/capabilities/zeroDayDiscoveryCapability.d.ts +31 -0
- package/dist/capabilities/zeroDayDiscoveryCapability.d.ts.map +1 -0
- package/dist/capabilities/zeroDayDiscoveryCapability.js +183 -0
- package/dist/capabilities/zeroDayDiscoveryCapability.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +155 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts/agent-profiles.schema.json +43 -0
- package/dist/contracts/agent-schemas.json +466 -0
- package/dist/contracts/models.schema.json +9 -0
- package/dist/contracts/module-schema.json +430 -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 +82 -0
- package/dist/contracts/unified-schema.json +757 -0
- package/dist/contracts/v1/agent.d.ts +179 -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/agent.d.ts +287 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +1563 -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/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/agiCore.d.ts +290 -0
- package/dist/core/agiCore.d.ts.map +1 -0
- package/dist/core/agiCore.js +1348 -0
- package/dist/core/agiCore.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/antiTermination.d.ts +226 -0
- package/dist/core/antiTermination.d.ts.map +1 -0
- package/dist/core/antiTermination.js +713 -0
- package/dist/core/antiTermination.js.map +1 -0
- package/dist/core/appleSecurityAudit.d.ts +98 -0
- package/dist/core/appleSecurityAudit.d.ts.map +1 -0
- package/dist/core/appleSecurityAudit.js +505 -0
- package/dist/core/appleSecurityAudit.js.map +1 -0
- package/dist/core/appleSecurityIntegration.d.ts +130 -0
- package/dist/core/appleSecurityIntegration.d.ts.map +1 -0
- package/dist/core/appleSecurityIntegration.js +697 -0
- package/dist/core/appleSecurityIntegration.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/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 +1073 -0
- package/dist/core/contextManager.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 +123 -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/deepBugAnalyzer.d.ts +25 -0
- package/dist/core/deepBugAnalyzer.d.ts.map +1 -0
- package/dist/core/deepBugAnalyzer.js +44 -0
- package/dist/core/deepBugAnalyzer.js.map +1 -0
- package/dist/core/dualTournament.d.ts +110 -0
- package/dist/core/dualTournament.d.ts.map +1 -0
- package/dist/core/dualTournament.js +270 -0
- package/dist/core/dualTournament.js.map +1 -0
- package/dist/core/dynamicGuardrails.d.ts +207 -0
- package/dist/core/dynamicGuardrails.d.ts.map +1 -0
- package/dist/core/dynamicGuardrails.js +516 -0
- package/dist/core/dynamicGuardrails.js.map +1 -0
- package/dist/core/embeddingProviders.d.ts +80 -0
- package/dist/core/embeddingProviders.d.ts.map +1 -0
- package/dist/core/embeddingProviders.js +241 -0
- package/dist/core/embeddingProviders.js.map +1 -0
- package/dist/core/episodicMemory.d.ts +259 -0
- package/dist/core/episodicMemory.d.ts.map +1 -0
- package/dist/core/episodicMemory.js +833 -0
- package/dist/core/episodicMemory.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 +115 -0
- package/dist/core/errors/safetyValidator.d.ts.map +1 -0
- package/dist/core/errors/safetyValidator.js +302 -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/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/flowProtection.d.ts +154 -0
- package/dist/core/flowProtection.d.ts.map +1 -0
- package/dist/core/flowProtection.js +436 -0
- package/dist/core/flowProtection.js.map +1 -0
- package/dist/core/gitWorktreeManager.d.ts +126 -0
- package/dist/core/gitWorktreeManager.d.ts.map +1 -0
- package/dist/core/gitWorktreeManager.js +403 -0
- package/dist/core/gitWorktreeManager.js.map +1 -0
- package/dist/core/guardrails.d.ts +150 -0
- package/dist/core/guardrails.d.ts.map +1 -0
- package/dist/core/guardrails.js +360 -0
- package/dist/core/guardrails.js.map +1 -0
- package/dist/core/hallucinationGuard.d.ts +57 -0
- package/dist/core/hallucinationGuard.d.ts.map +1 -0
- package/dist/core/hallucinationGuard.js +237 -0
- package/dist/core/hallucinationGuard.js.map +1 -0
- package/dist/core/hooks.d.ts +113 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +364 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/hotReload.d.ts +154 -0
- package/dist/core/hotReload.d.ts.map +1 -0
- package/dist/core/hotReload.js +451 -0
- package/dist/core/hotReload.js.map +1 -0
- package/dist/core/hypothesisEngine.d.ts +27 -0
- package/dist/core/hypothesisEngine.d.ts.map +1 -0
- package/dist/core/hypothesisEngine.js +58 -0
- package/dist/core/hypothesisEngine.js.map +1 -0
- package/dist/core/index.d.ts +26 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +54 -0
- package/dist/core/index.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 +421 -0
- package/dist/core/inputProtection.js.map +1 -0
- package/dist/core/liveGCPVerification.d.ts +41 -0
- package/dist/core/liveGCPVerification.d.ts.map +1 -0
- package/dist/core/liveGCPVerification.js +745 -0
- package/dist/core/liveGCPVerification.js.map +1 -0
- package/dist/core/modelDiscovery.d.ts +105 -0
- package/dist/core/modelDiscovery.d.ts.map +1 -0
- package/dist/core/modelDiscovery.js +740 -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 +80 -0
- package/dist/core/multilinePasteHandler.js.map +1 -0
- package/dist/core/parallel.d.ts +85 -0
- package/dist/core/parallel.d.ts.map +1 -0
- package/dist/core/parallel.js +150 -0
- package/dist/core/parallel.js.map +1 -0
- package/dist/core/parallelCoordinator.d.ts +21 -0
- package/dist/core/parallelCoordinator.d.ts.map +1 -0
- package/dist/core/parallelCoordinator.js +42 -0
- package/dist/core/parallelCoordinator.js.map +1 -0
- package/dist/core/parallelExecutor.d.ts +215 -0
- package/dist/core/parallelExecutor.d.ts.map +1 -0
- package/dist/core/parallelExecutor.js +584 -0
- package/dist/core/parallelExecutor.js.map +1 -0
- package/dist/core/preferences.d.ts +71 -0
- package/dist/core/preferences.d.ts.map +1 -0
- package/dist/core/preferences.js +341 -0
- package/dist/core/preferences.js.map +1 -0
- package/dist/core/productTestHarness.d.ts +46 -0
- package/dist/core/productTestHarness.d.ts.map +1 -0
- package/dist/core/productTestHarness.js +128 -0
- package/dist/core/productTestHarness.js.map +1 -0
- package/dist/core/providerKeys.d.ts +20 -0
- package/dist/core/providerKeys.d.ts.map +1 -0
- package/dist/core/providerKeys.js +40 -0
- package/dist/core/providerKeys.js.map +1 -0
- package/dist/core/realityScore.d.ts +159 -0
- package/dist/core/realityScore.d.ts.map +1 -0
- package/dist/core/realityScore.js +734 -0
- package/dist/core/realityScore.js.map +1 -0
- package/dist/core/repoUpgradeOrchestrator.d.ts +223 -0
- package/dist/core/repoUpgradeOrchestrator.d.ts.map +1 -0
- package/dist/core/repoUpgradeOrchestrator.js +1003 -0
- package/dist/core/repoUpgradeOrchestrator.js.map +1 -0
- package/dist/core/resultVerification.d.ts +47 -0
- package/dist/core/resultVerification.d.ts.map +1 -0
- package/dist/core/resultVerification.js +126 -0
- package/dist/core/resultVerification.js.map +1 -0
- package/dist/core/revenueEnvValidator.d.ts +30 -0
- package/dist/core/revenueEnvValidator.d.ts.map +1 -0
- package/dist/core/revenueEnvValidator.js +241 -0
- package/dist/core/revenueEnvValidator.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 +48 -0
- package/dist/core/secretStore.d.ts.map +1 -0
- package/dist/core/secretStore.js +295 -0
- package/dist/core/secretStore.js.map +1 -0
- package/dist/core/securityTournament.d.ts +83 -0
- package/dist/core/securityTournament.d.ts.map +1 -0
- package/dist/core/securityTournament.js +357 -0
- package/dist/core/securityTournament.js.map +1 -0
- package/dist/core/selfUpgrade.d.ts +253 -0
- package/dist/core/selfUpgrade.d.ts.map +1 -0
- package/dist/core/selfUpgrade.js +669 -0
- package/dist/core/selfUpgrade.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 +191 -0
- package/dist/core/sessionStore.js.map +1 -0
- package/dist/core/taskCompletionDetector.d.ts +112 -0
- package/dist/core/taskCompletionDetector.d.ts.map +1 -0
- package/dist/core/taskCompletionDetector.js +469 -0
- package/dist/core/taskCompletionDetector.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 +185 -0
- package/dist/core/toolRuntime.d.ts.map +1 -0
- package/dist/core/toolRuntime.js +412 -0
- package/dist/core/toolRuntime.js.map +1 -0
- package/dist/core/tournamentStrategy.d.ts +12 -0
- package/dist/core/tournamentStrategy.d.ts.map +1 -0
- package/dist/core/tournamentStrategy.js +41 -0
- package/dist/core/tournamentStrategy.js.map +1 -0
- package/dist/core/types/utilityTypes.d.ts +192 -0
- package/dist/core/types/utilityTypes.d.ts.map +1 -0
- package/dist/core/types/utilityTypes.js +272 -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/unifiedOrchestrator.d.ts +47 -0
- package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
- package/dist/core/unifiedOrchestrator.js +103 -0
- package/dist/core/unifiedOrchestrator.js.map +1 -0
- package/dist/core/universalSecurityAudit.d.ts +104 -0
- package/dist/core/universalSecurityAudit.d.ts.map +1 -0
- package/dist/core/universalSecurityAudit.js +2190 -0
- package/dist/core/universalSecurityAudit.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 +593 -0
- package/dist/core/updateChecker.js.map +1 -0
- package/dist/core/variantExecution.d.ts +23 -0
- package/dist/core/variantExecution.d.ts.map +1 -0
- package/dist/core/variantExecution.js +58 -0
- package/dist/core/variantExecution.js.map +1 -0
- package/dist/core/winnerStrategy.d.ts +15 -0
- package/dist/core/winnerStrategy.d.ts.map +1 -0
- package/dist/core/winnerStrategy.js +18 -0
- package/dist/core/winnerStrategy.js.map +1 -0
- package/dist/core/zeroDayDiscovery.d.ts +96 -0
- package/dist/core/zeroDayDiscovery.d.ts.map +1 -0
- package/dist/core/zeroDayDiscovery.js +358 -0
- package/dist/core/zeroDayDiscovery.js.map +1 -0
- package/dist/headless/interactiveShell.d.ts +22 -0
- package/dist/headless/interactiveShell.d.ts.map +1 -0
- package/dist/headless/interactiveShell.js +3799 -0
- package/dist/headless/interactiveShell.js.map +1 -0
- package/dist/headless/quickMode.d.ts +26 -0
- package/dist/headless/quickMode.d.ts.map +1 -0
- package/dist/headless/quickMode.js +226 -0
- package/dist/headless/quickMode.js.map +1 -0
- package/dist/orchestration/index.d.ts +10 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +13 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/repoUpgradeRunner.d.ts +44 -0
- package/dist/orchestration/repoUpgradeRunner.d.ts.map +1 -0
- package/dist/orchestration/repoUpgradeRunner.js +375 -0
- package/dist/orchestration/repoUpgradeRunner.js.map +1 -0
- package/dist/orchestration/securityAuditRunner.d.ts +144 -0
- package/dist/orchestration/securityAuditRunner.d.ts.map +1 -0
- package/dist/orchestration/securityAuditRunner.js +526 -0
- package/dist/orchestration/securityAuditRunner.js.map +1 -0
- package/dist/plugins/index.d.ts +49 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +105 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/providers/deepseek/index.d.ts +11 -0
- package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
- package/dist/plugins/providers/deepseek/index.js +54 -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 +11 -0
- package/dist/plugins/providers/index.js.map +1 -0
- package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +3 -0
- package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +27 -0
- package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
- package/dist/plugins/tools/apple/secureApplePlugin.d.ts +3 -0
- package/dist/plugins/tools/apple/secureApplePlugin.d.ts.map +1 -0
- package/dist/plugins/tools/apple/secureApplePlugin.js +26 -0
- package/dist/plugins/tools/apple/secureApplePlugin.js.map +1 -0
- package/dist/plugins/tools/authorizedSecurity/authorizedSecurityPlugin.d.ts +3 -0
- package/dist/plugins/tools/authorizedSecurity/authorizedSecurityPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/authorizedSecurity/authorizedSecurityPlugin.js +9 -0
- package/dist/plugins/tools/authorizedSecurity/authorizedSecurityPlugin.js.map +1 -0
- package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
- package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
- package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts +3 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js +27 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js.map +1 -0
- package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
- package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/edit/editPlugin.js +15 -0
- package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
- package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
- package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
- package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
- package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
- package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
- package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
- package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +3 -0
- package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +9 -0
- package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +1 -0
- package/dist/plugins/tools/index.d.ts +3 -0
- package/dist/plugins/tools/index.d.ts.map +1 -0
- package/dist/plugins/tools/index.js +3 -0
- package/dist/plugins/tools/index.js.map +1 -0
- package/dist/plugins/tools/integrity/integrityPlugin.d.ts +3 -0
- package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/integrity/integrityPlugin.js +31 -0
- package/dist/plugins/tools/integrity/integrityPlugin.js.map +1 -0
- package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
- package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/mcp/mcpPlugin.js +27 -0
- package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
- package/dist/plugins/tools/nodeDefaults.d.ts +15 -0
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
- package/dist/plugins/tools/nodeDefaults.js +37 -0
- package/dist/plugins/tools/nodeDefaults.js.map +1 -0
- package/dist/plugins/tools/offensiveDestruction/offensiveDestructionPlugin.d.ts +3 -0
- package/dist/plugins/tools/offensiveDestruction/offensiveDestructionPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/offensiveDestruction/offensiveDestructionPlugin.js +9 -0
- package/dist/plugins/tools/offensiveDestruction/offensiveDestructionPlugin.js.map +1 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +3 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.js +340 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
- package/dist/plugins/tools/registry.d.ts +22 -0
- package/dist/plugins/tools/registry.d.ts.map +1 -0
- package/dist/plugins/tools/registry.js +58 -0
- package/dist/plugins/tools/registry.js.map +1 -0
- package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
- package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
- package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
- package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
- package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/skills/skillPlugin.js +27 -0
- package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
- package/dist/plugins/tools/tao/secureTaoPlugin.d.ts +3 -0
- package/dist/plugins/tools/tao/secureTaoPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/tao/secureTaoPlugin.js +37 -0
- package/dist/plugins/tools/tao/secureTaoPlugin.js.map +1 -0
- package/dist/providers/baseProvider.d.ts +148 -0
- package/dist/providers/baseProvider.d.ts.map +1 -0
- package/dist/providers/baseProvider.js +284 -0
- package/dist/providers/baseProvider.js.map +1 -0
- package/dist/providers/openaiChatCompletionsProvider.d.ts +64 -0
- package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
- package/dist/providers/openaiChatCompletionsProvider.js +1000 -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 +103 -0
- package/dist/providers/resilientProvider.d.ts.map +1 -0
- package/dist/providers/resilientProvider.js +462 -0
- package/dist/providers/resilientProvider.js.map +1 -0
- package/dist/runtime/agentController.d.ts +114 -0
- package/dist/runtime/agentController.d.ts.map +1 -0
- package/dist/runtime/agentController.js +693 -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 +157 -0
- package/dist/runtime/agentHost.js.map +1 -0
- package/dist/runtime/agentSession.d.ts +45 -0
- package/dist/runtime/agentSession.d.ts.map +1 -0
- package/dist/runtime/agentSession.js +210 -0
- package/dist/runtime/agentSession.js.map +1 -0
- package/dist/runtime/agentWorkerPool.d.ts +167 -0
- package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
- package/dist/runtime/agentWorkerPool.js +435 -0
- package/dist/runtime/agentWorkerPool.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 +24 -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/autoExecutor.d.ts +70 -0
- package/dist/shell/autoExecutor.d.ts.map +1 -0
- package/dist/shell/autoExecutor.js +320 -0
- package/dist/shell/autoExecutor.js.map +1 -0
- package/dist/shell/commandRegistry.d.ts +122 -0
- package/dist/shell/commandRegistry.d.ts.map +1 -0
- package/dist/shell/commandRegistry.js +386 -0
- package/dist/shell/commandRegistry.js.map +1 -0
- package/dist/shell/composableMessage.d.ts +183 -0
- package/dist/shell/composableMessage.d.ts.map +1 -0
- package/dist/shell/composableMessage.js +420 -0
- package/dist/shell/composableMessage.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/vimMode.d.ts +66 -0
- package/dist/shell/vimMode.d.ts.map +1 -0
- package/dist/shell/vimMode.js +435 -0
- package/dist/shell/vimMode.js.map +1 -0
- package/dist/tools/bashTools.d.ts +6 -0
- package/dist/tools/bashTools.d.ts.map +1 -0
- package/dist/tools/bashTools.js +485 -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 +702 -0
- package/dist/tools/editTools.js.map +1 -0
- package/dist/tools/emailTools.d.ts +140 -0
- package/dist/tools/emailTools.d.ts.map +1 -0
- package/dist/tools/emailTools.js +792 -0
- package/dist/tools/emailTools.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 +342 -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 +129 -0
- package/dist/tools/grepTools.js.map +1 -0
- package/dist/tools/humanOpsTools.d.ts +3 -0
- package/dist/tools/humanOpsTools.d.ts.map +1 -0
- package/dist/tools/humanOpsTools.js +86 -0
- package/dist/tools/humanOpsTools.js.map +1 -0
- package/dist/tools/localExplore.d.ts +38 -0
- package/dist/tools/localExplore.d.ts.map +1 -0
- package/dist/tools/localExplore.js +30 -0
- package/dist/tools/localExplore.js.map +1 -0
- package/dist/tools/metaTools.d.ts +3 -0
- package/dist/tools/metaTools.d.ts.map +1 -0
- package/dist/tools/metaTools.js +148 -0
- package/dist/tools/metaTools.js.map +1 -0
- package/dist/tools/planningTools.d.ts +12 -0
- package/dist/tools/planningTools.d.ts.map +1 -0
- package/dist/tools/planningTools.js +75 -0
- package/dist/tools/planningTools.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 +370 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/secureAppleExploitation.d.ts +29 -0
- package/dist/tools/secureAppleExploitation.d.ts.map +1 -0
- package/dist/tools/secureAppleExploitation.js +518 -0
- package/dist/tools/secureAppleExploitation.js.map +1 -0
- package/dist/tools/telemetryTools.d.ts +5 -0
- package/dist/tools/telemetryTools.d.ts.map +1 -0
- package/dist/tools/telemetryTools.js +9 -0
- package/dist/tools/telemetryTools.js.map +1 -0
- package/dist/tools/unifiedOps.d.ts +3 -0
- package/dist/tools/unifiedOps.d.ts.map +1 -0
- package/dist/tools/unifiedOps.js +57 -0
- package/dist/tools/unifiedOps.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 +227 -0
- package/dist/tools/webTools.js.map +1 -0
- package/dist/ui/PromptController.d.ts +174 -0
- package/dist/ui/PromptController.d.ts.map +1 -0
- package/dist/ui/PromptController.js +351 -0
- package/dist/ui/PromptController.js.map +1 -0
- package/dist/ui/UnifiedUIRenderer.d.ts +779 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -0
- package/dist/ui/UnifiedUIRenderer.js +5458 -0
- package/dist/ui/UnifiedUIRenderer.js.map +1 -0
- package/dist/ui/animatedStatus.d.ts +140 -0
- package/dist/ui/animatedStatus.d.ts.map +1 -0
- package/dist/ui/animatedStatus.js +480 -0
- package/dist/ui/animatedStatus.js.map +1 -0
- package/dist/ui/animation/AnimationScheduler.d.ts +197 -0
- package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
- package/dist/ui/animation/AnimationScheduler.js +440 -0
- package/dist/ui/animation/AnimationScheduler.js.map +1 -0
- package/dist/ui/codeHighlighter.d.ts +6 -0
- package/dist/ui/codeHighlighter.d.ts.map +1 -0
- package/dist/ui/codeHighlighter.js +855 -0
- package/dist/ui/codeHighlighter.js.map +1 -0
- package/dist/ui/designSystem.d.ts +26 -0
- package/dist/ui/designSystem.d.ts.map +1 -0
- package/dist/ui/designSystem.js +114 -0
- package/dist/ui/designSystem.js.map +1 -0
- package/dist/ui/errorFormatter.d.ts +64 -0
- package/dist/ui/errorFormatter.d.ts.map +1 -0
- package/dist/ui/errorFormatter.js +316 -0
- package/dist/ui/errorFormatter.js.map +1 -0
- package/dist/ui/globalWriteLock.d.ts +63 -0
- package/dist/ui/globalWriteLock.d.ts.map +1 -0
- package/dist/ui/globalWriteLock.js +173 -0
- package/dist/ui/globalWriteLock.js.map +1 -0
- package/dist/ui/index.d.ts +32 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +54 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/interrupts/InterruptManager.d.ts +157 -0
- package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
- package/dist/ui/interrupts/InterruptManager.js +501 -0
- package/dist/ui/interrupts/InterruptManager.js.map +1 -0
- package/dist/ui/layout.d.ts +27 -0
- package/dist/ui/layout.d.ts.map +1 -0
- package/dist/ui/layout.js +184 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/maxOffensiveUkraineUI.d.ts +94 -0
- package/dist/ui/maxOffensiveUkraineUI.d.ts.map +1 -0
- package/dist/ui/maxOffensiveUkraineUI.js +316 -0
- package/dist/ui/maxOffensiveUkraineUI.js.map +1 -0
- package/dist/ui/outputMode.d.ts +44 -0
- package/dist/ui/outputMode.d.ts.map +1 -0
- package/dist/ui/outputMode.js +123 -0
- package/dist/ui/outputMode.js.map +1 -0
- package/dist/ui/overlay/OverlayManager.d.ts +105 -0
- package/dist/ui/overlay/OverlayManager.d.ts.map +1 -0
- package/dist/ui/overlay/OverlayManager.js +291 -0
- package/dist/ui/overlay/OverlayManager.js.map +1 -0
- package/dist/ui/premiumComponents.d.ts +54 -0
- package/dist/ui/premiumComponents.d.ts.map +1 -0
- package/dist/ui/premiumComponents.js +241 -0
- package/dist/ui/premiumComponents.js.map +1 -0
- package/dist/ui/richText.d.ts +13 -0
- package/dist/ui/richText.d.ts.map +1 -0
- package/dist/ui/richText.js +443 -0
- package/dist/ui/richText.js.map +1 -0
- package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
- package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
- package/dist/ui/telemetry/ResponseTracker.js +60 -0
- package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
- package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
- package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
- package/dist/ui/telemetry/UITelemetry.js +446 -0
- package/dist/ui/telemetry/UITelemetry.js.map +1 -0
- package/dist/ui/textHighlighter.d.ts +83 -0
- package/dist/ui/textHighlighter.d.ts.map +1 -0
- package/dist/ui/textHighlighter.js +267 -0
- package/dist/ui/textHighlighter.js.map +1 -0
- package/dist/ui/theme.d.ts +364 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +471 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/toolDisplay.d.ts +221 -0
- package/dist/ui/toolDisplay.d.ts.map +1 -0
- package/dist/ui/toolDisplay.js +1654 -0
- package/dist/ui/toolDisplay.js.map +1 -0
- package/dist/ui/uiConstants.d.ts +288 -0
- package/dist/ui/uiConstants.d.ts.map +1 -0
- package/dist/ui/uiConstants.js +472 -0
- package/dist/ui/uiConstants.js.map +1 -0
- package/dist/utils/askUserPrompt.d.ts +21 -0
- package/dist/utils/askUserPrompt.d.ts.map +1 -0
- package/dist/utils/askUserPrompt.js +87 -0
- package/dist/utils/askUserPrompt.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/workspace.d.ts +8 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +134 -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 +108 -0
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
import { readFile, writeFile, stat, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join, relative, dirname } from 'node:path';
|
|
3
|
+
import { buildError } from '../core/errors.js';
|
|
4
|
+
import { buildDiffSegmentsFast, formatDiffLines, buildDiffWithContext, formatDiffClaudeStyle } from './diffUtils.js';
|
|
5
|
+
import { scoreEditReality, recordSuccessfulEdit, REALITY_THRESHOLDS } from '../core/realityScore.js';
|
|
6
|
+
import { logDebug } from '../utils/debugLogger.js';
|
|
7
|
+
import { validateReadForEditEx, recordFileRead } from './fileReadTracker.js';
|
|
8
|
+
/**
|
|
9
|
+
* Track edit attempts per file to detect when edits keep being reverted (e.g., by linters/hooks)
|
|
10
|
+
*/
|
|
11
|
+
const fileEditAttempts = new Map();
|
|
12
|
+
const MAX_EDIT_ATTEMPTS_PER_FILE = 3;
|
|
13
|
+
const EDIT_ATTEMPT_RESET_MS = 60000; // Reset counter after 1 minute of no edits
|
|
14
|
+
/**
|
|
15
|
+
* Creates the Edit tool for surgical file modifications using exact string replacement.
|
|
16
|
+
*
|
|
17
|
+
* This tool performs string-based edits without requiring full file rewrites,
|
|
18
|
+
* making it ideal for targeted changes while preserving exact formatting and indentation.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Exact string matching (preserves indentation)
|
|
22
|
+
* - Replace all occurrences or enforce uniqueness
|
|
23
|
+
* - Unified diff preview
|
|
24
|
+
* - Validation before writing
|
|
25
|
+
*
|
|
26
|
+
* @param workingDir - The working directory for resolving relative paths
|
|
27
|
+
* @returns Array containing the Edit tool definition
|
|
28
|
+
*/
|
|
29
|
+
export function createEditTools(workingDir) {
|
|
30
|
+
return [
|
|
31
|
+
{
|
|
32
|
+
name: 'Edit',
|
|
33
|
+
description: 'Performs exact string replacements in files. CRITICAL: For existing files, you MUST use the Read tool FIRST to get the exact text including whitespace and indentation, then copy it into old_string. The edit will FAIL if old_string is not unique unless replace_all is true. To CREATE a new file, use empty old_string (no prior read needed). To DELETE text, use empty new_string.',
|
|
34
|
+
parameters: {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: {
|
|
37
|
+
file_path: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'The absolute path to the file to modify or create',
|
|
40
|
+
},
|
|
41
|
+
old_string: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'The exact text to replace (must match precisely including whitespace and indentation). For existing files, use read_file FIRST, then copy the exact text from its output (excluding line numbers). Use empty string "" to create a new file without needing a prior read.',
|
|
44
|
+
},
|
|
45
|
+
new_string: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
default: '',
|
|
48
|
+
description: 'The text to replace it with. Use empty string "" to delete the old_string. For new files, this is the full content. Defaults to "" when omitted.',
|
|
49
|
+
},
|
|
50
|
+
replace_all: {
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
description: 'Replace all occurrences of old_string (default false). When false, the edit fails if old_string appears multiple times.',
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
required: ['file_path', 'old_string'],
|
|
56
|
+
additionalProperties: false,
|
|
57
|
+
},
|
|
58
|
+
handler: async (args) => performSurgicalEdit(workingDir, args),
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Shared edit executor used by both legacy and unified tool flows.
|
|
64
|
+
* Provides consistent validation, creation/deletion handling, and diff output.
|
|
65
|
+
*/
|
|
66
|
+
export async function performSurgicalEdit(workingDir, args) {
|
|
67
|
+
const pathArg = args['file_path'];
|
|
68
|
+
const oldString = args['old_string'];
|
|
69
|
+
const newStringRaw = args['new_string'];
|
|
70
|
+
const replaceAll = args['replace_all'] === true;
|
|
71
|
+
let replacementString = typeof newStringRaw === 'string' ? newStringRaw : '';
|
|
72
|
+
// Validate inputs
|
|
73
|
+
if (typeof pathArg !== 'string' || !pathArg.trim()) {
|
|
74
|
+
return 'Error: file_path must be a non-empty string.';
|
|
75
|
+
}
|
|
76
|
+
if (typeof oldString !== 'string') {
|
|
77
|
+
return 'Error: old_string must be a string (use "" for empty).';
|
|
78
|
+
}
|
|
79
|
+
if (newStringRaw !== undefined && typeof newStringRaw !== 'string') {
|
|
80
|
+
return 'Error: new_string must be a string (use "" for empty).';
|
|
81
|
+
}
|
|
82
|
+
// Only error if both are identical AND non-empty (no-op edit)
|
|
83
|
+
// Allow: empty old + content = create, content + empty new = delete
|
|
84
|
+
if (oldString === replacementString && oldString !== '') {
|
|
85
|
+
return 'Error: old_string and new_string are identical. No changes would be made.';
|
|
86
|
+
}
|
|
87
|
+
// Both empty is also a no-op
|
|
88
|
+
if (oldString === '' && replacementString === '') {
|
|
89
|
+
return 'Error: Both old_string and new_string are empty. Provide content to create a file or text to replace.';
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const filePath = resolveFilePath(workingDir, pathArg);
|
|
93
|
+
// Check if file exists
|
|
94
|
+
let fileExists = false;
|
|
95
|
+
try {
|
|
96
|
+
await stat(filePath);
|
|
97
|
+
fileExists = true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
fileExists = false;
|
|
101
|
+
}
|
|
102
|
+
// Handle file creation mode (empty old_string)
|
|
103
|
+
if (oldString === '') {
|
|
104
|
+
if (fileExists) {
|
|
105
|
+
return `Error: File already exists: ${filePath}\nTo modify an existing file, provide the exact text to replace in old_string.`;
|
|
106
|
+
}
|
|
107
|
+
// Create parent directories if needed
|
|
108
|
+
const dir = dirname(filePath);
|
|
109
|
+
await mkdir(dir, { recursive: true });
|
|
110
|
+
// Write new file
|
|
111
|
+
await writeFile(filePath, replacementString, 'utf-8');
|
|
112
|
+
const relativePath = relative(workingDir, filePath);
|
|
113
|
+
const displayPath = relativePath && !relativePath.startsWith('..') ? relativePath : filePath;
|
|
114
|
+
const lineCount = replacementString.split('\n').length;
|
|
115
|
+
const diffSegments = buildDiffSegmentsFast('', replacementString);
|
|
116
|
+
const addedLines = diffSegments.filter((s) => s.type === 'added').length;
|
|
117
|
+
// Limit to 5 diff lines for concise output
|
|
118
|
+
const MAX_DIFF_LINES = 5;
|
|
119
|
+
const truncatedSegments = diffSegments.slice(0, MAX_DIFF_LINES);
|
|
120
|
+
const diffLines = formatDiffLines(truncatedSegments, true);
|
|
121
|
+
if (diffSegments.length > MAX_DIFF_LINES) {
|
|
122
|
+
diffLines.push(` ... +${diffSegments.length - MAX_DIFF_LINES} more lines`);
|
|
123
|
+
}
|
|
124
|
+
const diffBlock = diffLines.length > 0 ? diffLines.join('\n') : '(No visual diff - whitespace or formatting changes only)';
|
|
125
|
+
return [
|
|
126
|
+
`⏺ Create(${displayPath})`,
|
|
127
|
+
` ⎿ Created ${displayPath} with ${addedLines} additions`,
|
|
128
|
+
` ${lineCount} line${lineCount === 1 ? '' : 's'} written`,
|
|
129
|
+
diffBlock,
|
|
130
|
+
].join('\n');
|
|
131
|
+
}
|
|
132
|
+
// For modifications, file must exist
|
|
133
|
+
if (!fileExists) {
|
|
134
|
+
return `Error: File not found: ${filePath}\nTo create a new file, use empty old_string ("").`;
|
|
135
|
+
}
|
|
136
|
+
// Read current content (async for speed)
|
|
137
|
+
let currentContent = await readFile(filePath, 'utf-8');
|
|
138
|
+
let autoRefreshNote = '';
|
|
139
|
+
// ENFORCE READ BEFORE EDIT: Check that this file was read before attempting edit
|
|
140
|
+
const readValidation = validateReadForEditEx(filePath, oldString, currentContent);
|
|
141
|
+
if (!readValidation.valid) {
|
|
142
|
+
// If content changed but can auto-refresh, update the read record automatically
|
|
143
|
+
if (readValidation.canAutoRefresh && (readValidation.issue === 'content_changed' || readValidation.issue === 'stale')) {
|
|
144
|
+
// Auto-refresh: re-read the file and update the tracker
|
|
145
|
+
currentContent = await readFile(filePath, 'utf-8');
|
|
146
|
+
recordFileRead(filePath, currentContent);
|
|
147
|
+
autoRefreshNote = readValidation.issue === 'content_changed'
|
|
148
|
+
? ' [auto-refreshed: file was modified externally]'
|
|
149
|
+
: ' [auto-refreshed: previous read was stale]';
|
|
150
|
+
logDebug(`Auto-refreshed file read for ${filePath}: ${readValidation.issue}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Cannot auto-refresh (file was never read) - return the error
|
|
154
|
+
return readValidation.errorMessage ?? 'Error: File validation failed.';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Normalize escaped literals and whitespace differences to reduce mismatch errors
|
|
158
|
+
let targetString = oldString;
|
|
159
|
+
let matchNote = null;
|
|
160
|
+
if (!currentContent.includes(targetString)) {
|
|
161
|
+
const unescaped = unescapeLiteral(oldString);
|
|
162
|
+
if (unescaped !== oldString && currentContent.includes(unescaped)) {
|
|
163
|
+
targetString = unescaped;
|
|
164
|
+
matchNote = 'normalized escaped old_string';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (!currentContent.includes(targetString)) {
|
|
168
|
+
const flexibleMatch = matchWithFlexibleWhitespace(currentContent, targetString);
|
|
169
|
+
if (flexibleMatch) {
|
|
170
|
+
// Check if it was a fuzzy match (different from exact whitespace normalization)
|
|
171
|
+
const fuzzyResult = findBestFuzzyMatch(currentContent, targetString);
|
|
172
|
+
if (fuzzyResult && fuzzyResult.match === flexibleMatch && fuzzyResult.similarity < 0.99) {
|
|
173
|
+
matchNote = `fuzzy matched (${Math.round(fuzzyResult.similarity * 100)}% similar)`;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
matchNote = matchNote ? matchNote : 'normalized whitespace';
|
|
177
|
+
}
|
|
178
|
+
targetString = flexibleMatch;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Check if old_string exists in file
|
|
182
|
+
if (!currentContent.includes(targetString)) {
|
|
183
|
+
// Provide helpful debugging info when match fails
|
|
184
|
+
const firstLine = oldString.split('\n')[0] || '';
|
|
185
|
+
const suggestions = findSimilarLinesWithSuggestion(currentContent, firstLine, oldString, filePath, workingDir);
|
|
186
|
+
// AI Flow Design: Provide structured guidance for self-correction
|
|
187
|
+
const aiGuidance = buildAIRecoveryGuidance(oldString, currentContent);
|
|
188
|
+
return [
|
|
189
|
+
'Error: old_string not found in file.',
|
|
190
|
+
'',
|
|
191
|
+
`File: ${filePath}`,
|
|
192
|
+
`Searching for: ${JSON.stringify(firstLine.substring(0, 80))}${firstLine.length > 80 ? '...' : ''}`,
|
|
193
|
+
'',
|
|
194
|
+
suggestions.hints,
|
|
195
|
+
'',
|
|
196
|
+
suggestions.actionable ? 'RECOMMENDED ACTION:' : 'Guidance:',
|
|
197
|
+
suggestions.actionable ? suggestions.actionable : '- Ensure exact whitespace/indentation matches\n- Copy text directly from Read output\n- Check for tabs vs spaces',
|
|
198
|
+
'',
|
|
199
|
+
'---',
|
|
200
|
+
'AI SELF-CORRECTION GUIDANCE:',
|
|
201
|
+
aiGuidance,
|
|
202
|
+
].join('\n');
|
|
203
|
+
}
|
|
204
|
+
// Count occurrences
|
|
205
|
+
// Preserve indentation when we had to normalize whitespace or use fuzzy matching
|
|
206
|
+
if (matchNote && (matchNote.includes('whitespace') || matchNote.includes('fuzzy'))) {
|
|
207
|
+
const adjusted = alignIndentation(targetString, replacementString);
|
|
208
|
+
if (adjusted !== replacementString) {
|
|
209
|
+
replacementString = adjusted;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const occurrences = countOccurrences(currentContent, targetString);
|
|
213
|
+
if (!replaceAll && occurrences > 1) {
|
|
214
|
+
return `Error: old_string appears ${occurrences} times in the file. Either:\n1. Provide a larger unique string that includes more context\n2. Set replace_all: true to replace all ${occurrences} occurrences\n\nFile: ${filePath}`;
|
|
215
|
+
}
|
|
216
|
+
// Reality Score Check - detect potential hallucinations before applying edit
|
|
217
|
+
const realityScore = scoreEditReality({
|
|
218
|
+
filePath,
|
|
219
|
+
oldString: targetString,
|
|
220
|
+
newString: replacementString,
|
|
221
|
+
replaceAll,
|
|
222
|
+
});
|
|
223
|
+
// Log reality score for debugging/learning
|
|
224
|
+
logDebug(`Edit reality score for ${filePath}: ${realityScore.total}/100 (${realityScore.confidence})`);
|
|
225
|
+
// Block edits with very low reality scores (likely hallucinations)
|
|
226
|
+
if (realityScore.total < REALITY_THRESHOLDS.REJECT) {
|
|
227
|
+
const warnings = realityScore.warnings.length > 0
|
|
228
|
+
? `\nWarnings:\n${realityScore.warnings.map(w => ` ⚠ ${w}`).join('\n')}`
|
|
229
|
+
: '';
|
|
230
|
+
const failed = realityScore.failed.length > 0
|
|
231
|
+
? `\nFailed checks:\n${realityScore.failed.map(f => ` ✗ ${f}`).join('\n')}`
|
|
232
|
+
: '';
|
|
233
|
+
return [
|
|
234
|
+
`⚠ Edit blocked - Low reality score: ${realityScore.total}/100`,
|
|
235
|
+
'',
|
|
236
|
+
'This edit appears to reference content that may not exist.',
|
|
237
|
+
'Please verify:',
|
|
238
|
+
'1. The old_string text actually exists in the file',
|
|
239
|
+
'2. The imports/dependencies in new_string are valid',
|
|
240
|
+
'3. The syntax in new_string is correct',
|
|
241
|
+
warnings,
|
|
242
|
+
failed,
|
|
243
|
+
'',
|
|
244
|
+
`File: ${filePath}`,
|
|
245
|
+
].join('\n');
|
|
246
|
+
}
|
|
247
|
+
// Warn on medium-low scores but allow the edit
|
|
248
|
+
let realityWarning = '';
|
|
249
|
+
if (realityScore.total < REALITY_THRESHOLDS.REVIEW && realityScore.warnings.length > 0) {
|
|
250
|
+
realityWarning = `\n⚠ Reality score: ${realityScore.total}/100 - ${realityScore.warnings[0]}`;
|
|
251
|
+
}
|
|
252
|
+
// Perform replacement
|
|
253
|
+
const newContent = replaceAll
|
|
254
|
+
? currentContent.split(targetString).join(replacementString)
|
|
255
|
+
: currentContent.replace(targetString, replacementString);
|
|
256
|
+
// Generate diff with context lines (AGI CLI style)
|
|
257
|
+
const diffResult = buildDiffWithContext(currentContent, newContent, 2);
|
|
258
|
+
// Check for repeated edit attempts on same file (detect linter/hook reversion loops)
|
|
259
|
+
const now = Date.now();
|
|
260
|
+
const attempts = fileEditAttempts.get(filePath);
|
|
261
|
+
if (attempts) {
|
|
262
|
+
// Reset if enough time has passed
|
|
263
|
+
if (now - attempts.lastTimestamp > EDIT_ATTEMPT_RESET_MS) {
|
|
264
|
+
fileEditAttempts.set(filePath, { count: 1, lastContent: newContent, lastTimestamp: now });
|
|
265
|
+
}
|
|
266
|
+
else if (attempts.lastContent === newContent) {
|
|
267
|
+
// Same exact edit being attempted again - likely in a loop
|
|
268
|
+
attempts.count++;
|
|
269
|
+
attempts.lastTimestamp = now;
|
|
270
|
+
if (attempts.count > MAX_EDIT_ATTEMPTS_PER_FILE) {
|
|
271
|
+
return [
|
|
272
|
+
`Error: Edit loop detected on ${filePath}`,
|
|
273
|
+
'',
|
|
274
|
+
`This edit has been attempted ${attempts.count} times in quick succession.`,
|
|
275
|
+
'The file may be getting reverted by a linter, formatter, or pre-commit hook.',
|
|
276
|
+
'',
|
|
277
|
+
'To resolve:',
|
|
278
|
+
'1. Check for active file watchers or formatters',
|
|
279
|
+
'2. Disable auto-formatting temporarily',
|
|
280
|
+
'3. Or accept the current file state and move on',
|
|
281
|
+
'',
|
|
282
|
+
'STOPPING to prevent infinite loop.',
|
|
283
|
+
].join('\n');
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
// Different edit - reset counter but track the new content
|
|
288
|
+
fileEditAttempts.set(filePath, { count: 1, lastContent: newContent, lastTimestamp: now });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
fileEditAttempts.set(filePath, { count: 1, lastContent: newContent, lastTimestamp: now });
|
|
293
|
+
}
|
|
294
|
+
// Write file (async for speed)
|
|
295
|
+
await writeFile(filePath, newContent, 'utf-8');
|
|
296
|
+
// Verify the edit persisted (detect immediate reversion by hooks/watchers)
|
|
297
|
+
// Small delay to allow any file watchers to trigger
|
|
298
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
299
|
+
const verifyContent = await readFile(filePath, 'utf-8');
|
|
300
|
+
if (verifyContent !== newContent) {
|
|
301
|
+
// File was modified after our write - likely by a linter/formatter
|
|
302
|
+
// Update the read tracker with the new content so subsequent edits work
|
|
303
|
+
recordFileRead(filePath, verifyContent);
|
|
304
|
+
const editAttempts = fileEditAttempts.get(filePath);
|
|
305
|
+
if (editAttempts) {
|
|
306
|
+
editAttempts.count++;
|
|
307
|
+
}
|
|
308
|
+
// Check if the core change was preserved (fuzzy check)
|
|
309
|
+
const coreChangePreserved = verifyContent.includes(replacementString.trim());
|
|
310
|
+
if (coreChangePreserved) {
|
|
311
|
+
// Linter only reformatted, core change is there - continue with success
|
|
312
|
+
logDebug(`Edit reformatted by linter but core change preserved: ${filePath}`);
|
|
313
|
+
// Update autoRefreshNote to indicate linter ran
|
|
314
|
+
autoRefreshNote = autoRefreshNote
|
|
315
|
+
? `${autoRefreshNote} [reformatted by linter]`
|
|
316
|
+
: ' [reformatted by linter]';
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
return [
|
|
320
|
+
`Warning: Edit was immediately modified by an external process.`,
|
|
321
|
+
'',
|
|
322
|
+
`File: ${filePath}`,
|
|
323
|
+
'The edit was written but the file content changed immediately after.',
|
|
324
|
+
'This is likely caused by a linter, formatter, or file watcher.',
|
|
325
|
+
'',
|
|
326
|
+
'The current file state may differ from the intended edit.',
|
|
327
|
+
'The read tracker has been updated with the current content.',
|
|
328
|
+
'You can retry the edit - it should work now.',
|
|
329
|
+
].join('\n');
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
// Edit persisted exactly - update the read tracker with new content
|
|
334
|
+
recordFileRead(filePath, newContent);
|
|
335
|
+
}
|
|
336
|
+
// Build summary (AGI CLI style)
|
|
337
|
+
const relativePath = relative(workingDir, filePath);
|
|
338
|
+
const displayPath = relativePath && !relativePath.startsWith('..') ? relativePath : filePath;
|
|
339
|
+
const { additions, removals } = diffResult;
|
|
340
|
+
const occurrencesText = replaceAll ? ` (${occurrences} occurrence${occurrences > 1 ? 's' : ''})` : '';
|
|
341
|
+
const noteText = matchNote ? ` [${matchNote}]` : '';
|
|
342
|
+
const refreshText = autoRefreshNote || '';
|
|
343
|
+
// Format diff with colors for terminal display (AGI CLI style)
|
|
344
|
+
// Limit to 5 diff lines to keep output concise
|
|
345
|
+
const MAX_DIFF_LINES = 5;
|
|
346
|
+
const truncatedSegments = diffResult.segments.slice(0, MAX_DIFF_LINES);
|
|
347
|
+
const diffLines = formatDiffClaudeStyle(truncatedSegments, true);
|
|
348
|
+
const remainingChanges = diffResult.segments.length - MAX_DIFF_LINES;
|
|
349
|
+
if (remainingChanges > 0) {
|
|
350
|
+
diffLines.push(` ... +${remainingChanges} more changes`);
|
|
351
|
+
}
|
|
352
|
+
const diffBlock = diffLines.length > 0 ? diffLines.join('\n') : ' (No visual diff - whitespace or formatting changes only)';
|
|
353
|
+
// Build AGI CLI style output:
|
|
354
|
+
// ⏺ Update(filepath)
|
|
355
|
+
// ⎿ Updated filepath with N additions and M removals
|
|
356
|
+
// 41 }
|
|
357
|
+
// 42 + new line
|
|
358
|
+
const additionText = additions === 1 ? '1 addition' : `${additions} additions`;
|
|
359
|
+
const removalText = removals === 1 ? '1 removal' : `${removals} removals`;
|
|
360
|
+
const summaryParts = [];
|
|
361
|
+
if (additions > 0)
|
|
362
|
+
summaryParts.push(additionText);
|
|
363
|
+
if (removals > 0)
|
|
364
|
+
summaryParts.push(removalText);
|
|
365
|
+
const summaryText = summaryParts.length > 0 ? summaryParts.join(' and ') : 'no changes';
|
|
366
|
+
// Include reality score in output for high-confidence edits
|
|
367
|
+
const realityNote = realityScore.confidence === 'high'
|
|
368
|
+
? ''
|
|
369
|
+
: realityWarning;
|
|
370
|
+
// Record successful edit for RL learning
|
|
371
|
+
recordSuccessfulEdit(filePath, realityScore);
|
|
372
|
+
return [
|
|
373
|
+
`⏺ Update(${displayPath})${occurrencesText}${noteText}${refreshText}`,
|
|
374
|
+
` ⎿ Updated ${displayPath} with ${summaryText}`,
|
|
375
|
+
diffBlock,
|
|
376
|
+
realityNote,
|
|
377
|
+
].filter(Boolean).join('\n');
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
return buildError('editing file', error, {
|
|
381
|
+
file_path: typeof pathArg === 'string' ? pathArg : '',
|
|
382
|
+
old_string_length: typeof oldString === 'string' ? oldString.length : 0,
|
|
383
|
+
new_string_length: typeof replacementString === 'string' ? replacementString.length : 0,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function resolveFilePath(workingDir, path) {
|
|
388
|
+
const normalized = path.trim();
|
|
389
|
+
return normalized.startsWith('/') ? normalized : join(workingDir, normalized);
|
|
390
|
+
}
|
|
391
|
+
function countOccurrences(text, search) {
|
|
392
|
+
if (!search)
|
|
393
|
+
return 0;
|
|
394
|
+
let count = 0;
|
|
395
|
+
let position = 0;
|
|
396
|
+
while ((position = text.indexOf(search, position)) !== -1) {
|
|
397
|
+
count++;
|
|
398
|
+
position += search.length;
|
|
399
|
+
}
|
|
400
|
+
return count;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Convert common escaped sequences (\\n, \\r, \\t, \\\\) into their literal forms.
|
|
404
|
+
*/
|
|
405
|
+
function unescapeLiteral(value) {
|
|
406
|
+
if (!value.includes('\\'))
|
|
407
|
+
return value;
|
|
408
|
+
return value
|
|
409
|
+
.replace(/\\\\/g, '\\')
|
|
410
|
+
.replace(/\\n/g, '\n')
|
|
411
|
+
.replace(/\\r/g, '\r')
|
|
412
|
+
.replace(/\\t/g, '\t');
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Try to locate the search string allowing whitespace differences (indentation, spacing).
|
|
416
|
+
* Returns the exact substring from the original content when matched.
|
|
417
|
+
*/
|
|
418
|
+
function matchWithFlexibleWhitespace(content, search) {
|
|
419
|
+
// First try regex-based flexible whitespace matching
|
|
420
|
+
const normalizedPattern = buildWhitespaceFlexiblePattern(search);
|
|
421
|
+
if (normalizedPattern) {
|
|
422
|
+
const regex = new RegExp(normalizedPattern, 's');
|
|
423
|
+
const match = content.match(regex);
|
|
424
|
+
if (match)
|
|
425
|
+
return match[0];
|
|
426
|
+
}
|
|
427
|
+
// Then try fuzzy substring matching
|
|
428
|
+
const fuzzyMatch = findBestFuzzyMatch(content, search);
|
|
429
|
+
if (fuzzyMatch && fuzzyMatch.similarity >= 0.92) {
|
|
430
|
+
return fuzzyMatch.match;
|
|
431
|
+
}
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Find the best fuzzy match for a search string within content.
|
|
436
|
+
* Uses a sliding window approach with similarity scoring.
|
|
437
|
+
*/
|
|
438
|
+
function findBestFuzzyMatch(content, search) {
|
|
439
|
+
if (!search.trim() || search.length < 5)
|
|
440
|
+
return null;
|
|
441
|
+
const searchLines = search.split('\n');
|
|
442
|
+
const contentLines = content.split('\n');
|
|
443
|
+
// For single line searches, find the most similar line
|
|
444
|
+
if (searchLines.length === 1) {
|
|
445
|
+
let bestMatch = null;
|
|
446
|
+
let charPosition = 0;
|
|
447
|
+
for (let i = 0; i < contentLines.length; i++) {
|
|
448
|
+
const line = contentLines[i] || '';
|
|
449
|
+
const similarity = calculateLineSimilarity(search, line);
|
|
450
|
+
if (similarity > 0.85 && (!bestMatch || similarity > bestMatch.similarity)) {
|
|
451
|
+
bestMatch = { match: line, similarity, position: charPosition };
|
|
452
|
+
}
|
|
453
|
+
charPosition += line.length + 1; // +1 for newline
|
|
454
|
+
}
|
|
455
|
+
return bestMatch;
|
|
456
|
+
}
|
|
457
|
+
// For multi-line searches, use window matching
|
|
458
|
+
const windowSize = searchLines.length;
|
|
459
|
+
let bestMatch = null;
|
|
460
|
+
let charPosition = 0;
|
|
461
|
+
for (let i = 0; i <= contentLines.length - windowSize; i++) {
|
|
462
|
+
const windowLines = contentLines.slice(i, i + windowSize);
|
|
463
|
+
const windowText = windowLines.join('\n');
|
|
464
|
+
const similarity = calculateBlockSimilarity(search, windowText);
|
|
465
|
+
if (similarity > 0.85 && (!bestMatch || similarity > bestMatch.similarity)) {
|
|
466
|
+
bestMatch = { match: windowText, similarity, position: charPosition };
|
|
467
|
+
}
|
|
468
|
+
charPosition += (contentLines[i] || '').length + 1;
|
|
469
|
+
}
|
|
470
|
+
return bestMatch;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Calculate similarity between two lines, ignoring leading/trailing whitespace differences.
|
|
474
|
+
*/
|
|
475
|
+
function calculateLineSimilarity(a, b) {
|
|
476
|
+
const aTrimmed = a.trim();
|
|
477
|
+
const bTrimmed = b.trim();
|
|
478
|
+
if (aTrimmed === bTrimmed)
|
|
479
|
+
return 1.0;
|
|
480
|
+
if (!aTrimmed || !bTrimmed)
|
|
481
|
+
return 0;
|
|
482
|
+
// Normalize whitespace for comparison
|
|
483
|
+
const aNorm = aTrimmed.replace(/\s+/g, ' ');
|
|
484
|
+
const bNorm = bTrimmed.replace(/\s+/g, ' ');
|
|
485
|
+
if (aNorm === bNorm)
|
|
486
|
+
return 0.98;
|
|
487
|
+
// Calculate Levenshtein-based similarity
|
|
488
|
+
return 1 - (levenshteinDistance(aNorm, bNorm) / Math.max(aNorm.length, bNorm.length));
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Calculate similarity between two multi-line blocks.
|
|
492
|
+
*/
|
|
493
|
+
function calculateBlockSimilarity(a, b) {
|
|
494
|
+
const aLines = a.split('\n');
|
|
495
|
+
const bLines = b.split('\n');
|
|
496
|
+
if (aLines.length !== bLines.length) {
|
|
497
|
+
// Different line counts - lower base score
|
|
498
|
+
const minLen = Math.min(aLines.length, bLines.length);
|
|
499
|
+
const maxLen = Math.max(aLines.length, bLines.length);
|
|
500
|
+
let totalSim = 0;
|
|
501
|
+
for (let i = 0; i < minLen; i++) {
|
|
502
|
+
totalSim += calculateLineSimilarity(aLines[i] || '', bLines[i] || '');
|
|
503
|
+
}
|
|
504
|
+
return (totalSim / maxLen) * 0.9; // Penalty for length mismatch
|
|
505
|
+
}
|
|
506
|
+
let totalSimilarity = 0;
|
|
507
|
+
for (let i = 0; i < aLines.length; i++) {
|
|
508
|
+
totalSimilarity += calculateLineSimilarity(aLines[i] || '', bLines[i] || '');
|
|
509
|
+
}
|
|
510
|
+
return totalSimilarity / aLines.length;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Levenshtein distance calculation for fuzzy matching.
|
|
514
|
+
*/
|
|
515
|
+
function levenshteinDistance(a, b) {
|
|
516
|
+
if (a.length === 0)
|
|
517
|
+
return b.length;
|
|
518
|
+
if (b.length === 0)
|
|
519
|
+
return a.length;
|
|
520
|
+
// Use two-row optimization for memory efficiency
|
|
521
|
+
let prevRow = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
522
|
+
let currRow = new Array(b.length + 1);
|
|
523
|
+
for (let i = 1; i <= a.length; i++) {
|
|
524
|
+
currRow[0] = i;
|
|
525
|
+
for (let j = 1; j <= b.length; j++) {
|
|
526
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
527
|
+
currRow[j] = Math.min((prevRow[j] ?? 0) + 1, // deletion
|
|
528
|
+
(currRow[j - 1] ?? 0) + 1, // insertion
|
|
529
|
+
(prevRow[j - 1] ?? 0) + cost // substitution
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
[prevRow, currRow] = [currRow, prevRow];
|
|
533
|
+
}
|
|
534
|
+
return prevRow[b.length] ?? 0;
|
|
535
|
+
}
|
|
536
|
+
function buildWhitespaceFlexiblePattern(search) {
|
|
537
|
+
if (!search.trim()) {
|
|
538
|
+
return null;
|
|
539
|
+
}
|
|
540
|
+
// Escape regex metacharacters
|
|
541
|
+
const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
542
|
+
// Only allow flexible whitespace WITHIN lines, not across lines
|
|
543
|
+
// This prevents matching across completely different code structures
|
|
544
|
+
// Split by newlines, make each line flexible, then require exact newline boundaries
|
|
545
|
+
const lines = escaped.split(/\\n|\n/);
|
|
546
|
+
const flexibleLines = lines.map(line => line.replace(/[ \t]+/g, '[ \\t]*')); // Allow zero or more whitespace
|
|
547
|
+
// Rejoin with flexible newline matching (allows \r\n or \n)
|
|
548
|
+
return flexibleLines.join('\\r?\\n');
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* When whitespace normalization is used, keep the replacement aligned with the matched indentation.
|
|
552
|
+
* If a line in the replacement has no indentation, inherit indentation from the matched line.
|
|
553
|
+
*/
|
|
554
|
+
function alignIndentation(target, replacement) {
|
|
555
|
+
const targetLines = target.split('\n');
|
|
556
|
+
const replacementLines = replacement.split('\n');
|
|
557
|
+
if (targetLines.length !== replacementLines.length) {
|
|
558
|
+
return replacement;
|
|
559
|
+
}
|
|
560
|
+
const adjusted = replacementLines.map((line, idx) => {
|
|
561
|
+
const targetLine = targetLines[idx] ?? '';
|
|
562
|
+
const targetIndent = targetLine.match(/^\s*/)?.[0] ?? '';
|
|
563
|
+
if (!line.trim()) {
|
|
564
|
+
return targetIndent;
|
|
565
|
+
}
|
|
566
|
+
const lineIndent = line.match(/^\s*/)?.[0] ?? '';
|
|
567
|
+
if (lineIndent.length < targetIndent.length) {
|
|
568
|
+
const missing = targetIndent.slice(lineIndent.length);
|
|
569
|
+
return `${lineIndent}${missing}${line.trimStart()}`;
|
|
570
|
+
}
|
|
571
|
+
return line;
|
|
572
|
+
});
|
|
573
|
+
return adjusted.join('\n');
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Enhanced similar line finder with actionable suggestions for AI.
|
|
577
|
+
* Provides exact text to use in old_string and clear next steps.
|
|
578
|
+
*/
|
|
579
|
+
function findSimilarLinesWithSuggestion(content, searchFirstLine, _fullSearchText, filePath, workingDir) {
|
|
580
|
+
const similarInfo = findSimilarLines(content, searchFirstLine, filePath);
|
|
581
|
+
// Extract line numbers from similar lines
|
|
582
|
+
const lineMatch = similarInfo.match(/Line (\d+)/);
|
|
583
|
+
if (lineMatch && lineMatch[1]) {
|
|
584
|
+
const lineNum = parseInt(lineMatch[1], 10);
|
|
585
|
+
const relativePath = relative(workingDir, filePath);
|
|
586
|
+
const displayPath = relativePath && !relativePath.startsWith('..') ? relativePath : filePath;
|
|
587
|
+
// Provide concrete action: Read the file to get exact text
|
|
588
|
+
const action = [
|
|
589
|
+
`1. Use Read tool to view ${displayPath} starting at line ${Math.max(1, lineNum - 5)}`,
|
|
590
|
+
`2. Copy the EXACT text from the Read output (including all indentation)`,
|
|
591
|
+
`3. Use that exact text as old_string in your Edit call`,
|
|
592
|
+
`4. Ensure you copy multiple lines if needed for uniqueness`,
|
|
593
|
+
].join('\n ');
|
|
594
|
+
return { hints: similarInfo, actionable: action };
|
|
595
|
+
}
|
|
596
|
+
// No similar lines found - suggest reading entire file
|
|
597
|
+
const relativePath = relative(workingDir, filePath);
|
|
598
|
+
const displayPath = relativePath && !relativePath.startsWith('..') ? relativePath : filePath;
|
|
599
|
+
const action = [
|
|
600
|
+
`1. Use Read tool to view the entire file: ${displayPath}`,
|
|
601
|
+
`2. Locate the text you want to change`,
|
|
602
|
+
`3. Copy the EXACT text including whitespace`,
|
|
603
|
+
`4. Paste it as old_string in your Edit call`,
|
|
604
|
+
].join('\n ');
|
|
605
|
+
return { hints: similarInfo, actionable: action };
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Find lines in the file that are similar to the search text.
|
|
609
|
+
* Enhanced with whitespace detection and auto-correction suggestions.
|
|
610
|
+
*/
|
|
611
|
+
function findSimilarLines(content, searchFirstLine, _filePath) {
|
|
612
|
+
if (!searchFirstLine.trim()) {
|
|
613
|
+
return 'The search string starts with an empty line.';
|
|
614
|
+
}
|
|
615
|
+
const lines = content.split('\n');
|
|
616
|
+
const searchNormalized = searchFirstLine.trim().toLowerCase();
|
|
617
|
+
const matches = [];
|
|
618
|
+
// Find lines that contain key words from the search
|
|
619
|
+
const searchWords = searchNormalized.split(/\s+/).filter((w) => w.length > 2);
|
|
620
|
+
for (let i = 0; i < lines.length; i++) {
|
|
621
|
+
const line = lines[i] || '';
|
|
622
|
+
const lineNormalized = line.trim().toLowerCase();
|
|
623
|
+
// Check for exact match with different whitespace
|
|
624
|
+
if (lineNormalized === searchNormalized && line !== searchFirstLine) {
|
|
625
|
+
const hasTabs = line.includes('\t') !== searchFirstLine.includes('\t');
|
|
626
|
+
const leadingDiff = line.match(/^\s*/)?.[0]?.length !== searchFirstLine.match(/^\s*/)?.[0]?.length;
|
|
627
|
+
const issue = hasTabs ? 'tabs vs spaces' : leadingDiff ? 'different indentation' : 'whitespace difference';
|
|
628
|
+
matches.push({ lineNum: i + 1, line, similarity: 0.99, issue });
|
|
629
|
+
continue;
|
|
630
|
+
}
|
|
631
|
+
// Check for partial match (contains significant portion of the search)
|
|
632
|
+
if (lineNormalized.includes(searchNormalized.substring(0, 20))) {
|
|
633
|
+
matches.push({ lineNum: i + 1, line, similarity: 1.0 });
|
|
634
|
+
continue;
|
|
635
|
+
}
|
|
636
|
+
// Check for word overlap
|
|
637
|
+
if (searchWords.length > 0) {
|
|
638
|
+
const matchingWords = searchWords.filter((w) => lineNormalized.includes(w));
|
|
639
|
+
const similarity = matchingWords.length / searchWords.length;
|
|
640
|
+
if (similarity >= 0.5) {
|
|
641
|
+
matches.push({ lineNum: i + 1, line, similarity });
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
if (matches.length === 0) {
|
|
646
|
+
return 'No similar lines found. The text may not exist in this file.';
|
|
647
|
+
}
|
|
648
|
+
// Sort by similarity and take top 3
|
|
649
|
+
matches.sort((a, b) => b.similarity - a.similarity);
|
|
650
|
+
const topMatches = matches.slice(0, 3);
|
|
651
|
+
const suggestions = topMatches.map((m) => {
|
|
652
|
+
const truncated = m.line.length > 80 ? `${m.line.substring(0, 77)}...` : m.line;
|
|
653
|
+
const issueNote = m.issue ? ` (${m.issue})` : '';
|
|
654
|
+
return ` Line ${m.lineNum}${issueNote}: ${JSON.stringify(truncated)}`;
|
|
655
|
+
});
|
|
656
|
+
// Add auto-correction hint for whitespace issues
|
|
657
|
+
const whitespaceMatch = topMatches.find((m) => m.issue);
|
|
658
|
+
if (whitespaceMatch) {
|
|
659
|
+
return `Similar lines found (possible whitespace mismatch):\n${suggestions.join('\n')}\n\nCopy the exact text from Read output including indentation.`;
|
|
660
|
+
}
|
|
661
|
+
return `Similar lines found:\n${suggestions.join('\n')}`;
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Build AI-specific recovery guidance based on the failure pattern.
|
|
665
|
+
* This function implements AI flow design principles for self-correction.
|
|
666
|
+
*/
|
|
667
|
+
function buildAIRecoveryGuidance(searchText, fileContent) {
|
|
668
|
+
const guidance = [];
|
|
669
|
+
// Analyze the failure pattern
|
|
670
|
+
const hasMultipleLines = searchText.includes('\n');
|
|
671
|
+
const hasLeadingWhitespace = /^\s/.test(searchText);
|
|
672
|
+
const searchLen = searchText.length;
|
|
673
|
+
const fileLen = fileContent.length;
|
|
674
|
+
// PATTERN: Single line search in multi-line file
|
|
675
|
+
if (!hasMultipleLines && fileLen > 1000) {
|
|
676
|
+
guidance.push('• PATTERN DETECTED: Single-line search in large file', ' → Include 2-3 surrounding lines for uniqueness', ' → Use Read tool with specific line offset to get exact context');
|
|
677
|
+
}
|
|
678
|
+
// PATTERN: Missing leading whitespace
|
|
679
|
+
if (!hasLeadingWhitespace && fileContent.includes(' ')) {
|
|
680
|
+
guidance.push('• PATTERN DETECTED: Search text may be missing indentation', ' → File uses indentation, but old_string starts without whitespace', ' → Copy exact text from Read output including leading spaces/tabs');
|
|
681
|
+
}
|
|
682
|
+
// PATTERN: Very short search
|
|
683
|
+
if (searchLen < 30) {
|
|
684
|
+
guidance.push('• PATTERN DETECTED: Search text is very short (<30 chars)', ' → Short strings are prone to false negatives due to whitespace', ' → Include more context: function body, surrounding statements');
|
|
685
|
+
}
|
|
686
|
+
// PATTERN: Potential escape sequence issues
|
|
687
|
+
if (searchText.includes('\\n') || searchText.includes('\\t')) {
|
|
688
|
+
guidance.push('• PATTERN DETECTED: Escaped characters in search text', ' → old_string contains \\n or \\t as literal strings', ' → Use actual newlines/tabs, not escaped versions');
|
|
689
|
+
}
|
|
690
|
+
// PATTERN: Function/class definition
|
|
691
|
+
if (/^(function|class|def |const |let |var |export )/.test(searchText.trim())) {
|
|
692
|
+
guidance.push('• PATTERN DETECTED: Function/class definition search', ' → Definitions often have complex indentation', ' → Read the exact definition including all decorators/comments above');
|
|
693
|
+
}
|
|
694
|
+
// Default guidance if no specific pattern detected
|
|
695
|
+
if (guidance.length === 0) {
|
|
696
|
+
guidance.push('• GENERAL GUIDANCE:', ' 1. Use Read tool to view file around expected location', ' 2. Copy exact text from Read output (including all whitespace)', ' 3. Verify the text exists in file before Edit call', ' 4. Include more context lines if text appears multiple times');
|
|
697
|
+
}
|
|
698
|
+
// Always add the critical reminder
|
|
699
|
+
guidance.push('', 'CRITICAL: Always Read → Copy → Edit. Never guess file content.');
|
|
700
|
+
return guidance.join('\n');
|
|
701
|
+
}
|
|
702
|
+
//# sourceMappingURL=editTools.js.map
|