teamshare-bridge 0.26.13 → 0.26.15
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/cli/commands/research.js +10 -2
- package/dist/cli/commands/research.js.map +1 -1
- package/dist/cli/commands/run.js +0 -21
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/lib/browser/batch.d.ts +77 -1
- package/dist/lib/browser/batch.js +151 -3
- package/dist/lib/browser/batch.js.map +1 -1
- package/dist/lib/browser/cdp.d.ts +61 -2
- package/dist/lib/browser/cdp.js +235 -14
- package/dist/lib/browser/cdp.js.map +1 -1
- package/dist/lib/browser/index.d.ts +2 -2
- package/dist/lib/browser/index.js +4 -1
- package/dist/lib/browser/index.js.map +1 -1
- package/dist/lib/browser/login.d.ts +20 -2
- package/dist/lib/browser/login.js +125 -88
- package/dist/lib/browser/login.js.map +1 -1
- package/dist/lib/browser/network-log.d.ts +31 -0
- package/dist/lib/browser/network-log.js +94 -12
- package/dist/lib/browser/network-log.js.map +1 -1
- package/dist/lib/browser/page-context.d.ts +62 -1
- package/dist/lib/browser/page-context.js +284 -1
- package/dist/lib/browser/page-context.js.map +1 -1
- package/dist/lib/browser/refs.d.ts +104 -0
- package/dist/lib/browser/refs.js +430 -0
- package/dist/lib/browser/refs.js.map +1 -0
- package/dist/lib/browser/session.d.ts +188 -7
- package/dist/lib/browser/session.js +537 -8
- package/dist/lib/browser/session.js.map +1 -1
- package/dist/lib/git/git-finalize.js +17 -2
- package/dist/lib/git/git-finalize.js.map +1 -1
- package/dist/lib/harness/harness-adapter.d.ts +2 -5
- package/dist/lib/harness/harness-adapter.js.map +1 -1
- package/dist/lib/harness/opencode-control.d.ts +73 -0
- package/dist/lib/harness/opencode-control.js +318 -0
- package/dist/lib/harness/opencode-control.js.map +1 -1
- package/dist/lib/harness/opencode-outcome.d.ts +16 -2
- package/dist/lib/harness/opencode-outcome.js +36 -7
- package/dist/lib/harness/opencode-outcome.js.map +1 -1
- package/dist/lib/harness/spawn.js +112 -48
- package/dist/lib/harness/spawn.js.map +1 -1
- package/dist/lib/orchestrator/handlers/browser.js +472 -27
- package/dist/lib/orchestrator/handlers/browser.js.map +1 -1
- package/dist/lib/tools/browser-tool.js +24 -3
- package/dist/lib/tools/browser-tool.js.map +1 -1
- package/dist/lib/workspace/repo-lock.d.ts +5 -1
- package/dist/lib/workspace/repo-lock.js +5 -3
- package/dist/lib/workspace/repo-lock.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildOpencodeInterruptArgs = buildOpencodeInterruptArgs;
|
|
4
4
|
exports.interruptOpencodeSession = interruptOpencodeSession;
|
|
5
|
+
exports.extractShellIds = extractShellIds;
|
|
6
|
+
exports.buildShellListArgs = buildShellListArgs;
|
|
7
|
+
exports.buildShellGetArgs = buildShellGetArgs;
|
|
8
|
+
exports.buildShellRemoveArgs = buildShellRemoveArgs;
|
|
9
|
+
exports.listOpencodeShells = listOpencodeShells;
|
|
10
|
+
exports.getOpencodeShell = getOpencodeShell;
|
|
11
|
+
exports.removeOpencodeShell = removeOpencodeShell;
|
|
12
|
+
exports.shellFailureReason = shellFailureReason;
|
|
13
|
+
exports.settleOpencodeShells = settleOpencodeShells;
|
|
14
|
+
exports.buildSubagentListArgs = buildSubagentListArgs;
|
|
15
|
+
exports.buildSessionMessagesArgs = buildSessionMessagesArgs;
|
|
16
|
+
exports.listSubagentSessions = listSubagentSessions;
|
|
17
|
+
exports.listSessionMessages = listSessionMessages;
|
|
18
|
+
exports.formatSubagentMessage = formatSubagentMessage;
|
|
19
|
+
exports.interruptSubagentSessions = interruptSubagentSessions;
|
|
5
20
|
/**
|
|
6
21
|
* OpenCode V2 session control (2026-10).
|
|
7
22
|
*
|
|
@@ -21,6 +36,8 @@ const node_child_process_1 = require("node:child_process");
|
|
|
21
36
|
const harness_1 = require("./harness");
|
|
22
37
|
/** OpenCode session ids are `ses_` + base62-ish; reject anything else. */
|
|
23
38
|
const OPENCODE_SESSION_ID = /^ses_[A-Za-z0-9]+$/;
|
|
39
|
+
/** Shell ids are `sh_` + base62-ish; reject anything else (path safety). */
|
|
40
|
+
const OPENCODE_SHELL_ID = /^sh_[A-Za-z0-9]+$/;
|
|
24
41
|
/**
|
|
25
42
|
* Build the CLI argv that interrupts `sessionId`, or null for an invalid id.
|
|
26
43
|
* Exported as a pure function so the contract can be pinned by a unit test.
|
|
@@ -60,4 +77,305 @@ function interruptOpencodeSession(sessionId, timeoutMs = 15_000) {
|
|
|
60
77
|
}
|
|
61
78
|
});
|
|
62
79
|
}
|
|
80
|
+
/** Shell ids carried by the harness stream (`metadata.shellID` / Shell message). */
|
|
81
|
+
function extractShellIds(line) {
|
|
82
|
+
if (!line || !line.includes('sh_'))
|
|
83
|
+
return [];
|
|
84
|
+
const ids = new Set();
|
|
85
|
+
const re = /"(?:shellID|shellId|shell_id)"\s*:\s*"(sh_[A-Za-z0-9]+)"/g;
|
|
86
|
+
for (const m of line.matchAll(re))
|
|
87
|
+
ids.add(m[1]);
|
|
88
|
+
return [...ids];
|
|
89
|
+
}
|
|
90
|
+
/** Query suffix for the location-scoped shell routes. */
|
|
91
|
+
function shellLocation(cwd) {
|
|
92
|
+
return `location%5Bdirectory%5D=${encodeURIComponent(cwd)}`;
|
|
93
|
+
}
|
|
94
|
+
function buildShellListArgs(cwd) {
|
|
95
|
+
if (!cwd)
|
|
96
|
+
return null;
|
|
97
|
+
return ['api', 'GET', `/api/shell?${shellLocation(cwd)}`];
|
|
98
|
+
}
|
|
99
|
+
function buildShellGetArgs(id, cwd) {
|
|
100
|
+
if (!OPENCODE_SHELL_ID.test(id) || !cwd)
|
|
101
|
+
return null;
|
|
102
|
+
return ['api', 'GET', `/api/shell/${id}?${shellLocation(cwd)}`];
|
|
103
|
+
}
|
|
104
|
+
function buildShellRemoveArgs(id, cwd) {
|
|
105
|
+
if (!OPENCODE_SHELL_ID.test(id) || !cwd)
|
|
106
|
+
return null;
|
|
107
|
+
return ['api', 'DELETE', `/api/shell/${id}?${shellLocation(cwd)}`];
|
|
108
|
+
}
|
|
109
|
+
/** Run one `opencode api` call; returns stdout or null (never throws). */
|
|
110
|
+
function runOpencodeApi(args, timeoutMs) {
|
|
111
|
+
if (!args)
|
|
112
|
+
return Promise.resolve(null);
|
|
113
|
+
const bin = (0, harness_1.resolveBin)('opencode');
|
|
114
|
+
if (!bin)
|
|
115
|
+
return Promise.resolve(null);
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
try {
|
|
118
|
+
(0, node_child_process_1.execFile)(bin.file, [...(bin.args ?? []), ...args], { timeout: timeoutMs, windowsHide: true, maxBuffer: 4 * 1024 * 1024 }, (err, stdout) => {
|
|
119
|
+
if (err) {
|
|
120
|
+
resolve(null);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
resolve(String(stdout ?? ''));
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
resolve(null);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function parseShellInfo(raw) {
|
|
132
|
+
if (!raw)
|
|
133
|
+
return null;
|
|
134
|
+
try {
|
|
135
|
+
const parsed = JSON.parse(raw);
|
|
136
|
+
const data = parsed?.data;
|
|
137
|
+
if (!data || typeof data !== 'object')
|
|
138
|
+
return null;
|
|
139
|
+
const r = data;
|
|
140
|
+
if (typeof r.id !== 'string' || !OPENCODE_SHELL_ID.test(r.id))
|
|
141
|
+
return null;
|
|
142
|
+
return {
|
|
143
|
+
id: r.id,
|
|
144
|
+
status: typeof r.status === 'string' ? r.status : 'unknown',
|
|
145
|
+
...(typeof r.command === 'string' ? { command: r.command } : {}),
|
|
146
|
+
...(typeof r.cwd === 'string' ? { cwd: r.cwd } : {}),
|
|
147
|
+
...(typeof r.pid === 'number' ? { pid: r.pid } : {}),
|
|
148
|
+
...(typeof r.exit === 'number' || r.exit === null
|
|
149
|
+
? { exit: r.exit }
|
|
150
|
+
: {}),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** List RUNNING shells for a location (exited shells are not included). */
|
|
158
|
+
async function listOpencodeShells(cwd, timeoutMs = 8_000) {
|
|
159
|
+
const raw = await runOpencodeApi(buildShellListArgs(cwd), timeoutMs);
|
|
160
|
+
if (!raw)
|
|
161
|
+
return [];
|
|
162
|
+
try {
|
|
163
|
+
const parsed = JSON.parse(raw);
|
|
164
|
+
const rows = Array.isArray(parsed?.data) ? parsed.data : [];
|
|
165
|
+
return rows
|
|
166
|
+
.map((row) => {
|
|
167
|
+
if (!row || typeof row !== 'object')
|
|
168
|
+
return null;
|
|
169
|
+
const r = row;
|
|
170
|
+
if (typeof r.id !== 'string' || !OPENCODE_SHELL_ID.test(r.id))
|
|
171
|
+
return null;
|
|
172
|
+
return {
|
|
173
|
+
id: r.id,
|
|
174
|
+
status: typeof r.status === 'string' ? r.status : 'unknown',
|
|
175
|
+
...(typeof r.command === 'string' ? { command: r.command } : {}),
|
|
176
|
+
...(typeof r.cwd === 'string' ? { cwd: r.cwd } : {}),
|
|
177
|
+
...(typeof r.pid === 'number' ? { pid: r.pid } : {}),
|
|
178
|
+
...(typeof r.exit === 'number' || r.exit === null
|
|
179
|
+
? { exit: r.exit }
|
|
180
|
+
: {}),
|
|
181
|
+
};
|
|
182
|
+
})
|
|
183
|
+
.filter((r) => r !== null);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** Read one shell's status/exit; null when it cannot be read. */
|
|
190
|
+
async function getOpencodeShell(id, cwd, timeoutMs = 5_000) {
|
|
191
|
+
return parseShellInfo(await runOpencodeApi(buildShellGetArgs(id, cwd), timeoutMs));
|
|
192
|
+
}
|
|
193
|
+
/** Terminate and remove one shell (best-effort). */
|
|
194
|
+
async function removeOpencodeShell(id, cwd, timeoutMs = 5_000) {
|
|
195
|
+
const raw = await runOpencodeApi(buildShellRemoveArgs(id, cwd), timeoutMs);
|
|
196
|
+
// DELETE answers 204 with an empty body; execFile's stdout is '' on success.
|
|
197
|
+
return raw !== null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Pure: why a settled shell is a FAILURE, or null when it completed cleanly.
|
|
201
|
+
* `running` at the deadline is a failure (the work is unresolved), as are
|
|
202
|
+
* `timeout`/`killed` and any non-zero exit. A shell whose status cannot be
|
|
203
|
+
* read is a failure too - success is never assumed.
|
|
204
|
+
*/
|
|
205
|
+
function shellFailureReason(info, stillRunning = false) {
|
|
206
|
+
if (!info)
|
|
207
|
+
return 'the shell status could not be read';
|
|
208
|
+
if (stillRunning || info.status === 'running') {
|
|
209
|
+
return 'still running at the session deadline';
|
|
210
|
+
}
|
|
211
|
+
if (info.status === 'timeout' || info.status === 'killed') {
|
|
212
|
+
return `ended as "${info.status}"`;
|
|
213
|
+
}
|
|
214
|
+
if (typeof info.exit === 'number' && info.exit !== 0) {
|
|
215
|
+
return `exited with code ${info.exit}`;
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
async function settleOpencodeShells(opts) {
|
|
220
|
+
const waitMs = Math.max(0, opts.waitMs ?? 60_000);
|
|
221
|
+
const pollMs = Math.max(200, opts.pollMs ?? 1_000);
|
|
222
|
+
const ids = new Set(opts.ids.filter((id) => OPENCODE_SHELL_ID.test(id)));
|
|
223
|
+
if (opts.includeRunning) {
|
|
224
|
+
for (const shell of await listOpencodeShells(opts.cwd)) {
|
|
225
|
+
if (shell.status === 'running')
|
|
226
|
+
ids.add(shell.id);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (ids.size === 0) {
|
|
230
|
+
return {
|
|
231
|
+
ok: true,
|
|
232
|
+
failures: [],
|
|
233
|
+
removed: 0,
|
|
234
|
+
detail: 'no background shells',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const deadline = Date.now() + waitMs;
|
|
238
|
+
const finals = new Map();
|
|
239
|
+
const pending = new Set(ids);
|
|
240
|
+
while (pending.size > 0 && Date.now() < deadline) {
|
|
241
|
+
for (const id of [...pending]) {
|
|
242
|
+
const info = await getOpencodeShell(id, opts.cwd);
|
|
243
|
+
if (!info) {
|
|
244
|
+
finals.set(id, null);
|
|
245
|
+
pending.delete(id);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (info.status !== 'running') {
|
|
249
|
+
finals.set(id, info);
|
|
250
|
+
pending.delete(id);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (pending.size === 0)
|
|
254
|
+
break;
|
|
255
|
+
await new Promise((resolve) => setTimeout(resolve, pollMs));
|
|
256
|
+
}
|
|
257
|
+
const failures = [];
|
|
258
|
+
for (const id of ids) {
|
|
259
|
+
const info = finals.get(id) ?? (await getOpencodeShell(id, opts.cwd));
|
|
260
|
+
const reason = shellFailureReason(info, pending.has(id));
|
|
261
|
+
if (reason) {
|
|
262
|
+
const label = info?.command ? `"${info.command.slice(0, 80)}"` : id;
|
|
263
|
+
failures.push(`${label} ${reason}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
let removed = 0;
|
|
267
|
+
for (const id of ids) {
|
|
268
|
+
if (await removeOpencodeShell(id, opts.cwd))
|
|
269
|
+
removed += 1;
|
|
270
|
+
}
|
|
271
|
+
const detail = failures.length
|
|
272
|
+
? `background shell failure: ${failures.join('; ')}`
|
|
273
|
+
: `${removed} background shell(s) settled`;
|
|
274
|
+
opts.log?.(`[harness] ${detail}`, failures.length ? 'stderr' : 'stdout');
|
|
275
|
+
return { ok: failures.length === 0, failures, removed, detail };
|
|
276
|
+
}
|
|
277
|
+
function buildSubagentListArgs(parentId, cwd) {
|
|
278
|
+
if (!OPENCODE_SESSION_ID.test(parentId) || !cwd)
|
|
279
|
+
return null;
|
|
280
|
+
return [
|
|
281
|
+
'api',
|
|
282
|
+
'GET',
|
|
283
|
+
`/api/session?parentID=${encodeURIComponent(parentId)}&directory=${encodeURIComponent(cwd)}&limit=50`,
|
|
284
|
+
];
|
|
285
|
+
}
|
|
286
|
+
function buildSessionMessagesArgs(sessionId, cwd, limit = 10) {
|
|
287
|
+
if (!OPENCODE_SESSION_ID.test(sessionId) || !cwd)
|
|
288
|
+
return null;
|
|
289
|
+
return [
|
|
290
|
+
'api',
|
|
291
|
+
'GET',
|
|
292
|
+
`/api/session/${sessionId}/message?type=assistant&order=desc&limit=${Math.max(1, Math.min(50, limit))}`,
|
|
293
|
+
];
|
|
294
|
+
}
|
|
295
|
+
/** Child sessions of a run's main session (subagents). Best-effort. */
|
|
296
|
+
async function listSubagentSessions(parentId, cwd, timeoutMs = 8_000) {
|
|
297
|
+
const raw = await runOpencodeApi(buildSubagentListArgs(parentId, cwd), timeoutMs);
|
|
298
|
+
if (!raw)
|
|
299
|
+
return [];
|
|
300
|
+
try {
|
|
301
|
+
const parsed = JSON.parse(raw);
|
|
302
|
+
const rows = Array.isArray(parsed?.data) ? parsed.data : [];
|
|
303
|
+
return rows
|
|
304
|
+
.map((row) => {
|
|
305
|
+
if (!row || typeof row !== 'object')
|
|
306
|
+
return null;
|
|
307
|
+
const r = row;
|
|
308
|
+
if (typeof r.id !== 'string' || !OPENCODE_SESSION_ID.test(r.id))
|
|
309
|
+
return null;
|
|
310
|
+
return {
|
|
311
|
+
id: r.id,
|
|
312
|
+
...(typeof r.parentID === 'string' ? { parentID: r.parentID } : {}),
|
|
313
|
+
...(typeof r.title === 'string' ? { title: r.title } : {}),
|
|
314
|
+
...(typeof r.outcome === 'string' ? { outcome: r.outcome } : {}),
|
|
315
|
+
};
|
|
316
|
+
})
|
|
317
|
+
.filter((r) => r !== null);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return [];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/** Latest assistant messages of a session, newest page reversed to oldest. */
|
|
324
|
+
async function listSessionMessages(sessionId, cwd, limit = 10, timeoutMs = 8_000) {
|
|
325
|
+
const raw = await runOpencodeApi(buildSessionMessagesArgs(sessionId, cwd, limit), timeoutMs);
|
|
326
|
+
if (!raw)
|
|
327
|
+
return [];
|
|
328
|
+
try {
|
|
329
|
+
const parsed = JSON.parse(raw);
|
|
330
|
+
const rows = Array.isArray(parsed?.data) ? parsed.data : [];
|
|
331
|
+
return rows
|
|
332
|
+
.filter((r) => !!r && typeof r === 'object')
|
|
333
|
+
.reverse();
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
return [];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/** Human-readable line for a subagent assistant message (text or tool). */
|
|
340
|
+
function formatSubagentMessage(message) {
|
|
341
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
342
|
+
const parts = [];
|
|
343
|
+
for (const raw of content) {
|
|
344
|
+
if (!raw || typeof raw !== 'object')
|
|
345
|
+
continue;
|
|
346
|
+
const part = raw;
|
|
347
|
+
if (part.type === 'text' && typeof part.text === 'string') {
|
|
348
|
+
const text = part.text.trim();
|
|
349
|
+
if (text)
|
|
350
|
+
parts.push(text);
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
if (part.type === 'tool' && typeof part.name === 'string') {
|
|
354
|
+
const state = part.state && typeof part.state === 'object'
|
|
355
|
+
? part.state
|
|
356
|
+
: null;
|
|
357
|
+
const status = state && typeof state.status === 'string' ? state.status : '';
|
|
358
|
+
const output = state && typeof state.output === 'string'
|
|
359
|
+
? state.output.replace(/\s+/g, ' ').trim().slice(0, 300)
|
|
360
|
+
: '';
|
|
361
|
+
parts.push(`[tool] ${part.name}${status ? ` ${status}` : ''}${output ? `: ${output}` : ''}`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return parts.join(' ').replace(/\s+/g, ' ').trim().slice(0, 2000);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Interrupt every child session of `parentId` (and any already-known child
|
|
368
|
+
* ids). Returns the number of children found. Best-effort: a child that
|
|
369
|
+
* cannot be interrupted is logged, never thrown.
|
|
370
|
+
*/
|
|
371
|
+
async function interruptSubagentSessions(parentId, cwd, knownIds = []) {
|
|
372
|
+
const ids = new Set(knownIds.filter((id) => OPENCODE_SESSION_ID.test(id)));
|
|
373
|
+
for (const child of await listSubagentSessions(parentId, cwd)) {
|
|
374
|
+
ids.add(child.id);
|
|
375
|
+
}
|
|
376
|
+
for (const id of ids) {
|
|
377
|
+
await interruptOpencodeSession(id);
|
|
378
|
+
}
|
|
379
|
+
return ids.size;
|
|
380
|
+
}
|
|
63
381
|
//# sourceMappingURL=opencode-control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-control.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-control.ts"],"names":[],"mappings":";;AAyBA,gEAGC;AAUD,4DA0BC;AAhED;;;;;;;;;;;;;;GAcG;AACH,2DAA8C;AAC9C,uCAAuC;AAEvC,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEjD;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,SAAS,YAAY,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,SAAiB,EACjB,SAAS,GAAG,MAAM;IAElB,MAAM,IAAI,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,IAAA,6BAAQ,EACN,GAAG,CAAC,IAAI,EACR,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAC9B,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,EACjE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"opencode-control.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,21 @@ export declare function probeOpencodeOutcome(sessionId: string): SessionOutcome;
|
|
|
13
13
|
/**
|
|
14
14
|
* Pure decision: is a non-zero harness exit actually a COMPLETED run?
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* 2026-10 POLICY CHANGE: it is NOT. A non-zero client exit always fails the
|
|
17
|
+
* run, even when the session record says `succeeded`. The probe is kept to
|
|
18
|
+
* EXPLAIN the failure (and to keep the session record for diagnosis), never
|
|
19
|
+
* to turn the failure into success.
|
|
20
|
+
*
|
|
21
|
+
* WHY: the recovery used to hide two real failures. A backgrounded
|
|
22
|
+
* `npm run test:run` (service-owned, outliving the CLI) finished with 230
|
|
23
|
+
* unhandled errors, and a client exit 1 was reported as "recovered" because
|
|
24
|
+
* the session outcome was `succeeded` - so a run whose verification had
|
|
25
|
+
* failed was marked complete and moved to review. The git pipeline still
|
|
26
|
+
* commits work on failure, so nothing is lost; the task is reopened for a
|
|
27
|
+
* real retry instead of being presented as verified.
|
|
28
|
+
*
|
|
29
|
+
* The idle kill (124) is OURS and stays a failure. Other harnesses keep the
|
|
30
|
+
* classic exit-code contract.
|
|
18
31
|
*/
|
|
19
32
|
export declare function decideHarnessExit(input: {
|
|
20
33
|
harness: string;
|
|
@@ -22,4 +35,5 @@ export declare function decideHarnessExit(input: {
|
|
|
22
35
|
outcome: SessionOutcome;
|
|
23
36
|
}): {
|
|
24
37
|
recovered: boolean;
|
|
38
|
+
detail: string;
|
|
25
39
|
};
|
|
@@ -79,14 +79,43 @@ function probeOpencodeOutcome(sessionId) {
|
|
|
79
79
|
/**
|
|
80
80
|
* Pure decision: is a non-zero harness exit actually a COMPLETED run?
|
|
81
81
|
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
82
|
+
* 2026-10 POLICY CHANGE: it is NOT. A non-zero client exit always fails the
|
|
83
|
+
* run, even when the session record says `succeeded`. The probe is kept to
|
|
84
|
+
* EXPLAIN the failure (and to keep the session record for diagnosis), never
|
|
85
|
+
* to turn the failure into success.
|
|
86
|
+
*
|
|
87
|
+
* WHY: the recovery used to hide two real failures. A backgrounded
|
|
88
|
+
* `npm run test:run` (service-owned, outliving the CLI) finished with 230
|
|
89
|
+
* unhandled errors, and a client exit 1 was reported as "recovered" because
|
|
90
|
+
* the session outcome was `succeeded` - so a run whose verification had
|
|
91
|
+
* failed was marked complete and moved to review. The git pipeline still
|
|
92
|
+
* commits work on failure, so nothing is lost; the task is reopened for a
|
|
93
|
+
* real retry instead of being presented as verified.
|
|
94
|
+
*
|
|
95
|
+
* The idle kill (124) is OURS and stays a failure. Other harnesses keep the
|
|
96
|
+
* classic exit-code contract.
|
|
84
97
|
*/
|
|
85
98
|
function decideHarnessExit(input) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
99
|
+
if (input.harness !== 'opencode' || input.code === 0) {
|
|
100
|
+
return { recovered: false, detail: '' };
|
|
101
|
+
}
|
|
102
|
+
if (input.code === 124) {
|
|
103
|
+
return {
|
|
104
|
+
recovered: false,
|
|
105
|
+
detail: 'the harness was killed after producing no output (idle timeout)',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
if (input.outcome === 'succeeded') {
|
|
109
|
+
return {
|
|
110
|
+
recovered: false,
|
|
111
|
+
detail: 'the opencode client exited non-zero while the session record says succeeded; a non-zero client exit fails the run (work is still committed)',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
recovered: false,
|
|
116
|
+
detail: input.outcome === 'failed'
|
|
117
|
+
? 'the opencode session failed'
|
|
118
|
+
: 'the opencode session outcome could not be read',
|
|
119
|
+
};
|
|
91
120
|
}
|
|
92
121
|
//# sourceMappingURL=opencode-outcome.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-outcome.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-outcome.ts"],"names":[],"mappings":";;AAqCA,kDAUC;AAMD,oDAqBC;
|
|
1
|
+
{"version":3,"file":"opencode-outcome.js","sourceRoot":"","sources":["../../../src/lib/harness/opencode-outcome.ts"],"names":[],"mappings":";;AAqCA,kDAUC;AAMD,oDAqBC;AAqBD,8CA4BC;AA3HD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,2DAA+C;AAC/C,uCAAuC;AAIvC,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAqC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;QACtC,IAAI,OAAO,KAAK,WAAW;YAAE,OAAO,WAAW,CAAC;QAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,SAAiB;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAA,8BAAS,EACnB,GAAG,CAAC,IAAI,EACR,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,EACrD;YACE,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;YAC3B,WAAW,EAAE,IAAI;SAClB,CACF,CAAC;QACF,wEAAwE;QACxE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACtD,OAAO,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,iBAAiB,CAAC,KAIjC;IACC,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,iEAAiE;SAC1E,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EACJ,6IAA6I;SAChJ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EACJ,KAAK,CAAC,OAAO,KAAK,QAAQ;YACxB,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,gDAAgD;KACvD,CAAC;AACJ,CAAC"}
|