@qelos/aidev 0.2.10 → 0.2.11

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.
@@ -10,7 +10,9 @@ const logger_1 = require("../logger");
10
10
  const claude_1 = require("../ai/claude");
11
11
  const cursor_1 = require("../ai/cursor");
12
12
  const windsurf_1 = require("../ai/windsurf");
13
+ const windsurf_2 = require("../ai/windsurf");
13
14
  const index_1 = require("../ai/index");
15
+ const platform_1 = require("../platform");
14
16
  // eslint-disable-next-line @typescript-eslint/no-require-imports
15
17
  const childProcess = require('node:child_process');
16
18
  // ─── Helpers ──────────────────────────────────────────────────────────────────
@@ -171,7 +173,7 @@ function spyLogger() {
171
173
  strict_1.default.equal(result.output, '');
172
174
  });
173
175
  });
174
- (0, node_test_1.describe)('WindsurfRunner – process cleanup', () => {
176
+ (0, node_test_1.describe)('WindsurfRunner – process cleanup (non-Windows CLI mode)', { skip: platform_1.isWindows }, () => {
175
177
  (0, node_test_1.beforeEach)(() => node_test_2.mock.restoreAll());
176
178
  (0, node_test_1.afterEach)(() => node_test_2.mock.restoreAll());
177
179
  (0, node_test_1.it)('kills Windsurf IDE after run when it was not already running', async () => {
@@ -179,23 +181,17 @@ function spyLogger() {
179
181
  const base = { pid: 1, output: [], stderr: '', status: 0, signal: null, error: undefined };
180
182
  if (command === 'pgrep')
181
183
  return { ...base, stdout: '', status: 1 };
182
- if (command === 'tasklist')
183
- return { ...base, stdout: 'INFO: No tasks are running' };
184
184
  return { ...base, stdout: '' };
185
185
  });
186
186
  spyLogger();
187
187
  const runner = new windsurf_1.WindsurfRunner();
188
188
  await runner.run('test prompt');
189
- const killCommands = ['taskkill', 'pkill'];
190
189
  const calls = spawnMock.mock.calls.map((c) => c.arguments[0]);
191
- strict_1.default.ok(calls.some((cmd) => killCommands.includes(cmd)), `Expected one of [${killCommands}] in spawn calls: [${calls}]`);
190
+ strict_1.default.ok(calls.some((cmd) => cmd === 'pkill'), `Expected pkill in spawn calls: [${calls}]`);
192
191
  });
193
192
  (0, node_test_1.it)('does not kill Windsurf IDE when it was already running', async () => {
194
193
  const spawnMock = node_test_2.mock.method(childProcess, 'spawnSync', (command) => {
195
194
  const base = { pid: 1, output: [], stderr: '', status: 0, signal: null, error: undefined };
196
- if (command === 'tasklist') {
197
- return { ...base, stdout: 'Windsurf.exe 1234 Console 1 100,000 K' };
198
- }
199
195
  if (command === 'pgrep') {
200
196
  return { ...base, stdout: '1234' };
201
197
  }
@@ -204,9 +200,18 @@ function spyLogger() {
204
200
  spyLogger();
205
201
  const runner = new windsurf_1.WindsurfRunner();
206
202
  await runner.run('test prompt');
207
- const killCommands = ['taskkill', 'pkill'];
208
203
  const calls = spawnMock.mock.calls.map((c) => c.arguments[0]);
209
- strict_1.default.ok(!calls.some((cmd) => killCommands.includes(cmd)), `Expected none of [${killCommands}] in spawn calls: [${calls}]`);
204
+ strict_1.default.ok(!calls.some((cmd) => cmd === 'pkill'), `Expected no pkill in spawn calls: [${calls}]`);
205
+ });
206
+ });
207
+ (0, node_test_1.describe)('WindsurfRunner – Docker mode (Windows)', { skip: !platform_1.isWindows }, () => {
208
+ (0, node_test_1.it)('isDockerWindsurfAvailable checks for docker and WINDSURF_TOKEN', () => {
209
+ // This test reflects the real environment — just verify it returns a boolean
210
+ strict_1.default.equal(typeof (0, windsurf_2.isDockerWindsurfAvailable)(), 'boolean');
211
+ });
212
+ (0, node_test_1.it)('isAvailable returns boolean on Windows', () => {
213
+ const runner = new windsurf_1.WindsurfRunner();
214
+ strict_1.default.equal(typeof runner.isAvailable(), 'boolean');
210
215
  });
211
216
  });
212
217
  // ─── createRunners ────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"ai-runners.test.js","sourceRoot":"","sources":["../../src/__tests__/ai-runners.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-runners.test.js","sourceRoot":"","sources":["../../src/__tests__/ai-runners.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AIRunner, AIRunResult } from './base';
2
+ /**
3
+ * Google Antigravity agent runner. Uses the `agy` CLI (or `antigravity` on some
4
+ * installs). Opens the workspace and runs the agent with the prompt on stdin.
5
+ * See https://antigravity.codes and antigravity.google/download.
6
+ */
7
+ export declare class AntigravityRunner implements AIRunner {
8
+ readonly name = "antigravity";
9
+ isAvailable(): boolean;
10
+ run(prompt: string, notes?: string): Promise<AIRunResult>;
11
+ }
12
+ //# sourceMappingURL=antigravity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/ai/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI/C;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,WAAW,IAAI,OAAO;IAIhB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAsDhE"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AntigravityRunner = void 0;
4
+ const logger_1 = require("../logger");
5
+ const platform_1 = require("../platform");
6
+ /**
7
+ * Google Antigravity agent runner. Uses the `agy` CLI (or `antigravity` on some
8
+ * installs). Opens the workspace and runs the agent with the prompt on stdin.
9
+ * See https://antigravity.codes and antigravity.google/download.
10
+ */
11
+ class AntigravityRunner {
12
+ constructor() {
13
+ this.name = 'antigravity';
14
+ }
15
+ isAvailable() {
16
+ return (0, platform_1.commandExists)('agy') || (0, platform_1.commandExists)('antigravity');
17
+ }
18
+ async run(prompt, notes) {
19
+ const fullPrompt = notes ? `${prompt}\n\nAdditional context:\n${notes}` : prompt;
20
+ logger_1.logger.info('Running Antigravity agent...');
21
+ logger_1.logger.debug(`Prompt: ${fullPrompt.slice(0, 200)}...`);
22
+ const cwd = process.cwd();
23
+ const bin = (0, platform_1.commandExists)('agy') ? 'agy' : 'antigravity';
24
+ const baseArgs = ['.'];
25
+ const attempts = [
26
+ ['--agent', '--print', ...baseArgs],
27
+ ['--print', ...baseArgs],
28
+ baseArgs,
29
+ ];
30
+ let result = (0, platform_1.spawnCommand)(bin, attempts[0], {
31
+ encoding: 'utf8',
32
+ timeout: 10 * 60 * 1000,
33
+ cwd,
34
+ env: (0, platform_1.getUserShellEnv)(),
35
+ input: fullPrompt,
36
+ });
37
+ for (let i = 1; i < attempts.length; i++) {
38
+ if (result.status === 0)
39
+ break;
40
+ const err = (result.stderr || '').toLowerCase();
41
+ const unknownFlag = err.includes('unknown option') ||
42
+ err.includes('unrecognized option') ||
43
+ err.includes('unknown argument') ||
44
+ err.includes('unexpected argument') ||
45
+ err.includes('invalid option');
46
+ if (!unknownFlag)
47
+ break;
48
+ result = (0, platform_1.spawnCommand)(bin, attempts[i], {
49
+ encoding: 'utf8',
50
+ timeout: 10 * 60 * 1000,
51
+ cwd,
52
+ env: (0, platform_1.getUserShellEnv)(),
53
+ input: fullPrompt,
54
+ });
55
+ }
56
+ const success = result.status === 0;
57
+ const output = result.stdout || '';
58
+ const error = result.stderr || '';
59
+ if (!success) {
60
+ logger_1.logger.warn(`Antigravity exited with status ${result.status}`);
61
+ if (error)
62
+ logger_1.logger.warn(`antigravity stderr: ${error.slice(0, 500)}`);
63
+ if (result.error)
64
+ logger_1.logger.warn(`antigravity spawn error: ${result.error.message}`);
65
+ }
66
+ return { success, output, error };
67
+ }
68
+ }
69
+ exports.AntigravityRunner = AntigravityRunner;
70
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/ai/antigravity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AIRunner, AIRunResult } from './base';
2
+ /**
3
+ * OpenAI Codex CLI runner. Uses `codex exec` for non-interactive agent runs.
4
+ * Install: npm install -g @openai/codex. Set OPENAI_API_KEY or use codex login.
5
+ */
6
+ export declare class CodexRunner implements AIRunner {
7
+ readonly name = "codex";
8
+ isAvailable(): boolean;
9
+ run(prompt: string, notes?: string): Promise<AIRunResult>;
10
+ }
11
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI/C;;;GAGG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,IAAI,WAAW;IAExB,WAAW,IAAI,OAAO;IAIhB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAkChE"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodexRunner = void 0;
4
+ const logger_1 = require("../logger");
5
+ const platform_1 = require("../platform");
6
+ /**
7
+ * OpenAI Codex CLI runner. Uses `codex exec` for non-interactive agent runs.
8
+ * Install: npm install -g @openai/codex. Set OPENAI_API_KEY or use codex login.
9
+ */
10
+ class CodexRunner {
11
+ constructor() {
12
+ this.name = 'codex';
13
+ }
14
+ isAvailable() {
15
+ return (0, platform_1.commandExists)('codex');
16
+ }
17
+ async run(prompt, notes) {
18
+ const fullPrompt = notes ? `${prompt}\n\nAdditional context:\n${notes}` : prompt;
19
+ logger_1.logger.info('Running Codex CLI (exec)...');
20
+ logger_1.logger.debug(`Prompt: ${fullPrompt.slice(0, 200)}...`);
21
+ const cwd = process.cwd();
22
+ const args = [
23
+ 'exec',
24
+ '--ask-for-approval', 'never',
25
+ '--sandbox', 'workspace-write',
26
+ '--cd', cwd,
27
+ fullPrompt,
28
+ ];
29
+ const result = (0, platform_1.spawnCommand)('codex', args, {
30
+ encoding: 'utf8',
31
+ timeout: 10 * 60 * 1000,
32
+ cwd,
33
+ env: (0, platform_1.getUserShellEnv)(),
34
+ });
35
+ const success = result.status === 0;
36
+ const output = result.stdout || '';
37
+ const error = result.stderr || '';
38
+ if (!success) {
39
+ logger_1.logger.warn(`Codex exited with status ${result.status}`);
40
+ if (error)
41
+ logger_1.logger.warn(`codex stderr: ${error.slice(0, 500)}`);
42
+ if (result.error)
43
+ logger_1.logger.warn(`codex spawn error: ${result.error.message}`);
44
+ }
45
+ return { success, output, error };
46
+ }
47
+ }
48
+ exports.CodexRunner = CodexRunner;
49
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":";;;AACA,sCAAmC;AACnC,0CAA2E;AAE3E;;;GAGG;AACH,MAAa,WAAW;IAAxB;QACW,SAAI,GAAG,OAAO,CAAC;IAwC1B,CAAC;IAtCC,WAAW;QACT,OAAO,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,KAAc;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,4BAA4B,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjF,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,eAAM,CAAC,KAAK,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,MAAM;YACN,oBAAoB,EAAE,OAAO;YAC7B,WAAW,EAAE,iBAAiB;YAC9B,MAAM,EAAE,GAAG;YACX,UAAU;SACX,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,OAAO,EAAE,IAAI,EAAE;YACzC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;YACvB,GAAG;YACH,GAAG,EAAE,IAAA,0BAAe,GAAE;SACvB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,IAAI,KAAK;gBAAE,eAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,MAAM,CAAC,KAAK;gBAAE,eAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;CACF;AAzCD,kCAyCC"}
@@ -4,4 +4,11 @@ export declare class WindsurfRunner implements AIRunner {
4
4
  isAvailable(): boolean;
5
5
  run(prompt: string, notes?: string): Promise<AIRunResult>;
6
6
  }
7
+ /**
8
+ * Checks whether the Docker-based Windsurf approach can work:
9
+ * 1. `docker` CLI is in PATH
10
+ * 2. WINDSURF_TOKEN env var is set (required for auth)
11
+ * 3. The Docker image exists locally
12
+ */
13
+ export declare function isDockerWindsurfAvailable(): boolean;
7
14
  //# sourceMappingURL=windsurf.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/ai/windsurf.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI/C,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,cAAc;IAE3B,WAAW,IAAI,OAAO;IAIhB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAqFhE"}
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/ai/windsurf.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAU/C,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,cAAc;IAE3B,WAAW,IAAI,OAAO;IAKhB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAMhE;AAmED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAOnD"}
@@ -34,114 +34,205 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.WindsurfRunner = void 0;
37
+ exports.isDockerWindsurfAvailable = isDockerWindsurfAvailable;
37
38
  const fs = __importStar(require("node:fs"));
38
39
  const os = __importStar(require("node:os"));
39
40
  const path = __importStar(require("node:path"));
40
41
  const node_child_process_1 = require("node:child_process");
41
42
  const logger_1 = require("../logger");
42
43
  const platform_1 = require("../platform");
44
+ /** Docker image for headless Windsurf on Windows. */
45
+ const WINDSURF_DOCKER_IMAGE = process.env.WINDSURF_DOCKER_IMAGE || 'windsurfinabox';
46
+ /** Max time (ms) to wait for Docker container to finish. */
47
+ const DOCKER_TIMEOUT = 10 * 60 * 1000;
43
48
  class WindsurfRunner {
44
49
  constructor() {
45
50
  this.name = 'windsurf';
46
51
  }
47
52
  isAvailable() {
53
+ if (platform_1.isWindows)
54
+ return isDockerWindsurfAvailable();
48
55
  return (0, platform_1.commandExists)('windsurf');
49
56
  }
50
57
  async run(prompt, notes) {
51
58
  const fullPrompt = notes ? `${prompt}\n\nAdditional context:\n${notes}` : prompt;
52
- logger_1.logger.info('Running Windsurf...');
53
- logger_1.logger.debug(`Prompt: ${fullPrompt.slice(0, 200)}...`);
54
- const wasRunning = isWindsurfProcessRunning();
55
- const cwd = process.cwd();
56
- // On Windows, cmd.exe does not forward stdin to child processes spawned via
57
- // .cmd shims, so piping via `-` leaves windsurf with an unread temp file and
58
- // no agent prompt. Write the prompt to a named temp file and pass its path
59
- // as the positional argument instead.
60
- let tmpFile;
61
- let stdinInput;
62
- let promptArg;
63
- if (platform_1.isWindows) {
64
- tmpFile = path.join(os.tmpdir(), `aidev-windsurf-${process.pid}.txt`);
65
- fs.writeFileSync(tmpFile, fullPrompt, 'utf8');
66
- promptArg = tmpFile;
67
- }
68
- else {
69
- stdinInput = fullPrompt;
70
- // Prompt must go via stdin on non-Windows — positional args are treated as
71
- // file paths by the windsurf CLI and would create files named with the
72
- // prompt text.
73
- promptArg = '-';
59
+ if (platform_1.isWindows)
60
+ return runViaDocker(fullPrompt);
61
+ return runViaCli(fullPrompt);
62
+ }
63
+ }
64
+ exports.WindsurfRunner = WindsurfRunner;
65
+ // ─── CLI runner (macOS / Linux) ────────────────────────────────────────────────
66
+ async function runViaCli(fullPrompt) {
67
+ logger_1.logger.info('Running Windsurf CLI...');
68
+ logger_1.logger.debug(`Prompt: ${fullPrompt.slice(0, 200)}...`);
69
+ const wasRunning = isWindsurfProcessRunning();
70
+ const cwd = process.cwd();
71
+ const stdinInput = fullPrompt;
72
+ const promptArg = '-';
73
+ const baseArgs = ['--agent', '--print', '--trust', '--workspace', cwd, promptArg];
74
+ const attempts = [
75
+ ['--model', 'auto', ...baseArgs],
76
+ ['--reasoning', 'auto', ...baseArgs],
77
+ baseArgs,
78
+ ];
79
+ let result = (0, platform_1.spawnCommand)('windsurf', attempts[0], {
80
+ encoding: 'utf8',
81
+ timeout: 10 * 60 * 1000,
82
+ cwd,
83
+ env: (0, platform_1.getUserShellEnv)(),
84
+ input: stdinInput,
85
+ });
86
+ for (let i = 1; i < attempts.length; i++) {
87
+ if (result.status === 0)
88
+ break;
89
+ const err = (result.stderr || '').toLowerCase();
90
+ const unknownFlag = err.includes('unknown option') ||
91
+ err.includes('unrecognized option') ||
92
+ err.includes('unknown argument') ||
93
+ err.includes('unexpected argument') ||
94
+ err.includes('invalid option');
95
+ if (!unknownFlag)
96
+ break;
97
+ result = (0, platform_1.spawnCommand)('windsurf', attempts[i], {
98
+ encoding: 'utf8',
99
+ timeout: 10 * 60 * 1000,
100
+ cwd,
101
+ env: (0, platform_1.getUserShellEnv)(),
102
+ input: stdinInput,
103
+ });
104
+ }
105
+ const success = result.status === 0;
106
+ const output = result.stdout || '';
107
+ const error = result.stderr || '';
108
+ if (!success) {
109
+ logger_1.logger.warn(`Windsurf exited with status ${result.status}`);
110
+ if (error)
111
+ logger_1.logger.warn(`windsurf stderr: ${error.slice(0, 500)}`);
112
+ if (result.error)
113
+ logger_1.logger.warn(`windsurf spawn error: ${result.error.message}`);
114
+ }
115
+ if (!wasRunning) {
116
+ killWindsurfProcess();
117
+ }
118
+ return { success, output, error };
119
+ }
120
+ // ─── Docker runner (Windows) ───────────────────────────────────────────────────
121
+ /**
122
+ * Checks whether the Docker-based Windsurf approach can work:
123
+ * 1. `docker` CLI is in PATH
124
+ * 2. WINDSURF_TOKEN env var is set (required for auth)
125
+ * 3. The Docker image exists locally
126
+ */
127
+ function isDockerWindsurfAvailable() {
128
+ if (!(0, platform_1.commandExists)('docker'))
129
+ return false;
130
+ if (!process.env.WINDSURF_TOKEN) {
131
+ logger_1.logger.debug('Windsurf Docker: WINDSURF_TOKEN not set');
132
+ return false;
133
+ }
134
+ return dockerImageExists(WINDSURF_DOCKER_IMAGE);
135
+ }
136
+ function dockerImageExists(image) {
137
+ const result = (0, node_child_process_1.spawnSync)('docker', ['image', 'inspect', image], {
138
+ encoding: 'utf8',
139
+ timeout: 10000,
140
+ stdio: ['ignore', 'ignore', 'ignore'],
141
+ });
142
+ return result.status === 0;
143
+ }
144
+ /**
145
+ * Runs Windsurf inside a Docker container using the windsurfinabox image.
146
+ *
147
+ * Flow:
148
+ * 1. Write prompt to `windsurf-instructions.txt` in a temp staging dir
149
+ * 2. Copy workspace files into the staging dir (so the container can modify them)
150
+ * 3. Launch container with workspace mounted at /home/ubuntu/workspace
151
+ * 4. Wait for the container to finish (it writes WORK-COMPLETED to output)
152
+ * 5. Copy modified files back to the real workspace
153
+ */
154
+ async function runViaDocker(fullPrompt) {
155
+ logger_1.logger.info('Running Windsurf via Docker (headless)...');
156
+ logger_1.logger.debug(`Prompt: ${fullPrompt.slice(0, 200)}...`);
157
+ const cwd = process.cwd();
158
+ const containerName = `aidev-windsurf-${process.pid}-${Date.now()}`;
159
+ // Write the instructions file directly in the workspace — the container
160
+ // reads it from the mounted workspace directory.
161
+ const instructionsFile = path.join(cwd, 'windsurf-instructions.txt');
162
+ const outputFile = path.join(cwd, 'windsurf-output.txt');
163
+ try {
164
+ fs.writeFileSync(instructionsFile, fullPrompt, 'utf8');
165
+ // Clean up any stale output file from a previous run
166
+ try {
167
+ fs.unlinkSync(outputFile);
74
168
  }
75
- const baseArgs = ['--agent', '--print', '--trust', '--workspace', cwd, promptArg];
76
- const attempts = [
77
- ['--model', 'auto', ...baseArgs],
78
- ['--reasoning', 'auto', ...baseArgs],
79
- baseArgs,
169
+ catch { /* ignore */ }
170
+ // Windsurf config dir — user can override via WINDSURF_CONFIG_DIR
171
+ const configDir = process.env.WINDSURF_CONFIG_DIR
172
+ || path.join(os.homedir(), '.config', 'Windsurf');
173
+ // Convert Windows paths to Docker-compatible paths (forward slashes)
174
+ const dockerCwd = cwd.replace(/\\/g, '/');
175
+ const dockerConfigDir = configDir.replace(/\\/g, '/');
176
+ const args = [
177
+ 'run', '--rm',
178
+ '--name', containerName,
179
+ '-e', `WINDSURF_TOKEN=${process.env.WINDSURF_TOKEN}`,
180
+ '-v', `${dockerCwd}:/home/ubuntu/workspace`,
181
+ '-v', `${dockerConfigDir}:/home/ubuntu/.config/Windsurf`,
182
+ WINDSURF_DOCKER_IMAGE,
80
183
  ];
81
- try {
82
- let result = (0, platform_1.spawnCommand)('windsurf', attempts[0], {
83
- encoding: 'utf8',
84
- timeout: 10 * 60 * 1000,
85
- cwd,
86
- env: (0, platform_1.getUserShellEnv)(),
87
- input: stdinInput,
88
- });
89
- for (let i = 1; i < attempts.length; i++) {
90
- if (result.status === 0)
91
- break;
92
- const err = (result.stderr || '').toLowerCase();
93
- const unknownFlag = err.includes('unknown option') ||
94
- err.includes('unrecognized option') ||
95
- err.includes('unknown argument') ||
96
- err.includes('unexpected argument') ||
97
- err.includes('invalid option');
98
- if (!unknownFlag)
99
- break;
100
- result = (0, platform_1.spawnCommand)('windsurf', attempts[i], {
101
- encoding: 'utf8',
102
- timeout: 10 * 60 * 1000,
103
- cwd,
104
- env: (0, platform_1.getUserShellEnv)(),
105
- input: stdinInput,
106
- });
107
- }
108
- const success = result.status === 0;
109
- const output = result.stdout || '';
110
- const error = result.stderr || '';
111
- if (!success) {
112
- logger_1.logger.warn(`Windsurf exited with status ${result.status}`);
113
- if (error)
114
- logger_1.logger.warn(`windsurf stderr: ${error.slice(0, 500)}`);
115
- if (result.error)
116
- logger_1.logger.warn(`windsurf spawn error: ${result.error.message}`);
117
- }
118
- if (!wasRunning) {
119
- killWindsurfProcess();
120
- }
121
- return { success, output, error };
184
+ logger_1.logger.debug(`Docker command: docker ${args.join(' ').slice(0, 300)}...`);
185
+ const result = (0, node_child_process_1.spawnSync)('docker', args, {
186
+ encoding: 'utf8',
187
+ timeout: DOCKER_TIMEOUT,
188
+ cwd,
189
+ });
190
+ // Read container output
191
+ let containerOutput = '';
192
+ if (fs.existsSync(outputFile)) {
193
+ containerOutput = fs.readFileSync(outputFile, 'utf8');
122
194
  }
123
- finally {
124
- if (tmpFile) {
125
- try {
126
- fs.unlinkSync(tmpFile);
127
- }
128
- catch { /* ignore */ }
195
+ const stdout = result.stdout || '';
196
+ const stderr = result.stderr || '';
197
+ const combinedOutput = [containerOutput, stdout].filter(Boolean).join('\n');
198
+ const success = result.status === 0 && containerOutput.includes('WORK-COMPLETED');
199
+ if (!success) {
200
+ logger_1.logger.warn(`Windsurf Docker exited with status ${result.status}`);
201
+ if (stderr)
202
+ logger_1.logger.warn(`docker stderr: ${stderr.slice(0, 500)}`);
203
+ if (result.error)
204
+ logger_1.logger.warn(`docker spawn error: ${result.error.message}`);
205
+ if (!containerOutput.includes('WORK-COMPLETED')) {
206
+ logger_1.logger.warn('Windsurf Docker did not produce WORK-COMPLETED marker');
129
207
  }
130
208
  }
209
+ return { success, output: combinedOutput, error: stderr };
210
+ }
211
+ finally {
212
+ // Clean up instructions and output files
213
+ try {
214
+ fs.unlinkSync(instructionsFile);
215
+ }
216
+ catch { /* ignore */ }
217
+ try {
218
+ fs.unlinkSync(outputFile);
219
+ }
220
+ catch { /* ignore */ }
221
+ // Kill the container if it's still running (e.g. timeout)
222
+ try {
223
+ (0, node_child_process_1.spawnSync)('docker', ['rm', '-f', containerName], {
224
+ timeout: 5000,
225
+ stdio: 'ignore',
226
+ });
227
+ }
228
+ catch { /* ignore */ }
131
229
  }
132
230
  }
133
- exports.WindsurfRunner = WindsurfRunner;
231
+ // ─── Process management (macOS / Linux) ────────────────────────────────────────
134
232
  /** Returns true if the Windsurf IDE (not the CLI shim) is already running. */
135
233
  function isWindsurfProcessRunning() {
136
234
  try {
137
- if (platform_1.isWindows) {
138
- const result = (0, node_child_process_1.spawnSync)('tasklist', ['/FI', 'IMAGENAME eq Windsurf.exe', '/NH'], {
139
- encoding: 'utf8',
140
- timeout: 5000,
141
- stdio: ['ignore', 'pipe', 'ignore'],
142
- });
143
- return result.stdout?.includes('Windsurf.exe') ?? false;
144
- }
235
+ // Only relevant on non-Windows (CLI mode)
145
236
  const result = (0, node_child_process_1.spawnSync)('pgrep', ['-f', 'Windsurf'], {
146
237
  encoding: 'utf8',
147
238
  timeout: 5000,
@@ -157,13 +248,6 @@ function isWindsurfProcessRunning() {
157
248
  function killWindsurfProcess() {
158
249
  try {
159
250
  logger_1.logger.debug('Terminating Windsurf process');
160
- if (platform_1.isWindows) {
161
- (0, node_child_process_1.spawnSync)('taskkill', ['/IM', 'Windsurf.exe', '/F'], {
162
- timeout: 5000,
163
- stdio: 'ignore',
164
- });
165
- return;
166
- }
167
251
  (0, node_child_process_1.spawnSync)('pkill', ['-f', 'Windsurf'], {
168
252
  timeout: 5000,
169
253
  stdio: 'ignore',