@serjm/deepseek-code 0.4.3 → 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 +85 -0
- package/README.md +72 -109
- package/README.ru.md +73 -109
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +42 -4
- package/dist/api/index.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +15 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +65 -3
- package/dist/cli/interactive.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +26 -21
- package/dist/commands/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 +25 -7
- package/dist/config/defaults.js.map +1 -1
- package/dist/core/agent-loop.d.ts +56 -3
- package/dist/core/agent-loop.d.ts.map +1 -1
- package/dist/core/agent-loop.js +458 -104
- package/dist/core/agent-loop.js.map +1 -1
- package/dist/core/i18n.d.ts +3 -0
- package/dist/core/i18n.d.ts.map +1 -1
- package/dist/core/i18n.js +9 -0
- package/dist/core/i18n.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 +9 -2
- package/dist/core/metrics.d.ts.map +1 -1
- package/dist/core/metrics.js +51 -9
- package/dist/core/metrics.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +317 -23
- 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/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +40 -3
- package/dist/tools/glob.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +69 -13
- package/dist/tools/grep.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 +94 -0
- 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 +27 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +43 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/ui/app.d.ts.map +1 -1
- package/dist/ui/app.js +219 -178
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/chat-view.d.ts +24 -3
- package/dist/ui/chat-view.d.ts.map +1 -1
- package/dist/ui/chat-view.js +116 -58
- package/dist/ui/chat-view.js.map +1 -1
- package/dist/ui/input-bar.d.ts.map +1 -1
- package/dist/ui/input-bar.js +38 -4
- package/dist/ui/input-bar.js.map +1 -1
- package/dist/ui/setup-wizard.js +1 -1
- package/dist/ui/setup-wizard.js.map +1 -1
- package/dist/ui/status-bar.d.ts +5 -1
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +10 -4
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +3 -2
package/dist/tools/bash.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { platform } from 'node:os';
|
|
2
|
+
import { spawnShellCommand, killProcessTree, resolveWindowsShell } from './shell.js';
|
|
3
|
+
import { startBackground, stopBackground, getBackgroundOutput, isBackgroundRunning, getBackgroundExitInfo, waitForPort } from './process-manager.js';
|
|
4
|
+
import { isAbsolute, relative } from 'node:path';
|
|
2
5
|
/**
|
|
3
6
|
* Dangerous commands that should never be auto-approved.
|
|
4
7
|
* These can destroy the system or data.
|
|
@@ -10,18 +13,68 @@ const DANGEROUS_PATTERNS = [
|
|
|
10
13
|
/^\s*format\s/m,
|
|
11
14
|
/^\s*del\s+\/f\s+\/s\s/m,
|
|
12
15
|
/^\s*rd\s+\/s\s+\/q\s/m,
|
|
13
|
-
/^\s*remove-item\b
|
|
14
|
-
/^\s*rm\b
|
|
16
|
+
/^\s*remove-item\b\s+["']?(?:[A-Z]:\\|\/)["']?\s+-(?:recurse|r)\b/im,
|
|
17
|
+
/^\s*rm\b\s+["']?(?:[A-Z]:\\|\/)["']?\s+-(?:recurse|r)\b/im,
|
|
15
18
|
/^\s*clear-disk\b/im,
|
|
16
19
|
/^\s*format-volume\b/im,
|
|
17
20
|
/^\s*stop-computer\b/im,
|
|
18
21
|
/^\s*restart-computer\b/im,
|
|
22
|
+
/^\s*taskkill\b(?=.*(?:\/f|-f)\b)(?=.*(?:\/im|-im)\s+(?:node(?:\.exe)?|npm(?:\.cmd)?|pnpm(?:\.cmd)?|yarn(?:\.cmd)?|tsx(?:\.cmd)?|vite(?:\.cmd)?|nuxt(?:\.cmd)?|next(?:\.cmd)?|react-scripts(?:\.cmd)?|powershell(?:\.exe)?|cmd(?:\.exe)?))\b/im,
|
|
23
|
+
/^\s*taskkill\b(?=.*(?:\/im|-im)\s+\*)/im,
|
|
24
|
+
/^\s*stop-process\b(?=.*-(?:name|processname)\s+(?:node|npm|pnpm|yarn|tsx|vite|nuxt|next|react-scripts|powershell|cmd)\b)/im,
|
|
25
|
+
/^\s*(?:kill|pkill|killall)\b.*\b(?:node|npm|pnpm|yarn|tsx|vite|nuxt|next|react-scripts)\b/im,
|
|
19
26
|
/^\s*shutdown\s/m,
|
|
20
27
|
/^\s*reboot\s/m,
|
|
21
28
|
/^\s*init\s+0/m,
|
|
22
29
|
/^\s*:\(\)\s*\{/m, // fork bomb
|
|
23
30
|
/^\s*>+\s+\/dev\//m, // destructive redirects
|
|
24
31
|
];
|
|
32
|
+
// Commands with NO Windows PowerShell 5.1 equivalent (would just fail). Note we
|
|
33
|
+
// no longer list cat/rm/ls/cp/mv/echo here: under PowerShell those are aliases
|
|
34
|
+
// (Get-Content/Remove-Item/Get-ChildItem/...) and work fine.
|
|
35
|
+
const WINDOWS_UNIX_COMMAND_REPLACEMENTS = {
|
|
36
|
+
sed: 'Use PowerShell string replacement, Select-String, or read_file/edit instead.',
|
|
37
|
+
head: 'Use Get-Content <path> -TotalCount <n>.',
|
|
38
|
+
tail: 'Use Get-Content <path> -Tail <n>.',
|
|
39
|
+
grep: 'Use grep_search, Select-String, or rg if available.',
|
|
40
|
+
xargs: 'Use PowerShell pipelines with ForEach-Object.',
|
|
41
|
+
touch: 'Use New-Item -ItemType File or Set-Content.',
|
|
42
|
+
};
|
|
43
|
+
function findBareCommandAtSegmentStart(command, names) {
|
|
44
|
+
let atSegmentStart = true;
|
|
45
|
+
let quote = null;
|
|
46
|
+
for (let i = 0; i < command.length; i++) {
|
|
47
|
+
const char = command[i];
|
|
48
|
+
if (quote) {
|
|
49
|
+
if (char === quote)
|
|
50
|
+
quote = null;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (char === '"' || char === "'") {
|
|
54
|
+
quote = char;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (/[|&;()]/.test(char)) {
|
|
58
|
+
atSegmentStart = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (/\s/.test(char))
|
|
62
|
+
continue;
|
|
63
|
+
if (!atSegmentStart)
|
|
64
|
+
continue;
|
|
65
|
+
const rest = command.slice(i);
|
|
66
|
+
const match = rest.match(/^([A-Za-z][\w.-]*)\b/);
|
|
67
|
+
if (!match) {
|
|
68
|
+
atSegmentStart = false;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const name = match[1].toLowerCase();
|
|
72
|
+
if (names.has(name))
|
|
73
|
+
return name;
|
|
74
|
+
atSegmentStart = false;
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
25
78
|
function isDangerousCommand(command) {
|
|
26
79
|
for (const pattern of DANGEROUS_PATTERNS) {
|
|
27
80
|
if (pattern.test(command)) {
|
|
@@ -30,20 +83,169 @@ function isDangerousCommand(command) {
|
|
|
30
83
|
}
|
|
31
84
|
return null;
|
|
32
85
|
}
|
|
86
|
+
function isInsideWorkspace(targetPath) {
|
|
87
|
+
if (!isAbsolute(targetPath))
|
|
88
|
+
return true;
|
|
89
|
+
const rel = relative(process.cwd(), targetPath);
|
|
90
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
91
|
+
}
|
|
92
|
+
function extractFirstPathArgument(rest) {
|
|
93
|
+
const trimmed = rest.trim();
|
|
94
|
+
const quoted = trimmed.match(/^["']([^"']+)["']/u);
|
|
95
|
+
if (quoted)
|
|
96
|
+
return quoted[1];
|
|
97
|
+
const bare = trimmed.match(/^([^\s;|&]+)/u);
|
|
98
|
+
return bare?.[1] ?? null;
|
|
99
|
+
}
|
|
100
|
+
function getWorkspacePolicyError(command) {
|
|
101
|
+
const cdPattern = /(?:^|[;&|()])\s*(?:cd|chdir|set-location)\s+((?:"[^"]+")|(?:'[^']+')|[^\s;&|)]+)/gim;
|
|
102
|
+
let match;
|
|
103
|
+
while ((match = cdPattern.exec(command)) !== null) {
|
|
104
|
+
const target = match[1].replace(/^["']|["']$/g, '');
|
|
105
|
+
if (isAbsolute(target) && !isInsideWorkspace(target)) {
|
|
106
|
+
return `Workspace policy: refusing to change directory outside the current workspace (${process.cwd()}): ${target}. Start the CLI in the intended project directory instead of switching projects inside a shell command.`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (platform() !== 'win32')
|
|
110
|
+
return null;
|
|
111
|
+
const mutatingCmdletPattern = /(?:^|[;&|()])\s*(remove-item|new-item|set-content|add-content|copy-item|move-item)\b([^;&|)]*)/gim;
|
|
112
|
+
while ((match = mutatingCmdletPattern.exec(command)) !== null) {
|
|
113
|
+
const target = extractFirstPathArgument(match[2]);
|
|
114
|
+
if (target && isAbsolute(target) && !isInsideWorkspace(target)) {
|
|
115
|
+
return `Workspace policy: refusing to run ${match[1]} on a path outside the current workspace (${process.cwd()}): ${target}. Use the CLI from that project directory or ask for confirmation with the correct workspace.`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function getWindowsShellPolicyError(command) {
|
|
121
|
+
if (platform() !== 'win32')
|
|
122
|
+
return null;
|
|
123
|
+
const commandName = findBareCommandAtSegmentStart(command, new Set(Object.keys(WINDOWS_UNIX_COMMAND_REPLACEMENTS)));
|
|
124
|
+
if (!commandName)
|
|
125
|
+
return null;
|
|
126
|
+
return `Windows shell policy: '${commandName}' is usually a Unix command and may fail in cmd/PowerShell. ${WINDOWS_UNIX_COMMAND_REPLACEMENTS[commandName]}`;
|
|
127
|
+
}
|
|
128
|
+
function getWindowsUnixFlagPolicyError(command) {
|
|
129
|
+
if (platform() !== 'win32')
|
|
130
|
+
return null;
|
|
131
|
+
const mkdirP = /(?:^|[;&|()])\s*mkdir\s+-p(?:\s|$)/im;
|
|
132
|
+
if (mkdirP.test(command)) {
|
|
133
|
+
return 'Windows shell policy: mkdir -p is Unix syntax and can create a literal "-p" directory in Windows shells. Use New-Item -ItemType Directory -Force <path> or mkdir <path> without -p.';
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
function hasUnquotedWindowsShellChaining(command) {
|
|
138
|
+
let quote = null;
|
|
139
|
+
for (let i = 0; i < command.length - 1; i++) {
|
|
140
|
+
const char = command[i];
|
|
141
|
+
if (quote) {
|
|
142
|
+
if (char === quote)
|
|
143
|
+
quote = null;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (char === '"' || char === "'") {
|
|
147
|
+
quote = char;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const pair = command.slice(i, i + 2);
|
|
151
|
+
if (pair === '&&' || pair === '||')
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
function getPowerShellSyntaxPolicyError(command) {
|
|
157
|
+
if (platform() !== 'win32')
|
|
158
|
+
return null;
|
|
159
|
+
if (resolveWindowsShell() !== 'powershell')
|
|
160
|
+
return null;
|
|
161
|
+
if (!hasUnquotedWindowsShellChaining(command))
|
|
162
|
+
return null;
|
|
163
|
+
return 'Windows shell policy: commands run through Windows PowerShell 5.1, which does NOT support the && or || operators. Use ; to run sequentially, or "; if ($?) { <next> }" to run the next command only if the previous one succeeded. Or split into separate tool calls.';
|
|
164
|
+
}
|
|
165
|
+
const MAX_OUTPUT_BYTES = 10 * 1024 * 1024;
|
|
166
|
+
/**
|
|
167
|
+
* Run a shell command asynchronously so the event loop (and therefore the TUI
|
|
168
|
+
* and Ctrl+C handling) stays responsive while the command runs. The command is
|
|
169
|
+
* killed if `signal` aborts (user cancellation) or the timeout elapses.
|
|
170
|
+
*/
|
|
171
|
+
function executeCommand(command, timeout, signal) {
|
|
172
|
+
return new Promise((resolve, reject) => {
|
|
173
|
+
if (signal?.aborted) {
|
|
174
|
+
resolve({ stdout: '', stderr: '', code: null, aborted: true, timedOut: false });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// detached on POSIX makes the child a process-group leader so the whole
|
|
178
|
+
// group can be killed; on Windows the tree is killed via taskkill /t.
|
|
179
|
+
const child = spawnShellCommand(command, platform() !== 'win32');
|
|
180
|
+
let stdout = '';
|
|
181
|
+
let stderr = '';
|
|
182
|
+
let stdoutBytes = 0;
|
|
183
|
+
let truncated = false;
|
|
184
|
+
let aborted = false;
|
|
185
|
+
let timedOut = false;
|
|
186
|
+
const onAbort = () => { aborted = true; killProcessTree(child); };
|
|
187
|
+
if (signal)
|
|
188
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
189
|
+
const timer = setTimeout(() => { timedOut = true; killProcessTree(child); }, timeout);
|
|
190
|
+
child.stdout?.setEncoding('utf8');
|
|
191
|
+
child.stderr?.setEncoding('utf8');
|
|
192
|
+
child.stdout?.on('data', (chunk) => {
|
|
193
|
+
stdoutBytes += Buffer.byteLength(chunk);
|
|
194
|
+
if (stdoutBytes <= MAX_OUTPUT_BYTES)
|
|
195
|
+
stdout += chunk;
|
|
196
|
+
else
|
|
197
|
+
truncated = true;
|
|
198
|
+
});
|
|
199
|
+
child.stderr?.on('data', (chunk) => { stderr += chunk; });
|
|
200
|
+
const cleanup = () => {
|
|
201
|
+
clearTimeout(timer);
|
|
202
|
+
if (signal)
|
|
203
|
+
signal.removeEventListener('abort', onAbort);
|
|
204
|
+
};
|
|
205
|
+
child.on('error', (err) => {
|
|
206
|
+
cleanup();
|
|
207
|
+
reject(err);
|
|
208
|
+
});
|
|
209
|
+
child.on('close', (code) => {
|
|
210
|
+
cleanup();
|
|
211
|
+
if (truncated)
|
|
212
|
+
stdout += `\n\n... [output truncated at ${MAX_OUTPUT_BYTES} bytes]`;
|
|
213
|
+
resolve({ stdout, stderr, code, aborted, timedOut });
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
33
217
|
export const bashTool = {
|
|
34
218
|
name: 'run_shell_command',
|
|
35
|
-
description: 'Execute
|
|
219
|
+
description: 'Execute an OS-compatible shell command (build/test/git). Prefer read_file, grep_search, glob for inspection. For long-running processes like dev/preview servers, set background:true (optionally with wait_for_port) so the call returns instead of hanging; later stop it with stop_pid. The active shell dialect is described in the system prompt.',
|
|
36
220
|
parameters: [
|
|
37
221
|
{
|
|
38
222
|
name: 'command',
|
|
39
223
|
type: 'string',
|
|
40
|
-
description: 'The shell command to execute',
|
|
41
|
-
required:
|
|
224
|
+
description: 'The shell command to execute. Omit only when using stop_pid, or wait_for_port alone.',
|
|
225
|
+
required: false,
|
|
42
226
|
},
|
|
43
227
|
{
|
|
44
228
|
name: 'timeout',
|
|
45
229
|
type: 'number',
|
|
46
|
-
description: '
|
|
230
|
+
description: 'Timeout in ms (default 120000 for normal commands; 30000 for wait_for_port).',
|
|
231
|
+
required: false,
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'background',
|
|
235
|
+
type: 'boolean',
|
|
236
|
+
description: 'Run the command as a long-running background process (e.g. a dev server) and return immediately with its pid instead of waiting for it to finish.',
|
|
237
|
+
required: false,
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
name: 'wait_for_port',
|
|
241
|
+
type: 'number',
|
|
242
|
+
description: 'After starting (or by itself), poll this localhost TCP port until it accepts connections or the timeout elapses. Use to wait for a dev server before a browser check.',
|
|
243
|
+
required: false,
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: 'stop_pid',
|
|
247
|
+
type: 'number',
|
|
248
|
+
description: 'Stop a previously started background process by its pid (kills the whole process tree). No command needed.',
|
|
47
249
|
required: false,
|
|
48
250
|
},
|
|
49
251
|
{
|
|
@@ -53,40 +255,132 @@ export const bashTool = {
|
|
|
53
255
|
required: false,
|
|
54
256
|
},
|
|
55
257
|
],
|
|
56
|
-
async execute(args) {
|
|
258
|
+
async execute(args, signal) {
|
|
57
259
|
const command = args.command;
|
|
58
260
|
const timeout = args.timeout ?? 120_000;
|
|
261
|
+
const background = args.background === true;
|
|
262
|
+
const waitForPortNum = args.wait_for_port;
|
|
263
|
+
const stopPid = args.stop_pid;
|
|
264
|
+
// ── Stop a background process ──────────────────────────────────────────
|
|
265
|
+
if (typeof stopPid === 'number') {
|
|
266
|
+
const result = stopBackground(stopPid);
|
|
267
|
+
if (!result.stopped)
|
|
268
|
+
return { success: false, output: '', error: result.error };
|
|
269
|
+
const tail = result.output ? `\n--- last output ---\n${result.output.slice(-4000)}` : '';
|
|
270
|
+
return { success: true, output: `Stopped background process pid=${stopPid}.${tail}` };
|
|
271
|
+
}
|
|
272
|
+
// ── Wait for a port with no command (server already started elsewhere) ──
|
|
273
|
+
if (!command && typeof waitForPortNum === 'number') {
|
|
274
|
+
const portTimeout = args.timeout ?? 30_000;
|
|
275
|
+
const ready = await waitForPort(waitForPortNum, '127.0.0.1', portTimeout);
|
|
276
|
+
return ready
|
|
277
|
+
? { success: true, output: `Port ${waitForPortNum} is accepting connections.` }
|
|
278
|
+
: { success: false, output: '', error: `Port ${waitForPortNum} not ready within ${portTimeout}ms.` };
|
|
279
|
+
}
|
|
280
|
+
if (!command) {
|
|
281
|
+
return { success: false, output: '', error: 'No command provided. Pass `command`, or use `stop_pid` / `wait_for_port`.' };
|
|
282
|
+
}
|
|
59
283
|
// Security check — reject dangerous commands
|
|
60
284
|
const danger = isDangerousCommand(command);
|
|
61
285
|
if (danger) {
|
|
286
|
+
const isBroadProcessKill = /\b(?:taskkill|stop-process|pkill|killall)\b/iu.test(command);
|
|
62
287
|
return {
|
|
63
288
|
success: false,
|
|
64
289
|
output: '',
|
|
65
|
-
error:
|
|
290
|
+
error: isBroadProcessKill
|
|
291
|
+
? `Blocked for security: ${danger}. Avoid broad process-kill commands. If you started a dev server, stop only that specific process by its known PID or use the child process handle managed by the tool.`
|
|
292
|
+
: `Blocked for security: ${danger}. This command is potentially destructive. Use explicit safe paths inside the current workspace and avoid broad recursive deletion.`,
|
|
66
293
|
};
|
|
67
294
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
timeout,
|
|
71
|
-
encoding: 'utf-8',
|
|
72
|
-
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
73
|
-
windowsHide: true,
|
|
74
|
-
});
|
|
295
|
+
const windowsPolicyError = getWindowsShellPolicyError(command);
|
|
296
|
+
if (windowsPolicyError) {
|
|
75
297
|
return {
|
|
76
|
-
success:
|
|
77
|
-
output:
|
|
298
|
+
success: false,
|
|
299
|
+
output: '',
|
|
300
|
+
error: windowsPolicyError,
|
|
78
301
|
};
|
|
79
302
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
303
|
+
const windowsUnixFlagPolicyError = getWindowsUnixFlagPolicyError(command);
|
|
304
|
+
if (windowsUnixFlagPolicyError) {
|
|
305
|
+
return {
|
|
306
|
+
success: false,
|
|
307
|
+
output: '',
|
|
308
|
+
error: windowsUnixFlagPolicyError,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const workspacePolicyError = getWorkspacePolicyError(command);
|
|
312
|
+
if (workspacePolicyError) {
|
|
313
|
+
return {
|
|
314
|
+
success: false,
|
|
315
|
+
output: '',
|
|
316
|
+
error: workspacePolicyError,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
const powershellSyntaxPolicyError = getPowerShellSyntaxPolicyError(command);
|
|
320
|
+
if (powershellSyntaxPolicyError) {
|
|
321
|
+
return {
|
|
322
|
+
success: false,
|
|
323
|
+
output: '',
|
|
324
|
+
error: powershellSyntaxPolicyError,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
// ── Background process (dev/preview servers etc.) ──────────────────────
|
|
328
|
+
if (background) {
|
|
329
|
+
const { pid, error } = startBackground(command);
|
|
330
|
+
if (pid == null)
|
|
331
|
+
return { success: false, output: '', error };
|
|
332
|
+
let portMsg = '';
|
|
333
|
+
let portReady = true;
|
|
334
|
+
if (typeof waitForPortNum === 'number') {
|
|
335
|
+
const portTimeout = args.timeout ?? 30_000;
|
|
336
|
+
portReady = await waitForPort(waitForPortNum, '127.0.0.1', portTimeout);
|
|
337
|
+
portMsg = portReady
|
|
338
|
+
? `\nPort ${waitForPortNum} is ready.`
|
|
339
|
+
: `\nWARNING: port ${waitForPortNum} did not become ready within ${portTimeout}ms.`;
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
// brief grace period to surface startup output / immediate crashes
|
|
343
|
+
await new Promise(resolve => setTimeout(resolve, 800));
|
|
344
|
+
}
|
|
345
|
+
const running = isBackgroundRunning(pid);
|
|
346
|
+
const exitInfo = getBackgroundExitInfo(pid);
|
|
347
|
+
const out = getBackgroundOutput(pid);
|
|
348
|
+
const tail = out ? `\n--- output so far ---\n${out.slice(-4000)}` : '';
|
|
349
|
+
const success = running && portReady;
|
|
350
|
+
return {
|
|
351
|
+
success,
|
|
352
|
+
output: `Started background process pid=${pid}.${running ? '' : ` Process already ${exitInfo}.`}${portMsg}\nStop it later with stop_pid=${pid}.${tail}`,
|
|
353
|
+
error: success ? undefined : (running ? `Port ${waitForPortNum} not ready.` : `Background process exited immediately: ${exitInfo}`),
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
const { stdout, stderr, code, aborted, timedOut } = await executeCommand(command, timeout, signal);
|
|
358
|
+
if (aborted) {
|
|
359
|
+
return { success: false, output: stdout, error: 'Command aborted by user (Ctrl+C).' };
|
|
360
|
+
}
|
|
361
|
+
if (timedOut) {
|
|
362
|
+
return {
|
|
363
|
+
success: false,
|
|
364
|
+
output: stdout,
|
|
365
|
+
error: `Command timed out after ${timeout}ms.${stderr ? `\n${stderr}` : ''}`,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
if (code === 0) {
|
|
369
|
+
return { success: true, output: stdout || '(command completed with no output)' };
|
|
370
|
+
}
|
|
84
371
|
return {
|
|
85
372
|
success: false,
|
|
86
373
|
output: stdout,
|
|
87
|
-
error: stderr ||
|
|
374
|
+
error: stderr || `Command exited with code ${code}`,
|
|
88
375
|
};
|
|
89
376
|
}
|
|
377
|
+
catch (err) {
|
|
378
|
+
const error = err;
|
|
379
|
+
if (signal?.aborted || error.code === 'ABORT_ERR' || error.name === 'AbortError') {
|
|
380
|
+
return { success: false, output: '', error: 'Command aborted by user (Ctrl+C).' };
|
|
381
|
+
}
|
|
382
|
+
return { success: false, output: '', error: error.message };
|
|
383
|
+
}
|
|
90
384
|
},
|
|
91
385
|
};
|
|
92
386
|
//# sourceMappingURL=bash.js.map
|
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C;;;GAGG;AACH,MAAM,kBAAkB,GAAG;IACzB,wBAAwB;IACxB,aAAa;IACb,0BAA0B;IAC1B,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,yCAAyC;IACzC,gCAAgC;IAChC,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,iBAAiB,EAAE,YAAY;IAC/B,mBAAmB,EAAE,wBAAwB;CAC9C,CAAA;AAED,SAAS,kBAAkB,CAAE,OAAe;IAC1C,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,sCAAsC,OAAO,EAAE,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mFAAmF;IAChG,UAAU,EAAE;QACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QACtC,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,OAAO,CAAA;QAEnD,6CAA6C;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,yBAAyB,MAAM,EAAE;aACzC,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC/B,OAAO;gBACP,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;gBACpC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,IAAI,oCAAoC;aACvD,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAmD,CAAA;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO;aAC/B,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACpJ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGhD;;;GAGG;AACH,MAAM,kBAAkB,GAAG;IACzB,wBAAwB;IACxB,aAAa;IACb,0BAA0B;IAC1B,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,oEAAoE;IACpE,2DAA2D;IAC3D,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,+OAA+O;IAC/O,yCAAyC;IACzC,4HAA4H;IAC5H,6FAA6F;IAC7F,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,iBAAiB,EAAE,YAAY;IAC/B,mBAAmB,EAAE,wBAAwB;CAC9C,CAAA;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,6DAA6D;AAC7D,MAAM,iCAAiC,GAA2B;IAChE,GAAG,EAAE,8EAA8E;IACnF,IAAI,EAAE,yCAAyC;IAC/C,IAAI,EAAE,mCAAmC;IACzC,IAAI,EAAE,qDAAqD;IAC3D,KAAK,EAAE,+CAA+C;IACtD,KAAK,EAAE,6CAA6C;CACrD,CAAA;AAED,SAAS,6BAA6B,CAAE,OAAe,EAAE,KAAkB;IACzE,IAAI,cAAc,GAAG,IAAI,CAAA;IACzB,IAAI,KAAK,GAAqB,IAAI,CAAA;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,IAAI,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAA;YAChC,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,cAAc,GAAG,IAAI,CAAA;YACrB,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE7B,IAAI,CAAC,cAAc;YAAE,SAAQ;QAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,GAAG,KAAK,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACnC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAChC,cAAc,GAAG,KAAK,CAAA;IACxB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,kBAAkB,CAAE,OAAe;IAC1C,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,sCAAsC,OAAO,EAAE,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAE,UAAkB;IAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;IAC/C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,wBAAwB,CAAE,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAClD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3C,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAAE,OAAe;IAC/C,MAAM,SAAS,GAAG,qFAAqF,CAAA;IACvG,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;QACnD,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,iFAAiF,OAAO,CAAC,GAAG,EAAE,MAAM,MAAM,yGAAyG,CAAA;QAC5N,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,qBAAqB,GAAG,mGAAmG,CAAA;IACjI,OAAO,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACjD,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,OAAO,qCAAqC,KAAK,CAAC,CAAC,CAAC,6CAA6C,OAAO,CAAC,GAAG,EAAE,MAAM,MAAM,+FAA+F,CAAA;QAC3N,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,0BAA0B,CAAE,OAAe;IAClD,IAAI,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAA;IACnH,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IAE7B,OAAO,0BAA0B,WAAW,+DAA+D,iCAAiC,CAAC,WAAW,CAAC,EAAE,CAAA;AAC7J,CAAC;AAED,SAAS,6BAA6B,CAAE,OAAe;IACrD,IAAI,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,MAAM,GAAG,sCAAsC,CAAA;IACrD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,qLAAqL,CAAA;IAC9L,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,+BAA+B,CAAE,OAAe;IACvD,IAAI,KAAK,GAAqB,IAAI,CAAA;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,IAAI,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAA;YAChC,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACpC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;IACjD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,8BAA8B,CAAE,OAAe;IACtD,IAAI,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACvC,IAAI,mBAAmB,EAAE,KAAK,YAAY;QAAE,OAAO,IAAI,CAAA;IACvD,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAE1D,OAAO,uQAAuQ,CAAA;AAChR,CAAC;AAED,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAUzC;;;;GAIG;AACH,SAAS,cAAc,CAAE,OAAe,EAAE,OAAe,EAAE,MAAoB;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/E,OAAM;QACR,CAAC;QAED,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,KAAK,GAAiB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAA;QAE9E,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,QAAQ,GAAG,KAAK,CAAA;QAEpB,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM;YAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAErE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAEpF,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,WAAW,IAAI,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAA;;gBAC/C,SAAS,GAAG,IAAI,CAAA;QACvB,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAA,CAAC,CAAC,CAAC,CAAA;QAEhE,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,IAAI,MAAM;gBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC1D,CAAC,CAAA;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,EAAE,CAAA;YACT,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,EAAE,CAAA;YACT,IAAI,SAAS;gBAAE,MAAM,IAAI,gCAAgC,gBAAgB,SAAS,CAAA;YAClF,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,wVAAwV;IACrW,UAAU,EAAE;QACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sFAAsF;YACnG,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8EAA8E;YAC3F,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,mJAAmJ;YAChK,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uKAAuK;YACpL,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4GAA4G;YACzH,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B,EAAE,MAAoB;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAA;QAClD,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,OAAO,CAAA;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAA;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,aAAmC,CAAA;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAA8B,CAAA;QAEnD,0EAA0E;QAC1E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;YAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACxF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,OAAO,IAAI,IAAI,EAAE,EAAE,CAAA;QACvF,CAAC;QAED,2EAA2E;QAC3E,IAAI,CAAC,OAAO,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,WAAW,GAAI,IAAI,CAAC,OAAkB,IAAI,MAAM,CAAA;YACtD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;YACzE,OAAO,KAAK;gBACV,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,cAAc,4BAA4B,EAAE;gBAC/E,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,cAAc,qBAAqB,WAAW,KAAK,EAAE,CAAA;QACxG,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,2EAA2E,EAAE,CAAA;QAC3H,CAAC;QAED,6CAA6C;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,kBAAkB,GAAG,+CAA+C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,kBAAkB;oBACvB,CAAC,CAAC,yBAAyB,MAAM,yKAAyK;oBAC1M,CAAC,CAAC,yBAAyB,MAAM,qIAAqI;aACzK,CAAA;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,kBAAkB;aAC1B,CAAA;QACH,CAAC;QAED,MAAM,0BAA0B,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAA;QACzE,IAAI,0BAA0B,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,0BAA0B;aAClC,CAAA;QACH,CAAC;QAED,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAC7D,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,oBAAoB;aAC5B,CAAA;QACH,CAAC;QAED,MAAM,2BAA2B,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;QAC3E,IAAI,2BAA2B,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,2BAA2B;aACnC,CAAA;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;YAE7D,IAAI,OAAO,GAAG,EAAE,CAAA;YAChB,IAAI,SAAS,GAAG,IAAI,CAAA;YACpB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAI,IAAI,CAAC,OAAkB,IAAI,MAAM,CAAA;gBACtD,SAAS,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;gBACvE,OAAO,GAAG,SAAS;oBACjB,CAAC,CAAC,UAAU,cAAc,YAAY;oBACtC,CAAC,CAAC,mBAAmB,cAAc,gCAAgC,WAAW,KAAK,CAAA;YACvF,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;YACxD,CAAC;YAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;YAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,4BAA4B,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACtE,MAAM,OAAO,GAAG,OAAO,IAAI,SAAS,CAAA;YACpC,OAAO;gBACL,OAAO;gBACP,MAAM,EAAE,kCAAkC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,QAAQ,GAAG,GAAG,OAAO,iCAAiC,GAAG,IAAI,IAAI,EAAE;gBACvJ,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,cAAc,aAAa,CAAC,CAAC,CAAC,0CAA0C,QAAQ,EAAE,CAAC;aACpI,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YAElG,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;YACvF,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,2BAA2B,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC7E,CAAA;YACH,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,oCAAoC,EAAE,CAAA;YAClF,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,IAAI,4BAA4B,IAAI,EAAE;aACpD,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAgC,CAAA;YAC9C,IAAI,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;YACnF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;QAC7D,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-manager.d.ts","sourceRoot":"","sources":["../../src/tools/chrome-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK1C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAU,MAAM,WAAW,CAAA;AAE/E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkBD,cAAM,aAAc,SAAQ,YAAY;IACtC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAEzC,QAAQ,IAAK,kBAAkB;IAY/B;;;;OAIG;IACG,UAAU,CAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,UAAU,IAAK,OAAO,CAAC,OAAO,CAAC;IAO/B,MAAM,CAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAsClD,OAAO,CAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"chrome-manager.d.ts","sourceRoot":"","sources":["../../src/tools/chrome-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK1C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAU,MAAM,WAAW,CAAA;AAE/E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkBD,cAAM,aAAc,SAAQ,YAAY;IACtC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAEzC,QAAQ,IAAK,kBAAkB;IAY/B;;;;OAIG;IACG,UAAU,CAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,UAAU,IAAK,OAAO,CAAC,OAAO,CAAC;IAO/B,MAAM,CAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAsClD,OAAO,CAAE,OAAO,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IA6B7B,WAAW,IAAK,OAAO;IAIvB,YAAY,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKjC,eAAe,CAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKnC,QAAQ,CAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,OAAO,CAAC,SAAS;CAIlB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
|
|
@@ -94,8 +94,11 @@ class ChromeManager extends EventEmitter {
|
|
|
94
94
|
});
|
|
95
95
|
return this.browser;
|
|
96
96
|
}
|
|
97
|
-
async getPage(sameTab =
|
|
97
|
+
async getPage(sameTab = true) {
|
|
98
98
|
const browser = await this.getBrowser();
|
|
99
|
+
// Default: reuse the current tab. A fresh tab per navigation spawned dozens
|
|
100
|
+
// of tabs for what is usually the same site. Pass sameTab=false only when a
|
|
101
|
+
// genuinely separate tab is intended.
|
|
99
102
|
if (sameTab && this.currentPage && !this.currentPage.isClosed()) {
|
|
100
103
|
this.emitState();
|
|
101
104
|
return this.currentPage;
|
|
@@ -148,7 +151,7 @@ class ChromeManager extends EventEmitter {
|
|
|
148
151
|
this.headlessMode = headless;
|
|
149
152
|
this.emitState();
|
|
150
153
|
}
|
|
151
|
-
async navigate(url, sameTab =
|
|
154
|
+
async navigate(url, sameTab = true) {
|
|
152
155
|
const page = await this.getPage(sameTab);
|
|
153
156
|
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
|
154
157
|
this.currentPage = page;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-manager.js","sourceRoot":"","sources":["../../src/tools/chrome-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chrome-manager.js","sourceRoot":"","sources":["../../src/tools/chrome-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/tools/chrome.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAA6B,MAAM,YAAY,CAAA;AAGjE,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,MAAM,CAAA;AAEV,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACnC;AA6nBD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,wBAAwB,IAAK,iBAAiB,GAAG,IAAI,CAEpE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAgDD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsKhF;AAoID,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAeD,wBAAsB,eAAe,CAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ExF;AAmED,eAAO,MAAM,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/tools/chrome.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAA6B,MAAM,YAAY,CAAA;AAGjE,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,KAAK,GACL,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,MAAM,CAAA;AAEV,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACnC;AA6nBD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,wBAAwB,IAAK,iBAAiB,GAAG,IAAI,CAEpE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAgDD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsKhF;AAoID,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAeD,wBAAsB,eAAe,CAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ExF;AAmED,eAAO,MAAM,UAAU,EAAE,IAsCxB,CAAA"}
|
package/dist/tools/chrome.js
CHANGED
|
@@ -58,7 +58,7 @@ async function resolveArtifactPath(output) {
|
|
|
58
58
|
}
|
|
59
59
|
async function navigateIfNeeded(args, page) {
|
|
60
60
|
if (args.url) {
|
|
61
|
-
await chromeManager.navigate(args.url, args.sameTab ??
|
|
61
|
+
await chromeManager.navigate(args.url, args.sameTab ?? true);
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
if (page.url() === 'about:blank') {
|
|
@@ -221,7 +221,7 @@ async function executeAction(args) {
|
|
|
221
221
|
});
|
|
222
222
|
return {
|
|
223
223
|
success: true,
|
|
224
|
-
output: `Screenshot saved: ${shotPath}\nPage: ${page.url()}
|
|
224
|
+
output: `Screenshot saved for the user to view: ${shotPath}\nPage: ${page.url()}\nNote: this model cannot see the image. To VERIFY rendered state yourself, use action 'read'/'eval' (DOM, computed styles, element counts) and 'console' (errors) — do not claim what the screenshot shows.`,
|
|
225
225
|
};
|
|
226
226
|
}
|
|
227
227
|
case 'nav': {
|
|
@@ -449,7 +449,7 @@ const chromeParameters = [
|
|
|
449
449
|
{
|
|
450
450
|
name: 'sameTab',
|
|
451
451
|
type: 'boolean',
|
|
452
|
-
description: 'Reuse the current tab for
|
|
452
|
+
description: 'Reuse the current tab (DEFAULT true). Navigations and reloads stay in one tab. Set false ONLY to intentionally open a separate tab for a different site.',
|
|
453
453
|
required: false,
|
|
454
454
|
},
|
|
455
455
|
{
|
|
@@ -1032,6 +1032,11 @@ Use it for UI validation, rendered DOM inspection, console and network debugging
|
|
|
1032
1032
|
screenshots, and multi-step browser workflows when terminal tools are not enough.
|
|
1033
1033
|
If the task mentions localhost pages, forms, browser bugs, screenshots, rendered state,
|
|
1034
1034
|
console output, or network requests, this is the primary tool.
|
|
1035
|
+
This model has NO vision: a screenshot is saved for the user but you cannot read it.
|
|
1036
|
+
VERIFY rendered state with action 'read'/'eval' (DOM, text, computed styles, element
|
|
1037
|
+
counts) and 'console' (errors) — never claim what a screenshot "shows".
|
|
1038
|
+
Navigation reuses ONE tab by default (sameTab); do not reopen a new tab for the
|
|
1039
|
+
same site — navigate/refresh in place. Use sameTab:false only for a different site.
|
|
1035
1040
|
|
|
1036
1041
|
Examples:
|
|
1037
1042
|
- { "action": "open", "url": "https://example.com" }
|