@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,571 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Prompt — Ink-rendered input box.
|
|
4
|
+
*
|
|
5
|
+
* Phase 2 of the Ink migration. Real text input via React reducer + Ink's
|
|
6
|
+
* useInput. The reducer is the single source of truth for buffer + cursor;
|
|
7
|
+
* keystrokes dispatch actions; Ink's reconciler renders. Frame coalescing,
|
|
8
|
+
* visual-column handling, and resize bookkeeping are owned by Ink.
|
|
9
|
+
*
|
|
10
|
+
* Render contract: this component is the only writer for the prompt row.
|
|
11
|
+
* No `process.stdout.write` side-effects — submission and cancellation
|
|
12
|
+
* surface through the `onSubmit` / `onCancel` props so the host can pipe
|
|
13
|
+
* to the existing event bus.
|
|
14
|
+
*
|
|
15
|
+
* Paste sanitization mirrors UnifiedUIRenderer.sanitizePasteContent: ANSI
|
|
16
|
+
* escapes, raw C0 control bytes, and bracketed-paste markers are stripped
|
|
17
|
+
* at intake (issues #3 + #8). The sanitizer runs on every batch of text
|
|
18
|
+
* Ink hands us, so a malicious paste can't survive into the buffer.
|
|
19
|
+
*/
|
|
20
|
+
import { useReducer, useEffect, useRef } from 'react';
|
|
21
|
+
import { Box, Text, useInput } from 'ink';
|
|
22
|
+
import { activeMentionPartial, rankFileMatches, applyMentionCompletion } from '../../core/fileMentions.js';
|
|
23
|
+
import { activeSlashPartial, rankCommandMatches, applySlashCompletion } from '../../core/slashCommands.js';
|
|
24
|
+
import { PasteRegistry, pasteLineCount } from './pasteBuffer.js';
|
|
25
|
+
function sanitize(text) {
|
|
26
|
+
if (!text)
|
|
27
|
+
return '';
|
|
28
|
+
// Full ANSI sequences (with the \x1b prefix intact).
|
|
29
|
+
let s = text.replace(/\x1b\[[0-9;?]*[A-Za-z~]|\x1b\][^\x07]*\x07|\x1b[PX^_][^\x1b]*\x1b\\|\x1b./g, '');
|
|
30
|
+
// Ink's parseKeypress sometimes splits a chunk such that the \x1b is
|
|
31
|
+
// consumed but the body lands in the next input string (e.g. "[2J" or
|
|
32
|
+
// "[201~"). Strip those leaked CSI bodies too. The pattern matches the
|
|
33
|
+
// standard CSI body shape; legitimate user text rarely matches.
|
|
34
|
+
s = s.replace(/\[[0-9;?]*[A-Za-z~]/g, '');
|
|
35
|
+
s = s.replace(/\r\n/g, '\n');
|
|
36
|
+
// Strip C0 controls EXCEPT the ones the walk-loop in useInput acts on:
|
|
37
|
+
// \x01 (Ctrl+A) → home, \x03 (Ctrl+C) → cancel, \x05 (Ctrl+E) → end,
|
|
38
|
+
// \x09 (tab, accepted as text), \x0a (\n) → submit, \x0d (\r) → submit.
|
|
39
|
+
// Everything else is hostile (NUL, BEL, BS, VT, FF, etc.).
|
|
40
|
+
s = s.replace(/[\x00\x02\x04\x06\x07\x08\x0b\x0c\x0e-\x1f\x7f]/g, '');
|
|
41
|
+
return s;
|
|
42
|
+
}
|
|
43
|
+
function reducer(state, action) {
|
|
44
|
+
switch (action.type) {
|
|
45
|
+
case 'insert': {
|
|
46
|
+
const clean = sanitize(action.text);
|
|
47
|
+
if (!clean)
|
|
48
|
+
return state;
|
|
49
|
+
const before = state.text.slice(0, state.cursor);
|
|
50
|
+
const after = state.text.slice(state.cursor);
|
|
51
|
+
return { text: before + clean + after, cursor: state.cursor + clean.length };
|
|
52
|
+
}
|
|
53
|
+
// Internally-generated, already-safe text (the paste placeholder token).
|
|
54
|
+
// The token starts with `[P`, which the leaked-CSI-body stripper in
|
|
55
|
+
// sanitize() would mangle, so it must skip that pass.
|
|
56
|
+
case 'insertRaw': {
|
|
57
|
+
if (!action.text)
|
|
58
|
+
return state;
|
|
59
|
+
const before = state.text.slice(0, state.cursor);
|
|
60
|
+
const after = state.text.slice(state.cursor);
|
|
61
|
+
return { text: before + action.text + after, cursor: state.cursor + action.text.length };
|
|
62
|
+
}
|
|
63
|
+
case 'backspace': {
|
|
64
|
+
if (state.cursor === 0)
|
|
65
|
+
return state;
|
|
66
|
+
const before = state.text.slice(0, state.cursor - 1);
|
|
67
|
+
const after = state.text.slice(state.cursor);
|
|
68
|
+
return { text: before + after, cursor: state.cursor - 1 };
|
|
69
|
+
}
|
|
70
|
+
case 'delete': {
|
|
71
|
+
if (state.cursor >= state.text.length)
|
|
72
|
+
return state;
|
|
73
|
+
const before = state.text.slice(0, state.cursor);
|
|
74
|
+
const after = state.text.slice(state.cursor + 1);
|
|
75
|
+
return { text: before + after, cursor: state.cursor };
|
|
76
|
+
}
|
|
77
|
+
case 'left':
|
|
78
|
+
return { ...state, cursor: Math.max(0, state.cursor - 1) };
|
|
79
|
+
case 'right':
|
|
80
|
+
return { ...state, cursor: Math.min(state.text.length, state.cursor + 1) };
|
|
81
|
+
case 'home':
|
|
82
|
+
return { ...state, cursor: 0 };
|
|
83
|
+
case 'end':
|
|
84
|
+
return { ...state, cursor: state.text.length };
|
|
85
|
+
case 'killToStart':
|
|
86
|
+
// Ctrl+U — delete everything left of the cursor.
|
|
87
|
+
return { text: state.text.slice(state.cursor), cursor: 0 };
|
|
88
|
+
case 'killToEnd':
|
|
89
|
+
// Ctrl+K — delete from the cursor to end of line.
|
|
90
|
+
return { text: state.text.slice(0, state.cursor), cursor: state.cursor };
|
|
91
|
+
case 'killWordBack': {
|
|
92
|
+
// Ctrl+W — delete the whitespace + word immediately left of the cursor.
|
|
93
|
+
if (state.cursor === 0)
|
|
94
|
+
return state;
|
|
95
|
+
let i = state.cursor;
|
|
96
|
+
while (i > 0 && /\s/.test(state.text[i - 1]))
|
|
97
|
+
i--;
|
|
98
|
+
while (i > 0 && !/\s/.test(state.text[i - 1]))
|
|
99
|
+
i--;
|
|
100
|
+
return { text: state.text.slice(0, i) + state.text.slice(state.cursor), cursor: i };
|
|
101
|
+
}
|
|
102
|
+
case 'set':
|
|
103
|
+
return { text: action.text, cursor: action.cursor ?? action.text.length };
|
|
104
|
+
default:
|
|
105
|
+
return state;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export const Prompt = ({ initial = '', prefix = '> ', secret = false, onSubmit, onCancel, onCyclePermissionMode, history, onExpandToolResult, onEscape, onShowShortcuts, panelOpen, onDismissPanel, completionFiles }) => {
|
|
109
|
+
// Source of truth lives in a ref, not React state. useReducer's state
|
|
110
|
+
// commit is deferred to the next render; Ink can fire useInput multiple
|
|
111
|
+
// times in the same JS turn (parseKeypress splits a chunk into N
|
|
112
|
+
// events), and every closure would read the same stale state. Apply
|
|
113
|
+
// the reducer synchronously to the ref, then force a re-render so the
|
|
114
|
+
// UI catches up. The bumper is the only useState-style hook needed.
|
|
115
|
+
const stateRef = useRef({ text: initial, cursor: initial.length });
|
|
116
|
+
const [, bumpRender] = useReducer((n) => n + 1, 0);
|
|
117
|
+
// Shell history navigation. index === -1 means "current draft" (not in
|
|
118
|
+
// history); 0 is the newest entry, increasing toward older. `draft` holds
|
|
119
|
+
// the in-progress buffer saved when nav starts, restored on Down past newest.
|
|
120
|
+
const histRef = useRef({ index: -1, draft: '' });
|
|
121
|
+
// Ctrl+R reverse-i-search. While active, typed chars build `query`; the
|
|
122
|
+
// buffer mirrors the `idx`-th history entry containing it (0 = newest match,
|
|
123
|
+
// Ctrl+R steps older). `saved` is the pre-search buffer, restored on cancel.
|
|
124
|
+
const searchRef = useRef({ active: false, query: '', idx: 0, saved: '' });
|
|
125
|
+
// @-mention completion menu. idx = highlighted match; partialFor tracks the
|
|
126
|
+
// partial the idx belongs to (reset on change); dismissedFor is the partial
|
|
127
|
+
// the user pressed Esc on (re-opens when the partial changes).
|
|
128
|
+
const compRef = useRef({ idx: 0, partialFor: null, dismissedFor: null });
|
|
129
|
+
// `/`-command completion menu — same shape/UX as the @-mention menu above.
|
|
130
|
+
const slashRef = useRef({ idx: 0, partialFor: null, dismissedFor: null });
|
|
131
|
+
// Large-paste registry: a multi-line paste collapses to a placeholder token
|
|
132
|
+
// in the buffer; `submit` re-expands it so the model gets the full text.
|
|
133
|
+
const pasteRef = useRef(new PasteRegistry());
|
|
134
|
+
// Expand any collapsed pastes before handing the buffer to the host, then
|
|
135
|
+
// reset the registry for the next composition.
|
|
136
|
+
const submit = (raw) => {
|
|
137
|
+
onSubmit(pasteRef.current.expand(raw));
|
|
138
|
+
pasteRef.current.clear();
|
|
139
|
+
};
|
|
140
|
+
// @-mention completion state from the LIVE buffer. Called in useInput (so it
|
|
141
|
+
// never reads a stale render-time capture) and in the render (to draw the
|
|
142
|
+
// menu). Idempotent: re-resets idx only when the partial actually changes.
|
|
143
|
+
const completion = () => {
|
|
144
|
+
const partial = activeMentionPartial(stateRef.current.text, stateRef.current.cursor);
|
|
145
|
+
const matches = partial !== null ? rankFileMatches(partial, completionFiles ?? [], 6) : [];
|
|
146
|
+
const c = compRef.current;
|
|
147
|
+
if (partial !== c.partialFor) {
|
|
148
|
+
c.partialFor = partial;
|
|
149
|
+
c.idx = 0;
|
|
150
|
+
if (c.dismissedFor !== partial)
|
|
151
|
+
c.dismissedFor = null;
|
|
152
|
+
}
|
|
153
|
+
return { partial, matches, open: matches.length > 0 && c.dismissedFor !== partial };
|
|
154
|
+
};
|
|
155
|
+
// `/`-command completion state from the LIVE buffer (mirrors completion()).
|
|
156
|
+
const slashCompletion = () => {
|
|
157
|
+
const partial = activeSlashPartial(stateRef.current.text, stateRef.current.cursor);
|
|
158
|
+
const matches = partial !== null ? rankCommandMatches(partial, 8) : [];
|
|
159
|
+
const c = slashRef.current;
|
|
160
|
+
if (partial !== c.partialFor) {
|
|
161
|
+
c.partialFor = partial;
|
|
162
|
+
c.idx = 0;
|
|
163
|
+
if (c.dismissedFor !== partial)
|
|
164
|
+
c.dismissedFor = null;
|
|
165
|
+
}
|
|
166
|
+
return { partial, matches, open: matches.length > 0 && c.dismissedFor !== partial };
|
|
167
|
+
};
|
|
168
|
+
// Sync the ref to externally-driven `initial` changes. The ref is
|
|
169
|
+
// only initialised once on mount, so when the host clears the buffer
|
|
170
|
+
// after a submit (sets `initial=''` via prop) the ref still holds
|
|
171
|
+
// the old text and the prompt keeps showing it. Watching `initial`
|
|
172
|
+
// here resets the ref whenever it transitions to a new value the
|
|
173
|
+
// user didn't type — the typical case is buffer clearing after
|
|
174
|
+
// submit. We don't reset when `initial` matches what's already in
|
|
175
|
+
// the ref so user keystrokes between renders aren't clobbered.
|
|
176
|
+
useEffect(() => {
|
|
177
|
+
if (initial !== stateRef.current.text) {
|
|
178
|
+
stateRef.current = { text: initial, cursor: initial.length };
|
|
179
|
+
// The buffer was replaced from outside (typically cleared after submit);
|
|
180
|
+
// any collapsed-paste tokens left in the old buffer are now stale.
|
|
181
|
+
pasteRef.current.clear();
|
|
182
|
+
bumpRender();
|
|
183
|
+
}
|
|
184
|
+
}, [initial]);
|
|
185
|
+
const apply = (action) => {
|
|
186
|
+
stateRef.current = reducer(stateRef.current, action);
|
|
187
|
+
bumpRender();
|
|
188
|
+
};
|
|
189
|
+
useInput((input, key) => {
|
|
190
|
+
if (process.env['TRENCHWORK_INK_DEBUG'] === '1') {
|
|
191
|
+
process.stderr.write(`KEY: input=${JSON.stringify(input)} ret=${key.return} bs=${key.backspace} ctrl=${key.ctrl} tab=${key.tab} shift=${key.shift}\n`);
|
|
192
|
+
}
|
|
193
|
+
// A dismissable panel (/help, /cost, …) is up: any key dismisses it and is
|
|
194
|
+
// consumed (honors the "press any key to dismiss" hint). Claude Code parity.
|
|
195
|
+
if (panelOpen) {
|
|
196
|
+
onDismissPanel?.();
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const hist = history ?? [];
|
|
200
|
+
// Reverse-i-search (Ctrl+R) owns input while active. Newest→oldest matches
|
|
201
|
+
// of `query`; the buffer mirrors the current match.
|
|
202
|
+
const reverseMatches = (q) => {
|
|
203
|
+
if (!q)
|
|
204
|
+
return [];
|
|
205
|
+
const out = [];
|
|
206
|
+
for (let i = hist.length - 1; i >= 0; i--)
|
|
207
|
+
if (hist[i].includes(q))
|
|
208
|
+
out.push(hist[i]);
|
|
209
|
+
return out;
|
|
210
|
+
};
|
|
211
|
+
const s = searchRef.current;
|
|
212
|
+
if (s.active) {
|
|
213
|
+
const showMatch = () => {
|
|
214
|
+
const ms = reverseMatches(s.query);
|
|
215
|
+
if (ms.length) {
|
|
216
|
+
s.idx = Math.min(s.idx, ms.length - 1);
|
|
217
|
+
apply({ type: 'set', text: ms[s.idx] });
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
s.idx = 0;
|
|
221
|
+
apply({ type: 'set', text: '' });
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
if (key.return) {
|
|
225
|
+
s.active = false;
|
|
226
|
+
const text = stateRef.current.text;
|
|
227
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
228
|
+
submit(text);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (key.escape || (key.ctrl && (input === 'g' || input === 'G')) || (key.ctrl && (input === 'c' || input === 'C'))) {
|
|
232
|
+
s.active = false;
|
|
233
|
+
apply({ type: 'set', text: s.saved }); // cancel — restore the pre-search buffer
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (key.ctrl && (input === 'r' || input === 'R')) {
|
|
237
|
+
s.idx += 1;
|
|
238
|
+
showMatch();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (key.backspace || key.delete) {
|
|
242
|
+
s.query = s.query.slice(0, -1);
|
|
243
|
+
s.idx = 0;
|
|
244
|
+
showMatch();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
// A printable character refines the query. Control/navigation keys
|
|
248
|
+
// accept the current match and leave search so the user can edit it.
|
|
249
|
+
const clean = input ? sanitize(input) : '';
|
|
250
|
+
if (clean && !key.ctrl && !key.tab && !key.upArrow && !key.downArrow && !key.leftArrow && !key.rightArrow) {
|
|
251
|
+
s.query += clean;
|
|
252
|
+
s.idx = 0;
|
|
253
|
+
showMatch();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
s.active = false;
|
|
257
|
+
bumpRender();
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// Shift+Tab (CSI \x1b[Z → key.tab && key.shift) cycles the permission
|
|
261
|
+
// mode. Caught before any text path so the escape never lands as text.
|
|
262
|
+
if (key.tab && key.shift) {
|
|
263
|
+
onCyclePermissionMode?.();
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (key.ctrl && (input === 'r' || input === 'R')) {
|
|
267
|
+
searchRef.current = { active: true, query: '', idx: 0, saved: stateRef.current.text };
|
|
268
|
+
bumpRender();
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// `/`-command palette. Open when the buffer is a `/<partial>` first token
|
|
272
|
+
// with matches and wasn't Esc-dismissed. UX matches Claude Code: ↑/↓ move,
|
|
273
|
+
// Esc dismisses, Tab fills (`/command ` — for commands that take an arg),
|
|
274
|
+
// and Enter RUNS the highlighted command (completing the partial first, so
|
|
275
|
+
// `/cont`+Enter or an arrow-selected entry runs the right command — not the
|
|
276
|
+
// raw partial). Anchored at the buffer start so it never overlaps an
|
|
277
|
+
// @-mention (which needs a space before the @).
|
|
278
|
+
{
|
|
279
|
+
const sc = slashCompletion();
|
|
280
|
+
if (sc.open) {
|
|
281
|
+
const pick = sc.matches[Math.min(slashRef.current.idx, sc.matches.length - 1)];
|
|
282
|
+
if (key.return) {
|
|
283
|
+
const r = applySlashCompletion(stateRef.current.text, stateRef.current.cursor, pick.command);
|
|
284
|
+
slashRef.current.partialFor = null;
|
|
285
|
+
slashRef.current.dismissedFor = null;
|
|
286
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
287
|
+
onSubmit(r.text.trimEnd());
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (key.tab && !key.shift) {
|
|
291
|
+
const r = applySlashCompletion(stateRef.current.text, stateRef.current.cursor, pick.command);
|
|
292
|
+
slashRef.current.partialFor = null;
|
|
293
|
+
slashRef.current.dismissedFor = null;
|
|
294
|
+
apply({ type: 'set', text: r.text, cursor: r.cursor });
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (key.upArrow) {
|
|
298
|
+
slashRef.current.idx = Math.max(0, slashRef.current.idx - 1);
|
|
299
|
+
bumpRender();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (key.downArrow) {
|
|
303
|
+
slashRef.current.idx = Math.min(sc.matches.length - 1, slashRef.current.idx + 1);
|
|
304
|
+
bumpRender();
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (key.escape) {
|
|
308
|
+
slashRef.current.dismissedFor = sc.partial;
|
|
309
|
+
bumpRender();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// @-mention completion menu. Open when an @<partial> at the cursor has
|
|
315
|
+
// matches and wasn't Esc-dismissed. Owns Tab/Enter (accept), Up/Down
|
|
316
|
+
// (move highlight), Esc (dismiss). Typing/backspace fall through to refine.
|
|
317
|
+
{
|
|
318
|
+
const comp = completion();
|
|
319
|
+
if (comp.open) {
|
|
320
|
+
const pick = comp.matches[Math.min(compRef.current.idx, comp.matches.length - 1)];
|
|
321
|
+
if ((key.tab && !key.shift) || key.return) {
|
|
322
|
+
const r = applyMentionCompletion(stateRef.current.text, stateRef.current.cursor, pick);
|
|
323
|
+
compRef.current.partialFor = null;
|
|
324
|
+
compRef.current.dismissedFor = null;
|
|
325
|
+
apply({ type: 'set', text: r.text, cursor: r.cursor });
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
if (key.upArrow) {
|
|
329
|
+
compRef.current.idx = Math.max(0, compRef.current.idx - 1);
|
|
330
|
+
bumpRender();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (key.downArrow) {
|
|
334
|
+
compRef.current.idx = Math.min(comp.matches.length - 1, compRef.current.idx + 1);
|
|
335
|
+
bumpRender();
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (key.escape) {
|
|
339
|
+
compRef.current.dismissedFor = comp.partial;
|
|
340
|
+
bumpRender();
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Up/Down — shell history navigation (per session). Older on Up, newer on
|
|
346
|
+
// Down; Down past the newest restores the saved draft. (`hist` is declared
|
|
347
|
+
// at the top of this handler for the reverse-search block above.)
|
|
348
|
+
if (key.upArrow) {
|
|
349
|
+
if (hist.length === 0)
|
|
350
|
+
return;
|
|
351
|
+
const h = histRef.current;
|
|
352
|
+
if (h.index === -1)
|
|
353
|
+
h.draft = stateRef.current.text;
|
|
354
|
+
h.index = Math.min(h.index + 1, hist.length - 1);
|
|
355
|
+
apply({ type: 'set', text: hist[hist.length - 1 - h.index] ?? '' });
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
if (key.downArrow) {
|
|
359
|
+
const h = histRef.current;
|
|
360
|
+
if (h.index <= 0) {
|
|
361
|
+
if (h.index === 0) {
|
|
362
|
+
h.index = -1;
|
|
363
|
+
apply({ type: 'set', text: h.draft });
|
|
364
|
+
}
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
h.index -= 1;
|
|
368
|
+
apply({ type: 'set', text: hist[hist.length - 1 - h.index] ?? '' });
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
// Any other key is an edit/action — exit history navigation so the next
|
|
372
|
+
// Up starts from the current buffer again.
|
|
373
|
+
histRef.current.index = -1;
|
|
374
|
+
if (key.return) {
|
|
375
|
+
const text = stateRef.current.text;
|
|
376
|
+
// Multi-line input (Claude Code parity): Option/Alt+Enter inserts a
|
|
377
|
+
// newline at the cursor, and a line ending in a backslash continues onto
|
|
378
|
+
// the next line (the trailing `\` becomes the newline). Either keeps
|
|
379
|
+
// editing instead of submitting.
|
|
380
|
+
if (key.meta) {
|
|
381
|
+
apply({ type: 'insert', text: '\n' });
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
if (text.endsWith('\\')) {
|
|
385
|
+
apply({ type: 'set', text: text.slice(0, -1) + '\n', cursor: text.length });
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
// Clear our own buffer on submit. The text lives in stateRef (typed
|
|
389
|
+
// keystrokes), not in the `initial` prop — for typed input the host's
|
|
390
|
+
// buffer stays '' the whole time, so the `initial` useEffect never
|
|
391
|
+
// re-fires and can't clear us. Without this self-clear, every submitted
|
|
392
|
+
// message stays in the box and the next one appends ("helloworld").
|
|
393
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
394
|
+
onSubmit(text);
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
if (key.ctrl && (input === 'c' || input === 'C')) {
|
|
398
|
+
if (stateRef.current.text.length === 0) {
|
|
399
|
+
onCancel();
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
403
|
+
}
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
if (key.leftArrow)
|
|
407
|
+
return apply({ type: 'left' });
|
|
408
|
+
if (key.rightArrow)
|
|
409
|
+
return apply({ type: 'right' });
|
|
410
|
+
if (key.backspace)
|
|
411
|
+
return apply({ type: 'backspace' });
|
|
412
|
+
if (key.delete)
|
|
413
|
+
return apply({ type: 'delete' }); // forward-delete (Del) removes the char AT the cursor
|
|
414
|
+
if (key.ctrl && (input === 'a' || input === 'A'))
|
|
415
|
+
return apply({ type: 'home' });
|
|
416
|
+
if (key.ctrl && (input === 'e' || input === 'E'))
|
|
417
|
+
return apply({ type: 'end' });
|
|
418
|
+
if (key.ctrl && (input === 'u' || input === 'U'))
|
|
419
|
+
return apply({ type: 'killToStart' });
|
|
420
|
+
if (key.ctrl && (input === 'k' || input === 'K'))
|
|
421
|
+
return apply({ type: 'killToEnd' });
|
|
422
|
+
if (key.ctrl && (input === 'w' || input === 'W'))
|
|
423
|
+
return apply({ type: 'killWordBack' });
|
|
424
|
+
if (key.ctrl && (input === 'o' || input === 'O')) {
|
|
425
|
+
onExpandToolResult?.();
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
// Esc with no menu/search open → interrupt a running turn (makes the
|
|
429
|
+
// spinner's "esc to interrupt" promise real). No-op when idle (the host
|
|
430
|
+
// guards on isProcessing). Menu/search Esc is handled in their blocks above.
|
|
431
|
+
if (key.escape) {
|
|
432
|
+
onEscape?.();
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
// `?` on an EMPTY buffer shows the shortcuts panel — makes the dim
|
|
436
|
+
// "? for shortcuts" hint real (Claude Code parity). With any text typed,
|
|
437
|
+
// `?` is a literal character, so normal prompts containing `?` are fine.
|
|
438
|
+
if (input === '?' && stateRef.current.text.length === 0 && !key.ctrl && !key.meta) {
|
|
439
|
+
onShowShortcuts?.();
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
// Ink hands us paste / pre-buffered chunks as a single `input` string.
|
|
443
|
+
// parseKeypress only flags key.return / key.ctrl when the chunk is a
|
|
444
|
+
// pure single key. When a control byte is embedded mid-chunk (e.g.
|
|
445
|
+
// 'world\x01' or '[2J' after Ink ate the \x1b prefix) the flags stay
|
|
446
|
+
// false and the raw bytes sit inside `input`. Sanitise the WHOLE
|
|
447
|
+
// chunk first so multi-byte ANSI sequences like '[2J' are stripped
|
|
448
|
+
// as one, then walk for embedded \r / Ctrl+letter and insert the
|
|
449
|
+
// rest. Splitting into per-char dispatches without sanitising the
|
|
450
|
+
// chunk first would let CSI bodies through.
|
|
451
|
+
if (input) {
|
|
452
|
+
const cleaned = sanitize(input);
|
|
453
|
+
// A large multi-line paste arrives as one chunk: collapse it to a compact
|
|
454
|
+
// `[Pasted text #N +M lines]` placeholder so it doesn't flood the box, and
|
|
455
|
+
// hold the full text in the registry for re-expansion at submit (Claude
|
|
456
|
+
// Code parity). Reverse-search owns input while active, so skip there.
|
|
457
|
+
const pasteLines = pasteLineCount(cleaned);
|
|
458
|
+
if (pasteLines !== null && !searchRef.current.active) {
|
|
459
|
+
const token = pasteRef.current.register(cleaned, pasteLines);
|
|
460
|
+
apply({ type: 'insertRaw', text: token });
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
// Iterate by code point ([...x]) so surrogate-pair emoji stay intact.
|
|
464
|
+
const chars = [...cleaned];
|
|
465
|
+
for (let i = 0; i < chars.length; i++) {
|
|
466
|
+
const ch = chars[i];
|
|
467
|
+
const code = ch.charCodeAt(0);
|
|
468
|
+
if (ch === '\r' || ch === '\n') {
|
|
469
|
+
// A TERMINATING newline (nothing but newlines after it) is the user
|
|
470
|
+
// pressing Enter → submit. An INTERNAL newline means a multi-line
|
|
471
|
+
// PASTE arrived as one chunk → insert it so the whole paste lands in
|
|
472
|
+
// the buffer instead of submitting line 1 and dropping the rest.
|
|
473
|
+
const rest = chars.slice(i + 1).join('');
|
|
474
|
+
if (!rest || /^[\r\n]*$/.test(rest)) {
|
|
475
|
+
const text = stateRef.current.text;
|
|
476
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
477
|
+
submit(text);
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
apply({ type: 'insert', text: '\n' });
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
if (code === 0x03) {
|
|
484
|
+
if (stateRef.current.text.length === 0) {
|
|
485
|
+
onCancel();
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
apply({ type: 'set', text: '', cursor: 0 });
|
|
489
|
+
pasteRef.current.clear();
|
|
490
|
+
continue;
|
|
491
|
+
}
|
|
492
|
+
if (code === 0x01) {
|
|
493
|
+
apply({ type: 'home' });
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
if (code === 0x05) {
|
|
497
|
+
apply({ type: 'end' });
|
|
498
|
+
continue;
|
|
499
|
+
}
|
|
500
|
+
// sanitize() above already stripped C0 bytes other than the
|
|
501
|
+
// shortlist we just handled, so this insert is always safe.
|
|
502
|
+
apply({ type: 'insert', text: ch });
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
// Snapshot the ref into a local for the JSX below. Outside the input
|
|
507
|
+
// handler the latest committed render value is the right thing to draw.
|
|
508
|
+
const state = stateRef.current;
|
|
509
|
+
// Render the buffer with a visible cursor block. In secret mode we
|
|
510
|
+
// collapse the buffer to • characters but keep the cursor markers so
|
|
511
|
+
// the user can still see where they are editing.
|
|
512
|
+
// Children must be non-empty strings — empty <Text> siblings collide
|
|
513
|
+
// on React's auto-generated keys and the parent fails to mount, which
|
|
514
|
+
// also prevents useInput's effect from running. Render a single space
|
|
515
|
+
// when a slice would be empty.
|
|
516
|
+
const display = secret ? '•'.repeat(state.text.length) : state.text;
|
|
517
|
+
// Leading '!' runs the line in bash (Claude Code parity); tint the prompt
|
|
518
|
+
// mark so the mode is visible before Enter.
|
|
519
|
+
const bashMode = state.text.startsWith('!');
|
|
520
|
+
// Multi-line aware: split on '\n' and locate the cursor's line/column so the
|
|
521
|
+
// inverse cursor block lands on the right row. Continuation lines drop the
|
|
522
|
+
// '> ' mark (indented two cols), matching Claude Code.
|
|
523
|
+
const dispLines = display.split('\n');
|
|
524
|
+
let curLine = 0;
|
|
525
|
+
let curCol = state.cursor;
|
|
526
|
+
for (let i = 0; i < dispLines.length; i++) {
|
|
527
|
+
if (curCol <= dispLines[i].length) {
|
|
528
|
+
curLine = i;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
curCol -= dispLines[i].length + 1; // +1 for the consumed '\n'
|
|
532
|
+
curLine = i + 1;
|
|
533
|
+
}
|
|
534
|
+
// Surface state via a hidden marker line for subprocess testing.
|
|
535
|
+
// TRENCHWORK_INK_DEBUG=1 enables a `STATE: <buffer>|<cursor>` annotation
|
|
536
|
+
// that the test harness greps for. Off by default.
|
|
537
|
+
useEffect(() => {
|
|
538
|
+
if (process.env['TRENCHWORK_INK_DEBUG'] === '1') {
|
|
539
|
+
process.stderr.write(`STATE: ${state.text}|${state.cursor}\n`);
|
|
540
|
+
}
|
|
541
|
+
}, [state.text, state.cursor]);
|
|
542
|
+
const search = searchRef.current;
|
|
543
|
+
const comp = completion();
|
|
544
|
+
const slash = slashCompletion();
|
|
545
|
+
const inputRow = (_jsx(Box, { flexDirection: "column", children: dispLines.map((ln, i) => {
|
|
546
|
+
const mark = i === 0 ? prefix : ' ';
|
|
547
|
+
const markEl = i === 0 && bashMode
|
|
548
|
+
? _jsx(Text, { color: "#ff6a1f", children: mark }, "m")
|
|
549
|
+
: _jsx(Text, { dimColor: true, children: mark }, "m");
|
|
550
|
+
if (i === curLine) {
|
|
551
|
+
return (_jsxs(Box, { children: [markEl, _jsx(Text, { children: ln.slice(0, curCol) || ' ' }, "b"), _jsx(Text, { inverse: true, children: ln.slice(curCol, curCol + 1) || ' ' }, "c"), _jsx(Text, { children: ln.slice(curCol + 1) || ' ' }, "a")] }, `il-${i}`));
|
|
552
|
+
}
|
|
553
|
+
return (_jsxs(Box, { children: [markEl, _jsx(Text, { children: ln || ' ' }, "t")] }, `il-${i}`));
|
|
554
|
+
}) }, "input"));
|
|
555
|
+
if (search.active) {
|
|
556
|
+
// bash-style reverse-i-search status line above the input.
|
|
557
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsx(Text, { dimColor: true, children: `(reverse-i-search)\`${search.query}\`:` }) }, "rsearch"), inputRow] }));
|
|
558
|
+
}
|
|
559
|
+
if (slash.open) {
|
|
560
|
+
// `/`-command palette under the input — ▸ marks the highlighted command,
|
|
561
|
+
// with its description dimmed (↑/↓ move, Tab/Enter accept, Esc dismiss).
|
|
562
|
+
return (_jsxs(Box, { flexDirection: "column", children: [inputRow, _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: slash.matches.map((c, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === slashRef.current.idx ? '#ff6a1f' : undefined, children: (i === slashRef.current.idx ? '▸ ' : ' ') + c.command }), _jsx(Text, { dimColor: true, children: ' ' + c.description })] }, `sm-${i}`))) }, "smenu")] }));
|
|
563
|
+
}
|
|
564
|
+
if (comp.open) {
|
|
565
|
+
// @-mention completion menu under the input — ▸ marks the highlighted file
|
|
566
|
+
// (↑/↓ to move, Tab/Enter to accept, Esc to dismiss).
|
|
567
|
+
return (_jsxs(Box, { flexDirection: "column", children: [inputRow, _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: comp.matches.map((f, i) => (_jsx(Box, { children: _jsx(Text, { color: i === compRef.current.idx ? '#ff6a1f' : undefined, children: (i === compRef.current.idx ? '▸ ' : ' ') + '@' + f }) }, `cm-${i}`))) }, "cmenu")] }));
|
|
568
|
+
}
|
|
569
|
+
return inputRow;
|
|
570
|
+
};
|
|
571
|
+
//# sourceMappingURL=Prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Prompt.js","sourceRoot":"","sources":["../../../src/ui/ink/Prompt.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatusLine — Ink-rendered working line. The CLI's renderer is Ink-only;
|
|
3
|
+
* this component owns the spinner / activity message / mode chips row.
|
|
4
|
+
*
|
|
5
|
+
* Claude Code shape (see src/ui/CLAUDE_CODE_UX.md): a sparkle that animates
|
|
6
|
+
* through `· ✢ ✳ ✶ ✻ ✽`, the current activity, then dim meta
|
|
7
|
+
* `(Ns · ↑ X tokens · esc to interrupt)`. A second dim line carries the mode
|
|
8
|
+
* chips. The component self-ticks (its own interval) so the sparkle spins and
|
|
9
|
+
* the elapsed counter advances between host rerenders — Ink reconciles it to a
|
|
10
|
+
* stable fiber, so the interval survives the controller's prop updates.
|
|
11
|
+
*
|
|
12
|
+
* Render contract: this component is the *only* writer for its rows. No
|
|
13
|
+
* console.log / process.stdout.write side-effects.
|
|
14
|
+
*/
|
|
15
|
+
import React from 'react';
|
|
16
|
+
export interface StatusLineProps {
|
|
17
|
+
/** Active line shown next to the spinner. Empty/undefined hides the row. */
|
|
18
|
+
message?: string | null;
|
|
19
|
+
/** Optional secondary line (mode chips). */
|
|
20
|
+
modeMessage?: string | null;
|
|
21
|
+
/** Animate the sparkle + show elapsed/token meta. */
|
|
22
|
+
spinning?: boolean;
|
|
23
|
+
/** ms timestamp the current activity began, for the elapsed counter. */
|
|
24
|
+
startTime?: number | null;
|
|
25
|
+
/** Cumulative output tokens, for the `↑ X tokens` meta. */
|
|
26
|
+
tokensUsed?: number | null;
|
|
27
|
+
/**
|
|
28
|
+
* When the spinner is showing a generic "thinking" state (no specific tool
|
|
29
|
+
* activity), replace `message` with a whimsical gerund that rotates over time
|
|
30
|
+
* — Claude Code parity (CLAUDE_CODE_UX.md §4).
|
|
31
|
+
*/
|
|
32
|
+
thinkingGerund?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare const StatusLine: React.FC<StatusLineProps>;
|
|
35
|
+
//# sourceMappingURL=StatusLine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusLine.d.ts","sourceRoot":"","sources":["../../../src/ui/ink/StatusLine.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAYD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyDhD,CAAC"}
|