dexto 1.5.1 → 1.5.3
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/dist/agents/agent-registry.json +9 -0
- package/dist/agents/coding-agent/coding-agent.yml +37 -6
- package/dist/agents/explore-agent/explore-agent.yml +124 -0
- package/dist/cli/approval/cli-approval-handler.d.ts +28 -0
- package/dist/cli/approval/cli-approval-handler.d.ts.map +1 -0
- package/dist/cli/approval/cli-approval-handler.js +146 -0
- package/dist/cli/approval/index.d.ts +7 -0
- package/dist/cli/approval/index.d.ts.map +1 -0
- package/dist/cli/approval/index.js +6 -0
- package/dist/cli/commands/interactive-commands/general-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/general-commands.js +5 -2
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.js +10 -2
- package/dist/cli/ink-cli/components/Footer.d.ts +3 -1
- package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/Footer.js +4 -2
- package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ResourceAutocomplete.js +8 -2
- package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/TextBufferInput.js +20 -5
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts +3 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +40 -9
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +4 -4
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.js +10 -3
- package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +1 -1
- package/dist/cli/ink-cli/components/renderers/SearchRenderer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +15 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.js +4 -4
- package/dist/cli/ink-cli/constants/processingPhrases.d.ts.map +1 -1
- package/dist/cli/ink-cli/constants/processingPhrases.js +58 -48
- package/dist/cli/ink-cli/constants/tips.d.ts.map +1 -1
- package/dist/cli/ink-cli/constants/tips.js +34 -32
- package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.js +18 -11
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +24 -1
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +14 -1
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +77 -13
- package/dist/cli/ink-cli/state/types.d.ts +17 -0
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts +24 -0
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.js +131 -5
- package/dist/index.js +5 -15
- package/dist/webui/assets/index-CUVc7IDL.css +1 -0
- package/dist/webui/assets/{index-8j-KMkX1.js → index-SGm5dxhp.js} +208 -208
- package/dist/webui/index.html +2 -2
- package/package.json +7 -7
- package/dist/webui/assets/index-c_AX24V4.css +0 -1
|
@@ -5,7 +5,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
5
5
|
*/
|
|
6
6
|
import { useCallback, useRef, useImperativeHandle, forwardRef, useState } from 'react';
|
|
7
7
|
import { Box } from 'ink';
|
|
8
|
-
import { ApprovalStatus, DenialReason } from '@dexto/core';
|
|
8
|
+
import { ApprovalStatus, DenialReason, isUserMessage } from '@dexto/core';
|
|
9
9
|
import { ApprovalPrompt, } from '../components/ApprovalPrompt.js';
|
|
10
10
|
import { SlashCommandAutocomplete, } from '../components/SlashCommandAutocomplete.js';
|
|
11
11
|
import ResourceAutocomplete from '../components/ResourceAutocomplete.js';
|
|
@@ -446,6 +446,29 @@ export const OverlayContainer = forwardRef(function OverlayContainer({ ui, input
|
|
|
446
446
|
if (history && history.length > 0) {
|
|
447
447
|
const historyMessages = convertHistoryToUIMessages(history, newSessionId);
|
|
448
448
|
setMessages(historyMessages);
|
|
449
|
+
// Extract user messages for input history (arrow up navigation)
|
|
450
|
+
const userInputHistory = history
|
|
451
|
+
.filter(isUserMessage)
|
|
452
|
+
.map((msg) => {
|
|
453
|
+
// Extract text content from user message
|
|
454
|
+
if (typeof msg.content === 'string') {
|
|
455
|
+
return msg.content;
|
|
456
|
+
}
|
|
457
|
+
// Handle array content (text parts)
|
|
458
|
+
if (Array.isArray(msg.content)) {
|
|
459
|
+
return msg.content
|
|
460
|
+
.filter((part) => typeof part === 'object' && part.type === 'text')
|
|
461
|
+
.map((part) => part.text)
|
|
462
|
+
.join('\n');
|
|
463
|
+
}
|
|
464
|
+
return '';
|
|
465
|
+
})
|
|
466
|
+
.filter((text) => text.trim().length > 0);
|
|
467
|
+
setInput((prev) => ({
|
|
468
|
+
...prev,
|
|
469
|
+
history: userInputHistory,
|
|
470
|
+
historyIndex: -1,
|
|
471
|
+
}));
|
|
449
472
|
}
|
|
450
473
|
setMessages((prev) => [
|
|
451
474
|
...prev,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/hooks/useCLIState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,
|
|
1
|
+
{"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/hooks/useCLIState.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { useState, useMemo, useEffect, useRef, useCallback } from 'react';
|
|
8
8
|
import { useStdout } from 'ink';
|
|
9
|
-
import { getModelDisplayName } from '@dexto/core';
|
|
9
|
+
import { getModelDisplayName, isUserMessage, } from '@dexto/core';
|
|
10
10
|
import { useAgentEvents } from './useAgentEvents.js';
|
|
11
11
|
import { useInputOrchestrator } from './useInputOrchestrator.js';
|
|
12
12
|
import { InputService, MessageService } from '../services/index.js';
|
|
@@ -140,6 +140,19 @@ export function useCLIState({ agent, initialSessionId, startupInfo, onKeyboardSc
|
|
|
140
140
|
return;
|
|
141
141
|
const historyMessages = convertHistoryToUIMessages(history, initialSessionId);
|
|
142
142
|
setMessages(historyMessages);
|
|
143
|
+
// Extract user messages for input history (arrow up navigation)
|
|
144
|
+
const userInputHistory = history
|
|
145
|
+
.filter(isUserMessage)
|
|
146
|
+
.map((msg) => msg.content
|
|
147
|
+
.filter((part) => part.type === 'text')
|
|
148
|
+
.map((part) => part.text)
|
|
149
|
+
.join('\n'))
|
|
150
|
+
.filter((text) => text.trim().length > 0);
|
|
151
|
+
setInput((prev) => ({
|
|
152
|
+
...prev,
|
|
153
|
+
history: userInputHistory,
|
|
154
|
+
historyIndex: -1,
|
|
155
|
+
}));
|
|
143
156
|
}
|
|
144
157
|
catch (error) {
|
|
145
158
|
if (cancelled)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processStream.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/services/processStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,aAAa,CAAC;AAGvE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAc,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"processStream.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/services/processStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,aAAa,CAAC;AAGvE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAc,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAwBvE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,2DAA2D;IAC3D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,oFAAoF;IACpF,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,iFAAiF;IACjF,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,yDAAyD;IACzD,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IAC/F,4DAA4D;IAC5D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,uDAAuD;IACvD,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,2FAA2F;IAC3F,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2FAA2F;IAC3F,mBAAmB,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1C,qDAAqD;IACrD,QAAQ,EAAE,OAAO,aAAa,EAAE,aAAa,CAAC;CACjD;AA0BD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAC/B,QAAQ,EAAE,qBAAqB,CAAC,cAAc,CAAC,EAC/C,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,oBAAoB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA02Bf"}
|
|
@@ -23,7 +23,7 @@ import { createDebugLogger } from '../utils/debugLog.js';
|
|
|
23
23
|
import { ApprovalType as ApprovalTypeEnum, ApprovalStatus } from '@dexto/core';
|
|
24
24
|
import { generateMessageId } from '../utils/idGenerator.js';
|
|
25
25
|
import { checkForSplit } from '../utils/streamSplitter.js';
|
|
26
|
-
import {
|
|
26
|
+
import { formatToolHeader } from '../utils/messageFormatting.js';
|
|
27
27
|
import { isEditWriteTool } from '../utils/toolUtils.js';
|
|
28
28
|
import { capture } from '../../../analytics/index.js';
|
|
29
29
|
import chalk from 'chalk';
|
|
@@ -442,19 +442,13 @@ export async function processStream(iterator, setters, options) {
|
|
|
442
442
|
const toolMessageId = event.callId
|
|
443
443
|
? `tool-${event.callId}`
|
|
444
444
|
: generateMessageId('tool');
|
|
445
|
-
//
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
// Extract description if present
|
|
445
|
+
// Format tool header using shared utility
|
|
446
|
+
const { header: toolContent } = formatToolHeader(event.toolName, event.args || {});
|
|
447
|
+
// Add description if present (dim styling, on new line)
|
|
448
|
+
let finalToolContent = toolContent;
|
|
450
449
|
const description = event.args?.description;
|
|
451
|
-
// Format: toolName(args) [badge]
|
|
452
|
-
// If description exists, add it on a new line with dim styling
|
|
453
|
-
let toolContent = argsFormatted
|
|
454
|
-
? `${displayName}(${argsFormatted}) [${badge}]`
|
|
455
|
-
: `${displayName}() [${badge}]`;
|
|
456
450
|
if (description && typeof description === 'string') {
|
|
457
|
-
|
|
451
|
+
finalToolContent += `\n${chalk.dim(description)}`;
|
|
458
452
|
}
|
|
459
453
|
// Tool calls start in 'pending' state (don't know if approval needed yet)
|
|
460
454
|
// Status transitions: pending → pending_approval (if approval needed) → running → finished
|
|
@@ -462,7 +456,7 @@ export async function processStream(iterator, setters, options) {
|
|
|
462
456
|
addToPending({
|
|
463
457
|
id: toolMessageId,
|
|
464
458
|
role: 'tool',
|
|
465
|
-
content:
|
|
459
|
+
content: finalToolContent,
|
|
466
460
|
timestamp: new Date(),
|
|
467
461
|
toolStatus: 'pending',
|
|
468
462
|
});
|
|
@@ -712,6 +706,76 @@ export async function processStream(iterator, setters, options) {
|
|
|
712
706
|
}
|
|
713
707
|
break;
|
|
714
708
|
}
|
|
709
|
+
case 'approval:response': {
|
|
710
|
+
// Handle approval responses - dismisses auto-approved parallel tool calls
|
|
711
|
+
//
|
|
712
|
+
// When user approves a tool with "remember", other pending parallel requests
|
|
713
|
+
// for the same tool are auto-approved. The handler emits approval:response
|
|
714
|
+
// for each, and we need to dismiss them from the UI.
|
|
715
|
+
//
|
|
716
|
+
// For user-initiated approvals, completeApproval() in OverlayContainer
|
|
717
|
+
// already clears the state before emitting, so these are no-ops.
|
|
718
|
+
const { approvalId } = event;
|
|
719
|
+
// Step 1: Remove from queue if present
|
|
720
|
+
setApprovalQueue((queue) => queue.filter((a) => a.approvalId !== approvalId));
|
|
721
|
+
// Step 2: If this is the current approval, dismiss and show next
|
|
722
|
+
// We use the same pattern as completeApproval in OverlayContainer:
|
|
723
|
+
// setApprovalQueue as coordinator, calling setApproval inside
|
|
724
|
+
setApproval((currentApproval) => {
|
|
725
|
+
if (currentApproval?.approvalId !== approvalId) {
|
|
726
|
+
return currentApproval; // Not current, nothing to do
|
|
727
|
+
}
|
|
728
|
+
// Current approval was auto-approved - show next or close
|
|
729
|
+
// Note: queue was already filtered in Step 1, so we read updated queue
|
|
730
|
+
setApprovalQueue((queue) => {
|
|
731
|
+
if (queue.length > 0) {
|
|
732
|
+
const [next, ...rest] = queue;
|
|
733
|
+
setApproval(next);
|
|
734
|
+
setUi((prev) => ({ ...prev, activeOverlay: 'approval' }));
|
|
735
|
+
return rest;
|
|
736
|
+
}
|
|
737
|
+
else {
|
|
738
|
+
setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
|
|
739
|
+
return [];
|
|
740
|
+
}
|
|
741
|
+
});
|
|
742
|
+
return null; // Clear current while setApprovalQueue handles next
|
|
743
|
+
});
|
|
744
|
+
break;
|
|
745
|
+
}
|
|
746
|
+
case 'service:event': {
|
|
747
|
+
// Handle service events - extensible pattern for non-core services
|
|
748
|
+
debug.log('SERVICE-EVENT received', {
|
|
749
|
+
service: event.service,
|
|
750
|
+
eventType: event.event,
|
|
751
|
+
toolCallId: event.toolCallId,
|
|
752
|
+
sessionId: event.sessionId,
|
|
753
|
+
});
|
|
754
|
+
if (event.service === 'agent-spawner' && event.event === 'progress') {
|
|
755
|
+
const { toolCallId, data } = event;
|
|
756
|
+
// Guard against null/non-object data payloads
|
|
757
|
+
if (toolCallId && data && typeof data === 'object') {
|
|
758
|
+
// Update the tool message with sub-agent progress
|
|
759
|
+
const toolMessageId = `tool-${toolCallId}`;
|
|
760
|
+
const progressData = data;
|
|
761
|
+
debug.log('SERVICE-EVENT updating progress', {
|
|
762
|
+
toolMessageId,
|
|
763
|
+
toolsCalled: progressData.toolsCalled,
|
|
764
|
+
currentTool: progressData.currentTool,
|
|
765
|
+
});
|
|
766
|
+
updatePending(toolMessageId, {
|
|
767
|
+
subAgentProgress: {
|
|
768
|
+
task: progressData.task,
|
|
769
|
+
agentId: progressData.agentId,
|
|
770
|
+
toolsCalled: progressData.toolsCalled,
|
|
771
|
+
currentTool: progressData.currentTool,
|
|
772
|
+
currentArgs: progressData.currentArgs,
|
|
773
|
+
},
|
|
774
|
+
});
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
715
779
|
// Ignore other events
|
|
716
780
|
default:
|
|
717
781
|
break;
|
|
@@ -133,6 +133,21 @@ export interface ShortcutsStyledData {
|
|
|
133
133
|
}>;
|
|
134
134
|
}
|
|
135
135
|
export type StyledData = ConfigStyledData | StatsStyledData | HelpStyledData | SessionListStyledData | SessionHistoryStyledData | LogConfigStyledData | RunSummaryStyledData | PromptsStyledData | SysPromptStyledData | ShortcutsStyledData;
|
|
136
|
+
/**
|
|
137
|
+
* Sub-agent progress data for spawn_agent tool calls
|
|
138
|
+
*/
|
|
139
|
+
export interface SubAgentProgress {
|
|
140
|
+
/** Short task description */
|
|
141
|
+
task: string;
|
|
142
|
+
/** Agent ID (e.g., 'explore-agent') */
|
|
143
|
+
agentId: string;
|
|
144
|
+
/** Number of tools called by the sub-agent */
|
|
145
|
+
toolsCalled: number;
|
|
146
|
+
/** Current tool being executed */
|
|
147
|
+
currentTool: string;
|
|
148
|
+
/** Current tool arguments (optional) */
|
|
149
|
+
currentArgs?: Record<string, unknown> | undefined;
|
|
150
|
+
}
|
|
136
151
|
/**
|
|
137
152
|
* Message in the chat interface
|
|
138
153
|
*
|
|
@@ -162,6 +177,8 @@ export interface Message {
|
|
|
162
177
|
toolDisplayData?: ToolDisplayData;
|
|
163
178
|
/** Content parts for tool result rendering */
|
|
164
179
|
toolContent?: ContentPart[];
|
|
180
|
+
/** Sub-agent progress data (for spawn_agent tool calls) */
|
|
181
|
+
subAgentProgress?: SubAgentProgress;
|
|
165
182
|
}
|
|
166
183
|
/**
|
|
167
184
|
* Streaming message state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/state/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,30 @@ export declare function getToolDisplayName(toolName: string): string;
|
|
|
41
41
|
* Returns: 'internal', MCP server name, or 'custom'
|
|
42
42
|
*/
|
|
43
43
|
export declare function getToolTypeBadge(toolName: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Result of formatting a tool header for display
|
|
46
|
+
*/
|
|
47
|
+
export interface FormattedToolHeader {
|
|
48
|
+
/** User-friendly display name (e.g., "Explore", "Read") */
|
|
49
|
+
displayName: string;
|
|
50
|
+
/** Formatted arguments string (e.g., "file.ts" or "pattern, path: /src") */
|
|
51
|
+
argsFormatted: string;
|
|
52
|
+
/** Tool type badge (e.g., "internal", "custom", "MCP: github") */
|
|
53
|
+
badge: string;
|
|
54
|
+
/** Full formatted header string (e.g., "Explore(task) [custom]") */
|
|
55
|
+
header: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Formats a tool call header for consistent display across CLI.
|
|
59
|
+
* Used by both tool messages and approval prompts.
|
|
60
|
+
*
|
|
61
|
+
* Handles special cases like spawn_agent (uses agentId as display name).
|
|
62
|
+
*
|
|
63
|
+
* @param toolName - Raw tool name (may include prefixes like "custom--")
|
|
64
|
+
* @param args - Tool arguments object
|
|
65
|
+
* @returns Formatted header components and full string
|
|
66
|
+
*/
|
|
67
|
+
export declare function formatToolHeader(toolName: string, args?: Record<string, unknown>): FormattedToolHeader;
|
|
44
68
|
/**
|
|
45
69
|
* Formats tool arguments for display.
|
|
46
70
|
* Format: ToolName(primary_arg) or ToolName(primary_arg, key: value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AAEtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAW,EACrB,GAAG,GAAE,MAAsB,GAC5B,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7E;AA4ED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,mBAAmB,CA8BrB;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0EhG;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,GAAE,MAAW,GACvB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAQjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAqCD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,MAAM,GAClB,OAAO,EAAE,CAgGX;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU;;;;;;;;GAiBrD"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import os from 'os';
|
|
7
|
-
import { isTextPart } from '@dexto/core';
|
|
7
|
+
import { isTextPart, isAssistantMessage, isToolMessage } from '@dexto/core';
|
|
8
8
|
import { generateMessageId } from './idGenerator.js';
|
|
9
9
|
/**
|
|
10
10
|
* Convert absolute path to display-friendly relative path.
|
|
@@ -111,6 +111,8 @@ const TOOL_CONFIGS = {
|
|
|
111
111
|
kill_process: { displayName: 'Kill', argsToShow: ['process_id'], primaryArg: 'process_id' },
|
|
112
112
|
// User interaction
|
|
113
113
|
ask_user: { displayName: 'Ask', argsToShow: ['question'], primaryArg: 'question' },
|
|
114
|
+
// Agent spawning - handled specially in getToolDisplayName for dynamic agentId
|
|
115
|
+
spawn_agent: { displayName: 'Agent', argsToShow: ['task'], primaryArg: 'task' },
|
|
114
116
|
};
|
|
115
117
|
/**
|
|
116
118
|
* Gets the display config for a tool.
|
|
@@ -200,6 +202,43 @@ export function getToolTypeBadge(toolName) {
|
|
|
200
202
|
// Unknown - likely custom
|
|
201
203
|
return 'custom';
|
|
202
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Formats a tool call header for consistent display across CLI.
|
|
207
|
+
* Used by both tool messages and approval prompts.
|
|
208
|
+
*
|
|
209
|
+
* Handles special cases like spawn_agent (uses agentId as display name).
|
|
210
|
+
*
|
|
211
|
+
* @param toolName - Raw tool name (may include prefixes like "custom--")
|
|
212
|
+
* @param args - Tool arguments object
|
|
213
|
+
* @returns Formatted header components and full string
|
|
214
|
+
*/
|
|
215
|
+
export function formatToolHeader(toolName, args = {}) {
|
|
216
|
+
let displayName = getToolDisplayName(toolName);
|
|
217
|
+
const argsFormatted = formatToolArgsForDisplay(toolName, args);
|
|
218
|
+
const badge = getToolTypeBadge(toolName);
|
|
219
|
+
// Special handling for spawn_agent: use agentId as display name
|
|
220
|
+
// Normalize tool name to handle all prefixes (internal--, custom--)
|
|
221
|
+
const normalizedToolName = toolName.replace(/^(?:internal--|custom--)/, '');
|
|
222
|
+
const isSpawnAgent = normalizedToolName === 'spawn_agent';
|
|
223
|
+
if (isSpawnAgent && args.agentId) {
|
|
224
|
+
const agentId = String(args.agentId);
|
|
225
|
+
const agentLabel = agentId.replace(/-agent$/, '');
|
|
226
|
+
displayName = agentLabel.charAt(0).toUpperCase() + agentLabel.slice(1);
|
|
227
|
+
}
|
|
228
|
+
// Only show badge for MCP tools (external tools worth distinguishing)
|
|
229
|
+
const isMcpTool = badge.startsWith('MCP');
|
|
230
|
+
const badgeSuffix = isMcpTool ? ` [${badge}]` : '';
|
|
231
|
+
// Format: DisplayName(args) [badge] (badge only for MCP)
|
|
232
|
+
const header = argsFormatted
|
|
233
|
+
? `${displayName}(${argsFormatted})${badgeSuffix}`
|
|
234
|
+
: `${displayName}()${badgeSuffix}`;
|
|
235
|
+
return {
|
|
236
|
+
displayName,
|
|
237
|
+
argsFormatted,
|
|
238
|
+
badge,
|
|
239
|
+
header,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
203
242
|
/**
|
|
204
243
|
* Fallback primary argument names for unknown tools.
|
|
205
244
|
* Used when we don't have a specific config for a tool.
|
|
@@ -245,9 +284,9 @@ export function formatToolArgsForDisplay(toolName, args) {
|
|
|
245
284
|
*/
|
|
246
285
|
const formatArgValue = (argName, value) => {
|
|
247
286
|
const strValue = typeof value === 'string' ? value : JSON.stringify(value);
|
|
248
|
-
// File paths: use relative path
|
|
287
|
+
// File paths: use relative path (no truncation)
|
|
249
288
|
if (PATH_ARGS.has(argName)) {
|
|
250
|
-
return
|
|
289
|
+
return makeRelativePath(strValue);
|
|
251
290
|
}
|
|
252
291
|
// Commands: show single-line in full, truncate multi-line (heredocs) to first line
|
|
253
292
|
if (argName === 'command') {
|
|
@@ -407,13 +446,100 @@ function extractTextContent(content) {
|
|
|
407
446
|
.map((part) => part.text)
|
|
408
447
|
.join('\n');
|
|
409
448
|
}
|
|
449
|
+
/**
|
|
450
|
+
* Generates a preview of tool result content for display
|
|
451
|
+
*/
|
|
452
|
+
function generateToolResultPreview(content) {
|
|
453
|
+
const textContent = extractTextContent(content);
|
|
454
|
+
if (!textContent)
|
|
455
|
+
return '';
|
|
456
|
+
const lines = textContent.split('\n');
|
|
457
|
+
const previewLines = lines.slice(0, 5);
|
|
458
|
+
let preview = previewLines.join('\n');
|
|
459
|
+
// Truncate if too long
|
|
460
|
+
if (preview.length > 400) {
|
|
461
|
+
preview = preview.slice(0, 397) + '...';
|
|
462
|
+
}
|
|
463
|
+
else if (lines.length > 5) {
|
|
464
|
+
preview += '\n...';
|
|
465
|
+
}
|
|
466
|
+
return preview;
|
|
467
|
+
}
|
|
410
468
|
/**
|
|
411
469
|
* Converts session history messages to UI messages
|
|
412
470
|
*/
|
|
413
471
|
export function convertHistoryToUIMessages(history, sessionId) {
|
|
414
472
|
const uiMessages = [];
|
|
473
|
+
// Build a map of toolCallId -> ToolCall for looking up tool call args
|
|
474
|
+
const toolCallMap = new Map();
|
|
475
|
+
for (const msg of history) {
|
|
476
|
+
if (isAssistantMessage(msg) && msg.toolCalls) {
|
|
477
|
+
for (const toolCall of msg.toolCalls) {
|
|
478
|
+
toolCallMap.set(toolCall.id, toolCall);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
415
482
|
history.forEach((msg, index) => {
|
|
416
|
-
|
|
483
|
+
const timestamp = new Date(msg.timestamp ?? Date.now() - (history.length - index) * 1000);
|
|
484
|
+
// Handle tool messages specially
|
|
485
|
+
if (isToolMessage(msg)) {
|
|
486
|
+
// Look up the original tool call to get args
|
|
487
|
+
const toolCall = toolCallMap.get(msg.toolCallId);
|
|
488
|
+
// Format tool name
|
|
489
|
+
const displayName = getToolDisplayName(msg.name);
|
|
490
|
+
// Format args if we have them
|
|
491
|
+
let toolContent = displayName;
|
|
492
|
+
if (toolCall) {
|
|
493
|
+
try {
|
|
494
|
+
const args = JSON.parse(toolCall.function.arguments || '{}');
|
|
495
|
+
const argsFormatted = formatToolArgsForDisplay(msg.name, args);
|
|
496
|
+
if (argsFormatted) {
|
|
497
|
+
toolContent = `${displayName}(${argsFormatted})`;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
catch {
|
|
501
|
+
// Ignore JSON parse errors
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
// Add tool type badge (only for MCP tools)
|
|
505
|
+
const badge = getToolTypeBadge(msg.name);
|
|
506
|
+
if (badge.startsWith('MCP')) {
|
|
507
|
+
toolContent = `${toolContent} [${badge}]`;
|
|
508
|
+
}
|
|
509
|
+
// Generate result preview
|
|
510
|
+
const resultPreview = generateToolResultPreview(msg.content);
|
|
511
|
+
uiMessages.push({
|
|
512
|
+
id: `session-${sessionId}-${index}`,
|
|
513
|
+
role: 'tool',
|
|
514
|
+
content: toolContent,
|
|
515
|
+
timestamp,
|
|
516
|
+
toolStatus: 'finished',
|
|
517
|
+
toolResult: resultPreview,
|
|
518
|
+
isError: msg.success === false,
|
|
519
|
+
// Store content parts for potential rich rendering
|
|
520
|
+
toolContent: msg.content,
|
|
521
|
+
// Restore structured display data for rich rendering (diffs, shell output, etc.)
|
|
522
|
+
...(msg.displayData !== undefined && {
|
|
523
|
+
toolDisplayData: msg.displayData,
|
|
524
|
+
}),
|
|
525
|
+
});
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
// Handle assistant messages - skip those with only tool calls (no text content)
|
|
529
|
+
if (isAssistantMessage(msg)) {
|
|
530
|
+
const textContent = extractTextContent(msg.content);
|
|
531
|
+
// Skip if no text content (message was just tool calls)
|
|
532
|
+
if (!textContent)
|
|
533
|
+
return;
|
|
534
|
+
uiMessages.push({
|
|
535
|
+
id: `session-${sessionId}-${index}`,
|
|
536
|
+
role: 'assistant',
|
|
537
|
+
content: textContent,
|
|
538
|
+
timestamp,
|
|
539
|
+
});
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
// Handle other messages (user, system)
|
|
417
543
|
const textContent = extractTextContent(msg.content);
|
|
418
544
|
// Skip empty messages
|
|
419
545
|
if (!textContent)
|
|
@@ -422,7 +548,7 @@ export function convertHistoryToUIMessages(history, sessionId) {
|
|
|
422
548
|
id: `session-${sessionId}-${index}`,
|
|
423
549
|
role: msg.role,
|
|
424
550
|
content: textContent,
|
|
425
|
-
timestamp
|
|
551
|
+
timestamp,
|
|
426
552
|
});
|
|
427
553
|
});
|
|
428
554
|
return uiMessages;
|
package/dist/index.js
CHANGED
|
@@ -959,26 +959,16 @@ program
|
|
|
959
959
|
case 'cli': {
|
|
960
960
|
// Set up approval handler for interactive CLI if manual mode OR elicitation enabled
|
|
961
961
|
// Note: Headless CLI with manual mode is blocked by validation above
|
|
962
|
-
// Ink CLI uses ApprovalCoordinator (same as server/web mode) to coordinate
|
|
963
|
-
// approval requests with React UI components
|
|
964
962
|
const needsHandler = !headlessInput &&
|
|
965
963
|
(validatedConfig.toolConfirmation?.mode === 'manual' ||
|
|
966
964
|
validatedConfig.elicitation.enabled);
|
|
967
965
|
if (needsHandler) {
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
const
|
|
966
|
+
// CLI uses its own approval handler that works directly with AgentEventBus
|
|
967
|
+
// This avoids the indirection of ApprovalCoordinator (designed for HTTP flows)
|
|
968
|
+
const { createCLIApprovalHandler } = await import('./cli/approval/index.js');
|
|
969
|
+
const handler = createCLIApprovalHandler(agent.agentEventBus);
|
|
971
970
|
agent.setApprovalHandler(handler);
|
|
972
|
-
|
|
973
|
-
// Forward requests from coordinator to event bus (for UI to receive)
|
|
974
|
-
approvalCoordinator.on('approval:request', (request) => {
|
|
975
|
-
agent.agentEventBus.emit('approval:request', request);
|
|
976
|
-
});
|
|
977
|
-
// Forward responses from event bus to coordinator (for handler to receive)
|
|
978
|
-
agent.agentEventBus.on('approval:response', (response) => {
|
|
979
|
-
approvalCoordinator.emitResponse(response);
|
|
980
|
-
});
|
|
981
|
-
logger.debug('Event-based approval handler configured for Ink CLI');
|
|
971
|
+
logger.debug('CLI approval handler configured for Ink CLI');
|
|
982
972
|
}
|
|
983
973
|
// Start the agent now that approval handler is configured
|
|
984
974
|
await agent.start();
|