dexto 1.4.0 → 1.5.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/README.md +62 -7
- package/dist/agents/agent-template.yml +2 -2
- package/dist/agents/coding-agent/coding-agent.yml +22 -16
- package/dist/agents/database-agent/database-agent.yml +2 -2
- package/dist/agents/default-agent.yml +7 -5
- package/dist/agents/github-agent/github-agent.yml +2 -2
- package/dist/agents/product-name-researcher/product-name-researcher.yml +2 -2
- package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +2 -2
- package/dist/analytics/events.d.ts +13 -6
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +6 -2
- package/dist/api/server-hono.d.ts.map +1 -1
- package/dist/api/server-hono.js +27 -5
- package/dist/cli/cli-subscriber.d.ts +4 -0
- package/dist/cli/cli-subscriber.d.ts.map +1 -1
- package/dist/cli/cli-subscriber.js +40 -2
- package/dist/cli/commands/create-app.d.ts +16 -14
- package/dist/cli/commands/create-app.d.ts.map +1 -1
- package/dist/cli/commands/create-app.js +626 -102
- package/dist/cli/commands/create-image.d.ts +7 -0
- package/dist/cli/commands/create-image.d.ts.map +1 -0
- package/dist/cli/commands/create-image.js +201 -0
- package/dist/cli/commands/helpers/formatters.js +7 -7
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/init-app.js +7 -7
- package/dist/cli/commands/install.d.ts +0 -3
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +10 -35
- package/dist/cli/commands/interactive-commands/command-parser.js +7 -7
- package/dist/cli/commands/interactive-commands/general-commands.js +1 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.js +11 -11
- package/dist/cli/commands/interactive-commands/system/system-commands.js +3 -3
- package/dist/cli/commands/list-agents.js +2 -2
- package/dist/cli/commands/session-commands.js +16 -16
- package/dist/cli/commands/setup.d.ts +13 -5
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +860 -65
- package/dist/cli/commands/which.js +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -0
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.js +29 -7
- package/dist/cli/ink-cli/components/CustomInput.js +1 -1
- package/dist/cli/ink-cli/components/EditableMultiLineInput.js +4 -4
- package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ElicitationForm.js +6 -6
- package/dist/cli/ink-cli/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ErrorBoundary.js +1 -1
- package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/Footer.js +1 -1
- package/dist/cli/ink-cli/components/HistorySearchBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/HistorySearchBar.js +1 -1
- package/dist/cli/ink-cli/components/MultiLineInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/MultiLineInput.js +3 -3
- package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ResourceAutocomplete.js +4 -4
- package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +3 -3
- package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/StatusBar.js +7 -5
- package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/TextBufferInput.js +6 -6
- package/dist/cli/ink-cli/components/base/BaseAutocomplete.js +4 -4
- package/dist/cli/ink-cli/components/base/BaseSelector.js +2 -2
- package/dist/cli/ink-cli/components/chat/Footer.js +1 -1
- package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/Header.js +2 -4
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +5 -5
- package/dist/cli/ink-cli/components/chat/MessageList.js +1 -1
- package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.js +1 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts +1 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.js +4 -4
- package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +2 -2
- package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.js +5 -5
- package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.js +2 -2
- package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.js +2 -2
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ApiKeyInput.js +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts +10 -2
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +198 -89
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpAddChoice.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpAddSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpCustomWizard.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerActions.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerList.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +5 -5
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +222 -68
- package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptAddChoice.js +2 -2
- package/dist/cli/ink-cli/components/overlays/PromptAddWizard.js +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptList.js +2 -2
- package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/SearchOverlay.js +4 -4
- package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/StreamSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +12 -12
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +25 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +609 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts +15 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.js +14 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +33 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +419 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +25 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +29 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +17 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.js +11 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +20 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +10 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +30 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.js +13 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts +8 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.js +7 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +79 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.js +38 -0
- package/dist/cli/ink-cli/components/renderers/DiffRenderer.js +2 -2
- package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +1 -1
- package/dist/cli/ink-cli/components/renderers/FileRenderer.js +4 -4
- package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +2 -2
- package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +1 -1
- package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +3 -3
- package/dist/cli/ink-cli/components/renderers/diff-shared.js +1 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.js +8 -6
- package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.js +23 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +80 -24
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.js +5 -1
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +4 -2
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +77 -9
- package/dist/cli/ink-cli/state/types.d.ts +3 -2
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts +5 -0
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.js +59 -1
- package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/toolUtils.js +2 -0
- package/dist/cli/utils/api-key-setup.d.ts +54 -4
- package/dist/cli/utils/api-key-setup.d.ts.map +1 -1
- package/dist/cli/utils/api-key-setup.js +433 -107
- package/dist/cli/utils/api-key-verification.d.ts +17 -0
- package/dist/cli/utils/api-key-verification.d.ts.map +1 -0
- package/dist/cli/utils/api-key-verification.js +211 -0
- package/dist/cli/utils/config-validation.d.ts +22 -2
- package/dist/cli/utils/config-validation.d.ts.map +1 -1
- package/dist/cli/utils/config-validation.js +354 -25
- package/dist/cli/utils/local-model-setup.d.ts +46 -0
- package/dist/cli/utils/local-model-setup.d.ts.map +1 -0
- package/dist/cli/utils/local-model-setup.js +662 -0
- package/dist/cli/utils/options.js +1 -1
- package/dist/cli/utils/prompt-helpers.d.ts +47 -0
- package/dist/cli/utils/prompt-helpers.d.ts.map +1 -0
- package/dist/cli/utils/prompt-helpers.js +66 -0
- package/dist/cli/utils/provider-setup.d.ts +66 -8
- package/dist/cli/utils/provider-setup.d.ts.map +1 -1
- package/dist/cli/utils/provider-setup.js +324 -84
- package/dist/cli/utils/scaffolding-utils.d.ts +76 -0
- package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -0
- package/dist/cli/utils/scaffolding-utils.js +246 -0
- package/dist/cli/utils/setup-utils.d.ts +16 -0
- package/dist/cli/utils/setup-utils.d.ts.map +1 -1
- package/dist/cli/utils/setup-utils.js +72 -21
- package/dist/cli/utils/template-engine.d.ts +65 -0
- package/dist/cli/utils/template-engine.d.ts.map +1 -0
- package/dist/cli/utils/template-engine.js +1089 -0
- package/dist/config/cli-overrides.d.ts +44 -1
- package/dist/config/cli-overrides.d.ts.map +1 -1
- package/dist/config/cli-overrides.js +102 -0
- package/dist/index.js +315 -53
- package/dist/webui/assets/index-8j-KMkX1.js +2054 -0
- package/dist/webui/assets/index-c_AX24V4.css +1 -0
- package/dist/webui/index.html +3 -9
- package/dist/webui/logos/aws-color.svg +1 -0
- package/dist/webui/logos/dexto/dexto_logo.svg +1 -1
- package/dist/webui/logos/dexto/dexto_logo_light.svg +6 -6
- package/dist/webui/logos/glama.svg +7 -0
- package/dist/webui/logos/litellm.svg +7 -0
- package/dist/webui/logos/openrouter.svg +1 -0
- package/package.json +8 -7
- package/dist/webui/assets/index-BkwPkZpd.css +0 -1
- package/dist/webui/assets/index-D9u1XfyH.js +0 -2025
|
@@ -31,7 +31,7 @@ export async function handleWhichCommand(agentName) {
|
|
|
31
31
|
const validated = WhichCommandSchema.parse({ agentName });
|
|
32
32
|
const availableAgents = getAvailableAgentNames();
|
|
33
33
|
try {
|
|
34
|
-
const resolvedPath = await resolveAgentPath(validated.agentName, false
|
|
34
|
+
const resolvedPath = await resolveAgentPath(validated.agentName, false); // Don't auto-install
|
|
35
35
|
console.log(resolvedPath);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
@@ -23,6 +23,8 @@ export interface ApprovalOptions {
|
|
|
23
23
|
formData?: Record<string, unknown>;
|
|
24
24
|
/** Enable "accept all edits" mode (auto-approve future edit_file/write_file) */
|
|
25
25
|
enableAcceptEditsMode?: boolean;
|
|
26
|
+
/** Remember directory access for the session */
|
|
27
|
+
rememberDirectory?: boolean;
|
|
26
28
|
}
|
|
27
29
|
interface ApprovalPromptProps {
|
|
28
30
|
approval: ApprovalRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalPrompt.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ApprovalPrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuE,MAAM,OAAO,CAAC;AAG5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAK5D,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,oEAAoE;IACpE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ApprovalPrompt.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ApprovalPrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuE,MAAM,OAAO,CAAC;AAG5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAK5D,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,oEAAoE;IACpE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,mBAAmB;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,kGA2R1B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useState, useImperativeHandle, useRef, useEffect } from 'react';
|
|
3
3
|
import { Box, Text } from 'ink';
|
|
4
4
|
import { ElicitationForm } from './ElicitationForm.js';
|
|
@@ -14,6 +14,7 @@ import { isEditWriteTool } from '../utils/toolUtils.js';
|
|
|
14
14
|
export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCancel }, ref) => {
|
|
15
15
|
const isCommandConfirmation = approval.type === 'command_confirmation';
|
|
16
16
|
const isElicitation = approval.type === 'elicitation';
|
|
17
|
+
const isDirectoryAccess = approval.type === 'directory_access';
|
|
17
18
|
// Extract suggested patterns for bash tools
|
|
18
19
|
const suggestedPatterns = approval.metadata.suggestedPatterns ?? [];
|
|
19
20
|
const hasBashPatterns = suggestedPatterns.length > 0;
|
|
@@ -44,6 +45,14 @@ export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCance
|
|
|
44
45
|
options.push({ id: 'yes', label: 'Yes' });
|
|
45
46
|
options.push({ id: 'no', label: 'No' });
|
|
46
47
|
}
|
|
48
|
+
else if (isDirectoryAccess) {
|
|
49
|
+
// Directory access - offer session-scoped access
|
|
50
|
+
const parentDir = approval.metadata.parentDir;
|
|
51
|
+
const dirLabel = parentDir ? ` "${parentDir}"` : '';
|
|
52
|
+
options.push({ id: 'yes', label: 'Yes (once)' });
|
|
53
|
+
options.push({ id: 'yes-session', label: `Yes, allow${dirLabel} (session)` });
|
|
54
|
+
options.push({ id: 'no', label: 'No' });
|
|
55
|
+
}
|
|
47
56
|
else if (isEditOrWriteTool) {
|
|
48
57
|
// Edit/write file tools - offer "accept all edits" mode instead of session
|
|
49
58
|
options.push({ id: 'yes', label: 'Yes' });
|
|
@@ -85,7 +94,13 @@ export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCance
|
|
|
85
94
|
onApprove({});
|
|
86
95
|
}
|
|
87
96
|
else if (option.id === 'yes-session') {
|
|
88
|
-
|
|
97
|
+
// For directory access, remember the directory; otherwise remember the tool
|
|
98
|
+
if (isDirectoryAccess) {
|
|
99
|
+
onApprove({ rememberDirectory: true });
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
onApprove({ rememberChoice: true });
|
|
103
|
+
}
|
|
89
104
|
}
|
|
90
105
|
else if (option.id === 'yes-accept-edits') {
|
|
91
106
|
// Approve and enable "accept all edits" mode
|
|
@@ -121,6 +136,7 @@ export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCance
|
|
|
121
136
|
}), [
|
|
122
137
|
isElicitation,
|
|
123
138
|
isEditOrWriteTool,
|
|
139
|
+
isDirectoryAccess,
|
|
124
140
|
options,
|
|
125
141
|
suggestedPatterns,
|
|
126
142
|
onApprove,
|
|
@@ -141,19 +157,21 @@ export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCance
|
|
|
141
157
|
return null;
|
|
142
158
|
switch (displayPreview.type) {
|
|
143
159
|
case 'diff': {
|
|
144
|
-
const isOverwrite = toolName === '
|
|
160
|
+
const isOverwrite = toolName === 'custom--write_file' ||
|
|
161
|
+
toolName === 'internal--write_file' ||
|
|
162
|
+
toolName === 'write_file';
|
|
145
163
|
return (_jsx(DiffPreview, { data: displayPreview, headerType: isOverwrite ? 'overwrite' : 'edit' }));
|
|
146
164
|
}
|
|
147
165
|
case 'shell':
|
|
148
166
|
// For shell preview, just show the command (no output yet)
|
|
149
|
-
return (_jsxs(Box, { marginBottom: 1, flexDirection: "row", children: [_jsx(Text, {
|
|
167
|
+
return (_jsxs(Box, { marginBottom: 1, flexDirection: "row", children: [_jsx(Text, { color: "gray", children: "$ " }), _jsx(Text, { color: "yellowBright", children: displayPreview.command }), displayPreview.isBackground && _jsx(Text, { color: "gray", children: " (background)" })] }));
|
|
150
168
|
case 'file':
|
|
151
169
|
// Use enhanced file preview with full content for new file creation
|
|
152
170
|
if (displayPreview.operation === 'create' && displayPreview.content) {
|
|
153
171
|
return _jsx(CreateFilePreview, { data: displayPreview });
|
|
154
172
|
}
|
|
155
173
|
// Fallback for other file operations
|
|
156
|
-
return (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, {
|
|
174
|
+
return (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "gray", children: [displayPreview.operation === 'read' &&
|
|
157
175
|
`Read ${displayPreview.lineCount ?? 'file'} lines`, displayPreview.operation === 'write' &&
|
|
158
176
|
`Write to ${displayPreview.path}`, displayPreview.operation === 'delete' &&
|
|
159
177
|
`Delete ${displayPreview.path}`] }) }));
|
|
@@ -161,10 +179,14 @@ export const ApprovalPrompt = forwardRef(({ approval, onApprove, onDeny, onCance
|
|
|
161
179
|
return null;
|
|
162
180
|
}
|
|
163
181
|
};
|
|
164
|
-
|
|
182
|
+
// Extract directory access metadata
|
|
183
|
+
const directoryPath = approval.metadata.path;
|
|
184
|
+
const parentDir = approval.metadata.parentDir;
|
|
185
|
+
const operation = approval.metadata.operation;
|
|
186
|
+
return (_jsxs(Box, { paddingX: 0, paddingY: 0, flexDirection: "column", children: [_jsx(Box, { flexDirection: "column", marginBottom: 0, children: isDirectoryAccess ? (_jsxs(_Fragment, { children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: "yellowBright", bold: true, children: ["\uD83D\uDD10 Directory Access:", ' '] }), _jsx(Text, { color: "cyan", children: parentDir || directoryPath })] }), _jsxs(Box, { flexDirection: "row", marginTop: 0, children: [_jsx(Text, { color: "gray", children: ' ' }), _jsxs(Text, { color: "gray", children: [toolName ? `"${toolName}"` : 'Tool', " wants to", ' ', operation || 'access', " files outside working directory"] })] })] })) : (_jsxs(_Fragment, { children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: "yellowBright", bold: true, children: ["\uD83D\uDD10 Approval:", ' '] }), toolName && _jsx(Text, { color: "cyan", children: toolName })] }), isCommandConfirmation && command && (_jsxs(Box, { flexDirection: "row", marginTop: 0, children: [_jsx(Text, { color: "gray", children: ' Command: ' }), _jsx(Text, { color: "red", children: command })] }))] })) }), renderPreview(), _jsx(Box, { flexDirection: "column", marginTop: 0, children: options.map((option, index) => {
|
|
165
187
|
const isSelected = index === selectedIndex;
|
|
166
188
|
const isNo = option.id === 'no';
|
|
167
189
|
return (_jsx(Box, { children: isSelected ? (_jsxs(Text, { color: isNo ? 'red' : 'green', bold: true, children: [' ▶ ', option.label] })) : (_jsxs(Text, { color: "gray", children: [' ', option.label] })) }, option.id));
|
|
168
|
-
}) }), _jsx(Box, { marginTop: 0, children: _jsxs(Text, { color: "gray",
|
|
190
|
+
}) }), _jsx(Box, { marginTop: 0, children: _jsxs(Text, { color: "gray", children: [' ', "\u2191\u2193 to select \u2022 Enter to confirm \u2022 Esc to cancel"] }) })] }));
|
|
169
191
|
});
|
|
170
192
|
ApprovalPrompt.displayName = 'ApprovalPrompt';
|
|
@@ -44,7 +44,7 @@ export default function CustomInput({ value, onChange, onSubmit, placeholder, is
|
|
|
44
44
|
// Empty input - highlight first character of placeholder
|
|
45
45
|
const firstChar = placeholder[0] || ' ';
|
|
46
46
|
const rest = placeholder.slice(1);
|
|
47
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: "black", backgroundColor: "green", children: firstChar }), _jsx(Text, {
|
|
47
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "black", backgroundColor: "green", children: firstChar }), _jsx(Text, { color: "gray", children: rest })] }));
|
|
48
48
|
}
|
|
49
49
|
// Has value - highlight character after end (space)
|
|
50
50
|
return (_jsxs(Text, { children: [value, _jsx(Text, { color: "black", backgroundColor: "green", children: ' ' })] }));
|
|
@@ -104,17 +104,17 @@ export default function EditableMultiLineInput({ value, onChange, onSubmit, plac
|
|
|
104
104
|
const prefix = lineIdx === 0 ? '» ' : ' ';
|
|
105
105
|
if (cursorCol < 0) {
|
|
106
106
|
// No cursor on this line
|
|
107
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: "
|
|
107
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: prefix }), _jsx(Text, { children: line || ' ' })] }, lineIdx));
|
|
108
108
|
}
|
|
109
109
|
// Cursor on this line - highlight character at cursor
|
|
110
110
|
const before = line.slice(0, cursorCol);
|
|
111
111
|
const atCursor = line.charAt(cursorCol) || ' ';
|
|
112
112
|
const after = line.slice(cursorCol + 1);
|
|
113
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: "
|
|
113
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: prefix }), _jsx(Text, { children: before }), _jsx(Text, { backgroundColor: "green", color: "black", children: atCursor }), _jsx(Text, { children: after })] }, lineIdx));
|
|
114
114
|
};
|
|
115
115
|
// Show placeholder if empty
|
|
116
116
|
if (!value && placeholder) {
|
|
117
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "
|
|
117
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: '» ' }), _jsx(Text, { backgroundColor: "green", color: "black", children: ' ' }), _jsxs(Text, { color: "gray", children: [" ", placeholder] })] }), _jsx(Text, { color: "gray", children: "Multi-line mode \u2022 Cmd/Ctrl+Enter to submit \u2022 Shift+Enter for single-line" })] }));
|
|
118
118
|
}
|
|
119
|
-
return (_jsxs(Box, { flexDirection: "column", children: [lines.map((line, idx) => renderLine(line, idx)), _jsx(Text, {
|
|
119
|
+
return (_jsxs(Box, { flexDirection: "column", children: [lines.map((line, idx) => renderLine(line, idx)), _jsx(Text, { color: "gray", children: "Multi-line mode \u2022 Cmd/Ctrl+Enter to submit \u2022 Shift+Enter for single-line" })] }));
|
|
120
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElicitationForm.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ElicitationForm.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0E,MAAM,OAAO,CAAC;AAE/F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,oBAAoB;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAWD;;GAEG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"ElicitationForm.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ElicitationForm.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA0E,MAAM,OAAO,CAAC;AAE/F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,oBAAoB;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAWD;;GAEG;AACH,eAAO,MAAM,eAAe,oGAygB3B,CAAC"}
|
|
@@ -340,19 +340,19 @@ export const ElicitationForm = forwardRef(({ metadata, onSubmit, onCancel }, ref
|
|
|
340
340
|
? 'No'
|
|
341
341
|
: String(value ?? '');
|
|
342
342
|
return (_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: field.label }), _jsx(Text, { children: ": " }), _jsx(Text, { color: "green", children: displayValue })] }) }, field.name));
|
|
343
|
-
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, {
|
|
343
|
+
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Enter to submit \u2022 Backspace to edit \u2022 Esc to cancel" }) })] }));
|
|
344
344
|
}
|
|
345
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, paddingY: 0, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "
|
|
345
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, paddingY: 0, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "yellowBright", bold: true, children: ["\uD83D\uDCDD ", prompt] }) }), fields.map((field, index) => {
|
|
346
346
|
const isActive = index === activeFieldIndex;
|
|
347
347
|
const value = formData[field.name];
|
|
348
348
|
const error = errors[field.name];
|
|
349
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsxs(Text, { color: isActive ? 'cyan' : 'white', bold: isActive, children: [isActive ? '▶ ' : ' ', field.label, field.required && _jsx(Text, { color: "red", children: "*" }), ': '] }), field.type === 'boolean' && (_jsxs(Text, { color: value === true ? 'green' : 'gray', children: [value === true ? '[✓] Yes' : '[ ] No', isActive && _jsx(Text, {
|
|
349
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsxs(Text, { color: isActive ? 'cyan' : 'white', bold: isActive, children: [isActive ? '▶ ' : ' ', field.label, field.required && _jsx(Text, { color: "red", children: "*" }), ': '] }), field.type === 'boolean' && (_jsxs(Text, { color: value === true ? 'green' : 'gray', children: [value === true ? '[✓] Yes' : '[ ] No', isActive && _jsx(Text, { color: "gray", children: " (Space to toggle)" })] })), field.type === 'string' && !isActive && value !== undefined && (_jsx(Text, { color: "green", children: String(value) })), field.type === 'number' && !isActive && value !== undefined && (_jsx(Text, { color: "green", children: String(value) })), field.type === 'enum' && !isActive && value !== undefined && (_jsx(Text, { color: "green", children: String(value) })), field.type === 'array-enum' &&
|
|
350
350
|
!isActive &&
|
|
351
351
|
Array.isArray(value) &&
|
|
352
|
-
value.length > 0 && (_jsx(Text, { color: "green", children: value.join(', ') }))] }), isActive && (field.type === 'string' || field.type === 'number') && (_jsxs(Box, { marginLeft: 2, children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: currentInput }), _jsx(Text, { color: "cyan", children: "_" })] })), isActive && field.type === 'enum' && field.enumValues && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: field.enumValues.map((opt, i) => (_jsx(Box, { children: _jsxs(Text, { color: i === enumIndex ? 'green' : 'gray', children: [i === enumIndex ? ' ▶ ' : ' ', String(opt)] }) }, String(opt)))) })), isActive && field.type === 'array-enum' && field.enumValues && (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, {
|
|
352
|
+
value.length > 0 && (_jsx(Text, { color: "green", children: value.join(', ') }))] }), isActive && (field.type === 'string' || field.type === 'number') && (_jsxs(Box, { marginLeft: 2, children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: currentInput }), _jsx(Text, { color: "cyan", children: "_" })] })), isActive && field.type === 'enum' && field.enumValues && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: field.enumValues.map((opt, i) => (_jsx(Box, { children: _jsxs(Text, { color: i === enumIndex ? 'green' : 'gray', children: [i === enumIndex ? ' ▶ ' : ' ', String(opt)] }) }, String(opt)))) })), isActive && field.type === 'array-enum' && field.enumValues && (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, { color: "gray", children: " (Space to select, Enter to confirm)" }), field.enumValues.map((opt, i) => {
|
|
353
353
|
const isSelected = arraySelections.has(i);
|
|
354
354
|
return (_jsx(Box, { children: _jsxs(Text, { color: i === enumIndex ? 'cyan' : 'gray', children: [i === enumIndex ? ' ▶ ' : ' ', _jsx(Text, { color: isSelected ? 'green' : 'gray', children: isSelected ? '[✓]' : '[ ]' }), ' ', String(opt)] }) }, String(opt)));
|
|
355
|
-
})] })), isActive && field.description && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, {
|
|
356
|
-
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, {
|
|
355
|
+
})] })), isActive && field.description && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "gray", children: field.description }) })), error && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "red", children: error }) }))] }, field.name));
|
|
356
|
+
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Tab/\u2193 next field \u2022 Shift+Tab/\u2191 prev \u2022 Enter to confirm \u2022 Esc to cancel" }) })] }));
|
|
357
357
|
});
|
|
358
358
|
ElicitationForm.displayName = 'ElicitationForm';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,kBAAkB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,UAAU,kBAAkB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBAC1E,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIxD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAOjE,MAAM,IAAI,KAAK,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,kBAAkB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,UAAU,kBAAkB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBAC1E,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIxD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAOjE,MAAM,IAAI,KAAK,CAAC,SAAS;CAerC"}
|
|
@@ -22,7 +22,7 @@ export class ErrorBoundary extends React.Component {
|
|
|
22
22
|
}
|
|
23
23
|
render() {
|
|
24
24
|
if (this.state.hasError) {
|
|
25
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "red", children: [_jsx(Text, { color: "red", bold: true, children: "\u274C CLI Error" }), _jsx(Text, { color: "red", children: this.state.error?.message || 'Unknown error' }), _jsx(Text, { color: "
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "red", children: [_jsx(Text, { color: "red", bold: true, children: "\u274C CLI Error" }), _jsx(Text, { color: "red", children: this.state.error?.message || 'Unknown error' }), _jsx(Text, { color: "yellowBright", children: "Press Ctrl+C to exit" })] }));
|
|
26
26
|
}
|
|
27
27
|
return this.props.children;
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/Footer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,UAAU,WAAW;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAoBD;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/Footer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,UAAU,WAAW;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAoBD;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,WAAW,2CAwBnF"}
|
|
@@ -23,5 +23,5 @@ function shortenPath(path, maxLength = 40) {
|
|
|
23
23
|
export function Footer({ modelName, cwd, branchName, autoApproveEdits }) {
|
|
24
24
|
const displayPath = cwd ? shortenPath(cwd) : '';
|
|
25
25
|
const displayModelName = getModelDisplayName(modelName);
|
|
26
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { color: "blue", children: displayPath }), branchName &&
|
|
26
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { color: "blue", children: displayPath }), branchName && _jsxs(Text, { color: "gray", children: [" (", branchName, ")"] })] }), _jsx(Text, { color: "cyan", children: displayModelName })] }), autoApproveEdits && (_jsxs(Box, { children: [_jsx(Text, { color: "yellowBright", children: "accept edits" }), _jsx(Text, { color: "gray", children: " (shift + tab to toggle)" })] }))] }));
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistorySearchBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/HistorySearchBar.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,UAAU,qBAAqB;IAC3B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"HistorySearchBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/HistorySearchBar.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,UAAU,qBAAqB;IAC3B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAc1E"}
|
|
@@ -4,5 +4,5 @@ import { Box, Text } from 'ink';
|
|
|
4
4
|
* Search bar displayed during history search mode
|
|
5
5
|
*/
|
|
6
6
|
export function HistorySearchBar({ query, hasMatch }) {
|
|
7
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { color: "gray",
|
|
7
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { color: "gray", children: "Ctrl+R: older, Ctrl+E: newer, Enter: accept, Esc: cancel" }), _jsxs(Box, { children: [_jsx(Text, { color: "green", children: "search history: " }), _jsx(Text, { color: "cyan", children: query }), _jsx(Text, { color: "gray", children: "_" }), query && !hasMatch && _jsx(Text, { color: "red", children: " (no match)" })] })] }));
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiLineInput.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/MultiLineInput.tsx"],"names":[],"mappings":"AAGA,UAAU,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAa,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"MultiLineInput.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/MultiLineInput.tsx"],"names":[],"mappings":"AAGA,UAAU,mBAAmB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAa,EAAE,EAAE,mBAAmB,2CAgDhG"}
|
|
@@ -15,13 +15,13 @@ export default function MultiLineInput({ value, placeholder, prompt = '> ' }) {
|
|
|
15
15
|
const lineCount = lines.length;
|
|
16
16
|
// If empty, show placeholder
|
|
17
17
|
if (!value && placeholder) {
|
|
18
|
-
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "green", bold: true, children: prompt }), _jsx(Text, {
|
|
18
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "green", bold: true, children: prompt }), _jsx(Text, { color: "gray", children: placeholder })] }));
|
|
19
19
|
}
|
|
20
20
|
// Display multi-line text - show last N lines if too many
|
|
21
21
|
const visibleLines = lineCount > 10 ? lines.slice(-10) : lines;
|
|
22
22
|
const startOffset = lineCount > 10 ? lineCount - 10 : 0;
|
|
23
|
-
return (_jsxs(Box, { flexDirection: "column", children: [startOffset > 0 && (_jsx(Box, { children: _jsxs(Text, { color: "gray",
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", children: [startOffset > 0 && (_jsx(Box, { children: _jsxs(Text, { color: "gray", children: ["... (", startOffset, " more lines above)"] }) })), visibleLines.map((line, index) => {
|
|
24
24
|
const actualIndex = startOffset + index;
|
|
25
|
-
return (_jsxs(Box, { flexDirection: "row", children: [index === 0 && (_jsx(Text, { color: "green", bold: true, children: prompt })), index > 0 &&
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "row", children: [index === 0 && (_jsx(Text, { color: "green", bold: true, children: prompt })), index > 0 && _jsx(Text, { color: "green", children: ' '.repeat(prompt.length) }), _jsx(Text, { wrap: "wrap", children: line || ' ' })] }, actualIndex));
|
|
26
26
|
})] }));
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceAutocomplete.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ResourceAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AA6ED;;GAEG;AACH,QAAA,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"ResourceAutocomplete.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/ResourceAutocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AA6ED;;GAEG;AACH,QAAA,MAAM,yBAAyB,8GAgR9B,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,oBAAoB,EAErB,OAAO,yBAAyB,CAAC;AAEtC,eAAe,oBAAoB,CAAC"}
|
|
@@ -236,21 +236,21 @@ const ResourceAutocompleteInner = forwardRef(function ResourceAutocomplete({ isV
|
|
|
236
236
|
if (!isVisible)
|
|
237
237
|
return null;
|
|
238
238
|
if (isLoading) {
|
|
239
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
239
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: "Loading resources..." }) }));
|
|
240
240
|
}
|
|
241
241
|
if (filteredResources.length === 0) {
|
|
242
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
242
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: mentionQuery
|
|
243
243
|
? `No resources match "${mentionQuery}"`
|
|
244
244
|
: 'No resources available. Connect an MCP server or enable internal resources.' }) }));
|
|
245
245
|
}
|
|
246
246
|
const totalItems = filteredResources.length;
|
|
247
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "
|
|
247
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "yellowBright", bold: true, children: ["Resources (", selectedIndex + 1, "/", totalItems, ") - \u2191\u2193 navigate, Tab load, Enter select, Esc close"] }) }), visibleResources.map((resource, visibleIndex) => {
|
|
248
248
|
const actualIndex = scrollOffset + visibleIndex;
|
|
249
249
|
const isSelected = actualIndex === selectedIndex;
|
|
250
250
|
const uriParts = resource.uri.split('/');
|
|
251
251
|
const displayName = resource.name || uriParts[uriParts.length - 1] || resource.uri;
|
|
252
252
|
const isImage = (resource.mimeType || '').startsWith('image/');
|
|
253
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [isImage && (_jsx(Text, { color: isSelected ? 'cyan' : 'gray', children: "\uD83D\uDDBC\uFE0F " })), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: displayName }), resource.serverName && (_jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
253
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [isImage && (_jsx(Text, { color: isSelected ? 'cyan' : 'gray', children: "\uD83D\uDDBC\uFE0F " })), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: displayName }), resource.serverName && (_jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: ["[", resource.serverName, "]"] }) }))] }), _jsx(Box, { marginLeft: isImage ? 3 : 0, children: _jsx(Text, { color: isSelected ? 'white' : 'gray', children: resource.uri }) }), resource.description && (_jsx(Box, { marginLeft: isImage ? 3 : 0, children: _jsx(Text, { color: isSelected ? 'white' : 'gray', children: resource.description }) }))] }) }, resource.uri));
|
|
254
254
|
})] }));
|
|
255
255
|
});
|
|
256
256
|
/**
|
|
@@ -373,7 +373,7 @@ const SlashCommandAutocompleteInner = forwardRef(function SlashCommandAutocomple
|
|
|
373
373
|
return null;
|
|
374
374
|
// Show loading state while fetching commands
|
|
375
375
|
if (isLoading) {
|
|
376
|
-
return (_jsx(Box, { width: terminalWidth, paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
376
|
+
return (_jsx(Box, { width: terminalWidth, paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: "Loading commands..." }) }));
|
|
377
377
|
}
|
|
378
378
|
// If no items after loading, don't render
|
|
379
379
|
if (combinedItems.length === 0) {
|
|
@@ -395,7 +395,7 @@ const SlashCommandAutocompleteInner = forwardRef(function SlashCommandAutocomple
|
|
|
395
395
|
// Two-line layout:
|
|
396
396
|
// Line 1: /command-name
|
|
397
397
|
// Line 2: Description text (category)
|
|
398
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, children: [_jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: nameText }), _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
398
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, children: [_jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: nameText }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', descText, categoryText] })] }, `system-${cmd.name}`));
|
|
399
399
|
}
|
|
400
400
|
// Prompt command (MCP prompts)
|
|
401
401
|
const prompt = item.prompt;
|
|
@@ -414,7 +414,7 @@ const SlashCommandAutocompleteInner = forwardRef(function SlashCommandAutocomple
|
|
|
414
414
|
// Line 2: Description text (source)
|
|
415
415
|
const commandText = nameText + argsString;
|
|
416
416
|
const sourceLabel = prompt.source || 'prompt';
|
|
417
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, children: [_jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: commandText }), _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
417
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 0, children: [_jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: commandText }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', description, ` (${sourceLabel})`] })] }, `prompt-${prompt.name}`));
|
|
418
418
|
})] }));
|
|
419
419
|
});
|
|
420
420
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,UAAU,cAAc;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAuB,EACvB,kBAA0B,GAC7B,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,UAAU,cAAc;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAuB,EACvB,kBAA0B,GAC7B,EAAE,cAAc,kDAqFhB"}
|
|
@@ -32,7 +32,7 @@ export function StatusBar({ agent, isProcessing, isThinking, approvalQueueCount,
|
|
|
32
32
|
const showTime = elapsedMs >= 30000;
|
|
33
33
|
// Show copy mode warning (highest priority)
|
|
34
34
|
if (copyModeEnabled) {
|
|
35
|
-
return (_jsx(Box, { paddingX: 1, marginBottom: 0, children: _jsx(Text, { color: "
|
|
35
|
+
return (_jsx(Box, { paddingX: 1, marginBottom: 0, children: _jsx(Text, { color: "yellowBright", bold: true, children: "\uD83D\uDCCB Copy Mode - Select text with mouse. Press any key to exit." }) }));
|
|
36
36
|
}
|
|
37
37
|
if (!isProcessing) {
|
|
38
38
|
// No status bar when idle
|
|
@@ -42,18 +42,20 @@ export function StatusBar({ agent, isProcessing, isThinking, approvalQueueCount,
|
|
|
42
42
|
if (isAwaitingApproval) {
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
|
-
// Show initial processing state (before streaming starts) -
|
|
45
|
+
// Show initial processing state (before streaming starts) - green/teal color
|
|
46
46
|
// TODO: Rename this event/state to "reasoning" and associate it with actual reasoning tokens
|
|
47
47
|
// Currently "thinking" event fires before any response, not during reasoning token generation
|
|
48
48
|
if (isThinking) {
|
|
49
49
|
const metaParts = [];
|
|
50
50
|
if (showTime)
|
|
51
51
|
metaParts.push(`(${elapsedTime})`);
|
|
52
|
+
if (tokenCount)
|
|
53
|
+
metaParts.push(tokenCount);
|
|
52
54
|
metaParts.push('Esc to cancel');
|
|
53
55
|
const metaContent = metaParts.join(' • ');
|
|
54
|
-
return (_jsxs(Box, { paddingX: 1, marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "
|
|
56
|
+
return (_jsxs(Box, { paddingX: 1, marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "green", children: _jsx(Spinner, { type: "dots" }) }), _jsxs(Text, { color: "green", children: [" ", phrase] })] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "gray", children: metaContent }) })] }));
|
|
55
57
|
}
|
|
56
|
-
// Show active streaming state -
|
|
58
|
+
// Show active streaming state - green/teal color
|
|
57
59
|
// Always use 2-line layout: phrase on first line, meta on second
|
|
58
60
|
// This prevents truncation and messy wrapping on any terminal width
|
|
59
61
|
const metaParts = [];
|
|
@@ -63,5 +65,5 @@ export function StatusBar({ agent, isProcessing, isThinking, approvalQueueCount,
|
|
|
63
65
|
metaParts.push(tokenCount);
|
|
64
66
|
metaParts.push('Esc to cancel');
|
|
65
67
|
const metaContent = metaParts.join(' • ');
|
|
66
|
-
return (_jsxs(Box, { paddingX: 1, marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "
|
|
68
|
+
return (_jsxs(Box, { paddingX: 1, marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "green", children: _jsx(Spinner, { type: "dots" }) }), _jsxs(Text, { color: "green", children: [" ", phrase] }), approvalQueueCount > 0 && (_jsxs(Text, { color: "yellowBright", children: [" \u2022 ", approvalQueueCount, " queued"] }))] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "gray", children: metaContent }) })] }));
|
|
67
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextBufferInput.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/TextBufferInput.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,uBAAuB,GAAG,OAAO,CAAC;AActF,UAAU,oBAAoB;IAC1B,oCAAoC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrE,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACnE,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpE,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3D,iEAAiE;IACjE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACpC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxD,wDAAwD;IACxD,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IACzC,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5F,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAuCD,wBAAgB,eAAe,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,UAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,UAAc,EACd,YAAY,EACZ,MAAW,EACX,aAAa,EACb,YAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACjB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"TextBufferInput.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/components/TextBufferInput.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,uBAAuB,GAAG,OAAO,CAAC;AActF,UAAU,oBAAoB;IAC1B,oCAAoC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrE,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACnE,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpE,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3D,iEAAiE;IACjE,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACpC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxD,wDAAwD;IACxD,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IACzC,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5F,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAuCD,wBAAgB,eAAe,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,UAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,UAAc,EACd,YAAY,EACZ,MAAW,EACX,aAAa,EACb,YAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACjB,EAAE,oBAAoB,2CAsgBtB"}
|
|
@@ -429,9 +429,9 @@ export function TextBufferInput({ buffer, onSubmit, placeholder, isDisabled = fa
|
|
|
429
429
|
const visibleLines = visualLines.slice(startLine, endLine);
|
|
430
430
|
// Empty state
|
|
431
431
|
if (bufferText === '') {
|
|
432
|
-
return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, children: [_jsx(Text, { color: "gray",
|
|
432
|
+
return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, children: [_jsx(Text, { color: "gray", children: separator }), _jsxs(Box, { width: terminalWidth, children: [_jsx(Text, { color: "green", bold: true, children: '> ' }), _jsx(Text, { inverse: true, children: " " }), placeholder && _jsx(Text, { color: "gray", children: placeholder }), _jsx(Text, { children: ' '.repeat(Math.max(0, terminalWidth - 3 - (placeholder?.length || 0))) })] }), _jsx(Text, { color: "gray", children: separator })] }));
|
|
433
433
|
}
|
|
434
|
-
return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, children: [_jsx(Text, { color: "gray",
|
|
434
|
+
return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, children: [_jsx(Text, { color: "gray", children: separator }), startLine > 0 && (_jsxs(Text, { color: "gray", children: [' ', "\u2191 ", startLine, " more line", startLine > 1 ? 's' : '', " above (", KEY_LABELS.altUp, " to jump)"] })), visibleLines.map((line, idx) => {
|
|
435
435
|
const absoluteRow = startLine + idx;
|
|
436
436
|
const isFirst = absoluteRow === 0;
|
|
437
437
|
const prefix = isFirst ? '> ' : ' ';
|
|
@@ -443,22 +443,22 @@ export function TextBufferInput({ buffer, onSubmit, placeholder, isDisabled = fa
|
|
|
443
443
|
const atCursor = line.charAt(cursorVisualCol) || ' ';
|
|
444
444
|
const after = line.slice(cursorVisualCol + 1);
|
|
445
445
|
return (_jsxs(Box, { width: terminalWidth, children: [_jsx(Text, { color: "green", bold: isFirst, children: prefix }), _jsx(HighlightedText, { text: before, query: highlightQuery }), _jsx(Text, { inverse: true, children: atCursor }), _jsx(HighlightedText, { text: after, query: highlightQuery }), _jsx(Text, { children: ' '.repeat(Math.max(0, terminalWidth - prefix.length - before.length - 1 - after.length)) })] }, absoluteRow));
|
|
446
|
-
}), endLine < totalLines && (_jsxs(Text, { color: "gray",
|
|
446
|
+
}), endLine < totalLines && (_jsxs(Text, { color: "gray", children: [' ', "\u2193 ", totalLines - endLine, " more line", totalLines - endLine > 1 ? 's' : '', ' ', "below (", KEY_LABELS.altDown, " to jump)"] })), pastedBlocks.length > 0 && (_jsx(PasteBlockHint, { pastedBlocks: pastedBlocks, expandedBlock: findExpandedBlock(), cursorOnCollapsed: findCollapsedBlockAtCursor() })), _jsx(Text, { color: "gray", children: separator })] }));
|
|
447
447
|
}
|
|
448
448
|
/** Hint component for paste blocks */
|
|
449
449
|
function PasteBlockHint({ pastedBlocks, expandedBlock, cursorOnCollapsed, }) {
|
|
450
450
|
const collapsedCount = pastedBlocks.filter((b) => b.isCollapsed).length;
|
|
451
451
|
// If something is expanded, always show collapse hint
|
|
452
452
|
if (expandedBlock) {
|
|
453
|
-
return (_jsxs(Text, { color: "cyan",
|
|
453
|
+
return (_jsxs(Text, { color: "cyan", children: [' ', KEY_LABELS.ctrlT, " to collapse expanded paste"] }));
|
|
454
454
|
}
|
|
455
455
|
// If cursor is on a collapsed paste, show expand hint
|
|
456
456
|
if (cursorOnCollapsed) {
|
|
457
|
-
return (_jsxs(Text, { color: "cyan",
|
|
457
|
+
return (_jsxs(Text, { color: "cyan", children: [' ', KEY_LABELS.ctrlT, " to expand paste"] }));
|
|
458
458
|
}
|
|
459
459
|
// Otherwise show count of collapsed pastes
|
|
460
460
|
if (collapsedCount > 0) {
|
|
461
|
-
return (_jsxs(Text, { color: "gray",
|
|
461
|
+
return (_jsxs(Text, { color: "gray", children: [' ', collapsedCount, " collapsed paste", collapsedCount > 1 ? 's' : '', " (", KEY_LABELS.ctrlT, ' ', "on placeholder to expand)"] }));
|
|
462
462
|
}
|
|
463
463
|
return null;
|
|
464
464
|
}
|
|
@@ -82,17 +82,17 @@ export function BaseAutocomplete({ items, query, isVisible, isLoading = false, o
|
|
|
82
82
|
if (!isVisible)
|
|
83
83
|
return null;
|
|
84
84
|
if (isLoading) {
|
|
85
|
-
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, paddingY: 1, children: _jsx(Text, {
|
|
85
|
+
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, paddingY: 1, children: _jsx(Text, { color: "gray", children: loadingMessage }) }));
|
|
86
86
|
}
|
|
87
87
|
if (filteredItems.length === 0) {
|
|
88
|
-
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, paddingY: 1, children: _jsx(Text, {
|
|
88
|
+
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, paddingY: 1, children: _jsx(Text, { color: "gray", children: emptyMessage }) }));
|
|
89
89
|
}
|
|
90
90
|
const hasMoreAbove = scrollOffset > 0;
|
|
91
91
|
const hasMoreBelow = scrollOffset + maxVisibleItems < filteredItems.length;
|
|
92
92
|
const totalItems = filteredItems.length;
|
|
93
|
-
return (_jsxs(Box, { borderStyle: "single", borderColor: borderColor, flexDirection: "column", height: Math.min(maxVisibleItems + 3, totalItems + 3), children: [_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Text, {
|
|
93
|
+
return (_jsxs(Box, { borderStyle: "single", borderColor: borderColor, flexDirection: "column", height: Math.min(maxVisibleItems + 3, totalItems + 3), children: [_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Text, { color: "gray", children: [title, " (", selectedIndex + 1, "/", totalItems, ") - \u2191\u2193 navigate", onLoadIntoInput && ', Tab load', ', Enter select, Esc close'] }) }), hasMoreAbove && (_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Text, { color: "gray", children: ["... \u2191 (", scrollOffset, " more above)"] }) })), visibleItems.map((item, visibleIndex) => {
|
|
94
94
|
const actualIndex = scrollOffset + visibleIndex;
|
|
95
95
|
const isSelected = actualIndex === selectedIndex;
|
|
96
96
|
return (_jsx(Box, { paddingX: 1, paddingY: 0, children: formatItem(item, isSelected) }, actualIndex));
|
|
97
|
-
}), hasMoreBelow && (_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Text, {
|
|
97
|
+
}), hasMoreBelow && (_jsx(Box, { paddingX: 1, paddingY: 0, children: _jsxs(Text, { color: "gray", children: ["... \u2193 (", totalItems - scrollOffset - maxVisibleItems, " more below)"] }) }))] }));
|
|
98
98
|
}
|
|
@@ -99,10 +99,10 @@ function BaseSelectorInner({ items, isVisible, isLoading = false, selectedIndex,
|
|
|
99
99
|
if (!isVisible)
|
|
100
100
|
return null;
|
|
101
101
|
if (isLoading) {
|
|
102
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
102
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: loadingMessage }) }));
|
|
103
103
|
}
|
|
104
104
|
if (items.length === 0) {
|
|
105
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
105
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: emptyMessage }) }));
|
|
106
106
|
}
|
|
107
107
|
// Build instruction text based on features
|
|
108
108
|
const instructions = supportsTab
|
|
@@ -4,5 +4,5 @@ import { Box, Text } from 'ink';
|
|
|
4
4
|
* Pure presentational component for CLI footer
|
|
5
5
|
*/
|
|
6
6
|
export function Footer() {
|
|
7
|
-
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsx(Text, {
|
|
7
|
+
return (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsx(Text, { color: "gray", children: "Shift+Enter/Ctrl+J: newline \u2022 Ctrl+W: del word \u2022 Ctrl+U: del line \u2022 Ctrl+C: exit" }) }));
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/chat/Header.tsx"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/chat/Header.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,UAAU,WAAW;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,WAAW,2CAgE1F"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
-
import { getModelDisplayName } from '@dexto/core';
|
|
4
3
|
import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
|
5
4
|
/**
|
|
6
5
|
* Pure presentational component for CLI header
|
|
@@ -8,11 +7,10 @@ import { useTerminalSize } from '../../hooks/useTerminalSize.js';
|
|
|
8
7
|
*/
|
|
9
8
|
export function Header({ modelName, sessionId, hasActiveSession, startupInfo }) {
|
|
10
9
|
const { columns } = useTerminalSize();
|
|
11
|
-
const displayModelName = getModelDisplayName(modelName);
|
|
12
10
|
return (_jsxs(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, flexDirection: "column", flexShrink: 0, width: columns, children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "greenBright", children: `██████╗ ███████╗██╗ ██╗████████╗ ██████╗
|
|
13
11
|
██╔══██╗██╔════╝╚██╗██╔╝╚══██╔══╝██╔═══██╗
|
|
14
12
|
██║ ██║█████╗ ╚███╔╝ ██║ ██║ ██║
|
|
15
13
|
██║ ██║██╔══╝ ██╔██╗ ██║ ██║ ██║
|
|
16
14
|
██████╔╝███████╗██╔╝ ██╗ ██║ ╚██████╔╝
|
|
17
|
-
╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝` }) }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [
|
|
15
|
+
╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝` }) }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Text, { color: "gray", children: "Model: " }), _jsx(Text, { color: "white", children: modelName }), hasActiveSession && sessionId && (_jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", children: " \u2022 Session: " }), _jsx(Text, { color: "white", children: sessionId.slice(0, 8) })] }))] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "gray", children: "Servers: " }), _jsx(Text, { color: "white", children: startupInfo.connectedServers.count }), _jsx(Text, { color: "gray", children: " \u2022 Tools: " }), _jsx(Text, { color: "white", children: startupInfo.toolCount })] }), startupInfo.failedConnections.length > 0 && (_jsx(Box, { flexDirection: "row", children: _jsxs(Text, { color: "yellowBright", children: ["\u26A0\uFE0F Failed: ", startupInfo.failedConnections.join(', ')] }) })), startupInfo.logFile && (_jsx(Box, { flexDirection: "row", children: _jsxs(Text, { color: "gray", children: ["Logs: ", startupInfo.logFile] }) })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: " " }) })] }));
|
|
18
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/chat/MessageItem.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACR,OAAO,EAUV,MAAM,sBAAsB,CAAC;AAuC9B,UAAU,gBAAgB;IACtB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,oDACN,gBAAgB,
|
|
1
|
+
{"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/chat/MessageItem.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACR,OAAO,EAUV,MAAM,sBAAsB,CAAC;AAuC9B,UAAU,gBAAgB;IACtB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,oDACN,gBAAgB,6CAwJjC,CAAC"}
|