@agentteams/runner 0.0.113 → 0.0.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +7 -0
- package/dist/api-client.js +39 -0
- package/dist/api-client.js.map +1 -1
- package/dist/api-client.test.js +23 -0
- package/dist/api-client.test.js.map +1 -1
- package/dist/commands/update.js +1 -7
- package/dist/commands/update.js.map +1 -1
- package/dist/executable.d.ts +19 -2
- package/dist/executable.js +144 -7
- package/dist/executable.js.map +1 -1
- package/dist/executable.test.js +70 -1
- package/dist/executable.test.js.map +1 -1
- package/dist/handlers/trigger-handler.js +3 -0
- package/dist/handlers/trigger-handler.js.map +1 -1
- package/dist/poller.d.ts +5 -1
- package/dist/poller.js +92 -1
- package/dist/poller.js.map +1 -1
- package/dist/poller.test.js +187 -0
- package/dist/poller.test.js.map +1 -1
- package/dist/runners/amp.js +3 -16
- package/dist/runners/amp.js.map +1 -1
- package/dist/runners/antigravity.js +3 -16
- package/dist/runners/antigravity.js.map +1 -1
- package/dist/runners/capabilities.d.ts +7 -1
- package/dist/runners/capabilities.js +21 -9
- package/dist/runners/capabilities.js.map +1 -1
- package/dist/runners/capabilities.test.js +12 -0
- package/dist/runners/capabilities.test.js.map +1 -1
- package/dist/runners/claude-code.js +3 -8
- package/dist/runners/claude-code.js.map +1 -1
- package/dist/runners/claude-code.test.js +10 -0
- package/dist/runners/claude-code.test.js.map +1 -1
- package/dist/runners/codex.js +3 -16
- package/dist/runners/codex.js.map +1 -1
- package/dist/runners/copilot-cli.js +2 -8
- package/dist/runners/copilot-cli.js.map +1 -1
- package/dist/runners/cursor-cli.js +2 -8
- package/dist/runners/cursor-cli.js.map +1 -1
- package/dist/runners/cursor-cli.test.js +14 -0
- package/dist/runners/cursor-cli.test.js.map +1 -1
- package/dist/runners/engine-commands.d.ts +11 -0
- package/dist/runners/engine-commands.js +27 -0
- package/dist/runners/engine-commands.js.map +1 -0
- package/dist/runners/grok-build-identity.d.ts +8 -0
- package/dist/runners/grok-build-identity.js +17 -0
- package/dist/runners/grok-build-identity.js.map +1 -0
- package/dist/runners/grok-build.d.ts +60 -0
- package/dist/runners/grok-build.js +360 -0
- package/dist/runners/grok-build.js.map +1 -0
- package/dist/runners/grok-build.test.d.ts +1 -0
- package/dist/runners/grok-build.test.js +233 -0
- package/dist/runners/grok-build.test.js.map +1 -0
- package/dist/runners/index.js +3 -0
- package/dist/runners/index.js.map +1 -1
- package/dist/runners/index.test.js +2 -0
- package/dist/runners/index.test.js.map +1 -1
- package/dist/runners/kimi-cli.js +2 -8
- package/dist/runners/kimi-cli.js.map +1 -1
- package/dist/runners/kimi-cli.test.js +8 -0
- package/dist/runners/kimi-cli.test.js.map +1 -1
- package/dist/runners/kiro-cli.js +2 -8
- package/dist/runners/kiro-cli.js.map +1 -1
- package/dist/runners/kiro-cli.test.js +1 -0
- package/dist/runners/kiro-cli.test.js.map +1 -1
- package/dist/runners/log-merger.d.ts +8 -0
- package/dist/runners/log-merger.js +33 -0
- package/dist/runners/log-merger.js.map +1 -0
- package/dist/runners/log-reporter.d.ts +2 -2
- package/dist/runners/log-reporter.js +2 -29
- package/dist/runners/log-reporter.js.map +1 -1
- package/dist/runners/opencode.js +3 -16
- package/dist/runners/opencode.js.map +1 -1
- package/dist/runners/session-env.d.ts +24 -0
- package/dist/runners/session-env.js +61 -0
- package/dist/runners/session-env.js.map +1 -0
- package/dist/runners/session-env.test.d.ts +1 -0
- package/dist/runners/session-env.test.js +78 -0
- package/dist/runners/session-env.test.js.map +1 -0
- package/dist/runners/stream-json-parser.js +45 -0
- package/dist/runners/stream-json-parser.js.map +1 -1
- package/dist/runners/types.d.ts +2 -0
- package/dist/utils/auto-update.d.ts +17 -2
- package/dist/utils/auto-update.js +165 -52
- package/dist/utils/auto-update.js.map +1 -1
- package/dist/utils/auto-update.test.js +357 -7
- package/dist/utils/auto-update.test.js.map +1 -1
- package/dist/utils/engine-probe.d.ts +15 -0
- package/dist/utils/engine-probe.js +52 -0
- package/dist/utils/engine-probe.js.map +1 -0
- package/dist/utils/engine-probe.test.d.ts +1 -0
- package/dist/utils/engine-probe.test.js +108 -0
- package/dist/utils/engine-probe.test.js.map +1 -0
- package/dist/utils/model-enumerator.d.ts +42 -0
- package/dist/utils/model-enumerator.js +223 -0
- package/dist/utils/model-enumerator.js.map +1 -0
- package/dist/utils/model-enumerator.test.d.ts +1 -0
- package/dist/utils/model-enumerator.test.js +132 -0
- package/dist/utils/model-enumerator.test.js.map +1 -0
- package/dist/utils/npm-global-permission.d.ts +18 -0
- package/dist/utils/npm-global-permission.js +41 -0
- package/dist/utils/npm-global-permission.js.map +1 -0
- package/dist/utils/npm-global-permission.test.d.ts +1 -0
- package/dist/utils/npm-global-permission.test.js +75 -0
- package/dist/utils/npm-global-permission.test.js.map +1 -0
- package/dist/utils/npm-install-error.d.ts +12 -0
- package/dist/utils/npm-install-error.js +19 -0
- package/dist/utils/npm-install-error.js.map +1 -0
- package/dist/utils/npm-install-error.test.d.ts +1 -0
- package/dist/utils/npm-install-error.test.js +28 -0
- package/dist/utils/npm-install-error.test.js.map +1 -0
- package/native/bin/win32-x64/agentrunner-launcher.exe +0 -0
- package/native/bin/win32-x64/manifest.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createWriteStream } from 'node:fs';
|
|
3
|
+
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { platform } from 'node:os';
|
|
5
|
+
import { resolveExecutablePathsWithPreferenceAsync, runProbeCommand } from '../executable.js';
|
|
6
|
+
import { setupCloseWatchdog, terminateRunnerChild } from './process-control.js';
|
|
7
|
+
import type { Runner, RunnerOptions, RunResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Grok Build emits update notices on stderr and would otherwise self-update mid-run.
|
|
10
|
+
* The CLI has no `--no-auto-update` flag (verified against grok 1.0.3); this env var is the
|
|
11
|
+
* only documented suppression switch, and it keeps stdout reserved for the NDJSON stream.
|
|
12
|
+
*/
|
|
13
|
+
export declare const GROK_AUTOUPDATER_ENV = "GROK_DISABLE_AUTOUPDATER";
|
|
14
|
+
/**
|
|
15
|
+
* Headless argument contract, measured against grok 1.0.3 (1a29d5bc12d4) on 2026-08-14.
|
|
16
|
+
*
|
|
17
|
+
* - The prompt is passed via `--prompt-file`, never `-p/--single`. A prompt whose first
|
|
18
|
+
* character is `-` (every runner prompt starts with a markdown bullet) makes clap abort
|
|
19
|
+
* with `error: unexpected argument '- ' found` and exit code 2 before the agent starts.
|
|
20
|
+
* - `--output-format streaming-messages-json` produces the Anthropic Messages wire format,
|
|
21
|
+
* which the shared stream-json parser already understands. The native `streaming-json`
|
|
22
|
+
* alternative streams per-token `thought` deltas (63 lines vs 5 for the same prompt) and
|
|
23
|
+
* would need a dedicated parser for no gain.
|
|
24
|
+
* - Permission bypass is `--permission-mode bypassPermissions`. The documented `--yolo`
|
|
25
|
+
* alias does not exist in this build.
|
|
26
|
+
* - `--effort` is accepted and validates its levels (xhigh|high|medium|low), but the effect
|
|
27
|
+
* was not reproducible, so the runner does not pass it (see capabilities.ts).
|
|
28
|
+
*/
|
|
29
|
+
export declare const buildGrokBuildArgs: (promptFilePath: string, cwd: string, model?: string | null) => string[];
|
|
30
|
+
/**
|
|
31
|
+
* The official installer links the binary into `$GROK_HOME/bin` (default `~/.grok/bin`) and
|
|
32
|
+
* `~/.local/bin`. An unrelated npm package (`@vibe-kit/grok-cli`) also installs a `grok`
|
|
33
|
+
* binary, so name resolution alone is not enough — see `resolveGrokBuildExecutable` and the
|
|
34
|
+
* identity check in `utils/engine-probe.ts`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const getGrokExecutablePreference: (isWindows: boolean) => string[];
|
|
37
|
+
export declare const toGrokBuildPowerShellEncodedCommand: (resolvedExecutablePath: string, promptFilePath: string, cwd: string, model?: string | null) => string;
|
|
38
|
+
/**
|
|
39
|
+
* Pulls the final answer out of the captured NDJSON so the history fallback shows prose
|
|
40
|
+
* instead of a JSON dump. Mirrors the claude-code helper because the wire format is the same.
|
|
41
|
+
*/
|
|
42
|
+
export declare const extractGrokResultText: (outputText: string) => string;
|
|
43
|
+
type GrokBuildRunnerDependencies = {
|
|
44
|
+
platform: typeof platform;
|
|
45
|
+
resolveExecutablePathsWithPreferenceAsync: typeof resolveExecutablePathsWithPreferenceAsync;
|
|
46
|
+
runProbeCommand: typeof runProbeCommand;
|
|
47
|
+
spawn: typeof spawn;
|
|
48
|
+
createWriteStream: typeof createWriteStream;
|
|
49
|
+
mkdir: typeof mkdir;
|
|
50
|
+
writeFile: typeof writeFile;
|
|
51
|
+
rm: typeof rm;
|
|
52
|
+
setupCloseWatchdog: typeof setupCloseWatchdog;
|
|
53
|
+
terminateRunnerChild: typeof terminateRunnerChild;
|
|
54
|
+
};
|
|
55
|
+
export declare class GrokBuildRunner implements Runner {
|
|
56
|
+
private readonly deps;
|
|
57
|
+
constructor(dependencies?: Partial<GrokBuildRunnerDependencies>);
|
|
58
|
+
run(opts: RunnerOptions): Promise<RunResult>;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createWriteStream } from 'node:fs';
|
|
3
|
+
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { platform } from 'node:os';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { resolveExecutablePathsWithPreferenceAsync, runProbeCommand } from '../executable.js';
|
|
7
|
+
import { logger } from '../logger.js';
|
|
8
|
+
import { selectRunnerFailureMessage } from './failure-message.js';
|
|
9
|
+
import { setupCloseWatchdog, terminateRunnerChild } from './process-control.js';
|
|
10
|
+
import { createResultLineCapturer, createStreamJsonLineParser } from './stream-json-parser.js';
|
|
11
|
+
import { buildRunnerChildEnv } from './session-env.js';
|
|
12
|
+
import { findGrokBuildExecutable, isGrokBuildExecutable } from './grok-build-identity.js';
|
|
13
|
+
const OUTPUT_PREVIEW_MAX = 400;
|
|
14
|
+
const OUTPUT_CAPTURE_MAX = 200_000;
|
|
15
|
+
/**
|
|
16
|
+
* Grok Build emits update notices on stderr and would otherwise self-update mid-run.
|
|
17
|
+
* The CLI has no `--no-auto-update` flag (verified against grok 1.0.3); this env var is the
|
|
18
|
+
* only documented suppression switch, and it keeps stdout reserved for the NDJSON stream.
|
|
19
|
+
*/
|
|
20
|
+
export const GROK_AUTOUPDATER_ENV = 'GROK_DISABLE_AUTOUPDATER';
|
|
21
|
+
const normalizedModel = (model) => (typeof model === 'string' ? model.trim() : '');
|
|
22
|
+
/**
|
|
23
|
+
* Headless argument contract, measured against grok 1.0.3 (1a29d5bc12d4) on 2026-08-14.
|
|
24
|
+
*
|
|
25
|
+
* - The prompt is passed via `--prompt-file`, never `-p/--single`. A prompt whose first
|
|
26
|
+
* character is `-` (every runner prompt starts with a markdown bullet) makes clap abort
|
|
27
|
+
* with `error: unexpected argument '- ' found` and exit code 2 before the agent starts.
|
|
28
|
+
* - `--output-format streaming-messages-json` produces the Anthropic Messages wire format,
|
|
29
|
+
* which the shared stream-json parser already understands. The native `streaming-json`
|
|
30
|
+
* alternative streams per-token `thought` deltas (63 lines vs 5 for the same prompt) and
|
|
31
|
+
* would need a dedicated parser for no gain.
|
|
32
|
+
* - Permission bypass is `--permission-mode bypassPermissions`. The documented `--yolo`
|
|
33
|
+
* alias does not exist in this build.
|
|
34
|
+
* - `--effort` is accepted and validates its levels (xhigh|high|medium|low), but the effect
|
|
35
|
+
* was not reproducible, so the runner does not pass it (see capabilities.ts).
|
|
36
|
+
*/
|
|
37
|
+
export const buildGrokBuildArgs = (promptFilePath, cwd, model) => {
|
|
38
|
+
const selectedModel = normalizedModel(model);
|
|
39
|
+
// `default` is the platform sentinel for "no model pinned"; Grok would reject it as an
|
|
40
|
+
// unknown model id and exit 1.
|
|
41
|
+
const modelArgs = selectedModel.length > 0 && selectedModel !== 'default' ? ['-m', selectedModel] : [];
|
|
42
|
+
return [
|
|
43
|
+
'--prompt-file',
|
|
44
|
+
promptFilePath,
|
|
45
|
+
'--cwd',
|
|
46
|
+
cwd,
|
|
47
|
+
'--output-format',
|
|
48
|
+
'streaming-messages-json',
|
|
49
|
+
'--permission-mode',
|
|
50
|
+
'bypassPermissions',
|
|
51
|
+
...modelArgs,
|
|
52
|
+
];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* The official installer links the binary into `$GROK_HOME/bin` (default `~/.grok/bin`) and
|
|
56
|
+
* `~/.local/bin`. An unrelated npm package (`@vibe-kit/grok-cli`) also installs a `grok`
|
|
57
|
+
* binary, so name resolution alone is not enough — see `resolveGrokBuildExecutable` and the
|
|
58
|
+
* identity check in `utils/engine-probe.ts`.
|
|
59
|
+
*/
|
|
60
|
+
export const getGrokExecutablePreference = (isWindows) => isWindows ? ['grok.exe', 'grok'] : ['grok'];
|
|
61
|
+
const toPowerShellLiteral = (value) => `'${value.replaceAll("'", "''")}'`;
|
|
62
|
+
export const toGrokBuildPowerShellEncodedCommand = (resolvedExecutablePath, promptFilePath, cwd, model) => {
|
|
63
|
+
// The Windows path must carry the same structured-output flags as the POSIX argv, or the
|
|
64
|
+
// runner would silently fall back to plain text there.
|
|
65
|
+
const argSegment = buildGrokBuildArgs(promptFilePath, cwd, model)
|
|
66
|
+
.map((arg) => ` ${toPowerShellLiteral(arg)}`)
|
|
67
|
+
.join('');
|
|
68
|
+
const scriptContent = [
|
|
69
|
+
"$ErrorActionPreference = 'Stop'",
|
|
70
|
+
'$utf8NoBom = [System.Text.UTF8Encoding]::new($false)',
|
|
71
|
+
'[Console]::InputEncoding = $utf8NoBom',
|
|
72
|
+
'[Console]::OutputEncoding = $utf8NoBom',
|
|
73
|
+
'$OutputEncoding = $utf8NoBom',
|
|
74
|
+
'chcp 65001 > $null',
|
|
75
|
+
`& ${toPowerShellLiteral(resolvedExecutablePath)}${argSegment}`,
|
|
76
|
+
].join('\r\n');
|
|
77
|
+
return Buffer.from(scriptContent, 'utf16le').toString('base64');
|
|
78
|
+
};
|
|
79
|
+
const toOutputPreview = (chunk) => {
|
|
80
|
+
const text = (typeof chunk === 'string' ? chunk : String(chunk)).trim();
|
|
81
|
+
return text.length <= OUTPUT_PREVIEW_MAX ? text : `${text.slice(0, OUTPUT_PREVIEW_MAX)}...`;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Pulls the final answer out of the captured NDJSON so the history fallback shows prose
|
|
85
|
+
* instead of a JSON dump. Mirrors the claude-code helper because the wire format is the same.
|
|
86
|
+
*/
|
|
87
|
+
export const extractGrokResultText = (outputText) => {
|
|
88
|
+
const trimmedOutput = outputText.trim();
|
|
89
|
+
const lines = trimmedOutput
|
|
90
|
+
.split(/\r?\n/)
|
|
91
|
+
.map((line) => line.trim())
|
|
92
|
+
.filter((line) => line.length > 0);
|
|
93
|
+
for (let index = lines.length - 1; index >= 0; index -= 1) {
|
|
94
|
+
const line = lines[index];
|
|
95
|
+
if (!line.includes('"type":"result"')) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const parsed = JSON.parse(line);
|
|
100
|
+
if (parsed.type === 'result' && typeof parsed.result === 'string' && parsed.result.trim().length > 0) {
|
|
101
|
+
return parsed.result.trim();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return trimmedOutput;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return trimmedOutput;
|
|
109
|
+
};
|
|
110
|
+
const defaultDependencies = {
|
|
111
|
+
platform,
|
|
112
|
+
resolveExecutablePathsWithPreferenceAsync,
|
|
113
|
+
runProbeCommand,
|
|
114
|
+
spawn,
|
|
115
|
+
createWriteStream,
|
|
116
|
+
mkdir,
|
|
117
|
+
writeFile,
|
|
118
|
+
rm,
|
|
119
|
+
setupCloseWatchdog,
|
|
120
|
+
terminateRunnerChild,
|
|
121
|
+
};
|
|
122
|
+
export class GrokBuildRunner {
|
|
123
|
+
deps;
|
|
124
|
+
constructor(dependencies = {}) {
|
|
125
|
+
this.deps = { ...defaultDependencies, ...dependencies };
|
|
126
|
+
}
|
|
127
|
+
async run(opts) {
|
|
128
|
+
if (!opts.authPath || opts.authPath.trim().length === 0) {
|
|
129
|
+
logger.error('authPath is missing for trigger');
|
|
130
|
+
return { exitCode: 1, errorMessage: 'authPath is missing for trigger' };
|
|
131
|
+
}
|
|
132
|
+
const cwd = opts.authPath;
|
|
133
|
+
const logPath = join(cwd, '.agentteams', 'runner', 'log', `${opts.triggerId}.log`);
|
|
134
|
+
await this.deps.mkdir(dirname(logPath), { recursive: true });
|
|
135
|
+
const isWindows = this.deps.platform() === 'win32';
|
|
136
|
+
const resolvedExecutablePath = await findGrokBuildExecutable(getGrokExecutablePreference(isWindows), {
|
|
137
|
+
resolveExecutablePathsWithPreferenceAsync: this.deps.resolveExecutablePathsWithPreferenceAsync,
|
|
138
|
+
runProbeCommand: this.deps.runProbeCommand,
|
|
139
|
+
platform: this.deps.platform,
|
|
140
|
+
});
|
|
141
|
+
if (!resolvedExecutablePath) {
|
|
142
|
+
const message = "Cannot find an official Grok Build executable. Every 'grok' candidate failed the 'Grok Build TUI' identity check.";
|
|
143
|
+
logger.error('Grok Build executable identity check failed', { triggerId: opts.triggerId });
|
|
144
|
+
return { exitCode: 1, errorMessage: message };
|
|
145
|
+
}
|
|
146
|
+
// Unlike other runners this file is not a Windows-only workaround: `--prompt-file` is the
|
|
147
|
+
// only safe way to hand Grok a markdown prompt on every platform.
|
|
148
|
+
const promptFilePath = join(cwd, '.agentteams', 'runner', 'tmp', `${opts.triggerId}.prompt.md`);
|
|
149
|
+
await this.deps.mkdir(dirname(promptFilePath), { recursive: true });
|
|
150
|
+
await this.deps.writeFile(promptFilePath, opts.prompt, { encoding: 'utf8' });
|
|
151
|
+
const removePromptFile = async () => {
|
|
152
|
+
try {
|
|
153
|
+
await this.deps.rm(promptFilePath, { force: true });
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
logger.warn('Failed to remove Grok Build prompt temp file', {
|
|
157
|
+
triggerId: opts.triggerId,
|
|
158
|
+
promptFilePath,
|
|
159
|
+
error: error instanceof Error ? error.message : String(error),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const args = buildGrokBuildArgs(promptFilePath, cwd, opts.model);
|
|
164
|
+
logger.info('Runner prompt prepared', {
|
|
165
|
+
triggerId: opts.triggerId,
|
|
166
|
+
promptLength: opts.prompt.length,
|
|
167
|
+
promptFilePath,
|
|
168
|
+
requestedCommand: 'grok',
|
|
169
|
+
resolvedExecutablePath,
|
|
170
|
+
platform: isWindows ? 'win32' : this.deps.platform(),
|
|
171
|
+
shell: false,
|
|
172
|
+
detached: !isWindows,
|
|
173
|
+
windowsWrapper: isWindows ? 'powershell.exe -EncodedCommand' : null,
|
|
174
|
+
});
|
|
175
|
+
const env = buildRunnerChildEnv(process.env, opts);
|
|
176
|
+
// AgentTeams never writes Grok credentials; this only stops the self-updater from
|
|
177
|
+
// interleaving its notice with the NDJSON stream.
|
|
178
|
+
env[GROK_AUTOUPDATER_ENV] = '1';
|
|
179
|
+
// Re-check the exact resolved path immediately before spawn. Detection and candidate
|
|
180
|
+
// selection can precede execution, so a replaced symlink/binary must fail closed before
|
|
181
|
+
// it receives the prompt file path or permission-bypass arguments.
|
|
182
|
+
if (!(await isGrokBuildExecutable(resolvedExecutablePath, {
|
|
183
|
+
runProbeCommand: this.deps.runProbeCommand,
|
|
184
|
+
platform: this.deps.platform,
|
|
185
|
+
}))) {
|
|
186
|
+
await removePromptFile();
|
|
187
|
+
const message = 'The resolved Grok Build executable changed identity before launch; execution was refused.';
|
|
188
|
+
logger.error('Grok Build executable identity changed before launch', { triggerId: opts.triggerId });
|
|
189
|
+
return { exitCode: 1, errorMessage: message };
|
|
190
|
+
}
|
|
191
|
+
let child;
|
|
192
|
+
try {
|
|
193
|
+
child = isWindows
|
|
194
|
+
? this.deps.spawn('powershell.exe', [
|
|
195
|
+
'-NoLogo',
|
|
196
|
+
'-NonInteractive',
|
|
197
|
+
'-ExecutionPolicy',
|
|
198
|
+
'Bypass',
|
|
199
|
+
'-EncodedCommand',
|
|
200
|
+
toGrokBuildPowerShellEncodedCommand(resolvedExecutablePath, promptFilePath, cwd, opts.model),
|
|
201
|
+
], { cwd, detached: false, shell: false, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], env })
|
|
202
|
+
: this.deps.spawn(resolvedExecutablePath, args, {
|
|
203
|
+
cwd,
|
|
204
|
+
detached: true,
|
|
205
|
+
shell: false,
|
|
206
|
+
windowsHide: true,
|
|
207
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
208
|
+
env,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
await removePromptFile();
|
|
213
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
214
|
+
logger.error('Runner process launch failed', { triggerId: opts.triggerId, error: message });
|
|
215
|
+
return { exitCode: 1, errorMessage: message };
|
|
216
|
+
}
|
|
217
|
+
const logStream = this.deps.createWriteStream(logPath, { flags: 'a' });
|
|
218
|
+
logStream.on('error', (error) => logger.warn('Runner log stream error', { triggerId: opts.triggerId, error: error.message }));
|
|
219
|
+
child.stdout?.pipe(logStream);
|
|
220
|
+
child.stderr?.pipe(logStream);
|
|
221
|
+
let lastOutput = '';
|
|
222
|
+
let lastErrorOutput = '';
|
|
223
|
+
let outputText = '';
|
|
224
|
+
const appendOutputText = (chunk) => {
|
|
225
|
+
if (outputText.length < OUTPUT_CAPTURE_MAX) {
|
|
226
|
+
outputText += chunk.slice(0, OUTPUT_CAPTURE_MAX - outputText.length);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
// The head-capped capture can drop the terminal `result` line on long runs; keep it aside
|
|
230
|
+
// so the history fallback still ends with the final answer.
|
|
231
|
+
const resultLineCapturer = createResultLineCapturer();
|
|
232
|
+
const finalizeOutputText = () => {
|
|
233
|
+
const trimmed = outputText.trim();
|
|
234
|
+
const resultLine = resultLineCapturer.get();
|
|
235
|
+
if (resultLine && !trimmed.includes('"type":"result"')) {
|
|
236
|
+
return trimmed.length > 0 ? `${trimmed}\n${resultLine}` : resultLine;
|
|
237
|
+
}
|
|
238
|
+
return trimmed || undefined;
|
|
239
|
+
};
|
|
240
|
+
const idleTimer = { reset: () => { } };
|
|
241
|
+
const streamParser = createStreamJsonLineParser((entries) => {
|
|
242
|
+
for (const entry of entries) {
|
|
243
|
+
opts.onStdoutChunk?.(entry.message, entry.category, entry.toolName);
|
|
244
|
+
}
|
|
245
|
+
}, { cwd });
|
|
246
|
+
child.stdout?.on('data', (chunk) => {
|
|
247
|
+
const rawOutput = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
|
|
248
|
+
appendOutputText(rawOutput);
|
|
249
|
+
resultLineCapturer.push(rawOutput);
|
|
250
|
+
streamParser.push(rawOutput);
|
|
251
|
+
const output = toOutputPreview(rawOutput);
|
|
252
|
+
if (output.length > 0) {
|
|
253
|
+
lastOutput = output;
|
|
254
|
+
idleTimer.reset();
|
|
255
|
+
logger.info('Runner stdout', { triggerId: opts.triggerId, pid: child.pid, output });
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
child.stderr?.on('data', (chunk) => {
|
|
259
|
+
const output = toOutputPreview(Buffer.isBuffer(chunk) ? chunk.toString('utf8') : chunk);
|
|
260
|
+
if (output.length > 0) {
|
|
261
|
+
lastErrorOutput = output;
|
|
262
|
+
idleTimer.reset();
|
|
263
|
+
opts.onStderrChunk?.(output, 'STDERR');
|
|
264
|
+
logger.warn('Runner stderr', { triggerId: opts.triggerId, pid: child.pid, output });
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
logger.info('Runner started', { triggerId: opts.triggerId, cwd, logPath, pid: child.pid });
|
|
268
|
+
return await new Promise((resolve) => {
|
|
269
|
+
let finished = false;
|
|
270
|
+
let timedOut = false;
|
|
271
|
+
let idleTimedOut = false;
|
|
272
|
+
let cancelled = false;
|
|
273
|
+
let idleTimeoutId = null;
|
|
274
|
+
const startIdleTimeout = () => {
|
|
275
|
+
if (idleTimeoutId)
|
|
276
|
+
clearTimeout(idleTimeoutId);
|
|
277
|
+
idleTimeoutId = setTimeout(() => {
|
|
278
|
+
idleTimedOut = true;
|
|
279
|
+
timedOut = true;
|
|
280
|
+
logger.warn('Runner idle timeout reached; no output for configured idle period', {
|
|
281
|
+
triggerId: opts.triggerId,
|
|
282
|
+
idleTimeoutMs: opts.idleTimeoutMs,
|
|
283
|
+
});
|
|
284
|
+
this.deps.terminateRunnerChild(child, isWindows, opts.triggerId, 'timeout');
|
|
285
|
+
}, opts.idleTimeoutMs);
|
|
286
|
+
};
|
|
287
|
+
idleTimer.reset = startIdleTimeout;
|
|
288
|
+
startIdleTimeout();
|
|
289
|
+
const handleAbort = () => {
|
|
290
|
+
cancelled = true;
|
|
291
|
+
this.deps.terminateRunnerChild(child, isWindows, opts.triggerId, 'cancel');
|
|
292
|
+
};
|
|
293
|
+
const cleanup = async () => {
|
|
294
|
+
if (finished)
|
|
295
|
+
return;
|
|
296
|
+
finished = true;
|
|
297
|
+
if (idleTimeoutId)
|
|
298
|
+
clearTimeout(idleTimeoutId);
|
|
299
|
+
idleTimer.reset = () => { };
|
|
300
|
+
logStream.end();
|
|
301
|
+
await removePromptFile();
|
|
302
|
+
opts.signal?.removeEventListener('abort', handleAbort);
|
|
303
|
+
};
|
|
304
|
+
const timeoutId = setTimeout(() => {
|
|
305
|
+
timedOut = true;
|
|
306
|
+
this.deps.terminateRunnerChild(child, isWindows, opts.triggerId, 'timeout');
|
|
307
|
+
}, opts.timeoutMs);
|
|
308
|
+
if (opts.signal?.aborted)
|
|
309
|
+
handleAbort();
|
|
310
|
+
else
|
|
311
|
+
opts.signal?.addEventListener('abort', handleAbort, { once: true });
|
|
312
|
+
child.on('error', async (error) => {
|
|
313
|
+
clearTimeout(timeoutId);
|
|
314
|
+
await cleanup();
|
|
315
|
+
logger.error('Runner process launch failed', { triggerId: opts.triggerId, error: error.message });
|
|
316
|
+
resolve({ exitCode: 1, lastOutput, outputText: finalizeOutputText(), errorMessage: error.message });
|
|
317
|
+
});
|
|
318
|
+
const closeWatchdog = this.deps.setupCloseWatchdog(child, opts.triggerId);
|
|
319
|
+
child.on('close', async (code) => {
|
|
320
|
+
closeWatchdog.cancel();
|
|
321
|
+
clearTimeout(timeoutId);
|
|
322
|
+
streamParser.flush();
|
|
323
|
+
resultLineCapturer.flush();
|
|
324
|
+
await cleanup();
|
|
325
|
+
logger.info('Runner process closed', { triggerId: opts.triggerId, pid: child.pid, exitCode: code, timedOut });
|
|
326
|
+
if (timedOut) {
|
|
327
|
+
const finalizedOutputText = finalizeOutputText();
|
|
328
|
+
const resolvedOutputText = idleTimedOut && finalizedOutputText ? extractGrokResultText(finalizedOutputText) : finalizedOutputText;
|
|
329
|
+
resolve({
|
|
330
|
+
exitCode: 1,
|
|
331
|
+
idleTimedOut,
|
|
332
|
+
lastOutput,
|
|
333
|
+
outputText: resolvedOutputText,
|
|
334
|
+
errorMessage: idleTimedOut
|
|
335
|
+
? `Runner idle timed out after ${Math.round(opts.idleTimeoutMs / 60_000)}m of no output`
|
|
336
|
+
: `Runner fail-safe timed out after ${Math.round(opts.timeoutMs / 3_600_000)}h`,
|
|
337
|
+
});
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (cancelled) {
|
|
341
|
+
resolve({
|
|
342
|
+
exitCode: 1,
|
|
343
|
+
cancelled: true,
|
|
344
|
+
lastOutput,
|
|
345
|
+
outputText: finalizeOutputText(),
|
|
346
|
+
errorMessage: 'Runner cancelled by user',
|
|
347
|
+
});
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
resolve({
|
|
351
|
+
exitCode: code ?? 1,
|
|
352
|
+
lastOutput,
|
|
353
|
+
outputText: finalizeOutputText(),
|
|
354
|
+
errorMessage: selectRunnerFailureMessage({ exitCode: code, lastErrorOutput, lastOutput }),
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=grok-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-build.js","sourceRoot":"","sources":["../../src/runners/grok-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|