@aiscene/aiserver 2.0.3 → 2.0.5

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.
Files changed (41) hide show
  1. package/dist/config/cli.d.ts +24 -0
  2. package/dist/config/cli.d.ts.map +1 -1
  3. package/dist/config/cli.js +96 -0
  4. package/dist/config/cli.js.map +1 -1
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +20 -0
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/config/schema.d.ts +12 -0
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/executor/ios-wda-manager.d.ts +21 -0
  11. package/dist/executor/ios-wda-manager.d.ts.map +1 -0
  12. package/dist/executor/ios-wda-manager.js +333 -0
  13. package/dist/executor/ios-wda-manager.js.map +1 -0
  14. package/dist/goose-runtime/git.d.ts +4 -0
  15. package/dist/goose-runtime/git.d.ts.map +1 -0
  16. package/dist/goose-runtime/git.js +63 -0
  17. package/dist/goose-runtime/git.js.map +1 -0
  18. package/dist/goose-runtime/runtime.d.ts +5 -0
  19. package/dist/goose-runtime/runtime.d.ts.map +1 -0
  20. package/dist/goose-runtime/runtime.js +141 -0
  21. package/dist/goose-runtime/runtime.js.map +1 -0
  22. package/dist/goose-runtime/types.d.ts +23 -0
  23. package/dist/goose-runtime/types.d.ts.map +1 -0
  24. package/dist/goose-runtime/types.js +2 -0
  25. package/dist/goose-runtime/types.js.map +1 -0
  26. package/dist/goose-runtime/workspace.d.ts +23 -0
  27. package/dist/goose-runtime/workspace.d.ts.map +1 -0
  28. package/dist/goose-runtime/workspace.js +200 -0
  29. package/dist/goose-runtime/workspace.js.map +1 -0
  30. package/dist/task/guada-online-batch-poller.d.ts +0 -10
  31. package/dist/task/guada-online-batch-poller.d.ts.map +1 -1
  32. package/dist/task/guada-online-batch-poller.js +8 -137
  33. package/dist/task/guada-online-batch-poller.js.map +1 -1
  34. package/dist/task/scheduler.d.ts +5 -0
  35. package/dist/task/scheduler.d.ts.map +1 -1
  36. package/dist/task/scheduler.js +179 -84
  37. package/dist/task/scheduler.js.map +1 -1
  38. package/dist/web/server.d.ts.map +1 -1
  39. package/dist/web/server.js +10 -23
  40. package/dist/web/server.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,333 @@
1
+ import { spawn } from 'child_process';
2
+ import fs from 'fs';
3
+ import net from 'net';
4
+ import os from 'os';
5
+ import path from 'path';
6
+ import { setTimeout as sleep } from 'timers/promises';
7
+ const DEFAULT_WDA_PORT = 8100;
8
+ const DEFAULT_LOCAL_WDA_PORT_END = 8199;
9
+ const DEFAULT_WDA_MJPEG_PORT = 9100;
10
+ const DEFAULT_LOCAL_WDA_MJPEG_PORT_END = 9199;
11
+ const DEFAULT_STARTUP_TIMEOUT_MS = 120_000;
12
+ const managers = new Map();
13
+ const allocatedLocalPorts = new Map();
14
+ const allocatedLocalMjpegPorts = new Map();
15
+ export async function ensureIOSWda(options = {}) {
16
+ const udid = await resolveIOSUdid(options.udid);
17
+ const host = options.host || 'localhost';
18
+ const port = options.port || await resolveLocalWdaPort(udid, host);
19
+ const mjpegPort = options.mjpegPort || await resolveLocalWdaMjpegPort(udid, host);
20
+ const key = `${udid}:${host}:${port}:${mjpegPort}`;
21
+ let manager = managers.get(key);
22
+ if (!manager) {
23
+ manager = new IOSWdaRuntime({ ...options, udid, host, port, mjpegPort });
24
+ managers.set(key, manager);
25
+ }
26
+ return manager.ensure();
27
+ }
28
+ async function resolveLocalWdaPort(udid, host) {
29
+ if (isLocalHost(host) && await isWdaReachable(host, DEFAULT_WDA_PORT)) {
30
+ return DEFAULT_WDA_PORT;
31
+ }
32
+ return allocateLocalWdaPort(udid, host);
33
+ }
34
+ async function resolveLocalWdaMjpegPort(udid, host) {
35
+ if (isLocalHost(host) && await isMjpegReachable(host, DEFAULT_WDA_MJPEG_PORT)) {
36
+ return DEFAULT_WDA_MJPEG_PORT;
37
+ }
38
+ return allocateLocalWdaMjpegPort(udid, host);
39
+ }
40
+ async function resolveIOSUdid(requested) {
41
+ const usbUdids = await listUsbIOSUdids();
42
+ if (requested && usbUdids.includes(requested))
43
+ return requested;
44
+ if (requested && usbUdids.length !== 1)
45
+ return requested;
46
+ if (usbUdids.length === 1)
47
+ return usbUdids[0];
48
+ if (requested)
49
+ return requested;
50
+ throw new Error('No iOS devices connected. Please connect an iPhone by USB first.');
51
+ }
52
+ async function listUsbIOSUdids() {
53
+ try {
54
+ const { stdout } = await execFileText(findExecutable('idevice_id'), ['-l'], 10_000);
55
+ return stdout
56
+ .split(/\r?\n/)
57
+ .map((line) => line.trim())
58
+ .filter(Boolean);
59
+ }
60
+ catch {
61
+ return [];
62
+ }
63
+ }
64
+ async function allocateLocalWdaPort(udid, host) {
65
+ const allocationKey = `${host}:${udid}`;
66
+ const existing = allocatedLocalPorts.get(allocationKey);
67
+ if (existing)
68
+ return existing;
69
+ for (let port = DEFAULT_WDA_PORT; port <= DEFAULT_LOCAL_WDA_PORT_END; port += 1) {
70
+ const usedByRuntime = Array.from(allocatedLocalPorts.values()).includes(port);
71
+ if (usedByRuntime)
72
+ continue;
73
+ if (await isTcpPortAvailable(host, port)) {
74
+ allocatedLocalPorts.set(allocationKey, port);
75
+ return port;
76
+ }
77
+ }
78
+ throw new Error(`No available local WDA port in range ${DEFAULT_WDA_PORT}-${DEFAULT_LOCAL_WDA_PORT_END}`);
79
+ }
80
+ async function allocateLocalWdaMjpegPort(udid, host) {
81
+ const allocationKey = `${host}:${udid}`;
82
+ const existing = allocatedLocalMjpegPorts.get(allocationKey);
83
+ if (existing)
84
+ return existing;
85
+ for (let port = DEFAULT_WDA_MJPEG_PORT; port <= DEFAULT_LOCAL_WDA_MJPEG_PORT_END; port += 1) {
86
+ const usedByRuntime = Array.from(allocatedLocalMjpegPorts.values()).includes(port);
87
+ if (usedByRuntime)
88
+ continue;
89
+ if (await isTcpPortAvailable(host, port)) {
90
+ allocatedLocalMjpegPorts.set(allocationKey, port);
91
+ return port;
92
+ }
93
+ }
94
+ throw new Error(`No available local WDA MJPEG port in range ${DEFAULT_WDA_MJPEG_PORT}-${DEFAULT_LOCAL_WDA_MJPEG_PORT_END}`);
95
+ }
96
+ class IOSWdaRuntime {
97
+ udid;
98
+ host;
99
+ port;
100
+ mjpegPort;
101
+ projectPath;
102
+ startupTimeoutMs;
103
+ useXcodebuild;
104
+ log;
105
+ logFile;
106
+ iproxyProcess;
107
+ mjpegIproxyProcess;
108
+ xcodebuildProcess;
109
+ ensurePromise;
110
+ constructor(options) {
111
+ this.udid = options.udid;
112
+ this.host = options.host;
113
+ this.port = options.port;
114
+ this.mjpegPort = options.mjpegPort;
115
+ this.projectPath = resolveWdaProjectPath(options.projectPath);
116
+ this.startupTimeoutMs = options.startupTimeoutMs || DEFAULT_STARTUP_TIMEOUT_MS;
117
+ this.useXcodebuild = options.useXcodebuild === true;
118
+ this.log = options.log || (() => undefined);
119
+ const logDir = path.join(process.cwd(), 'logs');
120
+ fs.mkdirSync(logDir, { recursive: true });
121
+ this.logFile = path.join(logDir, `wda-${this.udid.replace(/[^a-zA-Z0-9_-]/g, '_')}-${this.port}.log`);
122
+ }
123
+ ensure() {
124
+ this.ensurePromise ??= this.ensureInternal().finally(() => {
125
+ this.ensurePromise = undefined;
126
+ });
127
+ return this.ensurePromise;
128
+ }
129
+ async ensureInternal() {
130
+ if (await isWdaReachable(this.host, this.port)) {
131
+ this.log(`WDA already reachable: http://${this.host}:${this.port}/status`);
132
+ this.ensureMjpegProxy();
133
+ return this.connection();
134
+ }
135
+ if (!isLocalHost(this.host)) {
136
+ throw new Error(`WDA is not reachable at ${this.host}:${this.port}. AIServer can only auto-start local WDA.`);
137
+ }
138
+ this.log(`WDA not reachable, preparing local iOS port forwarding for device ${this.udid}`);
139
+ this.startIproxy();
140
+ this.ensureMjpegProxy();
141
+ if (this.useXcodebuild) {
142
+ this.startXcodebuild();
143
+ }
144
+ else {
145
+ this.log('WDA xcodebuild auto-start disabled; waiting for an existing WebDriverAgent on device port 8100');
146
+ }
147
+ await this.waitForWda();
148
+ return this.connection();
149
+ }
150
+ connection() {
151
+ return {
152
+ udid: this.udid,
153
+ host: this.host,
154
+ port: this.port,
155
+ mjpegPort: this.mjpegPort,
156
+ logFile: this.logFile,
157
+ };
158
+ }
159
+ startIproxy() {
160
+ if (this.iproxyProcess && !this.iproxyProcess.killed)
161
+ return;
162
+ this.iproxyProcess = this.startIproxyProcess(this.port, DEFAULT_WDA_PORT, 'iproxy');
163
+ }
164
+ ensureMjpegProxy() {
165
+ if (!isLocalHost(this.host))
166
+ return;
167
+ if (this.mjpegIproxyProcess && !this.mjpegIproxyProcess.killed)
168
+ return;
169
+ void isMjpegReachable(this.host, this.mjpegPort).then((reachable) => {
170
+ if (reachable || (this.mjpegIproxyProcess && !this.mjpegIproxyProcess.killed)) {
171
+ return;
172
+ }
173
+ this.mjpegIproxyProcess = this.startIproxyProcess(this.mjpegPort, DEFAULT_WDA_MJPEG_PORT, 'mjpeg-iproxy');
174
+ });
175
+ }
176
+ startIproxyProcess(localPort, devicePort, label) {
177
+ const iproxy = findExecutable('iproxy');
178
+ this.log(`Starting ${label} for iOS device ${this.udid}: localhost:${localPort}->device:${devicePort}`);
179
+ const child = spawn(iproxy, ['-u', this.udid, `${localPort}:${devicePort}`], {
180
+ stdio: ['pipe', 'pipe', 'pipe'],
181
+ });
182
+ child.stdin.end();
183
+ this.pipeProcessLogs(child, label);
184
+ return child;
185
+ }
186
+ startXcodebuild() {
187
+ if (this.xcodebuildProcess && !this.xcodebuildProcess.killed)
188
+ return;
189
+ if (!fs.existsSync(this.projectPath)) {
190
+ throw new Error(`WebDriverAgent project not found: ${this.projectPath}`);
191
+ }
192
+ const args = [
193
+ '-project',
194
+ this.projectPath,
195
+ '-scheme',
196
+ 'WebDriverAgentRunner',
197
+ '-destination',
198
+ `id=${this.udid}`,
199
+ 'test',
200
+ ];
201
+ this.log(`Starting WebDriverAgentRunner by xcodebuild, log: ${this.logFile}`);
202
+ const child = spawn('xcodebuild', args, {
203
+ stdio: ['pipe', 'pipe', 'pipe'],
204
+ env: {
205
+ ...process.env,
206
+ IDEPackageSupportUseBuiltinSCM: 'YES',
207
+ },
208
+ });
209
+ child.stdin.end();
210
+ this.xcodebuildProcess = child;
211
+ this.pipeProcessLogs(child, 'xcodebuild');
212
+ }
213
+ pipeProcessLogs(child, label) {
214
+ const stream = fs.createWriteStream(this.logFile, { flags: 'a' });
215
+ stream.write(`\n[${new Date().toISOString()}] ${label} started pid=${child.pid}\n`);
216
+ child.stdout.on('data', (chunk) => stream.write(`[${label}] ${chunk.toString()}`));
217
+ child.stderr.on('data', (chunk) => stream.write(`[${label}:err] ${chunk.toString()}`));
218
+ child.on('exit', (code, signal) => {
219
+ stream.write(`[${new Date().toISOString()}] ${label} exited code=${code ?? '-'} signal=${signal ?? '-'}\n`);
220
+ stream.end();
221
+ if (label === 'xcodebuild')
222
+ this.xcodebuildProcess = undefined;
223
+ if (label === 'iproxy')
224
+ this.iproxyProcess = undefined;
225
+ if (label === 'mjpeg-iproxy')
226
+ this.mjpegIproxyProcess = undefined;
227
+ });
228
+ child.on('error', (error) => {
229
+ stream.write(`[${new Date().toISOString()}] ${label} error ${error.message}\n`);
230
+ this.log(`${label} failed: ${error.message}`);
231
+ });
232
+ }
233
+ async waitForWda() {
234
+ const startedAt = Date.now();
235
+ while (Date.now() - startedAt < this.startupTimeoutMs) {
236
+ if (await isWdaReachable(this.host, this.port)) {
237
+ this.log(`WDA reachable: http://${this.host}:${this.port}/status`);
238
+ return;
239
+ }
240
+ await sleep(1000);
241
+ }
242
+ throw new Error(`WDA did not become reachable within ${this.startupTimeoutMs}ms. See log: ${this.logFile}`);
243
+ }
244
+ }
245
+ async function isWdaReachable(host, port) {
246
+ const controller = new AbortController();
247
+ const timer = setTimeout(() => controller.abort(), 2000);
248
+ try {
249
+ const response = await fetch(`http://${host}:${port}/status`, { signal: controller.signal });
250
+ if (!response.ok)
251
+ return false;
252
+ const body = await response.text();
253
+ return body.includes('sessionId') || body.includes('WebDriverAgent') || body.includes('"ready"');
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ finally {
259
+ clearTimeout(timer);
260
+ }
261
+ }
262
+ async function isMjpegReachable(host, port) {
263
+ const controller = new AbortController();
264
+ const timer = setTimeout(() => controller.abort(), 1000);
265
+ try {
266
+ const response = await fetch(`http://${host}:${port}`, { signal: controller.signal });
267
+ await response.body?.cancel();
268
+ return response.ok && String(response.headers.get('content-type') || '').includes('multipart');
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ finally {
274
+ clearTimeout(timer);
275
+ }
276
+ }
277
+ function isTcpPortAvailable(host, port) {
278
+ return new Promise((resolve) => {
279
+ const server = net.createServer();
280
+ server.once('error', () => resolve(false));
281
+ server.once('listening', () => {
282
+ server.close(() => resolve(true));
283
+ });
284
+ server.listen(port, host);
285
+ });
286
+ }
287
+ function resolveWdaProjectPath(projectPath) {
288
+ const raw = projectPath ||
289
+ process.env.APPIUM_WDA_PROJECT_PATH ||
290
+ path.join(os.homedir(), '.appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj');
291
+ return raw.endsWith('.xcodeproj') ? raw : path.join(raw, 'WebDriverAgent.xcodeproj');
292
+ }
293
+ function isLocalHost(host) {
294
+ return host === 'localhost' || host === '127.0.0.1' || host === '::1';
295
+ }
296
+ function findExecutable(name) {
297
+ const candidates = [
298
+ name,
299
+ `/opt/homebrew/bin/${name}`,
300
+ `/usr/local/bin/${name}`,
301
+ `/usr/bin/${name}`,
302
+ ];
303
+ return candidates.find((candidate) => candidate === name || fs.existsSync(candidate)) || name;
304
+ }
305
+ function execFileText(file, args, timeout) {
306
+ return new Promise((resolve, reject) => {
307
+ const child = spawn(file, args, { stdio: ['ignore', 'pipe', 'pipe'] });
308
+ let stdout = '';
309
+ let stderr = '';
310
+ const timer = setTimeout(() => {
311
+ child.kill('SIGTERM');
312
+ reject(new Error(`${file} ${args.join(' ')} timed out`));
313
+ }, timeout);
314
+ child.stdout.on('data', (chunk) => {
315
+ stdout += chunk.toString();
316
+ });
317
+ child.stderr.on('data', (chunk) => {
318
+ stderr += chunk.toString();
319
+ });
320
+ child.on('error', (error) => {
321
+ clearTimeout(timer);
322
+ reject(error);
323
+ });
324
+ child.on('exit', (code) => {
325
+ clearTimeout(timer);
326
+ if (code === 0)
327
+ resolve({ stdout, stderr });
328
+ else
329
+ reject(new Error(`${file} exited with code ${code ?? '-'}: ${stderr}`));
330
+ });
331
+ });
332
+ }
333
+ //# sourceMappingURL=ios-wda-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ios-wda-manager.js","sourceRoot":"","sources":["../../src/executor/ios-wda-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getGitStatus(root: string): Promise<any>;
2
+ export declare function getGitDiff(root: string, filePath?: string, staged?: boolean): Promise<any>;
3
+ export declare function gitBranch(root: string, operation?: string, branchName?: string): Promise<any>;
4
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/goose-runtime/git.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA2B7D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAOhG;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,UAAU,SAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAgB/F"}
@@ -0,0 +1,63 @@
1
+ import { execFile } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import path from 'path';
4
+ import { truncateText } from './workspace.js';
5
+ const execFileAsync = promisify(execFile);
6
+ export async function getGitStatus(root) {
7
+ try {
8
+ const [{ stdout: branchStdout }, { stdout: statusStdout }, { stdout: topLevelStdout }] = await Promise.all([
9
+ execFileAsync('git', ['branch', '--show-current'], { cwd: root, timeout: 5000, maxBuffer: 1024 * 1024 }),
10
+ execFileAsync('git', ['status', '--short'], { cwd: root, timeout: 5000, maxBuffer: 1024 * 1024 }),
11
+ execFileAsync('git', ['rev-parse', '--show-toplevel'], { cwd: root, timeout: 5000, maxBuffer: 1024 * 1024 }),
12
+ ]);
13
+ const changedFiles = String(statusStdout || '').split('\n').map((line) => line.trimEnd()).filter(Boolean).slice(0, 200).map((line) => ({
14
+ status: line.slice(0, 2).trim() || line.slice(0, 1),
15
+ path: line.slice(3).trim() || line,
16
+ raw: line,
17
+ }));
18
+ const repositoryRoot = String(topLevelStdout || '').trim() || root;
19
+ return {
20
+ repositories: [{
21
+ root: repositoryRoot,
22
+ relativePath: path.relative(root, repositoryRoot) || '.',
23
+ branch: String(branchStdout || '').trim() || 'HEAD',
24
+ clean: changedFiles.length === 0,
25
+ changedFiles,
26
+ changedFileCount: changedFiles.length,
27
+ truncated: String(statusStdout || '').split('\n').filter(Boolean).length > changedFiles.length,
28
+ }],
29
+ };
30
+ }
31
+ catch {
32
+ return { repositories: [] };
33
+ }
34
+ }
35
+ export async function getGitDiff(root, filePath, staged) {
36
+ const args = ['diff'];
37
+ if (staged === true)
38
+ args.push('--cached');
39
+ if (filePath)
40
+ args.push('--', filePath);
41
+ const { stdout } = await execFileAsync('git', args, { cwd: root, timeout: 15000, maxBuffer: 4 * 1024 * 1024 });
42
+ const output = truncateText(String(stdout || ''));
43
+ return { root, filePath: filePath || null, diff: output.text, truncated: output.truncated };
44
+ }
45
+ export async function gitBranch(root, operation = 'list', branchName = '') {
46
+ if (operation === 'list') {
47
+ const { stdout } = await execFileAsync('git', ['branch', '--list'], { cwd: root, timeout: 5000, maxBuffer: 1024 * 1024 });
48
+ return { root, branches: String(stdout || '').split('\n').map((line) => line.trim()).filter(Boolean) };
49
+ }
50
+ if (!/^[A-Za-z0-9._/-]+$/.test(branchName) || branchName.includes('..') || branchName.startsWith('-')) {
51
+ throw new Error('分支名称不合法');
52
+ }
53
+ const args = operation === 'create'
54
+ ? ['checkout', '-b', branchName]
55
+ : operation === 'checkout'
56
+ ? ['checkout', branchName]
57
+ : null;
58
+ if (!args)
59
+ throw new Error('不支持的 Git 分支操作');
60
+ const { stdout, stderr } = await execFileAsync('git', args, { cwd: root, timeout: 15000, maxBuffer: 1024 * 1024 });
61
+ return { root, operation, branchName, stdout, stderr };
62
+ }
63
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/goose-runtime/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { GooseRuntimeToolCallRequest, GooseRuntimeToolDefinition, GooseRuntimeToolResult } from './types.js';
2
+ export declare const gooseRuntimeTools: GooseRuntimeToolDefinition[];
3
+ export declare function listGooseRuntimeTools(): GooseRuntimeToolDefinition[];
4
+ export declare function callGooseRuntimeTool(request: GooseRuntimeToolCallRequest): Promise<GooseRuntimeToolResult>;
5
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/goose-runtime/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAkBlH,eAAO,MAAM,iBAAiB,EAAE,0BAA0B,EAWzD,CAAC;AAWF,wBAAgB,qBAAqB,IAAI,0BAA0B,EAAE,CAEpE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsGhH"}
@@ -0,0 +1,141 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { execFile } from 'child_process';
4
+ import { promisify } from 'util';
5
+ import { assertSafeCommand, assertSafeFile, listDirectory, MAX_FILE_BYTES, MAX_FILE_CHARS, MAX_SEARCH_RESULTS, resolveWritableTarget, resolveWorkspaceRoot, resolveWorkspaceTarget, searchText, truncateText, } from './workspace.js';
6
+ import { getGitDiff, getGitStatus, gitBranch } from './git.js';
7
+ const execFileAsync = promisify(execFile);
8
+ export const gooseRuntimeTools = [
9
+ { name: 'status', description: '检查本地工作区状态和 Git 状态' },
10
+ { name: 'list_tree', description: '列出本地工作区目录树' },
11
+ { name: 'read_file', description: '读取本地工作区文本文件' },
12
+ { name: 'search_text', description: '搜索本地工作区文本内容' },
13
+ { name: 'git_status', description: '查看 Git 状态' },
14
+ { name: 'git_diff', description: '查看 Git diff' },
15
+ { name: 'git_branch', description: '查看或切换/创建 Git 分支', dangerous: true, approvalRequired: true },
16
+ { name: 'edit_file', description: '精确替换本地文件内容', dangerous: true, approvalRequired: true },
17
+ { name: 'write_file', description: '写入/创建本地文件', dangerous: true, approvalRequired: true },
18
+ { name: 'shell', description: '在本地工作区执行 shell 命令', dangerous: true, approvalRequired: true },
19
+ ];
20
+ const dangerousTools = new Set(['write_file', 'edit_file', 'shell', 'git_branch']);
21
+ function pickString(...values) {
22
+ for (const value of values) {
23
+ if (typeof value === 'string' && value.trim())
24
+ return value.trim();
25
+ }
26
+ return '';
27
+ }
28
+ export function listGooseRuntimeTools() {
29
+ return gooseRuntimeTools;
30
+ }
31
+ export async function callGooseRuntimeTool(request) {
32
+ const toolName = pickString(request.toolName, request.name);
33
+ const args = (request.args || request.arguments || {});
34
+ if (!toolName)
35
+ throw new Error('缺少 Goose Runtime toolName');
36
+ if (!gooseRuntimeTools.some((tool) => tool.name === toolName))
37
+ throw new Error(`不支持的 Goose Runtime 工具:${toolName}`);
38
+ if (dangerousTools.has(toolName) && request.approved !== true && args.approved !== true) {
39
+ throw new Error(`执行 ${toolName} 前必须由用户确认`);
40
+ }
41
+ const workspacePath = pickString(request.workspacePath, request.path, args.workspacePath, args.path);
42
+ const root = await resolveWorkspaceRoot(workspacePath);
43
+ let data;
44
+ switch (toolName) {
45
+ case 'status': {
46
+ data = { path: root, exists: true, isDirectory: true, gitStatus: await getGitStatus(root) };
47
+ break;
48
+ }
49
+ case 'list_tree': {
50
+ const dirPath = args.dirPath ? await resolveWorkspaceTarget(root, args.dirPath) : root;
51
+ const stat = await fs.promises.stat(dirPath);
52
+ if (!stat.isDirectory())
53
+ throw new Error('目标路径不是文件夹');
54
+ const depth = Math.max(0, Math.min(Number(args.depth ?? 1), 4));
55
+ data = { root, dirPath, tree: await listDirectory(root, dirPath, depth) };
56
+ break;
57
+ }
58
+ case 'read_file': {
59
+ const filePath = await resolveWorkspaceTarget(root, args.filePath);
60
+ const stat = await fs.promises.stat(filePath);
61
+ if (!stat.isFile())
62
+ throw new Error('目标路径不是文件');
63
+ assertSafeFile(filePath, '读取');
64
+ const buffer = await fs.promises.readFile(filePath);
65
+ const sliced = buffer.length > MAX_FILE_BYTES ? buffer.subarray(0, MAX_FILE_BYTES) : buffer;
66
+ const text = sliced.toString('utf8');
67
+ if (text.includes('\u0000'))
68
+ throw new Error('二进制文件不支持读取');
69
+ const maxChars = Math.max(1, Math.min(Number(args.maxChars ?? MAX_FILE_CHARS), MAX_FILE_CHARS));
70
+ const content = text.length > maxChars ? text.slice(0, maxChars) : text;
71
+ data = { root, filePath, relativePath: path.relative(root, filePath), content, size: buffer.length, truncated: buffer.length > sliced.length || text.length > content.length };
72
+ break;
73
+ }
74
+ case 'write_file': {
75
+ const filePath = await resolveWritableTarget(root, args.filePath);
76
+ assertSafeFile(filePath, '写入');
77
+ const exists = await fs.promises.stat(filePath).then((stat) => stat.isFile()).catch(() => false);
78
+ const content = typeof args.content === 'string' ? args.content : '';
79
+ await fs.promises.writeFile(filePath, content, 'utf8');
80
+ data = { root, filePath, relativePath: path.relative(root, filePath), created: !exists, size: Buffer.byteLength(content, 'utf8'), updatedAt: new Date().toISOString() };
81
+ break;
82
+ }
83
+ case 'edit_file': {
84
+ const filePath = await resolveWorkspaceTarget(root, args.filePath);
85
+ const stat = await fs.promises.stat(filePath);
86
+ if (!stat.isFile())
87
+ throw new Error('目标路径不是文件');
88
+ assertSafeFile(filePath, '编辑');
89
+ const oldText = typeof args.oldText === 'string' ? args.oldText : '';
90
+ const newText = typeof args.newText === 'string' ? args.newText : '';
91
+ if (!oldText)
92
+ throw new Error('缺少要替换的原文');
93
+ const original = await fs.promises.readFile(filePath, 'utf8');
94
+ const firstIndex = original.indexOf(oldText);
95
+ if (firstIndex < 0)
96
+ throw new Error('未找到要替换的原文');
97
+ if (original.indexOf(oldText, firstIndex + oldText.length) >= 0)
98
+ throw new Error('原文匹配到多处,请提供更精确的片段');
99
+ const nextContent = original.slice(0, firstIndex) + newText + original.slice(firstIndex + oldText.length);
100
+ await fs.promises.writeFile(filePath, nextContent, 'utf8');
101
+ data = { root, filePath, relativePath: path.relative(root, filePath), replaced: true, updatedAt: new Date().toISOString() };
102
+ break;
103
+ }
104
+ case 'search_text': {
105
+ const searchRoot = args.searchPath ? await resolveWorkspaceTarget(root, args.searchPath) : root;
106
+ const stat = await fs.promises.stat(searchRoot);
107
+ if (!stat.isDirectory())
108
+ throw new Error('搜索路径不是文件夹');
109
+ const query = typeof args.query === 'string' ? args.query : '';
110
+ const maxResults = Math.max(1, Math.min(Number(args.maxResults ?? 50), MAX_SEARCH_RESULTS));
111
+ data = await searchText(root, searchRoot, query, maxResults);
112
+ break;
113
+ }
114
+ case 'git_status': {
115
+ data = await getGitStatus(root);
116
+ break;
117
+ }
118
+ case 'git_diff': {
119
+ const target = args.filePath ? await resolveWorkspaceTarget(root, args.filePath) : '';
120
+ data = await getGitDiff(root, target, args.staged === true);
121
+ break;
122
+ }
123
+ case 'git_branch': {
124
+ data = await gitBranch(root, String(args.operation || 'list'), String(args.name || args.branchName || ''));
125
+ break;
126
+ }
127
+ case 'shell': {
128
+ const command = typeof args.command === 'string' ? args.command : '';
129
+ assertSafeCommand(command);
130
+ const timeout = Math.max(1000, Math.min(Number(args.timeoutMs ?? 120000), 120000));
131
+ const { stdout, stderr } = await execFileAsync('/bin/sh', ['-lc', command], { cwd: root, timeout, maxBuffer: 4 * 1024 * 1024 });
132
+ const output = truncateText(`${stdout || ''}${stderr ? `\n${stderr}` : ''}`);
133
+ data = { root, command, output: output.text, truncated: output.truncated };
134
+ break;
135
+ }
136
+ default:
137
+ throw new Error(`不支持的 Goose Runtime 工具:${toolName}`);
138
+ }
139
+ return { toolName, workspacePath: root, data };
140
+ }
141
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/goose-runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type GooseRuntimeToolName = 'status' | 'list_tree' | 'read_file' | 'write_file' | 'edit_file' | 'search_text' | 'git_status' | 'git_diff' | 'git_branch' | 'shell';
2
+ export interface GooseRuntimeToolCallRequest {
3
+ toolName?: string;
4
+ name?: string;
5
+ workspacePath?: string;
6
+ path?: string;
7
+ args?: Record<string, unknown>;
8
+ arguments?: Record<string, unknown>;
9
+ approved?: boolean;
10
+ }
11
+ export interface GooseRuntimeToolDefinition {
12
+ name: GooseRuntimeToolName;
13
+ description: string;
14
+ dangerous?: boolean;
15
+ approvalRequired?: boolean;
16
+ inputSchema?: Record<string, unknown>;
17
+ }
18
+ export interface GooseRuntimeToolResult {
19
+ toolName: string;
20
+ workspacePath: string;
21
+ data: unknown;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/goose-runtime/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,WAAW,GACX,WAAW,GACX,YAAY,GACZ,WAAW,GACX,aAAa,GACb,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,OAAO,CAAC;AAEZ,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/goose-runtime/types.ts"],"names":[],"mappings":""}