@agentteams/runner 0.0.90 → 0.0.92
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/handlers/trigger-handler.d.ts +3 -0
- package/dist/handlers/trigger-handler.js +65 -37
- package/dist/handlers/trigger-handler.js.map +1 -1
- package/dist/handlers/trigger-handler.test.js +182 -1
- package/dist/handlers/trigger-handler.test.js.map +1 -1
- package/dist/runners/amp.js +22 -8
- package/dist/runners/amp.js.map +1 -1
- package/dist/runners/claude-code.js +22 -8
- package/dist/runners/claude-code.js.map +1 -1
- package/dist/runners/opencode-json-parser.d.ts +34 -0
- package/dist/runners/opencode-json-parser.js +250 -0
- package/dist/runners/opencode-json-parser.js.map +1 -0
- package/dist/runners/opencode-json-parser.test.d.ts +1 -0
- package/dist/runners/opencode-json-parser.test.js +101 -0
- package/dist/runners/opencode-json-parser.test.js.map +1 -0
- package/dist/runners/opencode.js +35 -17
- package/dist/runners/opencode.js.map +1 -1
- package/dist/runners/stream-json-parser.d.ts +15 -0
- package/dist/runners/stream-json-parser.js +37 -0
- package/dist/runners/stream-json-parser.js.map +1 -1
- package/dist/runners/stream-json-parser.test.js +38 -1
- package/dist/runners/stream-json-parser.test.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses OpenCode `run --format json` events into human-readable log entries and extracts the
|
|
3
|
+
* final assistant text. OpenCode emits one JSON object per line shaped as
|
|
4
|
+
* { type, timestamp, sessionID, part: { type, ... } }
|
|
5
|
+
* where `part.type` is one of: text | reasoning | tool | patch | step-start | step-finish.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors stream-json-parser.ts (Claude/AMP) so OpenCode runs are refined the same way instead of
|
|
8
|
+
* dumping raw TUI/JSON output as fallback history.
|
|
9
|
+
*/
|
|
10
|
+
import { firstSentence, shortenPath } from './stream-json-parser.js';
|
|
11
|
+
const TOOL_PREVIEW_MAX = 120;
|
|
12
|
+
const BASH_PREVIEW_MAX = 100;
|
|
13
|
+
const REASONING_PREVIEW_MAX = 300;
|
|
14
|
+
const PATCH_FILES_MAX = 4;
|
|
15
|
+
const truncate = (text, max) => (text.length <= max ? text : `${text.slice(0, max)}...`);
|
|
16
|
+
const isVerboseEnabled = (options) => {
|
|
17
|
+
if (options && typeof options.verbose === 'boolean') {
|
|
18
|
+
return options.verbose;
|
|
19
|
+
}
|
|
20
|
+
return process.env.AGENTTEAMS_RUNNER_VERBOSE === '1';
|
|
21
|
+
};
|
|
22
|
+
const stringField = (input, key) => {
|
|
23
|
+
const value = input?.[key];
|
|
24
|
+
return typeof value === 'string' ? value : '';
|
|
25
|
+
};
|
|
26
|
+
export const summarizeOpenCodeTool = (tool, input, cwd) => {
|
|
27
|
+
const safeInput = input ?? {};
|
|
28
|
+
switch (tool) {
|
|
29
|
+
case 'bash': {
|
|
30
|
+
const raw = stringField(safeInput, 'command').trim().split(/\r?\n/)[0] ?? '';
|
|
31
|
+
const command = cwd && raw.includes(cwd) ? raw.split(cwd).join('.') : raw;
|
|
32
|
+
return command ? `bash: ${truncate(command, BASH_PREVIEW_MAX)}` : 'bash';
|
|
33
|
+
}
|
|
34
|
+
case 'read':
|
|
35
|
+
case 'edit':
|
|
36
|
+
case 'write': {
|
|
37
|
+
const filePath = stringField(safeInput, 'filePath') || stringField(safeInput, 'file_path');
|
|
38
|
+
return filePath ? `${tool}: ${shortenPath(filePath, cwd)}` : tool;
|
|
39
|
+
}
|
|
40
|
+
case 'grep': {
|
|
41
|
+
const pattern = stringField(safeInput, 'pattern');
|
|
42
|
+
const path = stringField(safeInput, 'path');
|
|
43
|
+
const location = path ? ` in ${shortenPath(path, cwd)}` : '';
|
|
44
|
+
return pattern ? `grep: "${truncate(pattern, 60)}"${location}` : 'grep';
|
|
45
|
+
}
|
|
46
|
+
case 'glob':
|
|
47
|
+
case 'list': {
|
|
48
|
+
const target = stringField(safeInput, 'pattern') || stringField(safeInput, 'path');
|
|
49
|
+
return target ? `${tool}: ${shortenPath(target, cwd)}` : tool;
|
|
50
|
+
}
|
|
51
|
+
case 'webfetch': {
|
|
52
|
+
const url = stringField(safeInput, 'url');
|
|
53
|
+
return url ? `webfetch: ${truncate(url, 100)}` : 'webfetch';
|
|
54
|
+
}
|
|
55
|
+
case 'task': {
|
|
56
|
+
const description = stringField(safeInput, 'description');
|
|
57
|
+
return description ? `task: ${truncate(description, 80)}` : 'task';
|
|
58
|
+
}
|
|
59
|
+
default: {
|
|
60
|
+
const keys = Object.keys(safeInput).slice(0, 3).join(',');
|
|
61
|
+
return keys ? `${tool}(${keys})` : tool;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const parseOpenCodeJsonLine = (line, options) => {
|
|
66
|
+
const trimmed = line.trim();
|
|
67
|
+
if (trimmed.length === 0) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(trimmed);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
const part = parsed.part;
|
|
78
|
+
if (!part || !part.type) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const verbose = isVerboseEnabled(options);
|
|
82
|
+
const cwd = options?.cwd;
|
|
83
|
+
switch (part.type) {
|
|
84
|
+
case 'text': {
|
|
85
|
+
const text = part.text;
|
|
86
|
+
if (text && text.trim().length > 0) {
|
|
87
|
+
return [{ level: 'INFO', message: firstSentence(text) }];
|
|
88
|
+
}
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
case 'reasoning': {
|
|
92
|
+
if (!verbose) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
const text = part.text;
|
|
96
|
+
if (text && text.trim().length > 0) {
|
|
97
|
+
return [{ level: 'INFO', message: `[Thinking] ${truncate(text.trim(), REASONING_PREVIEW_MAX)}` }];
|
|
98
|
+
}
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
case 'tool': {
|
|
102
|
+
// Tool parts stream once per state transition; only surface the terminal state to avoid
|
|
103
|
+
// duplicate log lines and to capture failures.
|
|
104
|
+
const status = part.state?.status;
|
|
105
|
+
if (status !== 'completed' && status !== 'error') {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const summary = truncate(summarizeOpenCodeTool(part.tool ?? 'unknown', part.state?.input, cwd), TOOL_PREVIEW_MAX);
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
level: status === 'error' ? 'WARN' : 'INFO',
|
|
112
|
+
message: `[Tool] ${summary}${status === 'error' ? ' (error)' : ''}`,
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
}
|
|
116
|
+
case 'patch': {
|
|
117
|
+
const files = Array.isArray(part.files) ? part.files : [];
|
|
118
|
+
if (files.length === 0) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
const shown = files.slice(0, PATCH_FILES_MAX).map((file) => shortenPath(file, cwd));
|
|
122
|
+
const extra = files.length > PATCH_FILES_MAX ? ` (+${files.length - PATCH_FILES_MAX} more)` : '';
|
|
123
|
+
return [{ level: 'INFO', message: `[Patch] ${shown.join(', ')}${extra}` }];
|
|
124
|
+
}
|
|
125
|
+
case 'step-finish': {
|
|
126
|
+
const reason = part.reason ?? 'unknown';
|
|
127
|
+
const outputTokens = part.tokens?.output;
|
|
128
|
+
const cost = typeof part.cost === 'number' ? `, $${part.cost.toFixed(4)}` : '';
|
|
129
|
+
const tokens = typeof outputTokens === 'number' ? `, ${outputTokens} out tok` : '';
|
|
130
|
+
return [{ level: 'INFO', message: `[Step finished: ${reason}${tokens}${cost}]` }];
|
|
131
|
+
}
|
|
132
|
+
default:
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Line-buffered parser for chunked OpenCode JSON stdout.
|
|
138
|
+
*/
|
|
139
|
+
export const createOpenCodeJsonLineParser = (onEntries, options) => {
|
|
140
|
+
let buffer = '';
|
|
141
|
+
return {
|
|
142
|
+
push(chunk) {
|
|
143
|
+
buffer += chunk;
|
|
144
|
+
const lines = buffer.split('\n');
|
|
145
|
+
buffer = lines.pop() ?? '';
|
|
146
|
+
for (const line of lines) {
|
|
147
|
+
const entries = parseOpenCodeJsonLine(line, options);
|
|
148
|
+
if (entries.length > 0) {
|
|
149
|
+
onEntries(entries);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
flush() {
|
|
154
|
+
if (buffer.trim().length > 0) {
|
|
155
|
+
const entries = parseOpenCodeJsonLine(buffer, options);
|
|
156
|
+
if (entries.length > 0) {
|
|
157
|
+
onEntries(entries);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
buffer = '';
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
const collectTextPartsByMessage = (line, texts) => {
|
|
165
|
+
const trimmed = line.trim();
|
|
166
|
+
if (!trimmed.includes('"type":"text"')) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
let parsed;
|
|
170
|
+
try {
|
|
171
|
+
parsed = JSON.parse(trimmed);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const part = parsed.part;
|
|
177
|
+
if (part?.type !== 'text' || typeof part.text !== 'string' || part.text.length === 0) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
const messageId = part.messageID ?? '';
|
|
181
|
+
const existing = texts.get(messageId);
|
|
182
|
+
if (existing) {
|
|
183
|
+
existing.push(part.text);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
texts.set(messageId, [part.text]);
|
|
187
|
+
}
|
|
188
|
+
return messageId;
|
|
189
|
+
};
|
|
190
|
+
const joinMessageText = (texts, messageId) => {
|
|
191
|
+
if (messageId === null) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
const parts = texts.get(messageId);
|
|
195
|
+
if (!parts) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const joined = parts.join('').trim();
|
|
199
|
+
return joined.length > 0 ? joined : null;
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Extracts the final assistant message text from a complete OpenCode JSON transcript. Returns the
|
|
203
|
+
* concatenated `text` parts of the last assistant message, or the raw input when none is found.
|
|
204
|
+
* Analogous to extractResultTextFromStreamJson for Claude/AMP.
|
|
205
|
+
*/
|
|
206
|
+
export const extractFinalTextFromOpenCodeJson = (outputText) => {
|
|
207
|
+
const trimmedOutput = outputText.trim();
|
|
208
|
+
const texts = new Map();
|
|
209
|
+
let lastMessageId = null;
|
|
210
|
+
for (const line of trimmedOutput.split(/\r?\n/)) {
|
|
211
|
+
const messageId = collectTextPartsByMessage(line, texts);
|
|
212
|
+
if (messageId !== null) {
|
|
213
|
+
lastMessageId = messageId;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return joinMessageText(texts, lastMessageId) ?? trimmedOutput;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Captures the final assistant text incrementally so it survives the runner's head-capped output
|
|
220
|
+
* buffer on long runs (the closing `text` parts arrive at the end of the stream).
|
|
221
|
+
*/
|
|
222
|
+
export const createOpenCodeFinalTextCapturer = () => {
|
|
223
|
+
let buffer = '';
|
|
224
|
+
const texts = new Map();
|
|
225
|
+
let lastMessageId = null;
|
|
226
|
+
const scan = (line) => {
|
|
227
|
+
const messageId = collectTextPartsByMessage(line, texts);
|
|
228
|
+
if (messageId !== null) {
|
|
229
|
+
lastMessageId = messageId;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
push(chunk) {
|
|
234
|
+
buffer += chunk;
|
|
235
|
+
const lines = buffer.split('\n');
|
|
236
|
+
buffer = lines.pop() ?? '';
|
|
237
|
+
for (const line of lines) {
|
|
238
|
+
scan(line);
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
flush() {
|
|
242
|
+
if (buffer.length > 0) {
|
|
243
|
+
scan(buffer);
|
|
244
|
+
}
|
|
245
|
+
buffer = '';
|
|
246
|
+
},
|
|
247
|
+
get: () => joinMessageText(texts, lastMessageId),
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
//# sourceMappingURL=opencode-json-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-json-parser.js","sourceRoot":"","sources":["../../src/runners/opencode-json-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { createOpenCodeFinalTextCapturer, createOpenCodeJsonLineParser, extractFinalTextFromOpenCodeJson, parseOpenCodeJsonLine, summarizeOpenCodeTool, } from './opencode-json-parser.js';
|
|
4
|
+
const cwd = '/Users/justin/Project/Me/AgentTeams';
|
|
5
|
+
// Event envelopes mirror the real `opencode run --format json` output:
|
|
6
|
+
// { type, timestamp, sessionID, part: { type, ... } }
|
|
7
|
+
const textEvent = (text, messageID = 'msg_1') => JSON.stringify({ type: 'text', timestamp: 1, sessionID: 'ses_1', part: { type: 'text', text, messageID } });
|
|
8
|
+
const toolEvent = (tool, input, status) => JSON.stringify({
|
|
9
|
+
type: 'tool',
|
|
10
|
+
timestamp: 1,
|
|
11
|
+
sessionID: 'ses_1',
|
|
12
|
+
part: { type: 'tool', tool, state: { status, input } },
|
|
13
|
+
});
|
|
14
|
+
test('summarizeOpenCodeTool renders readable summaries with opencode input keys', () => {
|
|
15
|
+
assert.equal(summarizeOpenCodeTool('bash', { command: 'git status\necho done' }), 'bash: git status');
|
|
16
|
+
assert.equal(summarizeOpenCodeTool('read', { filePath: `${cwd}/web/src/foo.ts` }, cwd), 'read: web/src/foo.ts');
|
|
17
|
+
assert.equal(summarizeOpenCodeTool('edit', { filePath: `${cwd}/daemon/src/index.ts` }, cwd), 'edit: daemon/src/index.ts');
|
|
18
|
+
assert.equal(summarizeOpenCodeTool('grep', { pattern: 'foo', path: `${cwd}/src` }, cwd), 'grep: "foo" in src');
|
|
19
|
+
assert.equal(summarizeOpenCodeTool('webfetch', { url: 'https://example.com' }), 'webfetch: https://example.com');
|
|
20
|
+
assert.equal(summarizeOpenCodeTool('custom', { alpha: 1, beta: 2, gamma: 3, delta: 4 }), 'custom(alpha,beta,gamma)');
|
|
21
|
+
assert.equal(summarizeOpenCodeTool('custom', {}), 'custom');
|
|
22
|
+
});
|
|
23
|
+
test('parseOpenCodeJsonLine reduces assistant text to first sentence', () => {
|
|
24
|
+
const line = textEvent('Now wire the refetch into the controller. Next steps follow.');
|
|
25
|
+
assert.deepEqual(parseOpenCodeJsonLine(line), [
|
|
26
|
+
{ level: 'INFO', message: 'Now wire the refetch into the controller.' },
|
|
27
|
+
]);
|
|
28
|
+
});
|
|
29
|
+
test('parseOpenCodeJsonLine only surfaces terminal tool state and flags errors', () => {
|
|
30
|
+
const cmd = { command: 'ls dist' };
|
|
31
|
+
assert.deepEqual(parseOpenCodeJsonLine(toolEvent('bash', cmd, 'running')), []);
|
|
32
|
+
assert.deepEqual(parseOpenCodeJsonLine(toolEvent('bash', cmd, 'completed')), [
|
|
33
|
+
{ level: 'INFO', message: '[Tool] bash: ls dist' },
|
|
34
|
+
]);
|
|
35
|
+
assert.deepEqual(parseOpenCodeJsonLine(toolEvent('bash', cmd, 'error')), [
|
|
36
|
+
{ level: 'WARN', message: '[Tool] bash: ls dist (error)' },
|
|
37
|
+
]);
|
|
38
|
+
});
|
|
39
|
+
test('parseOpenCodeJsonLine summarizes patch and step-finish, hides reasoning by default', () => {
|
|
40
|
+
const patch = JSON.stringify({
|
|
41
|
+
type: 'patch',
|
|
42
|
+
part: { type: 'patch', files: [`${cwd}/api/src/a.ts`, `${cwd}/api/src/b.ts`] },
|
|
43
|
+
});
|
|
44
|
+
assert.deepEqual(parseOpenCodeJsonLine(patch, { cwd }), [
|
|
45
|
+
{ level: 'INFO', message: '[Patch] api/src/a.ts, api/src/b.ts' },
|
|
46
|
+
]);
|
|
47
|
+
const step = JSON.stringify({
|
|
48
|
+
type: 'step_finish',
|
|
49
|
+
part: { type: 'step-finish', reason: 'stop', tokens: { output: 23 }, cost: 0.00266898 },
|
|
50
|
+
});
|
|
51
|
+
assert.deepEqual(parseOpenCodeJsonLine(step), [
|
|
52
|
+
{ level: 'INFO', message: '[Step finished: stop, 23 out tok, $0.0027]' },
|
|
53
|
+
]);
|
|
54
|
+
const reasoning = JSON.stringify({ type: 'reasoning', part: { type: 'reasoning', text: 'hidden by default' } });
|
|
55
|
+
assert.deepEqual(parseOpenCodeJsonLine(reasoning), []);
|
|
56
|
+
assert.deepEqual(parseOpenCodeJsonLine(reasoning, { verbose: true }), [
|
|
57
|
+
{ level: 'INFO', message: '[Thinking] hidden by default' },
|
|
58
|
+
]);
|
|
59
|
+
});
|
|
60
|
+
test('parseOpenCodeJsonLine returns empty for malformed, empty, or partless input', () => {
|
|
61
|
+
assert.deepEqual(parseOpenCodeJsonLine(''), []);
|
|
62
|
+
assert.deepEqual(parseOpenCodeJsonLine('not json'), []);
|
|
63
|
+
assert.deepEqual(parseOpenCodeJsonLine('{"type":"text"}'), []); // no part
|
|
64
|
+
assert.deepEqual(parseOpenCodeJsonLine(JSON.stringify({ type: 'step_start', part: { type: 'step-start' } })), []);
|
|
65
|
+
});
|
|
66
|
+
test('createOpenCodeJsonLineParser handles chunked input', () => {
|
|
67
|
+
const collected = [];
|
|
68
|
+
const parser = createOpenCodeJsonLineParser((entries) => collected.push(...entries.map((e) => e.message)), { cwd });
|
|
69
|
+
const a = toolEvent('read', { filePath: `${cwd}/a.ts` }, 'completed');
|
|
70
|
+
const b = textEvent('All done.');
|
|
71
|
+
const half = Math.floor(a.length / 2);
|
|
72
|
+
parser.push(a.slice(0, half));
|
|
73
|
+
parser.push(`${a.slice(half)}\n${b}\n`);
|
|
74
|
+
assert.deepEqual(collected, ['[Tool] read: a.ts', 'All done.']);
|
|
75
|
+
});
|
|
76
|
+
test('extractFinalTextFromOpenCodeJson returns the last assistant message text', () => {
|
|
77
|
+
const transcript = [
|
|
78
|
+
textEvent('first pass thinking out loud', 'msg_1'),
|
|
79
|
+
toolEvent('bash', { command: 'ls' }, 'completed'),
|
|
80
|
+
textEvent('The final ', 'msg_2'),
|
|
81
|
+
textEvent('answer.', 'msg_2'),
|
|
82
|
+
].join('\n');
|
|
83
|
+
assert.equal(extractFinalTextFromOpenCodeJson(transcript), 'The final answer.');
|
|
84
|
+
});
|
|
85
|
+
test('extractFinalTextFromOpenCodeJson falls back to raw input when no text part exists', () => {
|
|
86
|
+
const raw = JSON.stringify({ type: 'step_finish', part: { type: 'step-finish', reason: 'stop' } });
|
|
87
|
+
assert.equal(extractFinalTextFromOpenCodeJson(raw), raw);
|
|
88
|
+
});
|
|
89
|
+
test('createOpenCodeFinalTextCapturer retains final text across chunks and survives a head cap', () => {
|
|
90
|
+
const capturer = createOpenCodeFinalTextCapturer();
|
|
91
|
+
assert.equal(capturer.get(), null);
|
|
92
|
+
// Early (head) output, then the closing assistant message split mid-line across pushes.
|
|
93
|
+
capturer.push(`${textEvent('early scratch', 'msg_1')}\n`);
|
|
94
|
+
const closing = `${textEvent('Clean final ', 'msg_2')}\n${textEvent('summary.', 'msg_2')}`;
|
|
95
|
+
const half = Math.floor(closing.length / 2);
|
|
96
|
+
capturer.push(closing.slice(0, half));
|
|
97
|
+
capturer.push(closing.slice(half));
|
|
98
|
+
capturer.flush();
|
|
99
|
+
assert.equal(capturer.get(), 'Clean final summary.');
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=opencode-json-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-json-parser.test.js","sourceRoot":"","sources":["../../src/runners/opencode-json-parser.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runners/opencode.js
CHANGED
|
@@ -5,6 +5,7 @@ import { platform } from 'node:os';
|
|
|
5
5
|
import { dirname, join } from 'node:path';
|
|
6
6
|
import { describeExecutableResolution, resolveExecutablePathWithPreference, spawnExecutable } from '../executable.js';
|
|
7
7
|
import { logger } from '../logger.js';
|
|
8
|
+
import { createOpenCodeFinalTextCapturer, createOpenCodeJsonLineParser } from './opencode-json-parser.js';
|
|
8
9
|
import { setupCloseWatchdog, terminateRunnerChild } from './process-control.js';
|
|
9
10
|
const PROMPT_PREVIEW_MAX = 500;
|
|
10
11
|
const OUTPUT_PREVIEW_MAX = 400;
|
|
@@ -21,7 +22,7 @@ const toPowerShellEncodedCommand = (resolvedExecutablePath, prompt, model) => {
|
|
|
21
22
|
`$promptText = @'`,
|
|
22
23
|
`${prompt.replaceAll("'@", "'@")}`,
|
|
23
24
|
`'@`,
|
|
24
|
-
`$promptText | & '${resolvedExecutablePath.replaceAll("'", "''")}' 'run'${modelSegment}`,
|
|
25
|
+
`$promptText | & '${resolvedExecutablePath.replaceAll("'", "''")}' 'run' '--format' 'json'${modelSegment}`,
|
|
25
26
|
].join('\r\n');
|
|
26
27
|
return Buffer.from(scriptContent, 'utf16le').toString('base64');
|
|
27
28
|
};
|
|
@@ -153,6 +154,9 @@ export class OpenCodeRunner {
|
|
|
153
154
|
windowsWrapper: isWindows ? 'powershell.exe -EncodedCommand' : null,
|
|
154
155
|
});
|
|
155
156
|
const modelArgs = opts.model ? ['--model', opts.model] : [];
|
|
157
|
+
// `--format json` emits structured events (one JSON object per line) instead of the default
|
|
158
|
+
// TUI text, so the runner can refine them into readable logs and a clean fallback summary.
|
|
159
|
+
const runArgs = ['run', '--format', 'json', ...modelArgs];
|
|
156
160
|
const child = isWindows
|
|
157
161
|
? spawn('powershell.exe', ['-NoLogo', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-EncodedCommand', windowsEncodedCommand ?? ''], {
|
|
158
162
|
cwd,
|
|
@@ -169,7 +173,7 @@ export class OpenCodeRunner {
|
|
|
169
173
|
AGENTTEAMS_AGENT_NAME: opts.agentConfigId,
|
|
170
174
|
},
|
|
171
175
|
})
|
|
172
|
-
: spawnExecutable(this.runnerCmd, [
|
|
176
|
+
: spawnExecutable(this.runnerCmd, [...runArgs, opts.prompt], {
|
|
173
177
|
cwd,
|
|
174
178
|
detached: true,
|
|
175
179
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
@@ -191,21 +195,34 @@ export class OpenCodeRunner {
|
|
|
191
195
|
let lastOutput = '';
|
|
192
196
|
let lastErrorOutput = '';
|
|
193
197
|
const outputCapture = createOpenCodeOutputCapture();
|
|
198
|
+
// Refine the JSON event stream into readable log lines (live log) and a clean final-text
|
|
199
|
+
// summary (fallback history). finalTextCapturer survives the head-capped raw buffer on long runs.
|
|
200
|
+
const finalTextCapturer = createOpenCodeFinalTextCapturer();
|
|
194
201
|
const idleTimer = { reset: () => { } };
|
|
202
|
+
const jsonLineParser = createOpenCodeJsonLineParser((entries) => {
|
|
203
|
+
for (const entry of entries) {
|
|
204
|
+
lastOutput = entry.message;
|
|
205
|
+
opts.onStdoutChunk?.(entry.message);
|
|
206
|
+
}
|
|
207
|
+
}, { cwd });
|
|
208
|
+
const finalizeOutputText = () => {
|
|
209
|
+
finalTextCapturer.flush();
|
|
210
|
+
return finalTextCapturer.get() ?? outputCapture.toResultOutputText();
|
|
211
|
+
};
|
|
195
212
|
child.stdout?.on('data', (chunk) => {
|
|
196
213
|
const rawOutput = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (output.length > 0) {
|
|
200
|
-
lastOutput = output;
|
|
201
|
-
idleTimer.reset();
|
|
202
|
-
opts.onStdoutChunk?.(output);
|
|
203
|
-
logger.info('Runner stdout', {
|
|
204
|
-
triggerId: opts.triggerId,
|
|
205
|
-
pid: child.pid,
|
|
206
|
-
output,
|
|
207
|
-
});
|
|
214
|
+
if (rawOutput.length === 0) {
|
|
215
|
+
return;
|
|
208
216
|
}
|
|
217
|
+
outputCapture.appendStdout(rawOutput);
|
|
218
|
+
finalTextCapturer.push(rawOutput);
|
|
219
|
+
jsonLineParser.push(rawOutput);
|
|
220
|
+
idleTimer.reset();
|
|
221
|
+
logger.info('Runner stdout', {
|
|
222
|
+
triggerId: opts.triggerId,
|
|
223
|
+
pid: child.pid,
|
|
224
|
+
output: toOutputPreview(rawOutput),
|
|
225
|
+
});
|
|
209
226
|
});
|
|
210
227
|
child.stderr?.on('data', (chunk) => {
|
|
211
228
|
const rawOutput = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
|
|
@@ -291,7 +308,7 @@ export class OpenCodeRunner {
|
|
|
291
308
|
resolve({
|
|
292
309
|
exitCode: 1,
|
|
293
310
|
lastOutput,
|
|
294
|
-
outputText:
|
|
311
|
+
outputText: finalizeOutputText(),
|
|
295
312
|
errorMessage: error.message,
|
|
296
313
|
});
|
|
297
314
|
});
|
|
@@ -299,6 +316,7 @@ export class OpenCodeRunner {
|
|
|
299
316
|
child.on('close', (code) => {
|
|
300
317
|
closeWatchdog.cancel();
|
|
301
318
|
clearTimeout(timeoutId);
|
|
319
|
+
jsonLineParser.flush();
|
|
302
320
|
cleanup();
|
|
303
321
|
logger.info('Runner process closed', {
|
|
304
322
|
triggerId: opts.triggerId,
|
|
@@ -311,7 +329,7 @@ export class OpenCodeRunner {
|
|
|
311
329
|
exitCode: 1,
|
|
312
330
|
idleTimedOut,
|
|
313
331
|
lastOutput,
|
|
314
|
-
outputText:
|
|
332
|
+
outputText: finalizeOutputText(),
|
|
315
333
|
errorMessage: idleTimedOut
|
|
316
334
|
? `Runner idle timed out after ${Math.round(opts.idleTimeoutMs / 60_000)}m of no output`
|
|
317
335
|
: `Runner fail-safe timed out after ${Math.round(opts.timeoutMs / 3_600_000)}h`,
|
|
@@ -323,7 +341,7 @@ export class OpenCodeRunner {
|
|
|
323
341
|
exitCode: 1,
|
|
324
342
|
cancelled: true,
|
|
325
343
|
lastOutput,
|
|
326
|
-
outputText:
|
|
344
|
+
outputText: finalizeOutputText(),
|
|
327
345
|
errorMessage: 'Runner cancelled by user',
|
|
328
346
|
});
|
|
329
347
|
return;
|
|
@@ -331,7 +349,7 @@ export class OpenCodeRunner {
|
|
|
331
349
|
resolve({
|
|
332
350
|
exitCode: code ?? 1,
|
|
333
351
|
lastOutput,
|
|
334
|
-
outputText:
|
|
352
|
+
outputText: finalizeOutputText(),
|
|
335
353
|
errorMessage: code === 0 ? undefined : lastErrorOutput || lastOutput || `Runner exited with code ${code ?? 1}`,
|
|
336
354
|
});
|
|
337
355
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/runners/opencode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/runners/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,21 @@ export declare const shortenPath: (path: string, cwd?: string) => string;
|
|
|
14
14
|
export declare const firstSentence: (text: string, cap?: number) => string;
|
|
15
15
|
export declare const summarizeToolUse: (name: string, input: Record<string, unknown> | undefined, cwd?: string) => string;
|
|
16
16
|
export declare const parseStreamJsonLine: (line: string, options?: ParseOptions) => ParsedLogEntry[];
|
|
17
|
+
/**
|
|
18
|
+
* Captures the most recent `"type":"result"` line from chunked stdout, independent of the
|
|
19
|
+
* runner's head-capped output buffer (OUTPUT_CAPTURE_MAX). The terminal `result` event arrives
|
|
20
|
+
* at the very end of a run, so on long runs it falls outside the head-capped buffer and the
|
|
21
|
+
* fallback history (extractResultTextFromStreamJson) can never surface the clean final text.
|
|
22
|
+
* Retaining just that single line lets the fallback stay readable regardless of run length.
|
|
23
|
+
*
|
|
24
|
+
* Uses the same `"type":"result"` substring heuristic as extractResultTextFromStreamJson so the
|
|
25
|
+
* two agree on what counts as a result line.
|
|
26
|
+
*/
|
|
27
|
+
export declare const createResultLineCapturer: () => {
|
|
28
|
+
push: (chunk: string) => void;
|
|
29
|
+
flush: () => void;
|
|
30
|
+
get: () => string | null;
|
|
31
|
+
};
|
|
17
32
|
/**
|
|
18
33
|
* Creates a line-buffered parser that handles chunked stdout data.
|
|
19
34
|
* Stream data may arrive as partial lines, so this buffers until newlines.
|
|
@@ -181,6 +181,43 @@ export const parseStreamJsonLine = (line, options) => {
|
|
|
181
181
|
}
|
|
182
182
|
return entries;
|
|
183
183
|
};
|
|
184
|
+
/**
|
|
185
|
+
* Captures the most recent `"type":"result"` line from chunked stdout, independent of the
|
|
186
|
+
* runner's head-capped output buffer (OUTPUT_CAPTURE_MAX). The terminal `result` event arrives
|
|
187
|
+
* at the very end of a run, so on long runs it falls outside the head-capped buffer and the
|
|
188
|
+
* fallback history (extractResultTextFromStreamJson) can never surface the clean final text.
|
|
189
|
+
* Retaining just that single line lets the fallback stay readable regardless of run length.
|
|
190
|
+
*
|
|
191
|
+
* Uses the same `"type":"result"` substring heuristic as extractResultTextFromStreamJson so the
|
|
192
|
+
* two agree on what counts as a result line.
|
|
193
|
+
*/
|
|
194
|
+
export const createResultLineCapturer = () => {
|
|
195
|
+
let buffer = '';
|
|
196
|
+
let lastResultLine = null;
|
|
197
|
+
const scan = (line) => {
|
|
198
|
+
const trimmed = line.trim();
|
|
199
|
+
if (trimmed.includes('"type":"result"')) {
|
|
200
|
+
lastResultLine = trimmed;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
return {
|
|
204
|
+
push(chunk) {
|
|
205
|
+
buffer += chunk;
|
|
206
|
+
const lines = buffer.split('\n');
|
|
207
|
+
buffer = lines.pop() ?? '';
|
|
208
|
+
for (const line of lines) {
|
|
209
|
+
scan(line);
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
flush() {
|
|
213
|
+
if (buffer.length > 0) {
|
|
214
|
+
scan(buffer);
|
|
215
|
+
}
|
|
216
|
+
buffer = '';
|
|
217
|
+
},
|
|
218
|
+
get: () => lastResultLine,
|
|
219
|
+
};
|
|
220
|
+
};
|
|
184
221
|
/**
|
|
185
222
|
* Creates a line-buffered parser that handles chunked stdout data.
|
|
186
223
|
* Stream data may arrive as partial lines, so this buffers until newlines.
|