@xemahq/agent-runtime-bridge 0.1.1
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/LICENSE +201 -0
- package/README.md +60 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/applier.d.ts +31 -0
- package/dist/lib/applier.d.ts.map +1 -0
- package/dist/lib/applier.js +169 -0
- package/dist/lib/applier.js.map +1 -0
- package/dist/lib/bundle-fingerprint.d.ts +43 -0
- package/dist/lib/bundle-fingerprint.d.ts.map +1 -0
- package/dist/lib/bundle-fingerprint.js +59 -0
- package/dist/lib/bundle-fingerprint.js.map +1 -0
- package/dist/lib/control-plane.d.ts +75 -0
- package/dist/lib/control-plane.d.ts.map +1 -0
- package/dist/lib/control-plane.js +109 -0
- package/dist/lib/control-plane.js.map +1 -0
- package/dist/lib/driver.d.ts +17 -0
- package/dist/lib/driver.d.ts.map +1 -0
- package/dist/lib/driver.js +357 -0
- package/dist/lib/driver.js.map +1 -0
- package/dist/lib/opencode-event-translator.d.ts +46 -0
- package/dist/lib/opencode-event-translator.d.ts.map +1 -0
- package/dist/lib/opencode-event-translator.js +621 -0
- package/dist/lib/opencode-event-translator.js.map +1 -0
- package/dist/lib/runtime-frame.d.ts +127 -0
- package/dist/lib/runtime-frame.d.ts.map +1 -0
- package/dist/lib/runtime-frame.js +82 -0
- package/dist/lib/runtime-frame.js.map +1 -0
- package/dist/lib/sse-protocol.d.ts +8 -0
- package/dist/lib/sse-protocol.d.ts.map +1 -0
- package/dist/lib/sse-protocol.js +55 -0
- package/dist/lib/sse-protocol.js.map +1 -0
- package/dist/lib/tool-reply-routes.d.ts +10 -0
- package/dist/lib/tool-reply-routes.d.ts.map +1 -0
- package/dist/lib/tool-reply-routes.js +29 -0
- package/dist/lib/tool-reply-routes.js.map +1 -0
- package/dist/lib/worker-auth.d.ts +2 -0
- package/dist/lib/worker-auth.d.ts.map +1 -0
- package/dist/lib/worker-auth.js +8 -0
- package/dist/lib/worker-auth.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-fingerprint.js","sourceRoot":"","sources":["../../src/lib/bundle-fingerprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export interface BundleWorkingFile {
|
|
2
|
+
readonly slug: string;
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly format: 'markdown' | 'html' | 'json' | 'yaml' | 'text';
|
|
5
|
+
readonly syncDirection: 'down-only' | 'up-only' | 'bidirectional';
|
|
6
|
+
readonly sourceKind: string;
|
|
7
|
+
readonly sourceRef: Readonly<Record<string, string>>;
|
|
8
|
+
}
|
|
9
|
+
export interface BundleOutputSurface {
|
|
10
|
+
readonly kind: 'none' | 'web' | 'static' | 'app' | 'tunnel';
|
|
11
|
+
readonly port?: number;
|
|
12
|
+
readonly healthPath?: string;
|
|
13
|
+
readonly autoOpen?: boolean;
|
|
14
|
+
readonly mode?: 'single' | 'multi';
|
|
15
|
+
readonly root?: string;
|
|
16
|
+
readonly defaultDocument?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ControlSetupSubAgentEntry {
|
|
19
|
+
readonly slug: string;
|
|
20
|
+
readonly alias?: string;
|
|
21
|
+
readonly modelOverride?: {
|
|
22
|
+
readonly kind: 'concrete';
|
|
23
|
+
readonly modelId: string;
|
|
24
|
+
readonly providerSlug?: string;
|
|
25
|
+
readonly temperature?: number;
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: 'strategy';
|
|
28
|
+
readonly modelClass: string;
|
|
29
|
+
readonly temperature?: number;
|
|
30
|
+
} | null;
|
|
31
|
+
}
|
|
32
|
+
export type ControlSetupResult = {
|
|
33
|
+
readonly applied: true;
|
|
34
|
+
} | {
|
|
35
|
+
readonly applied: false;
|
|
36
|
+
readonly status: string;
|
|
37
|
+
readonly error: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function applyWorkerControlTeardown(req: {
|
|
40
|
+
readonly proxyUrl: string;
|
|
41
|
+
readonly workerPassword: string;
|
|
42
|
+
readonly timeoutMs?: number;
|
|
43
|
+
}): Promise<ControlSetupResult>;
|
|
44
|
+
export interface SessionBundleRequest {
|
|
45
|
+
readonly proxyUrl: string;
|
|
46
|
+
readonly workerPassword: string;
|
|
47
|
+
readonly allocationId: string;
|
|
48
|
+
readonly caller: {
|
|
49
|
+
readonly orgId: string;
|
|
50
|
+
readonly projectId: string;
|
|
51
|
+
readonly sessionId?: string;
|
|
52
|
+
readonly authToken: string;
|
|
53
|
+
};
|
|
54
|
+
readonly primaryAgent: {
|
|
55
|
+
readonly slug: string;
|
|
56
|
+
};
|
|
57
|
+
readonly subAgents: ReadonlyArray<ControlSetupSubAgentEntry>;
|
|
58
|
+
readonly opencodeConfigBase64: string;
|
|
59
|
+
readonly outputSurface?: BundleOutputSurface;
|
|
60
|
+
readonly workingFiles?: ReadonlyArray<BundleWorkingFile>;
|
|
61
|
+
readonly authTokens?: Record<string, string>;
|
|
62
|
+
readonly timeoutMs?: number;
|
|
63
|
+
}
|
|
64
|
+
export type SessionBundleApplyResult = {
|
|
65
|
+
readonly unchanged: true;
|
|
66
|
+
} | {
|
|
67
|
+
readonly unchanged: false;
|
|
68
|
+
readonly applied: true;
|
|
69
|
+
} | {
|
|
70
|
+
readonly applied: false;
|
|
71
|
+
readonly status: string;
|
|
72
|
+
readonly error: string;
|
|
73
|
+
};
|
|
74
|
+
export declare function applySessionBundle(req: SessionBundleRequest): Promise<SessionBundleApplyResult>;
|
|
75
|
+
//# sourceMappingURL=control-plane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../src/lib/control-plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyWorkerControlTeardown = applyWorkerControlTeardown;
|
|
4
|
+
exports.applySessionBundle = applySessionBundle;
|
|
5
|
+
const bundle_fingerprint_1 = require("./bundle-fingerprint");
|
|
6
|
+
const worker_auth_1 = require("./worker-auth");
|
|
7
|
+
const DEFAULT_SETUP_TIMEOUT_MS = 60_000;
|
|
8
|
+
async function applyWorkerControlTeardown(req) {
|
|
9
|
+
const response = await fetch(`${trimTrailingSlash(req.proxyUrl)}/control/teardown`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: {
|
|
12
|
+
Authorization: (0, worker_auth_1.buildWorkerBasicAuthHeader)(req.workerPassword),
|
|
13
|
+
},
|
|
14
|
+
signal: AbortSignal.timeout(req.timeoutMs ?? DEFAULT_SETUP_TIMEOUT_MS),
|
|
15
|
+
});
|
|
16
|
+
if (response.ok) {
|
|
17
|
+
return { applied: true };
|
|
18
|
+
}
|
|
19
|
+
const text = await response.text().catch(() => '');
|
|
20
|
+
return {
|
|
21
|
+
applied: false,
|
|
22
|
+
status: extractStatusField(text),
|
|
23
|
+
error: `${response.status} ${response.statusText}: ${text.slice(0, 200)}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function extractStatusField(rawBody) {
|
|
27
|
+
if (!rawBody)
|
|
28
|
+
return 'unknown';
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(rawBody);
|
|
31
|
+
return typeof parsed.status === 'string' ? parsed.status : 'unknown';
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return 'unknown';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function trimTrailingSlash(url) {
|
|
38
|
+
return url.endsWith('/') ? url.slice(0, -1) : url;
|
|
39
|
+
}
|
|
40
|
+
const DEFAULT_BUNDLE_TIMEOUT_MS = 60_000;
|
|
41
|
+
async function applySessionBundle(req) {
|
|
42
|
+
const workingFilesForFingerprint = req.workingFiles && req.workingFiles.length > 0
|
|
43
|
+
? { workingFiles: req.workingFiles }
|
|
44
|
+
: {};
|
|
45
|
+
const fingerprintInput = {
|
|
46
|
+
primaryAgent: {
|
|
47
|
+
slug: req.primaryAgent.slug,
|
|
48
|
+
},
|
|
49
|
+
subAgents: req.subAgents,
|
|
50
|
+
opencodeConfigBase64: req.opencodeConfigBase64,
|
|
51
|
+
...(req.outputSurface ? { outputSurface: req.outputSurface } : {}),
|
|
52
|
+
...workingFilesForFingerprint,
|
|
53
|
+
};
|
|
54
|
+
const fingerprint = (0, bundle_fingerprint_1.buildBundleFingerprint)(fingerprintInput);
|
|
55
|
+
const body = {
|
|
56
|
+
allocationId: req.allocationId,
|
|
57
|
+
caller: {
|
|
58
|
+
orgId: req.caller.orgId,
|
|
59
|
+
projectId: req.caller.projectId,
|
|
60
|
+
authToken: req.caller.authToken,
|
|
61
|
+
...(req.caller.sessionId ? { sessionId: req.caller.sessionId } : {}),
|
|
62
|
+
},
|
|
63
|
+
primaryAgent: {
|
|
64
|
+
slug: req.primaryAgent.slug,
|
|
65
|
+
},
|
|
66
|
+
subAgents: req.subAgents,
|
|
67
|
+
opencodeConfigBase64: req.opencodeConfigBase64,
|
|
68
|
+
...(req.outputSurface ? { outputSurface: req.outputSurface } : {}),
|
|
69
|
+
...workingFilesForFingerprint,
|
|
70
|
+
...(req.authTokens && Object.keys(req.authTokens).length > 0
|
|
71
|
+
? { authTokens: req.authTokens }
|
|
72
|
+
: {}),
|
|
73
|
+
fingerprint,
|
|
74
|
+
};
|
|
75
|
+
const response = await fetch(`${trimTrailingSlash(req.proxyUrl)}/control/session-bundle`, {
|
|
76
|
+
method: 'PUT',
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
Authorization: (0, worker_auth_1.buildWorkerBasicAuthHeader)(req.workerPassword),
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(body),
|
|
82
|
+
signal: AbortSignal.timeout(req.timeoutMs ?? DEFAULT_BUNDLE_TIMEOUT_MS),
|
|
83
|
+
});
|
|
84
|
+
if (response.ok) {
|
|
85
|
+
const parsed = await safeParseJson(response);
|
|
86
|
+
const unchanged = parsed !== null &&
|
|
87
|
+
typeof parsed === 'object' &&
|
|
88
|
+
parsed.unchanged === true;
|
|
89
|
+
if (unchanged) {
|
|
90
|
+
return { unchanged: true };
|
|
91
|
+
}
|
|
92
|
+
return { unchanged: false, applied: true };
|
|
93
|
+
}
|
|
94
|
+
const text = await response.text().catch(() => '');
|
|
95
|
+
return {
|
|
96
|
+
applied: false,
|
|
97
|
+
status: extractStatusField(text),
|
|
98
|
+
error: `${response.status} ${response.statusText}: ${text.slice(0, 200)}`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
async function safeParseJson(response) {
|
|
102
|
+
try {
|
|
103
|
+
return await response.json();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=control-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../../src/lib/control-plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DrivePromptParams, DriveResult, DriveToCompletionOptions, SessionFrame, WorkerAllocation } from '@xemahq/agent-session-runtime';
|
|
2
|
+
import { type RuntimeFrame } from './runtime-frame';
|
|
3
|
+
export interface SessionDriverHttpOptions {
|
|
4
|
+
readonly authHeaders: Readonly<Record<string, string>>;
|
|
5
|
+
}
|
|
6
|
+
export declare class HttpAgentSessionDriver {
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(options: SessionDriverHttpOptions);
|
|
9
|
+
drive(allocation: WorkerAllocation, params: DrivePromptParams, abortSignal: AbortSignal): AsyncIterable<RuntimeFrame>;
|
|
10
|
+
driveToCompletion(allocation: WorkerAllocation, params: DrivePromptParams, abortSignal: AbortSignal, options?: DriveToCompletionOptions): Promise<DriveResult>;
|
|
11
|
+
}
|
|
12
|
+
export declare class SessionDriveError extends Error {
|
|
13
|
+
readonly httpStatus: number;
|
|
14
|
+
constructor(message: string, httpStatus: number);
|
|
15
|
+
}
|
|
16
|
+
export type { SessionFrame };
|
|
17
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/lib/driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAWvC,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAmBzB,MAAM,WAAW,wBAAwB;IAOvC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,wBAAwB;IAEvD,KAAK,CACV,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,WAAW,GACvB,aAAa,CAAC,YAAY,CAAC;IAgPxB,iBAAiB,CACrB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,WAAW,CAAC;CAqHxB;AAyCD,qBAAa,iBAAkB,SAAQ,KAAK;IACb,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAA5C,OAAO,EAAE,MAAM,EAAW,UAAU,EAAE,MAAM;CAIzD;AA+ED,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionDriveError = exports.HttpAgentSessionDriver = void 0;
|
|
4
|
+
const agent_tool_inquiry_channel_1 = require("@xemahq/agent-tool-inquiry-channel");
|
|
5
|
+
const opencode_event_translator_1 = require("./opencode-event-translator");
|
|
6
|
+
const sse_protocol_1 = require("./sse-protocol");
|
|
7
|
+
const runtime_frame_1 = require("./runtime-frame");
|
|
8
|
+
const tool_reply_routes_1 = require("./tool-reply-routes");
|
|
9
|
+
const worker_auth_1 = require("./worker-auth");
|
|
10
|
+
class HttpAgentSessionDriver {
|
|
11
|
+
options;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
async *drive(allocation, params, abortSignal) {
|
|
16
|
+
const url = `${trimTrailingSlash(allocation.proxyUrl)}/session/prompt`;
|
|
17
|
+
const basicAuth = (0, worker_auth_1.buildWorkerBasicAuthHeader)(allocation.password);
|
|
18
|
+
const requestBody = {
|
|
19
|
+
prompt: params.prompt,
|
|
20
|
+
agentSlug: params.agentSlug,
|
|
21
|
+
sessionId: params.sessionId,
|
|
22
|
+
...(params.outputFormat === undefined
|
|
23
|
+
? {}
|
|
24
|
+
: { outputFormat: params.outputFormat }),
|
|
25
|
+
...(params.modelOverride === undefined
|
|
26
|
+
? {}
|
|
27
|
+
: {
|
|
28
|
+
modelOverride: {
|
|
29
|
+
modelId: params.modelOverride.modelId,
|
|
30
|
+
...(params.modelOverride.providerSlug
|
|
31
|
+
? { providerSlug: params.modelOverride.providerSlug }
|
|
32
|
+
: {}),
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
const requestStartedAt = Date.now();
|
|
37
|
+
console.log(`[SESSION-DRIVE-DEBUG] POST ${url} allocation=${allocation.allocationId} ` +
|
|
38
|
+
`agentSlug=${params.agentSlug} promptChars=${params.prompt.length} ` +
|
|
39
|
+
`sessionId=${params.sessionId} ` +
|
|
40
|
+
`modelOverride=${params.modelOverride
|
|
41
|
+
? `${params.modelOverride.modelId}${params.modelOverride.providerSlug ? `@${params.modelOverride.providerSlug}` : ''}`
|
|
42
|
+
: 'none'} ` +
|
|
43
|
+
`forwardedHeaderKeys=[${Object.keys(this.options.authHeaders).join(',')}]`);
|
|
44
|
+
const response = await fetch(url, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
...this.options.authHeaders,
|
|
48
|
+
Authorization: basicAuth,
|
|
49
|
+
'content-type': 'application/json',
|
|
50
|
+
accept: 'text/event-stream',
|
|
51
|
+
'x-allocation-id': allocation.allocationId,
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify(requestBody),
|
|
54
|
+
signal: abortSignal,
|
|
55
|
+
});
|
|
56
|
+
console.log(`[SESSION-DRIVE-DEBUG] response status=${response.status} ` +
|
|
57
|
+
`contentType="${response.headers.get('content-type') ?? ''}" ` +
|
|
58
|
+
`ttfbMs=${Date.now() - requestStartedAt} allocation=${allocation.allocationId}`);
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
const body = await response.text().catch(() => '');
|
|
61
|
+
console.error(`[SESSION-DRIVE-DEBUG] non-ok response body="${body.slice(0, 500)}"`);
|
|
62
|
+
throw new SessionDriveError(`session/prompt returned ${response.status}: ${body.slice(0, 500)}`, response.status);
|
|
63
|
+
}
|
|
64
|
+
if (!response.body) {
|
|
65
|
+
throw new SessionDriveError('session/prompt returned empty body', 200);
|
|
66
|
+
}
|
|
67
|
+
const state = (0, opencode_event_translator_1.createTranslatorState)();
|
|
68
|
+
const frameCounts = {};
|
|
69
|
+
let frameTotal = 0;
|
|
70
|
+
let lastFrameKind = null;
|
|
71
|
+
const recordFrame = (frame) => {
|
|
72
|
+
frameTotal += 1;
|
|
73
|
+
frameCounts[frame.kind] = (frameCounts[frame.kind] ?? 0) + 1;
|
|
74
|
+
lastFrameKind = frame.kind;
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
blockLoop: for await (const block of (0, sse_protocol_1.parseSseStream)(response.body)) {
|
|
78
|
+
switch (block.event) {
|
|
79
|
+
case 'session_ready': {
|
|
80
|
+
const data = block.payload;
|
|
81
|
+
const logicalSessionId = data && typeof data.sessionId === 'string' ? data.sessionId : '';
|
|
82
|
+
const opencodeSessionId = data && typeof data.opencodeSessionId === 'string'
|
|
83
|
+
? data.opencodeSessionId
|
|
84
|
+
: '';
|
|
85
|
+
state.primarySessionId = opencodeSessionId;
|
|
86
|
+
const ready = {
|
|
87
|
+
kind: 'session_ready',
|
|
88
|
+
sessionId: logicalSessionId,
|
|
89
|
+
opencodeSessionId,
|
|
90
|
+
};
|
|
91
|
+
recordFrame(ready);
|
|
92
|
+
yield ready;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case 'opencode_event': {
|
|
96
|
+
const data = block.payload;
|
|
97
|
+
const type = data && typeof data.type === 'string' ? data.type : '';
|
|
98
|
+
if (!type)
|
|
99
|
+
break;
|
|
100
|
+
const frames = (0, opencode_event_translator_1.translateOpencodeEvent)(state, {
|
|
101
|
+
type,
|
|
102
|
+
properties: data?.properties,
|
|
103
|
+
});
|
|
104
|
+
for (const frame of frames) {
|
|
105
|
+
recordFrame(frame);
|
|
106
|
+
yield frame;
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case 'opencode_response': {
|
|
111
|
+
const data = block.payload;
|
|
112
|
+
const finalFrames = (0, opencode_event_translator_1.translateOpencodeResponse)(state, data ?? {}, {
|
|
113
|
+
sessionId: state.primarySessionId ?? '',
|
|
114
|
+
...(params.modelOverride
|
|
115
|
+
? {
|
|
116
|
+
modelOverride: {
|
|
117
|
+
modelId: params.modelOverride.modelId,
|
|
118
|
+
...(params.modelOverride.providerSlug
|
|
119
|
+
? { providerSlug: params.modelOverride.providerSlug }
|
|
120
|
+
: {}),
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
: {}),
|
|
124
|
+
});
|
|
125
|
+
for (const frame of finalFrames) {
|
|
126
|
+
recordFrame(frame);
|
|
127
|
+
yield frame;
|
|
128
|
+
}
|
|
129
|
+
break blockLoop;
|
|
130
|
+
}
|
|
131
|
+
case 'opencode_error': {
|
|
132
|
+
const data = block.payload;
|
|
133
|
+
const message = data && typeof data.message === 'string'
|
|
134
|
+
? data.message
|
|
135
|
+
: 'workspace-proxy reported an unknown opencode error';
|
|
136
|
+
const frame = { kind: 'error', message };
|
|
137
|
+
recordFrame(frame);
|
|
138
|
+
yield frame;
|
|
139
|
+
break blockLoop;
|
|
140
|
+
}
|
|
141
|
+
default: {
|
|
142
|
+
console.warn(`[SESSION-DRIVE-DEBUG] unexpected SSE event="${block.event}" — skipping`);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (lastFrameKind !== 'done' && lastFrameKind !== 'error') {
|
|
148
|
+
const errorFrame = {
|
|
149
|
+
kind: 'error',
|
|
150
|
+
message: 'Agent stream closed unexpectedly before completion ' +
|
|
151
|
+
`(lastFrame=${lastFrameKind ?? 'none'}). The worker may have ` +
|
|
152
|
+
'been terminated or the connection dropped — please retry your message.',
|
|
153
|
+
};
|
|
154
|
+
recordFrame(errorFrame);
|
|
155
|
+
yield errorFrame;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
const counts = Object.entries(frameCounts)
|
|
160
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
161
|
+
.join(',');
|
|
162
|
+
const terminal = lastFrameKind === 'done' || lastFrameKind === 'error'
|
|
163
|
+
? lastFrameKind
|
|
164
|
+
: `PREMATURE_CLOSE(lastFrame=${lastFrameKind ?? 'none'})`;
|
|
165
|
+
console.log(`[SESSION-DRIVE-DEBUG] stream closed allocation=${allocation.allocationId} ` +
|
|
166
|
+
`totalFrames=${frameTotal} byKind={${counts}} elapsedMs=${Date.now() - requestStartedAt} ` +
|
|
167
|
+
`terminal=${terminal} clientAborted=${abortSignal.aborted}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async driveToCompletion(allocation, params, abortSignal, options) {
|
|
171
|
+
let stepCount = 0;
|
|
172
|
+
let lastTurnId = '';
|
|
173
|
+
try {
|
|
174
|
+
for await (const frame of this.drive(allocation, params, abortSignal)) {
|
|
175
|
+
if (options?.onFrame) {
|
|
176
|
+
const projected = (0, runtime_frame_1.projectRuntimeFrameToSessionFrame)(frame);
|
|
177
|
+
if (projected !== null) {
|
|
178
|
+
try {
|
|
179
|
+
options.onFrame(projected);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
console.log(`[SESSION-DRIVE-DEBUG] frame kind=${frame.kind} ${summarizeRuntimeFrame(frame)}`);
|
|
185
|
+
}
|
|
186
|
+
if (frame.kind === 'tool_call' ||
|
|
187
|
+
frame.kind === 'tool_result') {
|
|
188
|
+
stepCount += 1;
|
|
189
|
+
}
|
|
190
|
+
if (frame.kind === 'step_finished' && options?.onTokenUsage) {
|
|
191
|
+
const totalTokens = frame.tokens.input + frame.tokens.output + frame.tokens.reasoning;
|
|
192
|
+
options.onTokenUsage({
|
|
193
|
+
totalTokens,
|
|
194
|
+
inputTokens: frame.tokens.input,
|
|
195
|
+
outputTokens: frame.tokens.output,
|
|
196
|
+
reasoningTokens: frame.tokens.reasoning,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
if (frame.kind === 'error') {
|
|
200
|
+
throw new SessionDriveError(`agent emitted error frame: ${frame.message}`, 500);
|
|
201
|
+
}
|
|
202
|
+
if (frame.kind === 'question_asked') {
|
|
203
|
+
if (!options?.onAgentToolPause) {
|
|
204
|
+
throw new agent_tool_inquiry_channel_1.MissingAgentToolInquiryHookError(`agent invoked the question tool (requestId=${frame.requestId}) which paused the session, but no onAgentToolPause hook is configured.`);
|
|
205
|
+
}
|
|
206
|
+
const promptText = joinQuestionPrompts(frame.questions);
|
|
207
|
+
if (promptText.length === 0) {
|
|
208
|
+
throw new SessionDriveError(`question_asked frame has no non-empty question text (requestId=${frame.requestId})`, 500);
|
|
209
|
+
}
|
|
210
|
+
const choices = extractSingleQuestionChoices(frame.questions);
|
|
211
|
+
const reply = await options.onAgentToolPause({
|
|
212
|
+
toolName: sse_protocol_1.AGENT_TOOL_NAME_QUESTION,
|
|
213
|
+
toolRequestId: frame.requestId,
|
|
214
|
+
promptText,
|
|
215
|
+
choices,
|
|
216
|
+
});
|
|
217
|
+
if (reply === null) {
|
|
218
|
+
return {
|
|
219
|
+
turnId: lastTurnId,
|
|
220
|
+
stepCount,
|
|
221
|
+
completed: false,
|
|
222
|
+
finalText: null,
|
|
223
|
+
structuredOutput: null,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
await postToolReply({
|
|
227
|
+
allocation,
|
|
228
|
+
authHeaders: this.options.authHeaders,
|
|
229
|
+
toolName: sse_protocol_1.AGENT_TOOL_NAME_QUESTION,
|
|
230
|
+
toolRequestId: frame.requestId,
|
|
231
|
+
replyPayload: reply.replyPayload,
|
|
232
|
+
});
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (frame.kind === 'done') {
|
|
236
|
+
lastTurnId = frame.sessionId;
|
|
237
|
+
return {
|
|
238
|
+
turnId: frame.sessionId,
|
|
239
|
+
stepCount,
|
|
240
|
+
completed: true,
|
|
241
|
+
finalText: frame.content,
|
|
242
|
+
structuredOutput: 'structured' in frame ? frame.structured ?? null : null,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
throw new SessionDriveError('SSE stream ended without a `done` frame', 500);
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error.name === 'AbortError') {
|
|
250
|
+
return {
|
|
251
|
+
turnId: lastTurnId,
|
|
252
|
+
stepCount,
|
|
253
|
+
completed: false,
|
|
254
|
+
finalText: null,
|
|
255
|
+
structuredOutput: null,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.HttpAgentSessionDriver = HttpAgentSessionDriver;
|
|
263
|
+
async function postToolReply(input) {
|
|
264
|
+
const route = (0, tool_reply_routes_1.resolveToolReplyRoute)(input.toolName);
|
|
265
|
+
const url = route({
|
|
266
|
+
proxyBaseUrl: trimTrailingSlash(input.allocation.proxyUrl),
|
|
267
|
+
toolRequestId: input.toolRequestId,
|
|
268
|
+
});
|
|
269
|
+
const basicAuth = (0, worker_auth_1.buildWorkerBasicAuthHeader)(input.allocation.password);
|
|
270
|
+
const response = await fetch(url, {
|
|
271
|
+
method: 'POST',
|
|
272
|
+
headers: {
|
|
273
|
+
...input.authHeaders,
|
|
274
|
+
Authorization: basicAuth,
|
|
275
|
+
'content-type': 'application/json',
|
|
276
|
+
accept: 'application/json',
|
|
277
|
+
'x-allocation-id': input.allocation.allocationId,
|
|
278
|
+
},
|
|
279
|
+
body: JSON.stringify(input.replyPayload),
|
|
280
|
+
});
|
|
281
|
+
if (!response.ok) {
|
|
282
|
+
const body = await response.text().catch(() => '');
|
|
283
|
+
throw new SessionDriveError(`tool-reply returned ${response.status}: ${body.slice(0, 400)}`, response.status);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
class SessionDriveError extends Error {
|
|
287
|
+
httpStatus;
|
|
288
|
+
constructor(message, httpStatus) {
|
|
289
|
+
super(message);
|
|
290
|
+
this.httpStatus = httpStatus;
|
|
291
|
+
this.name = 'SessionDriveError';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.SessionDriveError = SessionDriveError;
|
|
295
|
+
function trimTrailingSlash(url) {
|
|
296
|
+
return url.replace(/\/+$/, '');
|
|
297
|
+
}
|
|
298
|
+
function joinQuestionPrompts(questions) {
|
|
299
|
+
return questions
|
|
300
|
+
.map((q) => q.question.trim())
|
|
301
|
+
.filter((s) => s.length > 0)
|
|
302
|
+
.join('\n\n');
|
|
303
|
+
}
|
|
304
|
+
function extractSingleQuestionChoices(questions) {
|
|
305
|
+
if (questions.length !== 1)
|
|
306
|
+
return null;
|
|
307
|
+
const opts = questions[0]?.options ?? [];
|
|
308
|
+
if (opts.length === 0)
|
|
309
|
+
return null;
|
|
310
|
+
return opts.map((o) => o.label);
|
|
311
|
+
}
|
|
312
|
+
function summarizeRuntimeFrame(frame) {
|
|
313
|
+
switch (frame.kind) {
|
|
314
|
+
case 'session_ready':
|
|
315
|
+
return `sessionId=${frame.sessionId.slice(0, 16)}`;
|
|
316
|
+
case 'text_delta':
|
|
317
|
+
case 'reasoning_delta':
|
|
318
|
+
return `chars=${frame.text.length} preview="${frame.text.slice(0, 80).replaceAll('\n', ' ')}"`;
|
|
319
|
+
case 'tool_call':
|
|
320
|
+
return `tool=${frame.toolName} status=${frame.status} id=${frame.toolCallId?.slice(0, 16) ?? '?'}`;
|
|
321
|
+
case 'tool_result':
|
|
322
|
+
return `tool=${frame.toolName} id=${frame.toolCallId?.slice(0, 16) ?? '?'}`;
|
|
323
|
+
case 'todo_updated':
|
|
324
|
+
return `todoCount=${frame.todos.length}`;
|
|
325
|
+
case 'file_change':
|
|
326
|
+
return `path=${frame.path} action=${frame.action}`;
|
|
327
|
+
case 'file_watcher_updated':
|
|
328
|
+
return `path=${frame.path} event=${frame.event}`;
|
|
329
|
+
case 'question_asked':
|
|
330
|
+
return `requestId=${frame.requestId.slice(0, 16)} questions=${frame.questions.length}`;
|
|
331
|
+
case 'question_replied':
|
|
332
|
+
return `requestId=${frame.requestId.slice(0, 16)} answers=${frame.answers.length}`;
|
|
333
|
+
case 'question_rejected':
|
|
334
|
+
return `requestId=${frame.requestId.slice(0, 16)}`;
|
|
335
|
+
case 'permission_asked':
|
|
336
|
+
return `requestId=${frame.requestId.slice(0, 16)} permission=${frame.permission}`;
|
|
337
|
+
case 'permission_replied':
|
|
338
|
+
return `requestId=${frame.requestId.slice(0, 16)} reply=${frame.reply}`;
|
|
339
|
+
case 'mcp_tools_changed':
|
|
340
|
+
return `server=${frame.server}`;
|
|
341
|
+
case 'lsp_updated':
|
|
342
|
+
return '';
|
|
343
|
+
case 'lsp_diagnostics':
|
|
344
|
+
return `serverId=${frame.serverId} path=${frame.path}`;
|
|
345
|
+
case 'session_compacted':
|
|
346
|
+
return `sessionId=${frame.sessionId.slice(0, 16)}`;
|
|
347
|
+
case 'thinking':
|
|
348
|
+
return `status=${frame.status}`;
|
|
349
|
+
case 'step_finished':
|
|
350
|
+
return `partId=${frame.partId.slice(0, 16)} reason=${frame.reason} cost=${frame.cost}`;
|
|
351
|
+
case 'done':
|
|
352
|
+
return `sessionId=${frame.sessionId.slice(0, 16)} chars=${frame.content.length}`;
|
|
353
|
+
case 'error':
|
|
354
|
+
return `message="${frame.message.slice(0, 200)}"`;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/lib/driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { RuntimeFrame } from './runtime-frame';
|
|
2
|
+
export interface TranslatorLogger {
|
|
3
|
+
warn(message: string, context?: Readonly<Record<string, unknown>>): void;
|
|
4
|
+
}
|
|
5
|
+
export interface TranslatorState {
|
|
6
|
+
primarySessionId: string | null;
|
|
7
|
+
readonly partKindsById: Map<string, string>;
|
|
8
|
+
readonly textPartLengths: Map<string, number>;
|
|
9
|
+
readonly reasoningPartLengths: Map<string, number>;
|
|
10
|
+
readonly userMessageIds: Set<string>;
|
|
11
|
+
readonly emittedStepFinishPartIds: Set<string>;
|
|
12
|
+
textDeltaChars: number;
|
|
13
|
+
reasoningDeltaChars: number;
|
|
14
|
+
toolEventCount: number;
|
|
15
|
+
questionAskedCount: number;
|
|
16
|
+
permissionAskedCount: number;
|
|
17
|
+
assistantMessageCount: number;
|
|
18
|
+
eventCount: number;
|
|
19
|
+
readonly logger: TranslatorLogger;
|
|
20
|
+
}
|
|
21
|
+
export declare function createTranslatorState(options?: {
|
|
22
|
+
readonly logger?: TranslatorLogger;
|
|
23
|
+
}): TranslatorState;
|
|
24
|
+
export declare function translateOpencodeEvent(state: TranslatorState, raw: {
|
|
25
|
+
readonly type: string;
|
|
26
|
+
readonly properties?: unknown;
|
|
27
|
+
}): RuntimeFrame[];
|
|
28
|
+
export declare function translateOpencodeResponse(state: TranslatorState, response: {
|
|
29
|
+
readonly info?: {
|
|
30
|
+
readonly role?: string;
|
|
31
|
+
readonly structured?: unknown;
|
|
32
|
+
readonly providerID?: string;
|
|
33
|
+
readonly modelID?: string;
|
|
34
|
+
};
|
|
35
|
+
readonly parts?: ReadonlyArray<{
|
|
36
|
+
readonly type: string;
|
|
37
|
+
readonly text?: string;
|
|
38
|
+
}>;
|
|
39
|
+
}, context: {
|
|
40
|
+
readonly sessionId: string;
|
|
41
|
+
readonly modelOverride?: {
|
|
42
|
+
readonly modelId: string;
|
|
43
|
+
readonly providerSlug?: string;
|
|
44
|
+
};
|
|
45
|
+
}): RuntimeFrame[];
|
|
46
|
+
//# sourceMappingURL=opencode-event-translator.d.ts.map
|