@xemahq/worker-runtime-opencode 0.2.1 → 0.3.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/README.md +6 -5
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/opencode-worker-runtime.d.ts +1 -12
- package/dist/lib/opencode-worker-runtime.d.ts.map +1 -1
- package/dist/lib/opencode-worker-runtime.js +1 -81
- package/dist/lib/opencode-worker-runtime.js.map +1 -1
- package/dist/lib/worker-ref.d.ts +0 -1
- package/dist/lib/worker-ref.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/lib/runtime-events.d.ts +0 -11
- package/dist/lib/runtime-events.d.ts.map +0 -1
- package/dist/lib/runtime-events.js +0 -127
- package/dist/lib/runtime-events.js.map +0 -1
package/README.md
CHANGED
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
## Overview
|
|
30
30
|
|
|
31
31
|
An Opencode driver implementing the kernel worker-runtime contract. It is a thin
|
|
32
|
-
adapter over the existing workspace control plane, speaking the same HTTP
|
|
32
|
+
adapter over the existing workspace control plane, speaking the same HTTP
|
|
33
33
|
protocol it already exposes — no new wire format. A runtime instance is bound to
|
|
34
|
-
a single worker at construction time and translates session bundles,
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
a single worker at construction time and translates pod specs, session bundles,
|
|
35
|
+
and pause/resume into the shared runtime interface so orchestration stays
|
|
36
|
+
runtime-agnostic.
|
|
37
37
|
|
|
38
38
|
## When to use it
|
|
39
39
|
|
|
@@ -52,7 +52,8 @@ pnpm add @xemahq/worker-runtime-opencode
|
|
|
52
52
|
import { createOpencodeWorkerRuntime } from '@xemahq/worker-runtime-opencode';
|
|
53
53
|
|
|
54
54
|
const runtime = createOpencodeWorkerRuntime(config);
|
|
55
|
-
await runtime.
|
|
55
|
+
const bundle = await runtime.buildSessionBundle(input);
|
|
56
|
+
await runtime.applySessionBundle(bundle);
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
## License
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { OpencodeWorkerRuntime, OPENCODE_CONNECTOR_KIND, type OpencodePodSpec, } from './lib/opencode-worker-runtime';
|
|
2
2
|
export { createOpencodeWorkerRuntime } from './lib/factory';
|
|
3
3
|
export { buildOpencodeSessionBundle, computeSessionBindingRevision, computeStaticBundleFingerprint, decodeOpencodeSessionBundle, type OpencodeBundleSubAgent, type OpencodeSessionBundlePayload, } from './lib/session-bundle';
|
|
4
|
-
export { parseSseChunk, translateProxyFrame, type ProxySseFrame, } from './lib/runtime-events';
|
|
5
4
|
export type { BundleCallerContext, OpencodeRuntimeConfig, WorkerRef, } from './lib/worker-ref';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,eAAe,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,GAClC,MAAM,sBAAsB,CAAC;AAC9B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,eAAe,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,GAClC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,GACV,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.decodeOpencodeSessionBundle = exports.computeStaticBundleFingerprint = exports.computeSessionBindingRevision = exports.buildOpencodeSessionBundle = exports.createOpencodeWorkerRuntime = exports.OPENCODE_CONNECTOR_KIND = exports.OpencodeWorkerRuntime = void 0;
|
|
4
4
|
var opencode_worker_runtime_1 = require("./lib/opencode-worker-runtime");
|
|
5
5
|
Object.defineProperty(exports, "OpencodeWorkerRuntime", { enumerable: true, get: function () { return opencode_worker_runtime_1.OpencodeWorkerRuntime; } });
|
|
6
6
|
Object.defineProperty(exports, "OPENCODE_CONNECTOR_KIND", { enumerable: true, get: function () { return opencode_worker_runtime_1.OPENCODE_CONNECTOR_KIND; } });
|
|
@@ -11,7 +11,4 @@ Object.defineProperty(exports, "buildOpencodeSessionBundle", { enumerable: true,
|
|
|
11
11
|
Object.defineProperty(exports, "computeSessionBindingRevision", { enumerable: true, get: function () { return session_bundle_1.computeSessionBindingRevision; } });
|
|
12
12
|
Object.defineProperty(exports, "computeStaticBundleFingerprint", { enumerable: true, get: function () { return session_bundle_1.computeStaticBundleFingerprint; } });
|
|
13
13
|
Object.defineProperty(exports, "decodeOpencodeSessionBundle", { enumerable: true, get: function () { return session_bundle_1.decodeOpencodeSessionBundle; } });
|
|
14
|
-
var runtime_events_1 = require("./lib/runtime-events");
|
|
15
|
-
Object.defineProperty(exports, "parseSseChunk", { enumerable: true, get: function () { return runtime_events_1.parseSseChunk; } });
|
|
16
|
-
Object.defineProperty(exports, "translateProxyFrame", { enumerable: true, get: function () { return runtime_events_1.translateProxyFrame; } });
|
|
17
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AASA,yEAIuC;AAHrC,gIAAA,qBAAqB,OAAA;AACrB,kIAAA,uBAAuB,OAAA;AAGzB,yCAA4D;AAAnD,sHAAA,2BAA2B,OAAA;AACpC,uDAO8B;AAN5B,4HAAA,0BAA0B,OAAA;AAC1B,+HAAA,6BAA6B,OAAA;AAC7B,gIAAA,8BAA8B,OAAA;AAC9B,6HAAA,2BAA2B,OAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AASA,yEAIuC;AAHrC,gIAAA,qBAAqB,OAAA;AACrB,kIAAA,uBAAuB,OAAA;AAGzB,yCAA4D;AAAnD,sHAAA,2BAA2B,OAAA;AACpC,uDAO8B;AAN5B,4HAAA,0BAA0B,OAAA;AAC1B,+HAAA,6BAA6B,OAAA;AAC7B,gIAAA,8BAA8B,OAAA;AAC9B,6HAAA,2BAA2B,OAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { WorkerRuntimeKind, type BuildBundleInput, type BuildPodSpecInput, type
|
|
1
|
+
import { WorkerRuntimeKind, type BuildBundleInput, type BuildPodSpecInput, type SessionBundle, type WorkerRuntime, type WorkerRuntimeCapabilityBits } from '@xemahq/kernel-contracts/worker-runtime';
|
|
2
2
|
import type { AbstractMount } from '@xemahq/kernel-contracts/workspace-storage';
|
|
3
|
-
import { type ProxySseFrame } from './runtime-events';
|
|
4
3
|
import type { OpencodeRuntimeConfig } from './worker-ref';
|
|
5
4
|
export declare const OPENCODE_CONNECTOR_KIND = "opencode-default";
|
|
6
5
|
export interface OpencodePodSpec {
|
|
@@ -21,23 +20,13 @@ export declare class OpencodeWorkerRuntime implements WorkerRuntime {
|
|
|
21
20
|
readonly connectorKindRequired = "opencode-default";
|
|
22
21
|
readonly autoCommitHookSupported = true;
|
|
23
22
|
private workerRef;
|
|
24
|
-
private opencodeSessionId?;
|
|
25
23
|
private caller;
|
|
26
24
|
constructor(config: OpencodeRuntimeConfig);
|
|
27
|
-
attachOpencodeSession(sessionId: string): void;
|
|
28
25
|
buildPodSpec(input: BuildPodSpecInput): Promise<OpencodePodSpec>;
|
|
29
26
|
buildSessionBundle(input: BuildBundleInput): Promise<SessionBundle>;
|
|
30
27
|
applySessionBundle(bundle: SessionBundle): Promise<void>;
|
|
31
|
-
sendUserMessage(message: UserMessage): AsyncIterable<RuntimeEvent>;
|
|
32
28
|
pause(): Promise<void>;
|
|
33
29
|
resume(): Promise<void>;
|
|
34
30
|
private authHeaders;
|
|
35
31
|
}
|
|
36
|
-
declare function joinUrl(base: string, path: string): string;
|
|
37
|
-
declare function iterateSseEvents(body: ReadableStream<Uint8Array>): AsyncGenerator<RuntimeEvent>;
|
|
38
|
-
export declare const __testInternals: {
|
|
39
|
-
iterateSseEvents: typeof iterateSseEvents;
|
|
40
|
-
joinUrl: typeof joinUrl;
|
|
41
|
-
};
|
|
42
|
-
export type { ProxySseFrame };
|
|
43
32
|
//# sourceMappingURL=opencode-worker-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-worker-runtime.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-worker-runtime.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,
|
|
1
|
+
{"version":3,"file":"opencode-worker-runtime.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-worker-runtime.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,2BAA2B,EACjC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAOhF,OAAO,KAAK,EAAE,qBAAqB,EAAa,MAAM,cAAc,CAAC;AAYrE,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAmC1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAMzB,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;CACnE;AAOD,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,YAAY,8BAAyB;IAC9C,QAAQ,CAAC,qBAAqB,sBAA2B;IACzD,QAAQ,CAAC,uBAAuB,QAAQ;IAExC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,EAAE,qBAAqB;IAWzC,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwB1D,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BnE,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B,OAAO,CAAC,WAAW;CAcpB"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.OpencodeWorkerRuntime = exports.OPENCODE_CONNECTOR_KIND = void 0;
|
|
4
4
|
const worker_runtime_1 = require("@xemahq/kernel-contracts/worker-runtime");
|
|
5
5
|
const session_bundle_1 = require("./session-bundle");
|
|
6
|
-
const runtime_events_1 = require("./runtime-events");
|
|
7
6
|
exports.OPENCODE_CONNECTOR_KIND = 'opencode-default';
|
|
8
7
|
const APPLY_SESSION_BUNDLE_TIMEOUT_MS = 120_000;
|
|
9
8
|
const OPENCODE_CAPABILITIES = {
|
|
@@ -27,21 +26,11 @@ class OpencodeWorkerRuntime {
|
|
|
27
26
|
connectorKindRequired = exports.OPENCODE_CONNECTOR_KIND;
|
|
28
27
|
autoCommitHookSupported = true;
|
|
29
28
|
workerRef;
|
|
30
|
-
opencodeSessionId;
|
|
31
29
|
caller;
|
|
32
30
|
constructor(config) {
|
|
33
31
|
this.workerRef = config.workerRef;
|
|
34
|
-
if (config.opencodeSessionId !== undefined) {
|
|
35
|
-
this.opencodeSessionId = config.opencodeSessionId;
|
|
36
|
-
}
|
|
37
32
|
this.caller = config.caller;
|
|
38
33
|
}
|
|
39
|
-
attachOpencodeSession(sessionId) {
|
|
40
|
-
if (!sessionId.trim()) {
|
|
41
|
-
throw new Error('OpencodeWorkerRuntime: opencode session id must be non-empty.');
|
|
42
|
-
}
|
|
43
|
-
this.opencodeSessionId = sessionId;
|
|
44
|
-
}
|
|
45
34
|
buildPodSpec(input) {
|
|
46
35
|
const spec = {
|
|
47
36
|
runtimeKind: this.kind,
|
|
@@ -94,31 +83,6 @@ class OpencodeWorkerRuntime {
|
|
|
94
83
|
const parsed = (await response.json());
|
|
95
84
|
assertApplyResponseOk(parsed, payload);
|
|
96
85
|
}
|
|
97
|
-
async *sendUserMessage(message) {
|
|
98
|
-
if (!this.opencodeSessionId) {
|
|
99
|
-
throw new Error('OpencodeWorkerRuntime.sendUserMessage: no opencode session id attached. Call `attachOpencodeSession` after workspace-proxy reports opencode ready.');
|
|
100
|
-
}
|
|
101
|
-
const url = joinUrl(this.workerRef.controlPlaneUrl, '/session/prompt');
|
|
102
|
-
const requestBody = {
|
|
103
|
-
opencodeSessionId: this.opencodeSessionId,
|
|
104
|
-
actor: message.actor,
|
|
105
|
-
content: message.content,
|
|
106
|
-
...(message.attachments ? { attachments: message.attachments } : {}),
|
|
107
|
-
};
|
|
108
|
-
const response = await fetch(url, {
|
|
109
|
-
method: 'POST',
|
|
110
|
-
headers: {
|
|
111
|
-
...this.authHeaders(),
|
|
112
|
-
Accept: 'text/event-stream',
|
|
113
|
-
},
|
|
114
|
-
body: JSON.stringify(requestBody),
|
|
115
|
-
});
|
|
116
|
-
if (!response.ok || !response.body) {
|
|
117
|
-
const body = await safeReadText(response);
|
|
118
|
-
throw new Error(`sendUserMessage failed: HTTP ${response.status} from ${url} — ${body}`);
|
|
119
|
-
}
|
|
120
|
-
yield* iterateSseEvents(response.body);
|
|
121
|
-
}
|
|
122
86
|
async pause() {
|
|
123
87
|
const url = joinUrl(this.workerRef.controlPlaneUrl, '/control/pause');
|
|
124
88
|
const body = {
|
|
@@ -180,48 +144,4 @@ function joinUrl(base, path) {
|
|
|
180
144
|
const prefixedPath = path.startsWith('/') ? path : `/${path}`;
|
|
181
145
|
return `${trimmedBase}${prefixedPath}`;
|
|
182
146
|
}
|
|
183
|
-
async function* iterateSseEvents(body) {
|
|
184
|
-
const reader = body.getReader();
|
|
185
|
-
const decoder = new TextDecoder('utf-8');
|
|
186
|
-
let buffer = '';
|
|
187
|
-
try {
|
|
188
|
-
while (true) {
|
|
189
|
-
const { value, done } = await reader.read();
|
|
190
|
-
if (done)
|
|
191
|
-
break;
|
|
192
|
-
buffer += decoder.decode(value, { stream: true });
|
|
193
|
-
const { frames, remainder } = (0, runtime_events_1.parseSseChunk)(buffer);
|
|
194
|
-
buffer = remainder;
|
|
195
|
-
for (const frame of frames) {
|
|
196
|
-
const events = (0, runtime_events_1.translateProxyFrame)(frame);
|
|
197
|
-
for (const evt of events) {
|
|
198
|
-
yield evt;
|
|
199
|
-
if (evt.kind === 'turn-end' || evt.kind === 'error') {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
const tail = buffer + decoder.decode();
|
|
206
|
-
if (tail.length > 0) {
|
|
207
|
-
const { frames } = (0, runtime_events_1.parseSseChunk)(tail.endsWith('\n\n') ? tail : `${tail}\n\n`);
|
|
208
|
-
for (const frame of frames) {
|
|
209
|
-
for (const evt of (0, runtime_events_1.translateProxyFrame)(frame)) {
|
|
210
|
-
yield evt;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
finally {
|
|
216
|
-
try {
|
|
217
|
-
reader.releaseLock();
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
exports.__testInternals = {
|
|
224
|
-
iterateSseEvents,
|
|
225
|
-
joinUrl,
|
|
226
|
-
};
|
|
227
147
|
//# sourceMappingURL=opencode-worker-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-worker-runtime.js","sourceRoot":"","sources":["../../src/lib/opencode-worker-runtime.ts"],"names":[],"mappings":";;;AAYA,
|
|
1
|
+
{"version":3,"file":"opencode-worker-runtime.js","sourceRoot":"","sources":["../../src/lib/opencode-worker-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/worker-ref.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-ref.d.ts","sourceRoot":"","sources":["../../src/lib/worker-ref.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAO1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAMxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAS9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IASpC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"worker-ref.d.ts","sourceRoot":"","sources":["../../src/lib/worker-ref.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAO1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAMxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAS9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IASpC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAKD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAQ9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAQD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/worker-runtime-opencode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Opencode WorkerRuntime driver — wraps the workspace-proxy control-session handshake and the opencode SSE event stream behind the kernel WorkerRuntime contract.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"prettier": "3.6.2",
|
|
28
28
|
"ts-jest": "^29.4.9",
|
|
29
29
|
"typescript": "5.9.3",
|
|
30
|
-
"@xemahq/kernel-contracts": "^
|
|
30
|
+
"@xemahq/kernel-contracts": "^8.0.0"
|
|
31
31
|
},
|
|
32
32
|
"exports": {
|
|
33
33
|
".": {
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { RuntimeEvent } from '@xemahq/kernel-contracts/worker-runtime';
|
|
2
|
-
export interface ProxySseFrame {
|
|
3
|
-
readonly event: string;
|
|
4
|
-
readonly data: unknown;
|
|
5
|
-
}
|
|
6
|
-
export declare function translateProxyFrame(frame: ProxySseFrame): readonly RuntimeEvent[];
|
|
7
|
-
export declare function parseSseChunk(buffer: string): {
|
|
8
|
-
readonly frames: readonly ProxySseFrame[];
|
|
9
|
-
readonly remainder: string;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=runtime-events.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../../src/lib/runtime-events.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAO5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAOD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,YAAY,EAAE,CAMjF;AAWD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAYA"}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.translateProxyFrame = translateProxyFrame;
|
|
4
|
-
exports.parseSseChunk = parseSseChunk;
|
|
5
|
-
function translateProxyFrame(frame) {
|
|
6
|
-
if (frame.event === 'opencode_error') {
|
|
7
|
-
return [translateError(frame.data)];
|
|
8
|
-
}
|
|
9
|
-
if (frame.event !== 'opencode_event')
|
|
10
|
-
return [];
|
|
11
|
-
return translateOpencodeEvent(frame.data);
|
|
12
|
-
}
|
|
13
|
-
function parseSseChunk(buffer) {
|
|
14
|
-
const frames = [];
|
|
15
|
-
let cursor = 0;
|
|
16
|
-
while (true) {
|
|
17
|
-
const boundary = buffer.indexOf('\n\n', cursor);
|
|
18
|
-
if (boundary === -1)
|
|
19
|
-
break;
|
|
20
|
-
const raw = buffer.slice(cursor, boundary);
|
|
21
|
-
cursor = boundary + 2;
|
|
22
|
-
const frame = parseSingleFrame(raw);
|
|
23
|
-
if (frame)
|
|
24
|
-
frames.push(frame);
|
|
25
|
-
}
|
|
26
|
-
return { frames, remainder: buffer.slice(cursor) };
|
|
27
|
-
}
|
|
28
|
-
function parseSingleFrame(raw) {
|
|
29
|
-
let event = 'message';
|
|
30
|
-
const dataLines = [];
|
|
31
|
-
for (const line of raw.split('\n')) {
|
|
32
|
-
if (!line || line.startsWith(':'))
|
|
33
|
-
continue;
|
|
34
|
-
const colon = line.indexOf(':');
|
|
35
|
-
if (colon === -1)
|
|
36
|
-
continue;
|
|
37
|
-
const field = line.slice(0, colon);
|
|
38
|
-
const value = line.charAt(colon + 1) === ' '
|
|
39
|
-
? line.slice(colon + 2)
|
|
40
|
-
: line.slice(colon + 1);
|
|
41
|
-
if (field === 'event')
|
|
42
|
-
event = value;
|
|
43
|
-
else if (field === 'data')
|
|
44
|
-
dataLines.push(value);
|
|
45
|
-
}
|
|
46
|
-
if (dataLines.length === 0)
|
|
47
|
-
return null;
|
|
48
|
-
const dataString = dataLines.join('\n');
|
|
49
|
-
let data;
|
|
50
|
-
try {
|
|
51
|
-
data = JSON.parse(dataString);
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
return { event, data };
|
|
57
|
-
}
|
|
58
|
-
function translateError(data) {
|
|
59
|
-
const obj = (data && typeof data === 'object' ? data : {});
|
|
60
|
-
const messageRaw = obj['message'] ?? obj['error'] ?? 'opencode error';
|
|
61
|
-
const message = typeof messageRaw === 'string' ? messageRaw : JSON.stringify(messageRaw);
|
|
62
|
-
const retryableRaw = obj['retryable'];
|
|
63
|
-
const retryable = typeof retryableRaw === 'boolean' ? retryableRaw : false;
|
|
64
|
-
return { kind: 'error', message, retryable };
|
|
65
|
-
}
|
|
66
|
-
function translateOpencodeEvent(data) {
|
|
67
|
-
if (!data || typeof data !== 'object')
|
|
68
|
-
return [];
|
|
69
|
-
const evt = data;
|
|
70
|
-
const type = typeof evt.type === 'string' ? evt.type : '';
|
|
71
|
-
const props = evt.properties && typeof evt.properties === 'object'
|
|
72
|
-
? evt.properties
|
|
73
|
-
: {};
|
|
74
|
-
switch (type) {
|
|
75
|
-
case 'message.part.updated':
|
|
76
|
-
return translatePartUpdated(props);
|
|
77
|
-
case 'session.idle':
|
|
78
|
-
return [{ kind: 'turn-end' }];
|
|
79
|
-
case 'session.error':
|
|
80
|
-
case 'message.error':
|
|
81
|
-
return [
|
|
82
|
-
{
|
|
83
|
-
kind: 'error',
|
|
84
|
-
message: typeof props['message'] === 'string'
|
|
85
|
-
? props['message']
|
|
86
|
-
: `opencode ${type}`,
|
|
87
|
-
retryable: false,
|
|
88
|
-
},
|
|
89
|
-
];
|
|
90
|
-
default:
|
|
91
|
-
return [];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function translatePartUpdated(props) {
|
|
95
|
-
const part = (props['part'] ?? {});
|
|
96
|
-
const partType = typeof part['type'] === 'string' ? part['type'] : '';
|
|
97
|
-
if (partType === 'text') {
|
|
98
|
-
const text = typeof part['text'] === 'string' ? part['text'] : '';
|
|
99
|
-
return text ? [{ kind: 'text-delta', text }] : [];
|
|
100
|
-
}
|
|
101
|
-
if (partType === 'tool') {
|
|
102
|
-
const tool = typeof part['tool'] === 'string' ? part['tool'] : '';
|
|
103
|
-
if (!tool)
|
|
104
|
-
return [];
|
|
105
|
-
const state = (part['state'] ?? {});
|
|
106
|
-
const status = typeof state['status'] === 'string' ? state['status'] : '';
|
|
107
|
-
if (status === 'running' || status === 'pending') {
|
|
108
|
-
return [{ kind: 'tool-use', tool, input: state['input'] ?? null }];
|
|
109
|
-
}
|
|
110
|
-
if (status === 'completed' || status === 'success') {
|
|
111
|
-
return [
|
|
112
|
-
{
|
|
113
|
-
kind: 'tool-result',
|
|
114
|
-
tool,
|
|
115
|
-
output: state['output'] ?? state['result'] ?? null,
|
|
116
|
-
},
|
|
117
|
-
];
|
|
118
|
-
}
|
|
119
|
-
if (status === 'error' || status === 'failed') {
|
|
120
|
-
const msgRaw = state['error'] ?? state['message'] ?? `tool ${tool} failed`;
|
|
121
|
-
const message = typeof msgRaw === 'string' ? msgRaw : JSON.stringify(msgRaw);
|
|
122
|
-
return [{ kind: 'error', message, retryable: false }];
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return [];
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=runtime-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-events.js","sourceRoot":"","sources":["../../src/lib/runtime-events.ts"],"names":[],"mappings":"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"}
|