minovative-mind-cli 2.3.2 → 2.3.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/services/agent/slashCommands.js +19 -1
- package/dist/services/agent/types.d.ts +1 -0
- package/dist/services/agent.d.ts +1 -0
- package/dist/services/agent.js +19 -1
- package/dist/services/chatHistoryService.d.ts +2 -0
- package/dist/services/proxyClient.d.ts +2 -0
- package/dist/services/proxyClient.js +5 -2
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
|
@@ -134,7 +134,24 @@ export async function handleSlashCommand(command, context) {
|
|
|
134
134
|
const prevUsage = context.chatSessionState?.previousUsageMetadata;
|
|
135
135
|
const currentModel = chat.getModel();
|
|
136
136
|
const globalModel = getGlobalActiveModel();
|
|
137
|
-
const
|
|
137
|
+
const modelUsageCounts = context.chatSessionState?.modelUsageCounts || {};
|
|
138
|
+
const modelsUsed = Object.keys(modelUsageCounts);
|
|
139
|
+
let modelStatsStr = '';
|
|
140
|
+
if (modelsUsed.length > 0) {
|
|
141
|
+
const totalTurns = Object.values(modelUsageCounts).reduce((a, b) => a + b, 0);
|
|
142
|
+
const parts = modelsUsed.map((m) => {
|
|
143
|
+
const percent = Math.round((modelUsageCounts[m] / totalTurns) * 100);
|
|
144
|
+
return `${m} ${percent}%`;
|
|
145
|
+
});
|
|
146
|
+
modelStatsStr = parts.join(', ');
|
|
147
|
+
}
|
|
148
|
+
let displayModel = '';
|
|
149
|
+
if (globalModel === 'auto') {
|
|
150
|
+
displayModel = modelStatsStr ? `Auto (${modelStatsStr})` : `Auto (Last turn: ${currentModel})`;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
displayModel = modelStatsStr || currentModel;
|
|
154
|
+
}
|
|
138
155
|
const autoApprove = getApprovalMode() === 'skip-all' ? 'Enabled' : 'Disabled';
|
|
139
156
|
const subAgents = isSubAgentsEnabled() ? 'Enabled' : 'Disabled';
|
|
140
157
|
const planMode = context.isPlanMode ? 'Enabled' : 'Disabled';
|
|
@@ -405,6 +422,7 @@ export async function handleSlashCommand(command, context) {
|
|
|
405
422
|
chatSessionState.totalOutputTokens = session.totalOutputTokens || 0;
|
|
406
423
|
chatSessionState.latestUsageMetadata = session.latestUsageMetadata;
|
|
407
424
|
chatSessionState.previousUsageMetadata = session.previousUsageMetadata;
|
|
425
|
+
chatSessionState.modelUsageCounts = session.modelUsageCounts || {};
|
|
408
426
|
chat.setSessionInfo(session.id, workspaceRoot);
|
|
409
427
|
}
|
|
410
428
|
process.stdout.write('\x1B[2J\x1B[3J\x1B[H'); // Hard clear screen and scrollback
|
package/dist/services/agent.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export declare function executeSingleTurn(workspaceRoot: string, userInput: stri
|
|
|
57
57
|
totalOutputTokens: number;
|
|
58
58
|
latestUsageMetadata?: any;
|
|
59
59
|
previousUsageMetadata?: any;
|
|
60
|
+
modelUsageCounts?: Record<string, number>;
|
|
60
61
|
}, isPlanMode: boolean, cachedContextResult?: any): Promise<{
|
|
61
62
|
planModeReturn?: string;
|
|
62
63
|
contextResult?: any;
|
package/dist/services/agent.js
CHANGED
|
@@ -86,7 +86,7 @@ export async function startAgentLoop(workspaceRoot, version) {
|
|
|
86
86
|
chatHistoryService.init(workspaceRoot);
|
|
87
87
|
const chat = createSharedChatSession();
|
|
88
88
|
const inputHandler = new AsyncInputHandler();
|
|
89
|
-
const chatSessionState = { id: crypto.randomUUID(), title: '', totalTokens: 0, totalInputTokens: 0, totalOutputTokens: 0 };
|
|
89
|
+
const chatSessionState = { id: crypto.randomUUID(), title: '', totalTokens: 0, totalInputTokens: 0, totalOutputTokens: 0, modelUsageCounts: {} };
|
|
90
90
|
chat.setSessionInfo(chatSessionState.id, workspaceRoot);
|
|
91
91
|
const sessionInputHistory = [];
|
|
92
92
|
let isRawPasteMode = false;
|
|
@@ -115,6 +115,9 @@ export async function startAgentLoop(workspaceRoot, version) {
|
|
|
115
115
|
chatSessionState.totalTokens = 0;
|
|
116
116
|
chatSessionState.totalInputTokens = 0;
|
|
117
117
|
chatSessionState.totalOutputTokens = 0;
|
|
118
|
+
chatSessionState.modelUsageCounts = {};
|
|
119
|
+
chatSessionState.latestUsageMetadata = undefined;
|
|
120
|
+
chatSessionState.previousUsageMetadata = undefined;
|
|
118
121
|
chat.setSessionInfo(chatSessionState.id, workspaceRoot);
|
|
119
122
|
}
|
|
120
123
|
inputHandler.stop();
|
|
@@ -377,6 +380,12 @@ export async function executeSingleTurn(workspaceRoot, userInput, chat, inputHan
|
|
|
377
380
|
}
|
|
378
381
|
// Print Usage Stats
|
|
379
382
|
const usage = getAndResetTurnUsage();
|
|
383
|
+
chatSessionState.modelUsageCounts = chatSessionState.modelUsageCounts || {};
|
|
384
|
+
if (usage.modelsUsed) {
|
|
385
|
+
for (const [m, count] of Object.entries(usage.modelsUsed)) {
|
|
386
|
+
chatSessionState.modelUsageCounts[m] = (chatSessionState.modelUsageCounts[m] || 0) + count;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
380
389
|
chatSessionState.previousUsageMetadata = chatSessionState.latestUsageMetadata;
|
|
381
390
|
chatSessionState.latestUsageMetadata = usage;
|
|
382
391
|
chatSessionState.totalTokens += usage.totalTokenCount;
|
|
@@ -433,6 +442,7 @@ export async function executeSingleTurn(workspaceRoot, userInput, chat, inputHan
|
|
|
433
442
|
subAgents: isSubAgentsEnabled(),
|
|
434
443
|
latestUsageMetadata: chatSessionState.latestUsageMetadata,
|
|
435
444
|
previousUsageMetadata: chatSessionState.previousUsageMetadata,
|
|
445
|
+
modelUsageCounts: chatSessionState.modelUsageCounts,
|
|
436
446
|
})
|
|
437
447
|
.catch((e) => debugLog('Failed to auto-save session: ' + e));
|
|
438
448
|
}
|
|
@@ -511,6 +521,12 @@ export async function executeSingleTurn(workspaceRoot, userInput, chat, inputHan
|
|
|
511
521
|
changeLogger.markComplete();
|
|
512
522
|
}
|
|
513
523
|
if (usage) {
|
|
524
|
+
chatSessionState.modelUsageCounts = chatSessionState.modelUsageCounts || {};
|
|
525
|
+
if (usage.modelsUsed) {
|
|
526
|
+
for (const [m, count] of Object.entries(usage.modelsUsed)) {
|
|
527
|
+
chatSessionState.modelUsageCounts[m] = (chatSessionState.modelUsageCounts[m] || 0) + count;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
514
530
|
chatSessionState.previousUsageMetadata = chatSessionState.latestUsageMetadata;
|
|
515
531
|
chatSessionState.latestUsageMetadata = usage;
|
|
516
532
|
chatSessionState.totalTokens += usage.totalTokenCount || 0;
|
|
@@ -541,6 +557,7 @@ export async function executeSingleTurn(workspaceRoot, userInput, chat, inputHan
|
|
|
541
557
|
subAgents: isSubAgentsEnabled(),
|
|
542
558
|
latestUsageMetadata: chatSessionState.latestUsageMetadata,
|
|
543
559
|
previousUsageMetadata: chatSessionState.previousUsageMetadata,
|
|
560
|
+
modelUsageCounts: chatSessionState.modelUsageCounts,
|
|
544
561
|
});
|
|
545
562
|
}
|
|
546
563
|
catch (e) {
|
|
@@ -564,6 +581,7 @@ export async function executeSingleTurn(workspaceRoot, userInput, chat, inputHan
|
|
|
564
581
|
subAgents: isSubAgentsEnabled(),
|
|
565
582
|
latestUsageMetadata: chatSessionState.latestUsageMetadata,
|
|
566
583
|
previousUsageMetadata: chatSessionState.previousUsageMetadata,
|
|
584
|
+
modelUsageCounts: chatSessionState.modelUsageCounts,
|
|
567
585
|
})
|
|
568
586
|
.catch((e) => debugLog('Failed to auto-save session: ' + e));
|
|
569
587
|
}
|
|
@@ -35,6 +35,8 @@ export interface ChatSessionData {
|
|
|
35
35
|
latestUsageMetadata?: any;
|
|
36
36
|
/** Optional metadata about the token usage from the turn prior to the last turn. */
|
|
37
37
|
previousUsageMetadata?: any;
|
|
38
|
+
/** Optional map tracking the number of turns each model was used during the session. */
|
|
39
|
+
modelUsageCounts?: Record<string, number>;
|
|
38
40
|
}
|
|
39
41
|
/**
|
|
40
42
|
* Service responsible for managing the persistence, retrieval, and deletion of chat session histories.
|
|
@@ -21,6 +21,7 @@ export declare function getAndResetTurnUsage(): {
|
|
|
21
21
|
totalTokenCount: number;
|
|
22
22
|
creditsUsed: number;
|
|
23
23
|
remainingBalance: number | undefined;
|
|
24
|
+
modelsUsed: Record<string, number>;
|
|
24
25
|
};
|
|
25
26
|
export declare function peekTurnUsage(): {
|
|
26
27
|
promptTokens: number;
|
|
@@ -29,6 +30,7 @@ export declare function peekTurnUsage(): {
|
|
|
29
30
|
totalTokenCount: number;
|
|
30
31
|
creditsUsed: number;
|
|
31
32
|
remainingBalance: number | undefined;
|
|
33
|
+
modelsUsed: Record<string, number>;
|
|
32
34
|
};
|
|
33
35
|
/**
|
|
34
36
|
* Client service interacting directly with the serverless Gemini proxy endpoint.
|
|
@@ -39,7 +39,8 @@ let globalSessionAccumulatedUsage = {
|
|
|
39
39
|
cachedTokens: 0,
|
|
40
40
|
totalTokenCount: 0,
|
|
41
41
|
creditsUsed: 0,
|
|
42
|
-
remainingBalance: undefined
|
|
42
|
+
remainingBalance: undefined,
|
|
43
|
+
modelsUsed: {}
|
|
43
44
|
};
|
|
44
45
|
export function getAndResetTurnUsage() {
|
|
45
46
|
const current = { ...globalSessionAccumulatedUsage };
|
|
@@ -49,7 +50,8 @@ export function getAndResetTurnUsage() {
|
|
|
49
50
|
cachedTokens: 0,
|
|
50
51
|
totalTokenCount: 0,
|
|
51
52
|
creditsUsed: 0,
|
|
52
|
-
remainingBalance: undefined
|
|
53
|
+
remainingBalance: undefined,
|
|
54
|
+
modelsUsed: {}
|
|
53
55
|
};
|
|
54
56
|
return current;
|
|
55
57
|
}
|
|
@@ -190,6 +192,7 @@ export class ProxyClient {
|
|
|
190
192
|
if (data.usage.remainingBalance !== undefined) {
|
|
191
193
|
globalSessionAccumulatedUsage.remainingBalance = data.usage.remainingBalance;
|
|
192
194
|
}
|
|
195
|
+
globalSessionAccumulatedUsage.modelsUsed[modelName] = (globalSessionAccumulatedUsage.modelsUsed[modelName] || 0) + 1;
|
|
193
196
|
}
|
|
194
197
|
if (data.groundingMetadata) {
|
|
195
198
|
groundingMetadata = data.groundingMetadata;
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED