@xemahq/worker-runtime-opencode 0.3.1 → 0.5.0
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.
|
@@ -8,13 +8,12 @@ export interface OpencodeBundleSubAgent {
|
|
|
8
8
|
export interface OpencodeSessionBundlePayload {
|
|
9
9
|
readonly allocationId: string;
|
|
10
10
|
readonly caller: BundleCallerContext;
|
|
11
|
-
readonly
|
|
11
|
+
readonly runtimeConfigBase64: string;
|
|
12
12
|
readonly primaryAgent: {
|
|
13
13
|
readonly slug: string;
|
|
14
14
|
};
|
|
15
15
|
readonly subAgents: readonly OpencodeBundleSubAgent[];
|
|
16
16
|
readonly modelOverride?: string;
|
|
17
|
-
readonly mcpConfig?: string;
|
|
18
17
|
readonly serviceToken?: string;
|
|
19
18
|
readonly staticFingerprint: string;
|
|
20
19
|
readonly bindingRevision: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/session-bundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/session-bundle.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAQxD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAWhC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AA4BD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAuBR;AAWD,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAOR;AAQD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,mBAAmB,EAC3B,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,GACrC;IACD,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,CAqDA;AAQD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,GACpB,4BAA4B,CAqB9B"}
|
|
@@ -4,43 +4,26 @@ exports.computeStaticBundleFingerprint = computeStaticBundleFingerprint;
|
|
|
4
4
|
exports.computeSessionBindingRevision = computeSessionBindingRevision;
|
|
5
5
|
exports.buildOpencodeSessionBundle = buildOpencodeSessionBundle;
|
|
6
6
|
exports.decodeOpencodeSessionBundle = decodeOpencodeSessionBundle;
|
|
7
|
-
const
|
|
8
|
-
function canonicalize(value) {
|
|
9
|
-
if (value === null || typeof value !== 'object')
|
|
10
|
-
return value;
|
|
11
|
-
if (Array.isArray(value))
|
|
12
|
-
return value.map((v) => canonicalize(v));
|
|
13
|
-
const obj = value;
|
|
14
|
-
const out = {};
|
|
15
|
-
for (const key of Object.keys(obj).sort()) {
|
|
16
|
-
const v = obj[key];
|
|
17
|
-
if (v === undefined)
|
|
18
|
-
continue;
|
|
19
|
-
out[key] = canonicalize(v);
|
|
20
|
-
}
|
|
21
|
-
return out;
|
|
22
|
-
}
|
|
7
|
+
const session_bundle_identity_1 = require("@xemahq/kernel-contracts/session-bundle-identity");
|
|
23
8
|
function computeStaticBundleFingerprint(input) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
9
|
+
if (!input.runtimeConfigBase64) {
|
|
10
|
+
throw new Error('computeStaticBundleFingerprint: runtimeConfigBase64 is required — a ' +
|
|
11
|
+
'bundle with no composed config has no meaningful template identity, ' +
|
|
12
|
+
'and hashing its absence collides every such bundle onto one key.');
|
|
13
|
+
}
|
|
14
|
+
return (0, session_bundle_identity_1.buildStaticBundleFingerprint)({
|
|
15
|
+
primaryAgent: { slug: input.primaryAgent },
|
|
16
|
+
subAgents: input.subAgents.map((slug) => ({ slug })),
|
|
17
|
+
runtimeConfigBase64: input.runtimeConfigBase64,
|
|
30
18
|
});
|
|
31
|
-
const hash = (0, node_crypto_1.createHash)('sha256');
|
|
32
|
-
hash.update(JSON.stringify(canonical));
|
|
33
|
-
return hash.digest('hex');
|
|
34
19
|
}
|
|
35
20
|
function computeSessionBindingRevision(allocationId, caller) {
|
|
36
|
-
return (0,
|
|
37
|
-
.update(JSON.stringify(canonicalize({
|
|
21
|
+
return (0, session_bundle_identity_1.buildSessionBindingRevision)({
|
|
38
22
|
allocationId,
|
|
39
23
|
orgId: caller.orgId,
|
|
40
24
|
projectId: caller.projectId,
|
|
41
|
-
sessionId: caller.sessionId,
|
|
42
|
-
})
|
|
43
|
-
.digest('hex');
|
|
25
|
+
...(caller.sessionId ? { sessionId: caller.sessionId } : {}),
|
|
26
|
+
});
|
|
44
27
|
}
|
|
45
28
|
function buildOpencodeSessionBundle(input, allocationId, caller, bindingEpoch, workerServiceToken) {
|
|
46
29
|
if (!input.primaryAgent.trim()) {
|
|
@@ -52,8 +35,8 @@ function buildOpencodeSessionBundle(input, allocationId, caller, bindingEpoch, w
|
|
|
52
35
|
if (!Number.isSafeInteger(bindingEpoch) || bindingEpoch < 1) {
|
|
53
36
|
throw new Error('bindingEpoch must be a positive safe integer.');
|
|
54
37
|
}
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
38
|
+
const runtimeConfigBase64 = input.runtimeConfigBase64 ?? '';
|
|
39
|
+
if (!runtimeConfigBase64) {
|
|
57
40
|
throw new Error('BuildBundleInput.runtimeConfigBase64 is required by the opencode runtime — the workspace-proxy bundle handler treats an empty config as a 400.');
|
|
58
41
|
}
|
|
59
42
|
const staticFingerprint = computeStaticBundleFingerprint(input);
|
|
@@ -62,7 +45,7 @@ function buildOpencodeSessionBundle(input, allocationId, caller, bindingEpoch, w
|
|
|
62
45
|
const payload = {
|
|
63
46
|
allocationId,
|
|
64
47
|
caller,
|
|
65
|
-
|
|
48
|
+
runtimeConfigBase64,
|
|
66
49
|
primaryAgent: { slug: input.primaryAgent },
|
|
67
50
|
subAgents,
|
|
68
51
|
staticFingerprint,
|
|
@@ -71,7 +54,6 @@ function buildOpencodeSessionBundle(input, allocationId, caller, bindingEpoch, w
|
|
|
71
54
|
...(input.modelOverride === undefined
|
|
72
55
|
? {}
|
|
73
56
|
: { modelOverride: input.modelOverride }),
|
|
74
|
-
...(input.mcpConfig === undefined ? {} : { mcpConfig: input.mcpConfig }),
|
|
75
57
|
...(workerServiceToken ? { serviceToken: workerServiceToken } : {}),
|
|
76
58
|
};
|
|
77
59
|
const payloadJson = JSON.stringify(payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-bundle.js","sourceRoot":"","sources":["../../src/lib/session-bundle.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"session-bundle.js","sourceRoot":"","sources":["../../src/lib/session-bundle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/worker-runtime-opencode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
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": "^12.0.0"
|
|
31
31
|
},
|
|
32
32
|
"exports": {
|
|
33
33
|
".": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@xemahq/kernel-contracts": ">=
|
|
44
|
+
"@xemahq/kernel-contracts": ">=12.0.0"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"clean": "rm -rf dist",
|