@serjm/deepseek-code 0.3.1 → 0.3.2
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/api/index.d.ts +4 -4
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +17 -5
- package/dist/api/index.js.map +1 -1
- package/dist/commands/index.js +58 -58
- package/dist/commands/index.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +4 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/core/agent-loop.d.ts +1 -0
- package/dist/core/agent-loop.d.ts.map +1 -1
- package/dist/core/agent-loop.js +8 -6
- package/dist/core/agent-loop.js.map +1 -1
- package/dist/core/i18n.js +9 -9
- package/dist/core/i18n.js.map +1 -1
- package/dist/core/metrics.d.ts +10 -0
- package/dist/core/metrics.d.ts.map +1 -1
- package/dist/core/metrics.js +39 -4
- package/dist/core/metrics.js.map +1 -1
- package/dist/ui/activity-cards.js +9 -9
- package/dist/ui/activity-cards.js.map +1 -1
- package/dist/ui/app.js +14 -14
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/chat-view.js +2 -2
- package/dist/ui/chat-view.js.map +1 -1
- package/dist/ui/markdown-view.d.ts +9 -0
- package/dist/ui/markdown-view.d.ts.map +1 -1
- package/dist/ui/markdown-view.js +70 -34
- package/dist/ui/markdown-view.js.map +1 -1
- package/dist/ui/reasoning-view.js +1 -1
- package/dist/ui/reasoning-view.js.map +1 -1
- package/dist/ui/results-panel.js +1 -1
- package/dist/ui/results-panel.js.map +1 -1
- package/dist/ui/setup-wizard.js +5 -5
- package/dist/ui/setup-wizard.js.map +1 -1
- package/dist/ui/status-bar.js +1 -1
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/ui/tool-activity-card.js +9 -9
- package/dist/ui/tool-activity-card.js.map +1 -1
- package/dist/ui/tool-call-view.js +7 -7
- package/dist/ui/tool-call-view.js.map +1 -1
- package/package.json +1 -1
package/dist/api/index.d.ts
CHANGED
|
@@ -32,7 +32,10 @@ export interface StreamChunk {
|
|
|
32
32
|
toolCallId?: string;
|
|
33
33
|
usage?: {
|
|
34
34
|
input: number;
|
|
35
|
+
cacheHitInput: number;
|
|
36
|
+
cacheMissInput: number;
|
|
35
37
|
output: number;
|
|
38
|
+
reasoningOutput: number;
|
|
36
39
|
total: number;
|
|
37
40
|
};
|
|
38
41
|
}
|
|
@@ -59,10 +62,7 @@ export declare class DeepSeekAPI {
|
|
|
59
62
|
chat(messages: ChatMessage[], tools?: OpenAITool[]): Promise<{
|
|
60
63
|
content: string;
|
|
61
64
|
toolCalls?: ToolCallMessage['tool_calls'];
|
|
62
|
-
usage?:
|
|
63
|
-
input: number;
|
|
64
|
-
output: number;
|
|
65
|
-
};
|
|
65
|
+
usage?: StreamChunk['usage'];
|
|
66
66
|
}>;
|
|
67
67
|
/** Validate API key by making a minimal models list request */
|
|
68
68
|
validateKey(): Promise<{
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;CACpD;AA8BD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAQ;gBAEf,MAAM,EAAE,cAAc;IAS3B,UAAU,CAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,EAAE,GACnB,cAAc,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;CACpD;AA8BD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAQ;gBAEf,MAAM,EAAE,cAAc;IAS3B,UAAU,CAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,EAAE,GACnB,cAAc,CAAC,WAAW,CAAC;IA2I9B;;;OAGG;IACG,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,EAAE,GACnB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAmDxG,+DAA+D;IACzD,WAAW,IAAK,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBjE;;OAEG;IACG,YAAY,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAOrD"}
|
package/dist/api/index.js
CHANGED
|
@@ -69,13 +69,17 @@ export class DeepSeekAPI {
|
|
|
69
69
|
resetChunkTimer();
|
|
70
70
|
// Usage chunk (last chunk with stream_options.include_usage)
|
|
71
71
|
if (chunk.usage) {
|
|
72
|
+
const usage = chunk.usage;
|
|
72
73
|
yield {
|
|
73
74
|
type: 'usage',
|
|
74
75
|
content: '',
|
|
75
76
|
usage: {
|
|
76
|
-
input:
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
input: usage.prompt_tokens ?? 0,
|
|
78
|
+
cacheHitInput: usage.prompt_cache_hit_tokens ?? 0,
|
|
79
|
+
cacheMissInput: usage.prompt_cache_miss_tokens ?? 0,
|
|
80
|
+
output: usage.completion_tokens ?? 0,
|
|
81
|
+
reasoningOutput: usage.completion_tokens_details?.reasoning_tokens ?? 0,
|
|
82
|
+
total: usage.total_tokens ?? 0,
|
|
79
83
|
},
|
|
80
84
|
};
|
|
81
85
|
continue;
|
|
@@ -179,10 +183,18 @@ export class DeepSeekAPI {
|
|
|
179
183
|
})),
|
|
180
184
|
};
|
|
181
185
|
}
|
|
186
|
+
const usage = response.usage;
|
|
182
187
|
return {
|
|
183
188
|
content: message?.content ?? '',
|
|
184
|
-
usage:
|
|
185
|
-
? {
|
|
189
|
+
usage: usage
|
|
190
|
+
? {
|
|
191
|
+
input: usage.prompt_tokens ?? 0,
|
|
192
|
+
cacheHitInput: usage.prompt_cache_hit_tokens ?? 0,
|
|
193
|
+
cacheMissInput: usage.prompt_cache_miss_tokens ?? 0,
|
|
194
|
+
output: usage.completion_tokens ?? 0,
|
|
195
|
+
reasoningOutput: usage.completion_tokens_details?.reasoning_tokens ?? 0,
|
|
196
|
+
total: usage.total_tokens ?? 0,
|
|
197
|
+
}
|
|
186
198
|
: undefined,
|
|
187
199
|
};
|
|
188
200
|
}
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.js
CHANGED
|
@@ -90,7 +90,7 @@ async function cmdRemember(ctx, input) {
|
|
|
90
90
|
});
|
|
91
91
|
ctx.setMessages(prev => [...prev, {
|
|
92
92
|
role: 'assistant',
|
|
93
|
-
content:
|
|
93
|
+
content: `[ok] Saved to memory: "${text.slice(0, 100)}${text.length > 100 ? '...' : ''}"`,
|
|
94
94
|
}]);
|
|
95
95
|
return true;
|
|
96
96
|
}
|
|
@@ -116,7 +116,7 @@ async function cmdForget(ctx, input) {
|
|
|
116
116
|
}
|
|
117
117
|
ctx.setMessages(prev => [...prev, {
|
|
118
118
|
role: 'assistant',
|
|
119
|
-
content:
|
|
119
|
+
content: `[ok] Deleted ${results.length} memory/memories matching: "${query}"`,
|
|
120
120
|
}]);
|
|
121
121
|
return true;
|
|
122
122
|
}
|
|
@@ -132,7 +132,7 @@ async function cmdMemory(ctx) {
|
|
|
132
132
|
const memoryList = memories.map((m, i) => `${i + 1}. **${m.name}** — ${m.description}`).join('\n');
|
|
133
133
|
ctx.setMessages(prev => [...prev, {
|
|
134
134
|
role: 'assistant',
|
|
135
|
-
content:
|
|
135
|
+
content: `**Memories** (${memories.length}):\n\n${memoryList}`,
|
|
136
136
|
}]);
|
|
137
137
|
return true;
|
|
138
138
|
}
|
|
@@ -157,7 +157,7 @@ async function cmdCompress(ctx) {
|
|
|
157
157
|
const systemMsg = ctx.messages.find(m => m.role === 'system');
|
|
158
158
|
ctx.setMessages([
|
|
159
159
|
...(systemMsg ? [systemMsg] : []),
|
|
160
|
-
{ role: 'assistant', content:
|
|
160
|
+
{ role: 'assistant', content: `**Context Compressed**\n\nOriginal: ${msgCount} messages (~${(totalLen / 1024).toFixed(1)}KB)\n\n**Summary:**\n${summary}` },
|
|
161
161
|
]);
|
|
162
162
|
}
|
|
163
163
|
catch {
|
|
@@ -188,7 +188,7 @@ async function cmdCheckpoint(ctx, input) {
|
|
|
188
188
|
}
|
|
189
189
|
ctx.setMessages(prev => [...prev, {
|
|
190
190
|
role: 'assistant',
|
|
191
|
-
content:
|
|
191
|
+
content: `[ok] Checkpoint created: **${cp.id}**\nFiles: ${cp.files.length > 0 ? cp.files.join(', ') : '(no changes)'}`,
|
|
192
192
|
}]);
|
|
193
193
|
return true;
|
|
194
194
|
}
|
|
@@ -206,7 +206,7 @@ async function cmdRestore(ctx, input) {
|
|
|
206
206
|
const list = checkpoints.slice(0, 10).map((cp, i) => `${i + 1}. **${cp.id}** — ${cp.message} (${new Date(cp.timestamp).toLocaleString()})`).join('\n');
|
|
207
207
|
ctx.setMessages(prev => [...prev, {
|
|
208
208
|
role: 'assistant',
|
|
209
|
-
content:
|
|
209
|
+
content: `**Checkpoints:**\n${list}\n\nUse \`/restore <id>\` to restore.`,
|
|
210
210
|
}]);
|
|
211
211
|
return true;
|
|
212
212
|
}
|
|
@@ -216,14 +216,14 @@ async function cmdRestore(ctx, input) {
|
|
|
216
216
|
ctx.setMessages(prev => [...prev, {
|
|
217
217
|
role: 'assistant',
|
|
218
218
|
content: restoredMessages
|
|
219
|
-
?
|
|
220
|
-
:
|
|
219
|
+
? `[ok] Restored checkpoint: ${arg}`
|
|
220
|
+
: `[err] Could not restore checkpoint: ${arg}`,
|
|
221
221
|
}]);
|
|
222
222
|
}
|
|
223
223
|
catch (err) {
|
|
224
224
|
ctx.setMessages(prev => [...prev, {
|
|
225
225
|
role: 'assistant',
|
|
226
|
-
content:
|
|
226
|
+
content: `[err] Restore failed: ${err.message}`,
|
|
227
227
|
}]);
|
|
228
228
|
}
|
|
229
229
|
ctx.setStatusText('Ready');
|
|
@@ -261,13 +261,13 @@ async function cmdMcp(ctx, input) {
|
|
|
261
261
|
await server.connect();
|
|
262
262
|
ctx.setMessages(prev => [...prev, {
|
|
263
263
|
role: 'assistant',
|
|
264
|
-
content:
|
|
264
|
+
content: `[ok] Connected to MCP server: ${name} (${server.tools.length} tools)`,
|
|
265
265
|
}]);
|
|
266
266
|
}
|
|
267
267
|
catch (err) {
|
|
268
268
|
ctx.setMessages(prev => [...prev, {
|
|
269
269
|
role: 'assistant',
|
|
270
|
-
content:
|
|
270
|
+
content: `[err] MCP connection failed: ${err.message}`,
|
|
271
271
|
}]);
|
|
272
272
|
}
|
|
273
273
|
}
|
|
@@ -292,7 +292,7 @@ async function cmdSkills(ctx, input) {
|
|
|
292
292
|
}
|
|
293
293
|
ctx.setMessages(prev => [...prev, {
|
|
294
294
|
role: 'assistant',
|
|
295
|
-
content:
|
|
295
|
+
content: `**Skill: ${skill.name}**\n\n${skill.description || ''}`,
|
|
296
296
|
}]);
|
|
297
297
|
}
|
|
298
298
|
else {
|
|
@@ -302,7 +302,7 @@ async function cmdSkills(ctx, input) {
|
|
|
302
302
|
: skills.map(s => `- **${s.name}**: ${s.description}`).join('\n');
|
|
303
303
|
ctx.setMessages(prev => [...prev, {
|
|
304
304
|
role: 'assistant',
|
|
305
|
-
content:
|
|
305
|
+
content: `**Available Skills**\n\n${list}`,
|
|
306
306
|
}]);
|
|
307
307
|
}
|
|
308
308
|
return true;
|
|
@@ -337,13 +337,13 @@ async function cmdReview(ctx, input) {
|
|
|
337
337
|
options.autoFix = true;
|
|
338
338
|
}
|
|
339
339
|
ctx.setStatusText('Reviewing code...');
|
|
340
|
-
ctx.setMessages(prev => [...prev, { role: 'assistant', content: '
|
|
340
|
+
ctx.setMessages(prev => [...prev, { role: 'assistant', content: 'Running code review...' }]);
|
|
341
341
|
try {
|
|
342
342
|
const result = await reviewCode(ctx.config, options);
|
|
343
343
|
const report = formatReviewReport(result);
|
|
344
344
|
ctx.setMessages(prev => [...prev, {
|
|
345
345
|
role: 'assistant',
|
|
346
|
-
content: `**Code Review Results**\n\nScore: **${result.score}/100**\nIssues: ${result.issues.length}\nDuration: ${(result.durationMs / 1000).toFixed(1)}s\n\n${report || '
|
|
346
|
+
content: `**Code Review Results**\n\nScore: **${result.score}/100**\nIssues: ${result.issues.length}\nDuration: ${(result.durationMs / 1000).toFixed(1)}s\n\n${report || '[ok] No issues found.'}\n\n${result.summary}`,
|
|
347
347
|
}]);
|
|
348
348
|
}
|
|
349
349
|
catch (err) {
|
|
@@ -390,8 +390,8 @@ async function cmdSandbox(ctx, input) {
|
|
|
390
390
|
ctx.setMessages(prev => [...prev, {
|
|
391
391
|
role: 'assistant',
|
|
392
392
|
content: result.exitCode === 0
|
|
393
|
-
?
|
|
394
|
-
:
|
|
393
|
+
? `[ok] **Sandbox Result** (${(result.durationMs / 1000).toFixed(1)}s, exit: ${result.exitCode})\n\n${result.stdout.slice(0, 2000)}${result.stderr ? `\n\n**Stderr:**\n${result.stderr.slice(0, 1000)}` : ''}`
|
|
394
|
+
: `[err] **Sandbox Error** (exit: ${result.exitCode})\n\n${result.stderr.slice(0, 2000)}`,
|
|
395
395
|
}]);
|
|
396
396
|
}
|
|
397
397
|
catch (err) {
|
|
@@ -417,14 +417,14 @@ async function cmdGit(ctx, input) {
|
|
|
417
417
|
ctx.setMessages(prev => [...prev, {
|
|
418
418
|
role: 'assistant',
|
|
419
419
|
content: result.success
|
|
420
|
-
?
|
|
421
|
-
:
|
|
420
|
+
? `[ok] Committed: \`${msg}\` (${result.hash?.slice(0, 7)})`
|
|
421
|
+
: `[err] Commit failed: ${result.error}`,
|
|
422
422
|
}]);
|
|
423
423
|
}
|
|
424
424
|
catch (err) {
|
|
425
425
|
ctx.setMessages(prev => [...prev, {
|
|
426
426
|
role: 'assistant',
|
|
427
|
-
content:
|
|
427
|
+
content: `[err] Commit failed: ${err.message}`,
|
|
428
428
|
}]);
|
|
429
429
|
}
|
|
430
430
|
ctx.setStatusText('Ready');
|
|
@@ -444,14 +444,14 @@ async function cmdGit(ctx, input) {
|
|
|
444
444
|
ctx.setMessages(prev => [...prev, {
|
|
445
445
|
role: 'assistant',
|
|
446
446
|
content: result.success
|
|
447
|
-
?
|
|
448
|
-
:
|
|
447
|
+
? `Switched to branch: ${name}`
|
|
448
|
+
: `[err] ${result.error}`,
|
|
449
449
|
}]);
|
|
450
450
|
}
|
|
451
451
|
catch (err) {
|
|
452
452
|
ctx.setMessages(prev => [...prev, {
|
|
453
453
|
role: 'assistant',
|
|
454
|
-
content:
|
|
454
|
+
content: `[err] Branch failed: ${err.message}`,
|
|
455
455
|
}]);
|
|
456
456
|
}
|
|
457
457
|
return true;
|
|
@@ -467,7 +467,7 @@ async function cmdGit(ctx, input) {
|
|
|
467
467
|
catch (err) {
|
|
468
468
|
ctx.setMessages(prev => [...prev, {
|
|
469
469
|
role: 'assistant',
|
|
470
|
-
content:
|
|
470
|
+
content: `[err] Diff failed: ${err.message}`,
|
|
471
471
|
}]);
|
|
472
472
|
}
|
|
473
473
|
return true;
|
|
@@ -484,7 +484,7 @@ async function cmdGit(ctx, input) {
|
|
|
484
484
|
catch (err) {
|
|
485
485
|
ctx.setMessages(prev => [...prev, {
|
|
486
486
|
role: 'assistant',
|
|
487
|
-
content:
|
|
487
|
+
content: `[err] Status failed: ${err.message}`,
|
|
488
488
|
}]);
|
|
489
489
|
}
|
|
490
490
|
return true;
|
|
@@ -519,7 +519,7 @@ async function cmdLoop(ctx, input) {
|
|
|
519
519
|
scheduler.clearAll();
|
|
520
520
|
ctx.setMessages(prev => [...prev, {
|
|
521
521
|
role: 'assistant',
|
|
522
|
-
content: '
|
|
522
|
+
content: '[ok] All tasks cleared.',
|
|
523
523
|
}]);
|
|
524
524
|
}
|
|
525
525
|
else if (sub) {
|
|
@@ -537,7 +537,7 @@ async function cmdLoop(ctx, input) {
|
|
|
537
537
|
const task = scheduler.addTask(prompt, intervalMs);
|
|
538
538
|
ctx.setMessages(prev => [...prev, {
|
|
539
539
|
role: 'assistant',
|
|
540
|
-
content:
|
|
540
|
+
content: `[ok] Task scheduled: "${prompt}" every ${intervalStr} (ID: ${task.id})`,
|
|
541
541
|
}]);
|
|
542
542
|
}
|
|
543
543
|
else {
|
|
@@ -559,7 +559,7 @@ async function cmdStats(ctx) {
|
|
|
559
559
|
const cost = metrics ? metrics.estimatedCostUSD(ctx.config.model) : 0;
|
|
560
560
|
let content = `**Session Statistics:**\n- Messages: ${ctx.messages.length}\n- MCP Tools: ${mcpTools}\n- Skills: ${skills}\n- Subagents: ${agents}\n- Scheduled Tasks: ${tasks}\n- Extensions: ${exts}\n- Theme: ${themeManager.theme.name}\n- Language: ${i18n.getLocale()}\n- Approval Mode: ${ctx.approvalMode}`;
|
|
561
561
|
if (usage && usage.total > 0) {
|
|
562
|
-
content += `\n\n**Token Usage:**\n- Input: ${usage.input.toLocaleString()} tokens\n- Output: ${usage.output.toLocaleString()} tokens\n- Total: ${usage.total.toLocaleString()} tokens\n- Est. Cost: $${cost.toFixed(4)}`;
|
|
562
|
+
content += `\n\n**Token Usage:**\n- Input: ${usage.input.toLocaleString()} tokens\n- Cache hit input: ${usage.cacheHitInput.toLocaleString()} tokens\n- Cache miss input: ${usage.cacheMissInput.toLocaleString()} tokens\n- Output: ${usage.output.toLocaleString()} tokens\n- Reasoning output: ${usage.reasoningOutput.toLocaleString()} tokens\n- Total: ${usage.total.toLocaleString()} tokens\n- Est. Cost: $${cost.toFixed(4)}`;
|
|
563
563
|
}
|
|
564
564
|
ctx.setMessages(prev => [...prev, { role: 'assistant', content }]);
|
|
565
565
|
return true;
|
|
@@ -582,11 +582,11 @@ async function cmdTheme(ctx, input) {
|
|
|
582
582
|
}
|
|
583
583
|
const success = themeManager.setTheme(themeName);
|
|
584
584
|
if (success) {
|
|
585
|
-
ctx.addServiceNotice?.(
|
|
585
|
+
ctx.addServiceNotice?.(`[theme] Тема изменена: ${themeName}`);
|
|
586
586
|
ctx.setStatusText(`Тема: ${themeName}`);
|
|
587
587
|
}
|
|
588
588
|
else {
|
|
589
|
-
ctx.addServiceNotice?.(
|
|
589
|
+
ctx.addServiceNotice?.(`[err] Тема "${themeName}" не найдена`);
|
|
590
590
|
}
|
|
591
591
|
return true;
|
|
592
592
|
}
|
|
@@ -597,7 +597,7 @@ async function cmdModel(ctx, input) {
|
|
|
597
597
|
ctx.onModelPicker();
|
|
598
598
|
}
|
|
599
599
|
else {
|
|
600
|
-
const list = DEEPSEEK_MODELS.map(m => `- **${m.label}** (\`${m.id}\`): ${m.description}${m.id === ctx.config.model ? '
|
|
600
|
+
const list = DEEPSEEK_MODELS.map(m => `- **${m.label}** (\`${m.id}\`): ${m.description}${m.id === ctx.config.model ? ' [current]' : ''}`).join('\n');
|
|
601
601
|
ctx.setMessages(prev => [...prev, {
|
|
602
602
|
role: 'assistant',
|
|
603
603
|
content: `**Available Models:**\n${list}\n\nCurrent: **${ctx.config.model}**\nUse \`/model <id>\` to switch.`,
|
|
@@ -611,7 +611,7 @@ async function cmdModel(ctx, input) {
|
|
|
611
611
|
const { saveConfig } = await import('../config/loader.js');
|
|
612
612
|
await saveConfig({ ...ctx.config, model: targetId });
|
|
613
613
|
const label = found?.label ?? targetId;
|
|
614
|
-
ctx.addServiceNotice?.(
|
|
614
|
+
ctx.addServiceNotice?.(`[model] Модель: ${label} (${targetId})`);
|
|
615
615
|
return true;
|
|
616
616
|
}
|
|
617
617
|
async function cmdLang(ctx, input) {
|
|
@@ -625,7 +625,7 @@ async function cmdLang(ctx, input) {
|
|
|
625
625
|
}
|
|
626
626
|
i18n.setLocale(code);
|
|
627
627
|
await saveConfig({ ...ctx.config, language: code });
|
|
628
|
-
ctx.addServiceNotice?.(
|
|
628
|
+
ctx.addServiceNotice?.(`[lang] Язык изменён: ${code}`);
|
|
629
629
|
return true;
|
|
630
630
|
}
|
|
631
631
|
async function cmdExtensions(ctx) {
|
|
@@ -651,7 +651,7 @@ async function cmdFollowup(ctx) {
|
|
|
651
651
|
const suggestions = generateFollowups(lastContent);
|
|
652
652
|
ctx.setMessages(prev => [...prev, {
|
|
653
653
|
role: 'assistant',
|
|
654
|
-
content:
|
|
654
|
+
content: `**Follow-up suggestions:**\n${suggestions.map((s, i) => `${i + 1}. ${s}`).join('\n')}`,
|
|
655
655
|
}]);
|
|
656
656
|
return true;
|
|
657
657
|
}
|
|
@@ -673,7 +673,7 @@ async function cmdLogs(ctx) {
|
|
|
673
673
|
const fileList = files.map((f, i) => `${i + 1}. ${f}`).join('\n');
|
|
674
674
|
ctx.setMessages(prev => [...prev, {
|
|
675
675
|
role: 'assistant',
|
|
676
|
-
content:
|
|
676
|
+
content: `**Recent Logs** (${files.length} files):\n\n${fileList}\n\n**Tail of ${files[0]}:**\n\`\`\`\n${latestLog}\n\`\`\``,
|
|
677
677
|
}]);
|
|
678
678
|
}
|
|
679
679
|
catch {
|
|
@@ -697,7 +697,7 @@ async function cmdTools(ctx) {
|
|
|
697
697
|
const modeToolNames = new Set(modeTools.map(t => t.tool.name));
|
|
698
698
|
const toolLines = allTools.map(def => {
|
|
699
699
|
const t = def.tool;
|
|
700
|
-
const inMode = modeToolNames.has(t.name) ? '
|
|
700
|
+
const inMode = modeToolNames.has(t.name) ? '[on]' : '[off]';
|
|
701
701
|
let approvalLabel;
|
|
702
702
|
if (def.approval === 'never') {
|
|
703
703
|
approvalLabel = 'read-only';
|
|
@@ -716,7 +716,7 @@ async function cmdTools(ctx) {
|
|
|
716
716
|
'',
|
|
717
717
|
`**Текущий режим:** \`${ctx.approvalMode}\``,
|
|
718
718
|
...(ctx.approvalMode === 'plan'
|
|
719
|
-
? ['>
|
|
719
|
+
? ['> [warn] В PLAN mode доступны только read-only инструменты. Для записи используйте `/setup` и смените режим на default/auto-edit/turbo.']
|
|
720
720
|
: []),
|
|
721
721
|
].filter(Boolean).join('\n');
|
|
722
722
|
ctx.setMessages(prev => [...prev, {
|
|
@@ -739,7 +739,7 @@ async function cmdBrowserTest(ctx, input) {
|
|
|
739
739
|
else {
|
|
740
740
|
headless = false; // default: headed (видимое окно)
|
|
741
741
|
}
|
|
742
|
-
ctx.setStatusText('
|
|
742
|
+
ctx.setStatusText('Запуск browser test...');
|
|
743
743
|
// Сохраняем текущий режим Chrome, чтобы восстановить после теста
|
|
744
744
|
const prevState = chromeManager.getState();
|
|
745
745
|
const prevHeadless = prevState.headless;
|
|
@@ -753,7 +753,7 @@ async function cmdBrowserTest(ctx, input) {
|
|
|
753
753
|
catch (err) {
|
|
754
754
|
ctx.setMessages(prev => [...prev, {
|
|
755
755
|
role: 'assistant',
|
|
756
|
-
content: `##
|
|
756
|
+
content: `## Browser Test Error\n\n\`\`\`\n${String(err)}\n\`\`\``,
|
|
757
757
|
}]);
|
|
758
758
|
}
|
|
759
759
|
finally {
|
|
@@ -771,21 +771,21 @@ async function cmdBrowserRealTest(ctx, input) {
|
|
|
771
771
|
const headless = parts.includes('--headless');
|
|
772
772
|
const siteArgs = parts.filter(p => !p.startsWith('--'));
|
|
773
773
|
const sites = siteArgs.length > 0 ? siteArgs : undefined;
|
|
774
|
-
ctx.setStatusText('
|
|
774
|
+
ctx.setStatusText('Real site smoke-test...');
|
|
775
775
|
const prevState = chromeManager.getState();
|
|
776
776
|
try {
|
|
777
777
|
const report = await browserRealTest({ sites, headless });
|
|
778
778
|
if (saveReport) {
|
|
779
779
|
const { writeFile } = await import('node:fs/promises');
|
|
780
780
|
await writeFile('BROWSER_REAL_TEST_REPORT.md', report, 'utf8');
|
|
781
|
-
ctx.addServiceNotice?.('
|
|
781
|
+
ctx.addServiceNotice?.('Report saved: BROWSER_REAL_TEST_REPORT.md');
|
|
782
782
|
}
|
|
783
783
|
ctx.setMessages(prev => [...prev, { role: 'assistant', content: report }]);
|
|
784
784
|
}
|
|
785
785
|
catch (err) {
|
|
786
786
|
ctx.setMessages(prev => [...prev, {
|
|
787
787
|
role: 'assistant',
|
|
788
|
-
content: `##
|
|
788
|
+
content: `## browser-real-test error\n\`\`\`\n${String(err)}\n\`\`\``,
|
|
789
789
|
}]);
|
|
790
790
|
}
|
|
791
791
|
finally {
|
|
@@ -805,7 +805,7 @@ async function cmdChrome(ctx, input) {
|
|
|
805
805
|
const modeStr = state.connected
|
|
806
806
|
? (state.headless ? 'headless (фоновый)' : 'headed (видимое окно)')
|
|
807
807
|
: 'не запущен';
|
|
808
|
-
ctx.addServiceNotice?.(
|
|
808
|
+
ctx.addServiceNotice?.(`Chrome: ${modeStr}${state.connected ? ` | PID: ${state.managedProcessPid ?? '—'} | Порт: ${state.debugPort}` : ''}`);
|
|
809
809
|
return true;
|
|
810
810
|
}
|
|
811
811
|
// Determine desired mode
|
|
@@ -817,7 +817,7 @@ async function cmdChrome(ctx, input) {
|
|
|
817
817
|
desiredHeadless = false;
|
|
818
818
|
}
|
|
819
819
|
else {
|
|
820
|
-
ctx.addServiceNotice?.('
|
|
820
|
+
ctx.addServiceNotice?.('[err] /chrome: используйте --headed, --headless или без флага для статуса');
|
|
821
821
|
return true;
|
|
822
822
|
}
|
|
823
823
|
try {
|
|
@@ -827,10 +827,10 @@ async function cmdChrome(ctx, input) {
|
|
|
827
827
|
// Save to config
|
|
828
828
|
ctx.config.chromeHeadless = state.headless;
|
|
829
829
|
saveConfig({ chromeHeadless: state.headless }).catch(() => { });
|
|
830
|
-
ctx.addServiceNotice?.(
|
|
830
|
+
ctx.addServiceNotice?.(`Chrome: ${modeStr} | PID: ${state.managedProcessPid ?? '—'} | Порт: ${state.debugPort}`);
|
|
831
831
|
}
|
|
832
832
|
catch (err) {
|
|
833
|
-
ctx.addServiceNotice?.(
|
|
833
|
+
ctx.addServiceNotice?.(`[err] Chrome: ${String(err)}`);
|
|
834
834
|
}
|
|
835
835
|
return true;
|
|
836
836
|
}
|
|
@@ -839,12 +839,12 @@ async function cmdLastBrowserTest(ctx) {
|
|
|
839
839
|
if (!result) {
|
|
840
840
|
ctx.setMessages(prev => [...prev, {
|
|
841
841
|
role: 'assistant',
|
|
842
|
-
content: '##
|
|
842
|
+
content: '## Последний browser test\n\nНет сохранённого отчёта последнего теста. Запустите `/browser-test` сначала.',
|
|
843
843
|
}]);
|
|
844
844
|
return true;
|
|
845
845
|
}
|
|
846
846
|
const lines = [
|
|
847
|
-
'##
|
|
847
|
+
'## Последний browser test',
|
|
848
848
|
'',
|
|
849
849
|
`> **Timestamp:** ${result.timestamp}`,
|
|
850
850
|
'> **Источник:** сохранённый structured result (не LLM-реконструкция)',
|
|
@@ -853,7 +853,7 @@ async function cmdLastBrowserTest(ctx) {
|
|
|
853
853
|
'|-----|--------|-------------|',
|
|
854
854
|
];
|
|
855
855
|
for (const step of result.steps) {
|
|
856
|
-
const icon = step.status === 'passed' ? '
|
|
856
|
+
const icon = step.status === 'passed' ? '[ok]' : step.status === 'failed' ? '[err]' : '[skip]';
|
|
857
857
|
const dur = step.durationMs > 0 ? `${step.durationMs}ms` : '—';
|
|
858
858
|
lines.push(`| ${icon} ${step.name} | ${step.status} | ${dur} |`);
|
|
859
859
|
}
|
|
@@ -878,26 +878,26 @@ async function cmdCapabilities(ctx) {
|
|
|
878
878
|
`**Режим:** \`${ctx.approvalMode}\``,
|
|
879
879
|
'',
|
|
880
880
|
'### Чтение и поиск',
|
|
881
|
-
...modeReadTools.map(t => ` -
|
|
881
|
+
...modeReadTools.map(t => ` - [on] \`${t.tool.name}\` — ${t.tool.description}`),
|
|
882
882
|
...readTools
|
|
883
883
|
.filter(t => !modeReadTools.some(mt => mt.tool.name === t.tool.name))
|
|
884
|
-
.map(t => ` -
|
|
884
|
+
.map(t => ` - [off] \`${t.tool.name}\` — заблокирован в PLAN mode`),
|
|
885
885
|
'',
|
|
886
886
|
'### Запись и исполнение',
|
|
887
|
-
...modeWriteTools.map(t => ` -
|
|
887
|
+
...modeWriteTools.map(t => ` - [on] \`${t.tool.name}\` — ${t.tool.description} (${t.approval === 'auto' ? 'авто-подтверждение' : 'требует подтверждения'})`),
|
|
888
888
|
...writeTools
|
|
889
889
|
.filter(t => !modeWriteTools.some(mt => mt.tool.name === t.tool.name))
|
|
890
|
-
.map(t => ` -
|
|
890
|
+
.map(t => ` - [off] \`${t.tool.name}\` — заблокирован в PLAN mode`),
|
|
891
891
|
'',
|
|
892
892
|
];
|
|
893
893
|
if (ctx.approvalMode === 'plan') {
|
|
894
|
-
lines.push('>
|
|
894
|
+
lines.push('> [warn] **Вы в PLAN mode.**', '> У меня есть инструменты write_file и edit, но в этом режиме они отключены.', '> Я могу предложить изменения, но не могу применить их напрямую.', '> Используйте `/setup` и выберите другой режим (default, auto-edit, turbo) для включения записи.', '');
|
|
895
895
|
}
|
|
896
896
|
lines.push('### Дополнительно');
|
|
897
|
-
lines.push(' -
|
|
898
|
-
lines.push(' -
|
|
899
|
-
lines.push(' -
|
|
900
|
-
lines.push(' -
|
|
897
|
+
lines.push(' - **MCP серверы** — подключаемые внешние инструменты');
|
|
898
|
+
lines.push(' - **Расширения** — плагины, добавляющие функциональность');
|
|
899
|
+
lines.push(' - **Навыки (Skills)** — предустановленные сценарии работы');
|
|
900
|
+
lines.push(' - **Под-агенты** — дочерние агенты для параллельных задач');
|
|
901
901
|
ctx.setMessages(prev => [...prev, {
|
|
902
902
|
role: 'assistant',
|
|
903
903
|
content: lines.join('\n'),
|