dexto 1.5.0 → 1.5.1
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/cli/commands/interactive-commands/command-parser.d.ts +1 -1
- package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/command-parser.js +11 -1
- package/dist/cli/commands/interactive-commands/general-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/general-commands.js +63 -0
- package/dist/cli/commands/interactive-commands/system/system-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/system/system-commands.js +3 -2
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +163 -28
- package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/TextBufferInput.js +7 -3
- package/dist/cli/ink-cli/components/chat/Header.js +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +4 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +19 -8
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +2 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +64 -2
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +44 -1
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +6 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +2 -2
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +8 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.js +144 -6
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +3 -0
- package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts +11 -7
- package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useTokenCounter.js +41 -18
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +20 -8
- package/dist/cli/ink-cli/state/types.d.ts +2 -2
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/package.json +7 -7
|
@@ -88,14 +88,17 @@ export function useCLIState({ agent, initialSessionId, startupInfo, onKeyboardSc
|
|
|
88
88
|
const overlayContainerRef = useRef(null);
|
|
89
89
|
// Setup event bus subscriptions for non-streaming events
|
|
90
90
|
// (streaming events are handled directly via agent.stream() iterator in InputContainer)
|
|
91
|
+
// Also handles external triggers (run:invoke) from scheduler, A2A, API
|
|
91
92
|
useAgentEvents({
|
|
92
93
|
agent,
|
|
93
94
|
setMessages,
|
|
95
|
+
setPendingMessages,
|
|
94
96
|
setUi,
|
|
95
97
|
setSession,
|
|
96
98
|
setApproval,
|
|
97
99
|
setApprovalQueue,
|
|
98
100
|
setQueuedMessages,
|
|
101
|
+
currentSessionId: session.id,
|
|
99
102
|
});
|
|
100
103
|
// Create input handlers for the orchestrator
|
|
101
104
|
// Note: Main input is NOT routed through orchestrator - TextBufferInput handles it directly
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useTokenCounter Hook
|
|
3
|
-
* Tracks token usage during streaming with live estimates
|
|
3
|
+
* Tracks token usage during streaming with live estimates
|
|
4
4
|
*
|
|
5
5
|
* Accumulation strategy for multi-step turns:
|
|
6
|
-
* -
|
|
6
|
+
* - lastInputTokens: Input tokens from the most recent LLM call (not summed to avoid double-counting)
|
|
7
|
+
* - cumulativeOutputTokens: Sum of output tokens across all LLM calls in the turn
|
|
7
8
|
* - currentSegmentEstimate: Estimated tokens for current streaming segment
|
|
8
|
-
* - Display =
|
|
9
|
+
* - Display = lastInput + cumulativeOutput + currentEstimate
|
|
10
|
+
*
|
|
11
|
+
* This approach avoids double-counting shared context (system prompt, history) across
|
|
12
|
+
* multiple LLM calls in a single turn while accurately capturing output generation.
|
|
9
13
|
*
|
|
10
14
|
* For queued messages: Tokens continue accumulating (same turn)
|
|
11
15
|
* Reset only when isActive transitions false→true (new turn)
|
|
@@ -18,7 +22,7 @@ export interface TokenCounterOptions {
|
|
|
18
22
|
isActive: boolean;
|
|
19
23
|
}
|
|
20
24
|
export interface TokenCounterResult {
|
|
21
|
-
/** Total
|
|
25
|
+
/** Total actual tokens (lastInput + cumulativeOutput) */
|
|
22
26
|
totalActualTokens: number;
|
|
23
27
|
/** Estimated tokens for current streaming segment */
|
|
24
28
|
currentSegmentEstimate: number;
|
|
@@ -32,11 +36,11 @@ export interface TokenCounterResult {
|
|
|
32
36
|
/**
|
|
33
37
|
* Hook that tracks token usage during LLM streaming
|
|
34
38
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
39
|
+
* Tracks tokens across multi-step turns (text → tool → text → tool)
|
|
40
|
+
* using: lastInputTokens + cumulativeOutputTokens to avoid double-counting.
|
|
37
41
|
*
|
|
38
42
|
* @param options - Configuration options
|
|
39
|
-
* @returns Token counts (
|
|
43
|
+
* @returns Token counts (actual + current segment estimate)
|
|
40
44
|
*/
|
|
41
45
|
export declare function useTokenCounter({ agent, isActive }: TokenCounterOptions): TokenCounterResult;
|
|
42
46
|
//# sourceMappingURL=useTokenCounter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenCounter.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/hooks/useTokenCounter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useTokenCounter.d.ts","sourceRoot":"","sources":["../../../../src/cli/ink-cli/hooks/useTokenCounter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,UAAU,CAAC;IAClB,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,yDAAyD;IACzD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;CACrB;AAsBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,kBAAkB,CA0F5F"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useTokenCounter Hook
|
|
3
|
-
* Tracks token usage during streaming with live estimates
|
|
3
|
+
* Tracks token usage during streaming with live estimates
|
|
4
4
|
*
|
|
5
5
|
* Accumulation strategy for multi-step turns:
|
|
6
|
-
* -
|
|
6
|
+
* - lastInputTokens: Input tokens from the most recent LLM call (not summed to avoid double-counting)
|
|
7
|
+
* - cumulativeOutputTokens: Sum of output tokens across all LLM calls in the turn
|
|
7
8
|
* - currentSegmentEstimate: Estimated tokens for current streaming segment
|
|
8
|
-
* - Display =
|
|
9
|
+
* - Display = lastInput + cumulativeOutput + currentEstimate
|
|
10
|
+
*
|
|
11
|
+
* This approach avoids double-counting shared context (system prompt, history) across
|
|
12
|
+
* multiple LLM calls in a single turn while accurately capturing output generation.
|
|
9
13
|
*
|
|
10
14
|
* For queued messages: Tokens continue accumulating (same turn)
|
|
11
15
|
* Reset only when isActive transitions false→true (new turn)
|
|
@@ -21,25 +25,29 @@ function estimateTokens(charCount) {
|
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
23
27
|
* Format token count for display
|
|
28
|
+
* Only shows count when >= 1000, using x.xK format
|
|
24
29
|
*/
|
|
25
30
|
function formatTokenCount(count, includesEstimate) {
|
|
26
|
-
if (count
|
|
31
|
+
if (count < 1000)
|
|
27
32
|
return '';
|
|
28
33
|
const prefix = includesEstimate ? '~' : '';
|
|
29
|
-
|
|
34
|
+
const kValue = (count / 1000).toFixed(1);
|
|
35
|
+
return `${prefix}${kValue}K tokens`;
|
|
30
36
|
}
|
|
31
37
|
/**
|
|
32
38
|
* Hook that tracks token usage during LLM streaming
|
|
33
39
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
40
|
+
* Tracks tokens across multi-step turns (text → tool → text → tool)
|
|
41
|
+
* using: lastInputTokens + cumulativeOutputTokens to avoid double-counting.
|
|
36
42
|
*
|
|
37
43
|
* @param options - Configuration options
|
|
38
|
-
* @returns Token counts (
|
|
44
|
+
* @returns Token counts (actual + current segment estimate)
|
|
39
45
|
*/
|
|
40
46
|
export function useTokenCounter({ agent, isActive }) {
|
|
41
|
-
//
|
|
42
|
-
const [
|
|
47
|
+
// Input tokens from the most recent LLM response (replaced, not summed)
|
|
48
|
+
const [lastInputTokens, setLastInputTokens] = useState(0);
|
|
49
|
+
// Cumulative output tokens across all LLM responses in this turn
|
|
50
|
+
const [cumulativeOutputTokens, setCumulativeOutputTokens] = useState(0);
|
|
43
51
|
// Estimated tokens for current streaming segment (resets after each response)
|
|
44
52
|
const [currentSegmentEstimate, setCurrentSegmentEstimate] = useState(0);
|
|
45
53
|
// Character count for current segment (ref to avoid re-renders on each chunk)
|
|
@@ -47,7 +55,8 @@ export function useTokenCounter({ agent, isActive }) {
|
|
|
47
55
|
useEffect(() => {
|
|
48
56
|
if (!isActive) {
|
|
49
57
|
// Reset when turn ends (isActive becomes false)
|
|
50
|
-
|
|
58
|
+
setLastInputTokens(0);
|
|
59
|
+
setCumulativeOutputTokens(0);
|
|
51
60
|
setCurrentSegmentEstimate(0);
|
|
52
61
|
currentCharCountRef.current = 0;
|
|
53
62
|
return;
|
|
@@ -56,9 +65,9 @@ export function useTokenCounter({ agent, isActive }) {
|
|
|
56
65
|
const controller = new AbortController();
|
|
57
66
|
const { signal } = controller;
|
|
58
67
|
// Reset on new turn (isActive just became true)
|
|
59
|
-
// This handles the transition from inactive to active
|
|
60
68
|
currentCharCountRef.current = 0;
|
|
61
|
-
|
|
69
|
+
setLastInputTokens(0);
|
|
70
|
+
setCumulativeOutputTokens(0);
|
|
62
71
|
setCurrentSegmentEstimate(0);
|
|
63
72
|
// Track streaming chunks - accumulate estimate for current segment
|
|
64
73
|
bus.on('llm:chunk', (payload) => {
|
|
@@ -67,11 +76,23 @@ export function useTokenCounter({ agent, isActive }) {
|
|
|
67
76
|
setCurrentSegmentEstimate(estimateTokens(currentCharCountRef.current));
|
|
68
77
|
}
|
|
69
78
|
}, { signal });
|
|
70
|
-
// On response:
|
|
79
|
+
// On response: update input (replace), accumulate output, reset estimate
|
|
71
80
|
bus.on('llm:response', (payload) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
const usage = payload.tokenUsage;
|
|
82
|
+
if (usage) {
|
|
83
|
+
// Replace input tokens (most recent call's context)
|
|
84
|
+
// Subtract cacheWriteTokens to exclude system prompt on first call
|
|
85
|
+
const rawInputTokens = usage.inputTokens ?? 0;
|
|
86
|
+
const cacheWriteTokens = usage.cacheWriteTokens ?? 0;
|
|
87
|
+
const inputTokens = Math.max(0, rawInputTokens - cacheWriteTokens);
|
|
88
|
+
if (inputTokens > 0) {
|
|
89
|
+
setLastInputTokens(inputTokens);
|
|
90
|
+
}
|
|
91
|
+
// Accumulate output tokens (additive across calls)
|
|
92
|
+
const outputTokens = usage.outputTokens ?? 0;
|
|
93
|
+
if (outputTokens > 0) {
|
|
94
|
+
setCumulativeOutputTokens((prev) => prev + outputTokens);
|
|
95
|
+
}
|
|
75
96
|
}
|
|
76
97
|
// Reset current segment for next streaming segment
|
|
77
98
|
currentCharCountRef.current = 0;
|
|
@@ -83,7 +104,9 @@ export function useTokenCounter({ agent, isActive }) {
|
|
|
83
104
|
controller.abort();
|
|
84
105
|
};
|
|
85
106
|
}, [agent, isActive]);
|
|
86
|
-
//
|
|
107
|
+
// Total = lastInput + cumulativeOutput (avoids double-counting shared context)
|
|
108
|
+
const totalActualTokens = lastInputTokens + cumulativeOutputTokens;
|
|
109
|
+
// Display = actual + current streaming estimate
|
|
87
110
|
const displayCount = totalActualTokens + currentSegmentEstimate;
|
|
88
111
|
const includesEstimate = currentSegmentEstimate > 0;
|
|
89
112
|
return {
|
|
@@ -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;AA4BvE;;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;
|
|
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;AA4BvE;;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,CA+xBf"}
|
|
@@ -58,7 +58,8 @@ export async function processStream(iterator, setters, options) {
|
|
|
58
58
|
const state = {
|
|
59
59
|
messageId: null,
|
|
60
60
|
content: '',
|
|
61
|
-
|
|
61
|
+
lastInputTokens: 0,
|
|
62
|
+
cumulativeOutputTokens: 0,
|
|
62
63
|
finalizedContent: '',
|
|
63
64
|
splitCounter: 0,
|
|
64
65
|
textFinalizedBeforeTool: false,
|
|
@@ -239,7 +240,8 @@ export async function processStream(iterator, setters, options) {
|
|
|
239
240
|
setUi((prev) => ({ ...prev, isThinking: true }));
|
|
240
241
|
state.messageId = null;
|
|
241
242
|
state.content = '';
|
|
242
|
-
state.
|
|
243
|
+
state.lastInputTokens = 0;
|
|
244
|
+
state.cumulativeOutputTokens = 0;
|
|
243
245
|
state.finalizedContent = '';
|
|
244
246
|
state.splitCounter = 0;
|
|
245
247
|
state.textFinalizedBeforeTool = false;
|
|
@@ -314,9 +316,18 @@ export async function processStream(iterator, setters, options) {
|
|
|
314
316
|
if (!useStreaming) {
|
|
315
317
|
setUi((prev) => ({ ...prev, isThinking: false }));
|
|
316
318
|
}
|
|
317
|
-
//
|
|
318
|
-
|
|
319
|
-
|
|
319
|
+
// Track token usage: replace input (last context), accumulate output
|
|
320
|
+
// Subtract cacheWriteTokens to exclude system prompt on first call
|
|
321
|
+
if (event.tokenUsage) {
|
|
322
|
+
const rawInputTokens = event.tokenUsage.inputTokens ?? 0;
|
|
323
|
+
const cacheWriteTokens = event.tokenUsage.cacheWriteTokens ?? 0;
|
|
324
|
+
const inputTokens = Math.max(0, rawInputTokens - cacheWriteTokens);
|
|
325
|
+
if (inputTokens > 0) {
|
|
326
|
+
state.lastInputTokens = inputTokens;
|
|
327
|
+
}
|
|
328
|
+
if (event.tokenUsage.outputTokens) {
|
|
329
|
+
state.cumulativeOutputTokens += event.tokenUsage.outputTokens;
|
|
330
|
+
}
|
|
320
331
|
}
|
|
321
332
|
// Track token usage analytics
|
|
322
333
|
if (event.tokenUsage &&
|
|
@@ -575,14 +586,15 @@ export async function processStream(iterator, setters, options) {
|
|
|
575
586
|
}
|
|
576
587
|
case 'run:complete': {
|
|
577
588
|
const { durationMs } = event;
|
|
578
|
-
|
|
589
|
+
// Total = lastInput + cumulativeOutput (avoids double-counting shared context)
|
|
590
|
+
const totalTokens = state.lastInputTokens + state.cumulativeOutputTokens;
|
|
579
591
|
// Ensure any remaining pending messages are finalized
|
|
580
592
|
finalizeAllPending();
|
|
581
593
|
// Add run summary message at the END (not inserted in middle)
|
|
582
594
|
// IMPORTANT: Ink's <Static> tracks rendered items by array position, not key.
|
|
583
595
|
// Inserting in the middle shifts existing items, causing them to re-render.
|
|
584
596
|
// Always append to avoid duplicate rendering.
|
|
585
|
-
if (durationMs > 0 ||
|
|
597
|
+
if (durationMs > 0 || totalTokens > 0) {
|
|
586
598
|
const summaryMessage = {
|
|
587
599
|
id: generateMessageId('summary'),
|
|
588
600
|
role: 'system',
|
|
@@ -591,7 +603,7 @@ export async function processStream(iterator, setters, options) {
|
|
|
591
603
|
styledType: 'run-summary',
|
|
592
604
|
styledData: {
|
|
593
605
|
durationMs,
|
|
594
|
-
|
|
606
|
+
totalTokens,
|
|
595
607
|
},
|
|
596
608
|
};
|
|
597
609
|
setMessages((prev) => [...prev, summaryMessage]);
|
|
@@ -98,8 +98,8 @@ export interface LogConfigStyledData {
|
|
|
98
98
|
export interface RunSummaryStyledData {
|
|
99
99
|
/** Duration in milliseconds */
|
|
100
100
|
durationMs: number;
|
|
101
|
-
/**
|
|
102
|
-
|
|
101
|
+
/** Total tokens used (lastInput + cumulativeOutput) */
|
|
102
|
+
totalTokens: number;
|
|
103
103
|
}
|
|
104
104
|
export interface PromptsStyledData {
|
|
105
105
|
mcpPrompts: Array<{
|
|
@@ -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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"}
|
package/dist/index.js
CHANGED
|
@@ -88,6 +88,7 @@ program
|
|
|
88
88
|
.option('--port <port>', 'port for the server (default: 3000 for web, 3001 for server mode)')
|
|
89
89
|
.option('--no-auto-install', 'Disable automatic installation of missing agents from registry')
|
|
90
90
|
.option('--image <package>', 'Image package to load (e.g., @dexto/image-local). Overrides config image field.')
|
|
91
|
+
.option('--privacy-mode', 'Hide full file paths from display (useful for screen recording/sharing). Can also set DEXTO_PRIVACY_MODE=true')
|
|
91
92
|
.enablePositionalOptions();
|
|
92
93
|
// 2) `create-app` SUB-COMMAND
|
|
93
94
|
program
|
|
@@ -187,7 +188,12 @@ program
|
|
|
187
188
|
catch (err) {
|
|
188
189
|
if (err instanceof ExitSignal)
|
|
189
190
|
throw err;
|
|
190
|
-
|
|
191
|
+
if (process.env.DEXTO_PRIVACY_MODE === 'true') {
|
|
192
|
+
console.error(`❌ dexto setup command failed: ${err}. Check logs for more information`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
console.error(`❌ dexto setup command failed: ${err}. Check logs in ~/.dexto/logs/dexto.log for more information`);
|
|
196
|
+
}
|
|
191
197
|
safeExit('setup', 1, 'error');
|
|
192
198
|
}
|
|
193
199
|
}));
|
|
@@ -469,7 +475,12 @@ program
|
|
|
469
475
|
const globalOpts = program.opts();
|
|
470
476
|
const nameOrPath = globalOpts.agent;
|
|
471
477
|
const configPath = await resolveAgentPath(nameOrPath, globalOpts.autoInstall !== false);
|
|
472
|
-
|
|
478
|
+
if (process.env.DEXTO_PRIVACY_MODE === 'true') {
|
|
479
|
+
console.log(`📄 Loading Dexto config...`);
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
console.log(`📄 Loading Dexto config from: ${configPath}`);
|
|
483
|
+
}
|
|
473
484
|
const config = await loadAgentConfig(configPath);
|
|
474
485
|
logger.info(`Validating MCP servers...`);
|
|
475
486
|
// Validate that MCP servers are configured
|
|
@@ -536,6 +547,10 @@ program
|
|
|
536
547
|
logger.debug('WARNING: .env file not found; copy .env.example and set your API keys.');
|
|
537
548
|
}
|
|
538
549
|
const opts = program.opts();
|
|
550
|
+
// Set privacy mode early to gate all path-related output
|
|
551
|
+
if (opts.privacyMode) {
|
|
552
|
+
process.env.DEXTO_PRIVACY_MODE = 'true';
|
|
553
|
+
}
|
|
539
554
|
// ——— LOAD DEFAULT MODE FROM PREFERENCES ———
|
|
540
555
|
// If --mode was not explicitly provided on CLI, use defaultMode from preferences
|
|
541
556
|
const modeSource = program.getOptionValueSource('mode');
|
|
@@ -892,7 +907,13 @@ program
|
|
|
892
907
|
let agent;
|
|
893
908
|
let derivedAgentId;
|
|
894
909
|
try {
|
|
895
|
-
|
|
910
|
+
// Show startup message (respecting privacy mode)
|
|
911
|
+
if (process.env.DEXTO_PRIVACY_MODE === 'true') {
|
|
912
|
+
console.error(`🚀 Initializing Dexto...`);
|
|
913
|
+
}
|
|
914
|
+
else {
|
|
915
|
+
console.error(`🚀 Initializing Dexto with config: ${resolvedPath}`);
|
|
916
|
+
}
|
|
896
917
|
// Set run mode for tool confirmation provider
|
|
897
918
|
process.env.DEXTO_RUN_MODE = opts.mode;
|
|
898
919
|
// Apply --strict flag to all server configs
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dexto",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"dexto": "./dist/index.js"
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
"ws": "^8.18.1",
|
|
41
41
|
"yaml": "^2.7.1",
|
|
42
42
|
"zod": "^3.25.0",
|
|
43
|
-
"@dexto/agent-management": "1.5.
|
|
44
|
-
"@dexto/analytics": "1.5.
|
|
45
|
-
"@dexto/core": "1.5.
|
|
46
|
-
"@dexto/image-local": "1.5.
|
|
47
|
-
"@dexto/registry": "1.5.
|
|
48
|
-
"@dexto/server": "1.5.
|
|
43
|
+
"@dexto/agent-management": "1.5.1",
|
|
44
|
+
"@dexto/analytics": "1.5.1",
|
|
45
|
+
"@dexto/core": "1.5.1",
|
|
46
|
+
"@dexto/image-local": "1.5.1",
|
|
47
|
+
"@dexto/registry": "1.5.1",
|
|
48
|
+
"@dexto/server": "1.5.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/react": "^19.0.0",
|