@serjm/deepseek-code 0.4.5 → 0.4.6
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/CHANGELOG.md +24 -0
- package/dist/api/index.d.ts +2 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +14 -39
- package/dist/api/index.js.map +1 -1
- package/dist/config/defaults.d.ts +9 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +18 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/core/agent-loop.d.ts +16 -5
- package/dist/core/agent-loop.d.ts.map +1 -1
- package/dist/core/agent-loop.js +156 -17
- package/dist/core/agent-loop.js.map +1 -1
- package/dist/core/mcp-tools.d.ts +15 -0
- package/dist/core/mcp-tools.d.ts.map +1 -0
- package/dist/core/mcp-tools.js +94 -0
- package/dist/core/mcp-tools.js.map +1 -0
- package/dist/core/metrics.d.ts +6 -1
- package/dist/core/metrics.d.ts.map +1 -1
- package/dist/core/metrics.js +17 -4
- package/dist/core/metrics.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +83 -68
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/chrome-manager.d.ts.map +1 -1
- package/dist/tools/chrome-manager.js +5 -2
- package/dist/tools/chrome-manager.js.map +1 -1
- package/dist/tools/chrome.d.ts.map +1 -1
- package/dist/tools/chrome.js +8 -3
- package/dist/tools/chrome.js.map +1 -1
- package/dist/tools/process-manager.d.ts +17 -0
- package/dist/tools/process-manager.d.ts.map +1 -0
- package/dist/tools/process-manager.js +94 -0
- package/dist/tools/process-manager.js.map +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +14 -11
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/shell.d.ts +20 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +100 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/types.d.ts +6 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +9 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/ui/app.d.ts.map +1 -1
- package/dist/ui/app.js +12 -38
- package/dist/ui/app.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import net from 'node:net';
|
|
2
|
+
import { platform } from 'node:os';
|
|
3
|
+
import { spawnShellCommand, killProcessTree, killProcessTreeSync } from './shell.js';
|
|
4
|
+
const MAX_BG_OUTPUT = 16 * 1024;
|
|
5
|
+
const registry = new Map();
|
|
6
|
+
let exitHookInstalled = false;
|
|
7
|
+
/** Kill any still-running background processes when the CLI exits (no orphaned dev servers). */
|
|
8
|
+
function ensureExitHook() {
|
|
9
|
+
if (exitHookInstalled)
|
|
10
|
+
return;
|
|
11
|
+
exitHookInstalled = true;
|
|
12
|
+
process.once('exit', () => {
|
|
13
|
+
for (const proc of registry.values()) {
|
|
14
|
+
if (!proc.exited)
|
|
15
|
+
killProcessTreeSync(proc.pid);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** Start a long-running command in the background. Returns its pid (or an error). */
|
|
20
|
+
export function startBackground(command) {
|
|
21
|
+
ensureExitHook();
|
|
22
|
+
const child = spawnShellCommand(command, platform() !== 'win32');
|
|
23
|
+
if (child.pid == null)
|
|
24
|
+
return { pid: null, error: 'Failed to start background process.' };
|
|
25
|
+
const entry = { pid: child.pid, command, child, output: '', exited: false };
|
|
26
|
+
registry.set(child.pid, entry);
|
|
27
|
+
const append = (chunk) => {
|
|
28
|
+
entry.output += chunk;
|
|
29
|
+
if (entry.output.length > MAX_BG_OUTPUT)
|
|
30
|
+
entry.output = entry.output.slice(-MAX_BG_OUTPUT);
|
|
31
|
+
};
|
|
32
|
+
child.stdout?.setEncoding('utf8');
|
|
33
|
+
child.stderr?.setEncoding('utf8');
|
|
34
|
+
child.stdout?.on('data', append);
|
|
35
|
+
child.stderr?.on('data', append);
|
|
36
|
+
child.on('error', (err) => { entry.exited = true; entry.exitInfo = `error: ${err.message}`; });
|
|
37
|
+
child.on('close', (code, signal) => {
|
|
38
|
+
entry.exited = true;
|
|
39
|
+
entry.exitInfo = `exited (code=${code ?? 'null'}${signal ? `, signal=${signal}` : ''})`;
|
|
40
|
+
});
|
|
41
|
+
return { pid: child.pid };
|
|
42
|
+
}
|
|
43
|
+
export function getBackgroundOutput(pid) {
|
|
44
|
+
return registry.get(pid)?.output ?? '';
|
|
45
|
+
}
|
|
46
|
+
export function isBackgroundRunning(pid) {
|
|
47
|
+
const proc = registry.get(pid);
|
|
48
|
+
return !!proc && !proc.exited;
|
|
49
|
+
}
|
|
50
|
+
export function getBackgroundExitInfo(pid) {
|
|
51
|
+
return registry.get(pid)?.exitInfo;
|
|
52
|
+
}
|
|
53
|
+
/** Stop a background process (kills its whole tree) and return its captured output. */
|
|
54
|
+
export function stopBackground(pid) {
|
|
55
|
+
const proc = registry.get(pid);
|
|
56
|
+
if (!proc)
|
|
57
|
+
return { stopped: false, output: '', error: `No background process with pid ${pid}.` };
|
|
58
|
+
if (!proc.exited)
|
|
59
|
+
killProcessTree(proc.child);
|
|
60
|
+
const output = proc.output;
|
|
61
|
+
registry.delete(pid);
|
|
62
|
+
return { stopped: true, output };
|
|
63
|
+
}
|
|
64
|
+
/** Poll a TCP port until it accepts a connection or the timeout elapses. */
|
|
65
|
+
export function waitForPort(port, host, timeoutMs) {
|
|
66
|
+
const deadline = Date.now() + timeoutMs;
|
|
67
|
+
return new Promise((resolve) => {
|
|
68
|
+
const attempt = () => {
|
|
69
|
+
const socket = net.connect({ port, host });
|
|
70
|
+
let settled = false;
|
|
71
|
+
const retryOrFail = () => {
|
|
72
|
+
if (settled)
|
|
73
|
+
return;
|
|
74
|
+
settled = true;
|
|
75
|
+
socket.destroy();
|
|
76
|
+
if (Date.now() >= deadline)
|
|
77
|
+
resolve(false);
|
|
78
|
+
else
|
|
79
|
+
setTimeout(attempt, 300);
|
|
80
|
+
};
|
|
81
|
+
socket.once('connect', () => {
|
|
82
|
+
if (settled)
|
|
83
|
+
return;
|
|
84
|
+
settled = true;
|
|
85
|
+
socket.destroy();
|
|
86
|
+
resolve(true);
|
|
87
|
+
});
|
|
88
|
+
socket.once('error', retryOrFail);
|
|
89
|
+
socket.setTimeout(2000, retryOrFail);
|
|
90
|
+
};
|
|
91
|
+
attempt();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/tools/process-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AA0FvD,eAAO,MAAM,QAAQ,EAAE,IAwEtB,CAAA"}
|
package/dist/tools/read.js
CHANGED
|
@@ -13,14 +13,20 @@ const MIME_TYPES = {
|
|
|
13
13
|
'.pdf': 'application/pdf',
|
|
14
14
|
};
|
|
15
15
|
async function readAsImage(filePath) {
|
|
16
|
-
const buffer = await readFile(filePath); // binary — no encoding
|
|
17
16
|
const ext = extname(filePath).toLowerCase();
|
|
18
17
|
const mime = MIME_TYPES[ext] ?? 'application/octet-stream';
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
// SVG is XML text — return its source so the model can actually read/edit it.
|
|
19
|
+
if (ext === '.svg') {
|
|
20
|
+
const svg = await readFile(filePath, 'utf-8');
|
|
21
|
+
return { success: true, output: svg };
|
|
22
|
+
}
|
|
23
|
+
// Binary raster image: do NOT inline base64 — this model has no vision, and the
|
|
24
|
+
// data URL would bloat the context by megabytes (and historically broke the API
|
|
25
|
+
// when turned into an image_url block). Return metadata only.
|
|
26
|
+
const buffer = await readFile(filePath);
|
|
21
27
|
return {
|
|
22
28
|
success: true,
|
|
23
|
-
output: `[
|
|
29
|
+
output: `[Binary image not shown: ${filePath} — ${buffer.length} bytes, ${mime}. This model cannot view images; use the chrome tool for visual/rendered checks, or read a textual asset instead.]`,
|
|
24
30
|
};
|
|
25
31
|
}
|
|
26
32
|
async function readAsNotebook(filePath) {
|
|
@@ -36,22 +42,19 @@ async function readAsNotebook(filePath) {
|
|
|
36
42
|
}
|
|
37
43
|
async function readAsPdf(filePath) {
|
|
38
44
|
const buffer = await readFile(filePath); // binary
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const dataUrl = `data:${mime};base64,${base64}`;
|
|
42
|
-
// Naive text extraction: collect printable ASCII runs from the binary content
|
|
45
|
+
// Naive text extraction: collect printable ASCII runs from the binary content.
|
|
46
|
+
// We do NOT inline base64 (no vision; it only bloats the context).
|
|
43
47
|
const extracted = extractPrintableRuns(buffer);
|
|
44
48
|
if (extracted.length > 0) {
|
|
45
49
|
const text = extracted.join('\n');
|
|
46
50
|
return {
|
|
47
51
|
success: true,
|
|
48
|
-
output: `[PDF: ${filePath}
|
|
52
|
+
output: `[PDF: ${filePath} — ${buffer.length} bytes]\n\nExtracted text:\n${text}`,
|
|
49
53
|
};
|
|
50
54
|
}
|
|
51
|
-
// Fallback: base64 data URL only
|
|
52
55
|
return {
|
|
53
56
|
success: true,
|
|
54
|
-
output: `[PDF: ${filePath}
|
|
57
|
+
output: `[PDF: ${filePath} — ${buffer.length} bytes. No extractable text; this model cannot view the rendered PDF.]`,
|
|
55
58
|
};
|
|
56
59
|
}
|
|
57
60
|
/** Collect consecutive printable ASCII runs (length >= 4) from a binary buffer */
|
package/dist/tools/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAC5F,MAAM,UAAU,GAA2B;IACzC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;CAC1B,CAAA;AAED,KAAK,UAAU,WAAW,CAAE,QAAgB;IAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ChildProcess } from 'node:child_process';
|
|
2
|
+
export type WindowsShell = 'powershell' | 'cmd';
|
|
3
|
+
/** Resolved (and cached) Windows shell. On non-Windows this is irrelevant. */
|
|
4
|
+
export declare function resolveWindowsShell(): WindowsShell;
|
|
5
|
+
/**
|
|
6
|
+
* Spawn a shell command through the resolved shell for this OS (PowerShell/cmd on
|
|
7
|
+
* Windows, /bin/sh on POSIX). `detached` should be true on POSIX so the whole
|
|
8
|
+
* process group can be killed later. Shared by run_shell_command and the
|
|
9
|
+
* background process manager.
|
|
10
|
+
*/
|
|
11
|
+
export declare function spawnShellCommand(command: string, detached: boolean): ChildProcess;
|
|
12
|
+
/**
|
|
13
|
+
* Kill a child and its whole process tree. A bare `child.kill()` only signals the
|
|
14
|
+
* shell wrapper; on Windows the real command keeps the stdout pipe open (so the
|
|
15
|
+
* `close` event never fires) and on POSIX it is orphaned.
|
|
16
|
+
*/
|
|
17
|
+
export declare function killProcessTree(child: ChildProcess): void;
|
|
18
|
+
/** Synchronous tree kill by pid — for process-exit cleanup of background tasks. */
|
|
19
|
+
export declare function killProcessTreeSync(pid: number): void;
|
|
20
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGxE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,KAAK,CAAA;AA6B/C,8EAA8E;AAC9E,wBAAgB,mBAAmB,IAAK,YAAY,CAInD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,YAAY,CAOnF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAgB1D;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMtD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
2
|
+
import { platform } from 'node:os';
|
|
3
|
+
let cached = null;
|
|
4
|
+
/**
|
|
5
|
+
* Decide which Windows shell `run_shell_command` runs commands through.
|
|
6
|
+
*
|
|
7
|
+
* Default is Windows PowerShell (what the model writes naturally and what ships
|
|
8
|
+
* with every modern Windows), but we gracefully fall back to cmd.exe if
|
|
9
|
+
* PowerShell cannot actually run (locked-down execution policy, stripped image).
|
|
10
|
+
* Override with the DEEPSEEK_CODE_SHELL env var (`cmd` | `powershell`).
|
|
11
|
+
*/
|
|
12
|
+
function detectWindowsShell() {
|
|
13
|
+
const override = (process.env.DEEPSEEK_CODE_SHELL ?? '').trim().toLowerCase();
|
|
14
|
+
if (override === 'cmd')
|
|
15
|
+
return 'cmd';
|
|
16
|
+
if (override === 'powershell' || override === 'pwsh' || override === 'ps')
|
|
17
|
+
return 'powershell';
|
|
18
|
+
try {
|
|
19
|
+
const probe = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', 'exit 0'], {
|
|
20
|
+
timeout: 5000,
|
|
21
|
+
windowsHide: true,
|
|
22
|
+
});
|
|
23
|
+
if (!probe.error && probe.status === 0)
|
|
24
|
+
return 'powershell';
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
/* fall through to cmd */
|
|
28
|
+
}
|
|
29
|
+
return 'cmd';
|
|
30
|
+
}
|
|
31
|
+
/** Resolved (and cached) Windows shell. On non-Windows this is irrelevant. */
|
|
32
|
+
export function resolveWindowsShell() {
|
|
33
|
+
if (platform() !== 'win32')
|
|
34
|
+
return 'cmd';
|
|
35
|
+
if (cached === null)
|
|
36
|
+
cached = detectWindowsShell();
|
|
37
|
+
return cached;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Spawn a shell command through the resolved shell for this OS (PowerShell/cmd on
|
|
41
|
+
* Windows, /bin/sh on POSIX). `detached` should be true on POSIX so the whole
|
|
42
|
+
* process group can be killed later. Shared by run_shell_command and the
|
|
43
|
+
* background process manager.
|
|
44
|
+
*/
|
|
45
|
+
export function spawnShellCommand(command, detached) {
|
|
46
|
+
if (platform() === 'win32') {
|
|
47
|
+
return resolveWindowsShell() === 'powershell'
|
|
48
|
+
? spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', command], { windowsHide: true, detached })
|
|
49
|
+
: spawn(command, { shell: true, windowsHide: true, detached });
|
|
50
|
+
}
|
|
51
|
+
return spawn(command, { shell: true, detached });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Kill a child and its whole process tree. A bare `child.kill()` only signals the
|
|
55
|
+
* shell wrapper; on Windows the real command keeps the stdout pipe open (so the
|
|
56
|
+
* `close` event never fires) and on POSIX it is orphaned.
|
|
57
|
+
*/
|
|
58
|
+
export function killProcessTree(child) {
|
|
59
|
+
const pid = child.pid;
|
|
60
|
+
if (pid == null)
|
|
61
|
+
return;
|
|
62
|
+
if (platform() === 'win32') {
|
|
63
|
+
try {
|
|
64
|
+
spawn('taskkill', ['/pid', String(pid), '/t', '/f'], { windowsHide: true });
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
try {
|
|
68
|
+
child.kill('SIGKILL');
|
|
69
|
+
}
|
|
70
|
+
catch { /* already gone */ }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
try {
|
|
75
|
+
process.kill(-pid, 'SIGTERM');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
try {
|
|
79
|
+
child.kill('SIGKILL');
|
|
80
|
+
}
|
|
81
|
+
catch { /* already gone */ }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Synchronous tree kill by pid — for process-exit cleanup of background tasks. */
|
|
86
|
+
export function killProcessTreeSync(pid) {
|
|
87
|
+
if (platform() === 'win32') {
|
|
88
|
+
try {
|
|
89
|
+
spawnSync('taskkill', ['/pid', String(pid), '/t', '/f'], { windowsHide: true, timeout: 5000 });
|
|
90
|
+
}
|
|
91
|
+
catch { /* best effort */ }
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
try {
|
|
95
|
+
process.kill(-pid, 'SIGKILL');
|
|
96
|
+
}
|
|
97
|
+
catch { /* best effort */ }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export interface ToolParameter {
|
|
|
13
13
|
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
14
14
|
description: string;
|
|
15
15
|
required?: boolean;
|
|
16
|
+
/** For `array` params: element schema (OpenAI requires `items`). Defaults to string. */
|
|
17
|
+
items?: {
|
|
18
|
+
type: 'string' | 'number' | 'boolean' | 'object';
|
|
19
|
+
};
|
|
20
|
+
/** Allowed values (rendered into the OpenAI schema as `enum`). */
|
|
21
|
+
enum?: Array<string | number>;
|
|
16
22
|
}
|
|
17
23
|
export interface ToolResult {
|
|
18
24
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wFAAwF;IACxF,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC7D,kEAAkE;IAClE,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE7D;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAKjC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,EAAE,UAM/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAMlC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAMjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC;YACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,WAAW,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAoC1E;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,aAAa,EAAE,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDzB"}
|
package/dist/tools/types.js
CHANGED
|
@@ -50,10 +50,18 @@ export function toOpenAITools(definitions) {
|
|
|
50
50
|
const properties = {};
|
|
51
51
|
const required = [];
|
|
52
52
|
for (const param of def.tool.parameters) {
|
|
53
|
-
|
|
53
|
+
const property = {
|
|
54
54
|
type: param.type,
|
|
55
55
|
description: param.description,
|
|
56
56
|
};
|
|
57
|
+
// OpenAI/DeepSeek function schema requires `items` for array params.
|
|
58
|
+
if (param.type === 'array') {
|
|
59
|
+
property.items = param.items ?? { type: 'string' };
|
|
60
|
+
}
|
|
61
|
+
if (param.enum && param.enum.length > 0) {
|
|
62
|
+
property.enum = param.enum;
|
|
63
|
+
}
|
|
64
|
+
properties[param.name] = property;
|
|
57
65
|
if (param.required) {
|
|
58
66
|
required.push(param.name);
|
|
59
67
|
}
|
package/dist/tools/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAsB3D,UAAU,QAAQ;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;CACzB;AAuDD,wBAAgB,GAAG,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAsB3D,UAAU,QAAQ;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;CACzB;AAuDD,wBAAgB,GAAG,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,2CAiiCjD"}
|
package/dist/ui/app.js
CHANGED
|
@@ -112,7 +112,6 @@ export function App({ config, options }) {
|
|
|
112
112
|
const [compactProgress, setCompactProgress] = useState(0);
|
|
113
113
|
const [totalTokens, setTotalTokens] = useState(0);
|
|
114
114
|
const [estimatedCost, setEstimatedCost] = useState(0);
|
|
115
|
-
const [pendingImage, setPendingImage] = useState(null);
|
|
116
115
|
const [followUpCount, setFollowUpCount] = useState(0);
|
|
117
116
|
const [themePicker, setThemePicker] = useState(null);
|
|
118
117
|
const [modelPicker, setModelPicker] = useState(null);
|
|
@@ -370,14 +369,10 @@ export function App({ config, options }) {
|
|
|
370
369
|
};
|
|
371
370
|
proc.__agentAbortController = abortController;
|
|
372
371
|
logEvent('agent run: softCancel registered');
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
{ type: 'image_url', image_url: { url: `data:${pendingImage.mimeType};base64,${pendingImage.base64}` } },
|
|
378
|
-
];
|
|
379
|
-
setPendingImage(null);
|
|
380
|
-
}
|
|
372
|
+
// Images are not sent to the model: the DeepSeek API has no vision and
|
|
373
|
+
// rejects image_url content blocks (a single one bricks the whole session
|
|
374
|
+
// with a 400). Image paste shows a notice instead (see onImagePaste).
|
|
375
|
+
const userContent = input;
|
|
381
376
|
// Show local diagnostic notice for large prompts (not sent to model)
|
|
382
377
|
const charCount = input.length;
|
|
383
378
|
const lineCount = (input.match(/\r\n|\r|\n/g) || []).length + 1;
|
|
@@ -610,40 +605,20 @@ export function App({ config, options }) {
|
|
|
610
605
|
}, [messages, isProcessing, setupStep, handleApiKeySubmit, handleSlashCommand, approvalMode, config, localApiKey]);
|
|
611
606
|
useInput((_input, key) => {
|
|
612
607
|
const step = setupStepRef.current;
|
|
613
|
-
// Ctrl+C
|
|
614
|
-
//
|
|
615
|
-
//
|
|
616
|
-
//
|
|
617
|
-
// -
|
|
608
|
+
// Ctrl+C = exit only after a double confirmation. Ink raw mode delivers it
|
|
609
|
+
// as input (not a SIGINT) when exitOnCtrlC is false. We intentionally do NOT
|
|
610
|
+
// abort the running agent on Ctrl+C — aborting the in-flight work was what
|
|
611
|
+
// dropped the process to the shell. To steer or stop the agent mid-run, type
|
|
612
|
+
// a follow-up message instead (it is queued into the active run).
|
|
613
|
+
// - First press: show a hint, do nothing else (agent keeps running).
|
|
614
|
+
// - Second press within 3s: exit cleanly.
|
|
618
615
|
if (key.ctrl && _input === 'c') {
|
|
619
|
-
logEvent('useInput Ctrl+C', { isProcessing, isPaused, hasAbort: !!abortControllerRef.current, step });
|
|
620
|
-
if (isProcessing && abortControllerRef.current && !isPaused) {
|
|
621
|
-
logEvent('useInput Ctrl+C -> abort+pause');
|
|
622
|
-
abortControllerRef.current.abort();
|
|
623
|
-
setIsPaused(true);
|
|
624
|
-
setStatusText(i18n.t('paused'));
|
|
625
|
-
if (pendingApprovalResolveRef.current) {
|
|
626
|
-
pendingApprovalResolveRef.current(false);
|
|
627
|
-
pendingApprovalResolveRef.current = null;
|
|
628
|
-
}
|
|
629
|
-
setPendingApproval(null);
|
|
630
|
-
// Reset exit-arming: the interrupt is the user's action this press.
|
|
631
|
-
ctrlCExitArmedRef.current = false;
|
|
632
|
-
if (ctrlCExitTimerRef.current) {
|
|
633
|
-
clearTimeout(ctrlCExitTimerRef.current);
|
|
634
|
-
ctrlCExitTimerRef.current = null;
|
|
635
|
-
}
|
|
636
|
-
return;
|
|
637
|
-
}
|
|
638
|
-
// Idle or paused — second press within the window exits.
|
|
639
616
|
if (ctrlCExitArmedRef.current) {
|
|
640
|
-
logEvent('useInput Ctrl+C -> doublePress -> exit()');
|
|
641
617
|
if (ctrlCExitTimerRef.current)
|
|
642
618
|
clearTimeout(ctrlCExitTimerRef.current);
|
|
643
619
|
exit();
|
|
644
620
|
return;
|
|
645
621
|
}
|
|
646
|
-
logEvent('useInput Ctrl+C -> firstPress armed');
|
|
647
622
|
ctrlCExitArmedRef.current = true;
|
|
648
623
|
addServiceNotice(i18n.t('ctrlCHint'));
|
|
649
624
|
if (ctrlCExitTimerRef.current)
|
|
@@ -941,7 +916,6 @@ export function App({ config, options }) {
|
|
|
941
916
|
setMessages([]);
|
|
942
917
|
setToolCalls([]);
|
|
943
918
|
setPendingApproval(null);
|
|
944
|
-
setPendingImage(null);
|
|
945
919
|
setChatEpoch(e => e + 1); // remount Static so the scrollback resets
|
|
946
920
|
liveToolMessageIndexRef.current = -1;
|
|
947
921
|
setServiceNotice(null);
|
|
@@ -980,6 +954,6 @@ export function App({ config, options }) {
|
|
|
980
954
|
].map((label, i) => (_jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: approvalCursor === i ? colors.primary : colors.text, children: [approvalCursor === i ? '> ' : ' ', label] }) }, i))), _jsx(Box, { marginLeft: 1, marginTop: 1, children: _jsx(Text, { color: colors.textMuted, children: "\u2191\u2193 \u2014 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F Enter \u2014 \u0432\u044B\u0431\u0440\u0430\u0442\u044C Esc \u2014 \u043E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C" }) })] })] })), pendingClear && (_jsxs(Box, { flexDirection: 'column', marginLeft: 2, marginBottom: 1, borderStyle: 'round', borderColor: colors.warning, children: [_jsx(Box, { children: _jsx(Text, { bold: true, color: colors.warning, children: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0447\u0430\u0442\u0430?" }) }), _jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: colors.textMuted, children: [messages.length, " \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u043E. \u041E\u0442\u043C\u0435\u043D\u0443 \u043D\u0435\u043B\u044C\u0437\u044F."] }) }), _jsxs(Box, { flexDirection: 'column', marginTop: 1, children: [['[ok] Да, очистить', '[no] Отмена'].map((label, i) => (_jsx(Box, { marginLeft: 1, children: _jsxs(Text, { color: clearCursor === i ? colors.primary : colors.text, children: [clearCursor === i ? '> ' : ' ', label] }) }, i))), _jsx(Box, { marginLeft: 1, marginTop: 1, children: _jsx(Text, { color: colors.textMuted, children: "\u2191\u2193 \u2014 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F Enter \u2014 \u0432\u044B\u0431\u0440\u0430\u0442\u044C Esc \u2014 \u043E\u0442\u043C\u0435\u043D\u0430" }) })] })] }))] })), _jsx(InputBar, { onSubmit: handleSubmit, disabled: false,
|
|
981
955
|
// disabled is no longer tied to isProcessing — input is allowed during processing.
|
|
982
956
|
// blockInput still handles approval/clear dialogs.
|
|
983
|
-
onClear: handleClear, onExit: handleExit, isMasked: setupStep === 'apikey', isSetupMode: setupStep !== 'done', blockInput: setupStep === 'done' && (pendingApproval !== null || pendingClear), emptyHint: emptyInputHint, onImagePaste: (
|
|
957
|
+
onClear: handleClear, onExit: handleExit, isMasked: setupStep === 'apikey', isSetupMode: setupStep !== 'done', blockInput: setupStep === 'done' && (pendingApproval !== null || pendingClear), emptyHint: emptyInputHint, onImagePaste: () => addServiceNotice('[image] Эта модель не поддерживает изображения — вставка пропущена. Для проверки UI используйте /browser-test или опишите задачу текстом.') }), _jsx(StatusBar, { mode: approvalMode, status: statusText, messageCount: messages.length, isProcessing: isProcessing, isPaused: isPaused, contextPercent: contextPercent, compactProgress: compactProgress, totalTokens: totalTokens, estimatedCost: estimatedCost, model: config.model, followUpCount: followUpCount })] }));
|
|
984
958
|
}
|
|
985
959
|
//# sourceMappingURL=app.js.map
|