@moxt-ai/mobius 0.0.346 → 0.0.348

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.
Files changed (66) hide show
  1. package/dist/cli.js +2321 -2086
  2. package/dist/cli.js.map +4 -4
  3. package/dist/daemon/lifecycle/worker.d.ts.map +1 -1
  4. package/dist/daemon/lifecycle/worker.js +10 -9
  5. package/dist/daemon/lifecycle/worker.js.map +1 -1
  6. package/dist/daemon/pairing/pair-local-machine.d.ts +5 -21
  7. package/dist/daemon/pairing/pair-local-machine.d.ts.map +1 -1
  8. package/dist/daemon/pairing/pair-local-machine.js +22 -254
  9. package/dist/daemon/pairing/pair-local-machine.js.map +1 -1
  10. package/dist/engine/acp/harness/codex/session-update.d.ts.map +1 -1
  11. package/dist/engine/acp/harness/codex/session-update.js +5 -1
  12. package/dist/engine/acp/harness/codex/session-update.js.map +1 -1
  13. package/dist/engine/index.d.ts +0 -2
  14. package/dist/engine/index.d.ts.map +1 -1
  15. package/dist/engine/index.js +0 -2
  16. package/dist/engine/index.js.map +1 -1
  17. package/dist/engine/runtime/command/registry/prompt.js +4 -4
  18. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  19. package/dist/engine/runtime/command/registry/session.d.ts.map +1 -1
  20. package/dist/engine/runtime/command/registry/session.js +8 -1
  21. package/dist/engine/runtime/command/registry/session.js.map +1 -1
  22. package/dist/engine/runtime/connection/connection-manager.d.ts +13 -0
  23. package/dist/engine/runtime/connection/connection-manager.d.ts.map +1 -0
  24. package/dist/engine/runtime/connection/connection-manager.js +13 -0
  25. package/dist/engine/runtime/connection/connection-manager.js.map +1 -0
  26. package/dist/engine/runtime/connection/runtime-installation-store.d.ts +0 -2
  27. package/dist/engine/runtime/connection/runtime-installation-store.d.ts.map +1 -1
  28. package/dist/engine/runtime/connection/runtime-installation-store.js +0 -6
  29. package/dist/engine/runtime/connection/runtime-installation-store.js.map +1 -1
  30. package/dist/engine/runtime/engine.d.ts +25 -36
  31. package/dist/engine/runtime/engine.d.ts.map +1 -1
  32. package/dist/engine/runtime/engine.js +76 -127
  33. package/dist/engine/runtime/engine.js.map +1 -1
  34. package/dist/engine/runtime/pairing.d.ts +19 -0
  35. package/dist/engine/runtime/pairing.d.ts.map +1 -0
  36. package/dist/engine/runtime/pairing.js +227 -0
  37. package/dist/engine/runtime/pairing.js.map +1 -0
  38. package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
  39. package/dist/engine/runtime/relay/session-event-publisher.js +22 -1
  40. package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
  41. package/dist/engine/runtime/runtime-loop.d.ts +43 -0
  42. package/dist/engine/runtime/runtime-loop.d.ts.map +1 -0
  43. package/dist/engine/runtime/runtime-loop.js +123 -0
  44. package/dist/engine/runtime/runtime-loop.js.map +1 -0
  45. package/dist/engine/session/content/external-content-store.d.ts +4 -1
  46. package/dist/engine/session/content/external-content-store.d.ts.map +1 -1
  47. package/dist/engine/session/content/external-content-store.js +11 -3
  48. package/dist/engine/session/content/external-content-store.js.map +1 -1
  49. package/dist/engine/session/prompt/prompt-artifacts.d.ts +6 -1
  50. package/dist/engine/session/prompt/prompt-artifacts.d.ts.map +1 -1
  51. package/dist/engine/session/prompt/prompt-artifacts.js +12 -17
  52. package/dist/engine/session/prompt/prompt-artifacts.js.map +1 -1
  53. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  54. package/dist/engine/session/prompt/prompt-lifecycle.js +2 -1
  55. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  56. package/dist/engine/session/workspace/workspace-directory.d.ts +1 -0
  57. package/dist/engine/session/workspace/workspace-directory.d.ts.map +1 -1
  58. package/dist/engine/session/workspace/workspace-directory.js +2 -1
  59. package/dist/engine/session/workspace/workspace-directory.js.map +1 -1
  60. package/dist/engine.js +1950 -1792
  61. package/dist/engine.js.map +4 -4
  62. package/dist/exports/engine.d.ts +2 -4
  63. package/dist/exports/engine.d.ts.map +1 -1
  64. package/dist/exports/engine.js +1 -4
  65. package/dist/exports/engine.js.map +1 -1
  66. package/package.json +6 -6
@@ -0,0 +1,19 @@
1
+ import { type RuntimeConfig } from "./config.ts";
2
+ import type { VerifiedRuntimeConnection } from "./connection/runtime-connection.ts";
3
+ import type { RuntimeInstallationStore } from "./connection/runtime-installation-store.ts";
4
+ export interface MobiusRuntimePairingOptions {
5
+ readonly defaultWorkspace: string;
6
+ readonly pairingCode: string;
7
+ readonly pairingId: string;
8
+ readonly relayOrigin: string;
9
+ }
10
+ export declare class PairingClientError extends Error {
11
+ readonly code: string;
12
+ constructor(code: string, message: string, options?: ErrorOptions);
13
+ }
14
+ export declare function parseRelayOrigin(value: string): URL;
15
+ export declare function parsePairingCode(value: string): string;
16
+ export declare function validatePairingId(value: string): string;
17
+ export declare function pairRuntimeConnection(installation: RuntimeInstallationStore, options: MobiusRuntimePairingOptions, signal: AbortSignal, environment: Readonly<NodeJS.ProcessEnv>): Promise<VerifiedRuntimeConnection>;
18
+ export declare function prepareRuntimeConnection(installation: RuntimeInstallationStore, connection: VerifiedRuntimeConnection, signal: AbortSignal, environment: Readonly<NodeJS.ProcessEnv>, maxAcpProcesses: number): Promise<RuntimeConfig>;
19
+ //# sourceMappingURL=pairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../../src/engine/runtime/pairing.ts"],"names":[],"mappings":"AAYA,OAAO,EAGH,KAAK,aAAa,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAsB3F,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,EAIpE;CACJ;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAoBnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAStD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAgMD,wBAAsB,qBAAqB,CACvC,YAAY,EAAE,wBAAwB,EACtC,OAAO,EAAE,2BAA2B,EACpC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,GACzC,OAAO,CAAC,yBAAyB,CAAC,CAYpC;AAED,wBAAsB,wBAAwB,CAC1C,YAAY,EAAE,wBAAwB,EACtC,UAAU,EAAE,yBAAyB,EACrC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EACxC,eAAe,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAUxB"}
@@ -0,0 +1,227 @@
1
+ import { hostname } from "node:os";
2
+ import { basename, resolve } from "node:path";
3
+ import { isIdentifier, mobiusApiUrl } from "@moxt-ai/mobius-sdk/protocol";
4
+ import { fetch } from "undici";
5
+ import { discoverLocalAgentInventory } from "../agent/discovery/discover-local-agents.js";
6
+ import { RuntimeAgentDependencies } from "../agent/runtime-agents.js";
7
+ import { ensureCanonicalDirectory } from "../storage/files/local-files.js";
8
+ import { environmentProxyDispatcher } from "../util/network/environment-proxy.js";
9
+ import { isRecord } from "../util/value-utils.js";
10
+ import { publishAgentCatalog } from "./catalog/publish-agent-catalog.js";
11
+ import { createCatalogAgentResolver } from "./catalog/resolve-catalog-agent.js";
12
+ import { createRuntimeConfig, OpaqueRuntimeReconnectTarget, RuntimeLocalContext, } from "./config.js";
13
+ const PAIRING_TIMEOUT_MILLISECONDS = 20_000;
14
+ const PAIRING_CODE_PATTERN = /^[A-HJ-NP-Z2-9]{4}(?:-[A-HJ-NP-Z2-9]{4}){4}$/;
15
+ const TOKEN_PATTERN = /^[a-zA-Z0-9_-]{32,256}$/;
16
+ const CLAIM_RESPONSE_KEYS = ["appId", "channelId", "daemonToken", "runtimeId"];
17
+ const REDEEM_RESPONSE_KEYS = ["appId", "channelId", "runtimeCredential", "runtimeId"];
18
+ export class PairingClientError extends Error {
19
+ code;
20
+ constructor(code, message, options = {}) {
21
+ super(message, options);
22
+ this.code = code;
23
+ this.name = "PairingClientError";
24
+ }
25
+ }
26
+ function hasExactKeys(value, expectedKeys) {
27
+ const keys = Object.keys(value);
28
+ return keys.length === expectedKeys.length && expectedKeys.every((key) => Object.hasOwn(value, key));
29
+ }
30
+ export function parseRelayOrigin(value) {
31
+ let url;
32
+ try {
33
+ url = new URL(value);
34
+ }
35
+ catch (error) {
36
+ throw new PairingClientError("invalid_relay_url", "The relay URL is invalid", { cause: error });
37
+ }
38
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
39
+ throw new PairingClientError("invalid_relay_url", "The relay URL must use http or https");
40
+ }
41
+ if (url.username.length > 0 || url.password.length > 0) {
42
+ throw new PairingClientError("invalid_relay_url", "The relay URL cannot contain credentials");
43
+ }
44
+ if (url.protocol === "http:" && url.hostname !== "127.0.0.1" && url.hostname !== "localhost") {
45
+ throw new PairingClientError("invalid_relay_url", "A remote relay must use https");
46
+ }
47
+ url.hash = "";
48
+ url.pathname = "/";
49
+ url.search = "";
50
+ return url;
51
+ }
52
+ export function parsePairingCode(value) {
53
+ const code = value.trim().toUpperCase();
54
+ if (!PAIRING_CODE_PATTERN.test(code)) {
55
+ throw new PairingClientError("invalid_pairing_code", "The pairing code must match the code shown in the browser");
56
+ }
57
+ return code;
58
+ }
59
+ export function validatePairingId(value) {
60
+ if (!isIdentifier(value)) {
61
+ throw new PairingClientError("invalid_pairing_id", "The Runtime pairing ID is invalid");
62
+ }
63
+ return value;
64
+ }
65
+ async function resolveDefaultWorkspace(path) {
66
+ const requestedWorkspace = resolve(path);
67
+ let defaultWorkspace;
68
+ try {
69
+ defaultWorkspace = await ensureCanonicalDirectory(requestedWorkspace);
70
+ }
71
+ catch (error) {
72
+ throw new PairingClientError("invalid_workspace", "The default workspace cannot be resolved", { cause: error });
73
+ }
74
+ if (defaultWorkspace === null) {
75
+ throw new PairingClientError("invalid_workspace", "The default workspace is not a directory");
76
+ }
77
+ return defaultWorkspace;
78
+ }
79
+ async function readJsonResponse(response) {
80
+ if (response.headers.get("cf-mitigated") === "challenge") {
81
+ throw new PairingClientError("relay_challenge", "Cloudflare is protecting this temporary preview. Claim the deployment or use an authenticated deployment, then pair again");
82
+ }
83
+ const encoded = await response.text();
84
+ try {
85
+ return JSON.parse(encoded);
86
+ }
87
+ catch (error) {
88
+ throw new PairingClientError("invalid_relay_response", "The relay returned an invalid response", {
89
+ cause: error,
90
+ });
91
+ }
92
+ }
93
+ function readRelayError(value) {
94
+ if (isRecord(value)) {
95
+ const error = value["error"];
96
+ if (isRecord(error)) {
97
+ const code = error["code"];
98
+ const message = error["message"];
99
+ if (typeof code === "string" && typeof message === "string") {
100
+ return new PairingClientError(code, message);
101
+ }
102
+ }
103
+ }
104
+ return new PairingClientError("pairing_failed", "The relay could not pair this machine");
105
+ }
106
+ function decodePairingResponse(value, credentialField, expectedKeys) {
107
+ if (!isRecord(value) || !hasExactKeys(value, expectedKeys)) {
108
+ throw new PairingClientError("invalid_relay_response", "The relay returned an invalid pairing response");
109
+ }
110
+ const appId = value["appId"];
111
+ const channelId = value["channelId"];
112
+ const runtimeCredential = value[credentialField];
113
+ const runtimeId = value["runtimeId"];
114
+ if (typeof appId !== "string" ||
115
+ !isIdentifier(appId) ||
116
+ typeof channelId !== "string" ||
117
+ !isIdentifier(channelId) ||
118
+ typeof runtimeCredential !== "string" ||
119
+ !TOKEN_PATTERN.test(runtimeCredential) ||
120
+ typeof runtimeId !== "string" ||
121
+ !isIdentifier(runtimeId)) {
122
+ throw new PairingClientError("invalid_relay_response", "The relay returned an invalid pairing response");
123
+ }
124
+ return { appId, channelId, runtimeCredential, runtimeId };
125
+ }
126
+ async function claimPairing(options, defaultWorkspace, localAgents, signal) {
127
+ const agents = localAgents.map((agent) => ({
128
+ agentPath: agent.agentIdentity.requestedPath,
129
+ agentVersion: agent.agentVersion,
130
+ agentSettingsDiscovery: true,
131
+ capabilities: agent.capabilities,
132
+ id: agent.id,
133
+ label: agent.label,
134
+ sessionTurnConfiguration: true,
135
+ }));
136
+ const endpoint = options.pairingId.length > 0
137
+ ? mobiusApiUrl(options.relayOrigin, `/v1/runtime-pairings/${encodeURIComponent(options.pairingId)}/redeem`)
138
+ : mobiusApiUrl(options.relayOrigin, "/pairings/claim");
139
+ let response;
140
+ try {
141
+ response = await fetch(endpoint, {
142
+ body: JSON.stringify({
143
+ agents,
144
+ machineName: hostname(),
145
+ pairingCode: options.code,
146
+ workspaceName: basename(defaultWorkspace) || "Local workspace",
147
+ }),
148
+ dispatcher: environmentProxyDispatcher,
149
+ headers: { "content-type": "application/json" },
150
+ method: "POST",
151
+ signal: AbortSignal.any([signal, AbortSignal.timeout(PAIRING_TIMEOUT_MILLISECONDS)]),
152
+ });
153
+ }
154
+ catch (error) {
155
+ signal.throwIfAborted();
156
+ throw new PairingClientError("relay_unavailable", "The pairing relay could not be reached", { cause: error });
157
+ }
158
+ const value = await readJsonResponse(response);
159
+ if (!response.ok) {
160
+ throw readRelayError(value);
161
+ }
162
+ return options.pairingId.length > 0
163
+ ? decodePairingResponse(value, "runtimeCredential", REDEEM_RESPONSE_KEYS)
164
+ : decodePairingResponse(value, "daemonToken", CLAIM_RESPONSE_KEYS);
165
+ }
166
+ function buildSavedRuntimeConfig(connection, defaultWorkspace, inventory, localContext) {
167
+ const relayUrl = mobiusApiUrl(connection.relayOrigin, "/v1/runtimes/connect");
168
+ relayUrl.protocol = relayUrl.protocol === "https:" ? "wss:" : "ws:";
169
+ relayUrl.searchParams.set("token", connection.runtimeCredential);
170
+ const config = createRuntimeConfig({
171
+ defaultWorkspace,
172
+ channelId: connection.channelId,
173
+ relayUrl,
174
+ }, new RuntimeAgentDependencies(inventory.readyAgents()), localContext, new OpaqueRuntimeReconnectTarget(connection.connectionId), createCatalogAgentResolver((refreshSignal) => discoverLocalAgentInventory({
175
+ defaultWorkspace,
176
+ dataDirectory: localContext.stateDirectory,
177
+ environment: localContext.agentLaunchEnvironment,
178
+ signal: refreshSignal,
179
+ }), () => config, publishAgentCatalog), (refreshSignal) => discoverLocalAgentInventory({
180
+ defaultWorkspace,
181
+ dataDirectory: localContext.stateDirectory,
182
+ environment: localContext.agentLaunchEnvironment,
183
+ signal: refreshSignal,
184
+ }).then((inventory) => inventory.readyAgents()));
185
+ return config;
186
+ }
187
+ async function pairRuntime(installation, options, signal, environment) {
188
+ const localContext = new RuntimeLocalContext(installation.stateDirectory, environment);
189
+ const defaultWorkspace = await resolveDefaultWorkspace(options.workspace);
190
+ const inventory = await discoverLocalAgentInventory({
191
+ defaultWorkspace,
192
+ dataDirectory: localContext.stateDirectory,
193
+ environment: localContext.agentLaunchEnvironment,
194
+ signal,
195
+ });
196
+ const claim = await claimPairing(options, defaultWorkspace, inventory.readyAgents(), signal);
197
+ const connection = await installation.saveConnection({
198
+ appId: claim.appId,
199
+ channelId: claim.channelId,
200
+ defaultWorkspace,
201
+ pairingId: options.pairingId,
202
+ relayOrigin: options.relayOrigin,
203
+ runtimeCredential: claim.runtimeCredential,
204
+ runtimeId: claim.runtimeId,
205
+ }, signal);
206
+ return connection;
207
+ }
208
+ export async function pairRuntimeConnection(installation, options, signal, environment) {
209
+ return await pairRuntime(installation, {
210
+ code: parsePairingCode(options.pairingCode),
211
+ pairingId: options.pairingId.length === 0 ? "" : validatePairingId(options.pairingId),
212
+ relayOrigin: parseRelayOrigin(options.relayOrigin),
213
+ workspace: options.defaultWorkspace,
214
+ }, signal, environment);
215
+ }
216
+ export async function prepareRuntimeConnection(installation, connection, signal, environment, maxAcpProcesses) {
217
+ const localContext = new RuntimeLocalContext(installation.stateDirectory, environment, maxAcpProcesses);
218
+ const defaultWorkspace = await resolveDefaultWorkspace(connection.defaultWorkspace);
219
+ const inventory = await discoverLocalAgentInventory({
220
+ defaultWorkspace,
221
+ dataDirectory: localContext.stateDirectory,
222
+ environment: localContext.agentLaunchEnvironment,
223
+ signal,
224
+ });
225
+ return buildSavedRuntimeConfig(connection, defaultWorkspace, inventory, localContext);
226
+ }
227
+ //# sourceMappingURL=pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../../src/engine/runtime/pairing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAShE,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAY3D,+FAA+F;AAC/F,qBAAa,4BAA6B,YAAW,gBAAgB;;IASjE,YAAY,KAAK,EAAE,KAAK,EAEvB;IAED,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAO1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAK7C;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAIvB;IAEF,QAAQ,CAAC,uBAAuB,cAAe,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAG,IAAI,CAE5G;IACF,QAAQ,CAAC,aAAa,UAAW,yBAAyB,KAAG,IAAI,CAAsB;IACvF,QAAQ,CAAC,WAAW,UAAW,uBAAuB,KAAG,IAAI,CAAsB;IACnF,QAAQ,CAAC,aAAa,UAAW,uBAAuB,KAAG,IAAI,CAG7D;IAoBF,QAAQ,CAAC,OAAO,UAAW,gBAAgB,KAAG,IAAI,CA0DhD;IAkCF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CA2B1B;CACL"}
1
+ {"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAiB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAShE,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAmB3D,+FAA+F;AAC/F,qBAAa,4BAA6B,YAAW,gBAAgB;;IASjE,YAAY,KAAK,EAAE,KAAK,EAEvB;IAED,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAO1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAK7C;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAIvB;IAEF,QAAQ,CAAC,uBAAuB,cAAe,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,MAAM,KAAG,IAAI,CAE5G;IACF,QAAQ,CAAC,aAAa,UAAW,yBAAyB,KAAG,IAAI,CAAsB;IACvF,QAAQ,CAAC,WAAW,UAAW,uBAAuB,KAAG,IAAI,CAAsB;IACnF,QAAQ,CAAC,aAAa,UAAW,uBAAuB,KAAG,IAAI,CAG7D;IAoBF,QAAQ,CAAC,OAAO,UAAW,gBAAgB,KAAG,IAAI,CAoEhD;IAkCF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAwC1B;CACL"}
@@ -105,13 +105,23 @@ export class RuntimeSessionEventPublisher {
105
105
  return;
106
106
  }
107
107
  if (batch === undefined || newBatch) {
108
- batch = { events: [], bytes: EMPTY_ENVELOPE_BYTES };
108
+ batch = { events: [], firstAnswers: [], bytes: EMPTY_ENVELOPE_BYTES };
109
109
  this.#pending.push(batch);
110
110
  }
111
111
  batch.events.push(event);
112
112
  batch.bytes += bytes;
113
113
  this.#pendingBytes += additionalBytes;
114
+ const awaiting = this.#awaitingFirstAnswer.get(event.sessionId);
114
115
  const firstAnswer = this.#consumeFirstAnswer(event);
116
+ if (firstAnswer && awaiting !== undefined) {
117
+ batch.firstAnswers.push({
118
+ sessionId: event.sessionId,
119
+ commandId: awaiting.commandId,
120
+ eventId: event.eventId,
121
+ observedAt: Date.now(),
122
+ publishedAt: performance.now(),
123
+ });
124
+ }
115
125
  const connection = this.#connection;
116
126
  if (connection.kind !== "connected" || connection.socket.readyState !== WebSocket.OPEN) {
117
127
  return;
@@ -176,6 +186,17 @@ export class RuntimeSessionEventPublisher {
176
186
  this.#pendingBytes -= batch.bytes;
177
187
  try {
178
188
  socket.send(encoded);
189
+ for (const answer of batch.firstAnswers) {
190
+ console.info(JSON.stringify({
191
+ event: "runtime-first-answer-handoff-timing",
192
+ sessionId: answer.sessionId,
193
+ commandId: answer.commandId,
194
+ eventId: answer.eventId,
195
+ observedAt: answer.observedAt,
196
+ handedOffAt: Date.now(),
197
+ publishToHandoffMs: performance.now() - answer.publishedAt,
198
+ }));
199
+ }
179
200
  }
180
201
  catch {
181
202
  console.warn("Live Session output could not be sent", { code: "live_event_send_failed" });
@@ -1 +1 @@
1
- {"version":3,"file":"session-event-publisher.js","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-event-publisher.js","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/session-event-publisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { RuntimeUpgradeResult } from "@moxt-ai/mobius-sdk/protocol";
2
+ import type { RuntimeTurnActivity } from "../session/turn/runtime-turn-activity.ts";
3
+ import { type RuntimeConfig } from "./config.ts";
4
+ import type { RuntimeInstallationStore } from "./connection/runtime-installation-store.ts";
5
+ export interface MobiusRuntimeConnection {
6
+ readonly channelId: string;
7
+ readonly defaultWorkspace: string;
8
+ readonly relayUrl: string;
9
+ readonly runtimeCredential: string;
10
+ }
11
+ export declare class MobiusRuntimeConfigurationError extends Error {
12
+ readonly code = "runtime_configuration_invalid";
13
+ constructor(message: string, options?: ErrorOptions);
14
+ }
15
+ interface PrepareProvidedRuntimeParams {
16
+ readonly installation: RuntimeInstallationStore;
17
+ readonly connection: MobiusRuntimeConnection;
18
+ readonly signal: AbortSignal;
19
+ readonly agentLaunchEnvironment: Readonly<NodeJS.ProcessEnv>;
20
+ readonly maxAcpProcesses: number;
21
+ }
22
+ export declare function prepareProvidedRuntime({ installation, connection, signal, agentLaunchEnvironment, maxAcpProcesses, }: PrepareProvidedRuntimeParams): Promise<RuntimeConfig>;
23
+ /** Internal, single-execution owner. Never exported from the package's public API. */
24
+ export declare class RuntimeLoop {
25
+ #private;
26
+ constructor(prepare: (signal: AbortSignal) => Promise<RuntimeConfig>, options?: RuntimeLoopOptions);
27
+ readonly run: (signal: AbortSignal) => Promise<void>;
28
+ }
29
+ export interface RuntimeLoopOptions {
30
+ readonly turnActivity?: RuntimeTurnActivity;
31
+ readonly onConnectionStatus?: (status: "online" | "reconnecting") => void;
32
+ readonly onExecutionCountChange?: (count: number) => void;
33
+ /** Reports a finished daemon upgrade to the relay. The daemon worker supplies it. */
34
+ readonly reportUpgradeAvailability?: (send: (result: RuntimeUpgradeResult) => void, signal: AbortSignal) => Promise<void>;
35
+ /**
36
+ * State directory of the daemon processes supervising this Runtime. Passed
37
+ * through to `runRuntime` so the local bug-report log can read the
38
+ * manager-written worker lifecycle and unhandled-rejection logs. Read-only.
39
+ */
40
+ readonly processLogsDirectory?: string;
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=runtime-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-loop.d.ts","sourceRoot":"","sources":["../../../src/engine/runtime/runtime-loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAIpF,OAAO,EAAuB,KAAK,aAAa,EAAuB,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAK3F,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACtC;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,mCAAmC;IAEhD,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,EAGtD;CACJ;AAmDD,UAAU,4BAA4B;IAClC,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACpC;AAED,wBAAsB,sBAAsB,CAAC,EACzC,YAAY,EACZ,UAAU,EACV,MAAM,EACN,sBAAsB,EACtB,eAAe,GAClB,EAAE,4BAA4B,GAAG,OAAO,CAAC,aAAa,CAAC,CAiCvD;AAED,sFAAsF;AACtF,qBAAa,WAAW;;IAKpB,YAAY,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,GAAE,kBAAuB,EAGrG;IAED,QAAQ,CAAC,GAAG,WAAkB,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC,CA+BvD;CACL;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,KAAK,IAAI,CAAC;IAC1E,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,qFAAqF;IACrF,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CACjC,IAAI,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAC5C,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC1C"}
@@ -0,0 +1,123 @@
1
+ import { resolve } from "node:path";
2
+ import { discoverLocalAgentInventory, supportedLocalAgentSpecifications, } from "../agent/discovery/discover-local-agents.js";
3
+ import { RuntimeAgentDependencies } from "../agent/runtime-agents.js";
4
+ import { ensureCanonicalDirectory } from "../storage/files/local-files.js";
5
+ import { publishAgentCatalog } from "./catalog/publish-agent-catalog.js";
6
+ import { createCatalogAgentResolver } from "./catalog/resolve-catalog-agent.js";
7
+ import { createRuntimeConfig, RuntimeLocalContext } from "./config.js";
8
+ import { runRuntime } from "./run.js";
9
+ const RUNTIME_CREDENTIAL_PATTERN = /^[a-zA-Z0-9_-]{32,256}$/;
10
+ export class MobiusRuntimeConfigurationError extends Error {
11
+ code = "runtime_configuration_invalid";
12
+ constructor(message, options = {}) {
13
+ super(message, options);
14
+ this.name = "MobiusRuntimeConfigurationError";
15
+ }
16
+ }
17
+ function validateRuntimeRelay(relayUrl) {
18
+ if (relayUrl.protocol !== "ws:" && relayUrl.protocol !== "wss:") {
19
+ throw new MobiusRuntimeConfigurationError("The Runtime relay URL must use WebSocket transport");
20
+ }
21
+ const credential = relayUrl.searchParams.get("token") ?? "";
22
+ if (credential.length === 0) {
23
+ throw new MobiusRuntimeConfigurationError("The Runtime relay credential is required");
24
+ }
25
+ if (!RUNTIME_CREDENTIAL_PATTERN.test(credential)) {
26
+ throw new MobiusRuntimeConfigurationError("The Runtime relay credential is invalid");
27
+ }
28
+ }
29
+ function validateRuntimeConfiguration(config) {
30
+ validateRuntimeRelay(config.relayUrl);
31
+ }
32
+ function relayUrlFromConnection(connection) {
33
+ let relayUrl;
34
+ try {
35
+ relayUrl = new URL(connection.relayUrl);
36
+ }
37
+ catch (error) {
38
+ throw new MobiusRuntimeConfigurationError("The Runtime relay URL is invalid", { cause: error });
39
+ }
40
+ relayUrl.searchParams.set("token", connection.runtimeCredential);
41
+ validateRuntimeRelay(relayUrl);
42
+ return relayUrl;
43
+ }
44
+ async function resolveWorkspace(path) {
45
+ const requested = resolve(path);
46
+ let resolved;
47
+ try {
48
+ resolved = await ensureCanonicalDirectory(requested);
49
+ }
50
+ catch (error) {
51
+ throw new MobiusRuntimeConfigurationError("The Runtime workspace cannot be resolved", { cause: error });
52
+ }
53
+ if (resolved === null) {
54
+ throw new MobiusRuntimeConfigurationError("The Runtime workspace is not a directory");
55
+ }
56
+ return resolved;
57
+ }
58
+ export async function prepareProvidedRuntime({ installation, connection, signal, agentLaunchEnvironment, maxAcpProcesses, }) {
59
+ signal.throwIfAborted();
60
+ const relayUrl = relayUrlFromConnection(connection);
61
+ const localContext = new RuntimeLocalContext(installation.stateDirectory, agentLaunchEnvironment, maxAcpProcesses);
62
+ const defaultWorkspace = await resolveWorkspace(connection.defaultWorkspace);
63
+ const specifications = supportedLocalAgentSpecifications();
64
+ const discoveryEnvironment = localContext.agentLaunchEnvironment;
65
+ const discover = async (refreshSignal) => await discoverLocalAgentInventory({
66
+ defaultWorkspace,
67
+ dataDirectory: localContext.stateDirectory,
68
+ environment: discoveryEnvironment,
69
+ signal: refreshSignal,
70
+ specifications,
71
+ });
72
+ const inventory = await discover(signal);
73
+ const config = createRuntimeConfig({
74
+ channelId: connection.channelId,
75
+ defaultWorkspace,
76
+ relayUrl,
77
+ }, new RuntimeAgentDependencies(inventory.readyAgents()), localContext, null, createCatalogAgentResolver((refreshSignal) => discover(refreshSignal), () => config, publishAgentCatalog), (refreshSignal) => discover(refreshSignal).then((inventory) => inventory.readyAgents()));
78
+ return config;
79
+ }
80
+ /** Internal, single-execution owner. Never exported from the package's public API. */
81
+ export class RuntimeLoop {
82
+ #prepare;
83
+ #options;
84
+ #state = { kind: "created" };
85
+ constructor(prepare, options = {}) {
86
+ this.#prepare = prepare;
87
+ this.#options = options;
88
+ }
89
+ run = async (signal) => {
90
+ if (this.#state.kind !== "created") {
91
+ throw new MobiusRuntimeConfigurationError("A Runtime loop can only be started once");
92
+ }
93
+ signal.throwIfAborted();
94
+ // Claim this execution before asynchronous preparation can yield.
95
+ this.#state = { kind: "preparing" };
96
+ try {
97
+ const config = await this.#prepare(signal);
98
+ signal.throwIfAborted();
99
+ validateRuntimeConfiguration(config);
100
+ this.#state = { kind: "running", config };
101
+ await runRuntime(config, signal, undefined, {
102
+ ...(this.#options.turnActivity === undefined ? {} : { turnActivity: this.#options.turnActivity }),
103
+ onExecutionCountChange: (count) => {
104
+ this.#options.onExecutionCountChange?.(count);
105
+ },
106
+ ...(this.#options.onConnectionStatus === undefined
107
+ ? {}
108
+ : { onConnectionStatus: this.#options.onConnectionStatus }),
109
+ ...(this.#options.reportUpgradeAvailability === undefined
110
+ ? {}
111
+ : { reportUpgradeAvailability: this.#options.reportUpgradeAvailability }),
112
+ ...(this.#options.processLogsDirectory === undefined
113
+ ? {}
114
+ : { processLogsDirectory: this.#options.processLogsDirectory }),
115
+ });
116
+ }
117
+ finally {
118
+ this.#state = { kind: "finished" };
119
+ this.#options.onExecutionCountChange?.(0);
120
+ }
121
+ };
122
+ }
123
+ //# sourceMappingURL=runtime-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-loop.js","sourceRoot":"","sources":["../../../src/engine/runtime/runtime-loop.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,9 @@ export interface ResolvedExternalContent {
8
8
  readonly name: string;
9
9
  readonly path: string;
10
10
  }
11
+ export interface ReadExternalContent extends ResolvedExternalContent {
12
+ readonly bytes: Uint8Array;
13
+ }
11
14
  export interface ExternalContentStore {
12
15
  readonly put: (input: {
13
16
  readonly bytes: Uint8Array;
@@ -18,7 +21,7 @@ export interface ExternalContentStore {
18
21
  readonly signal: AbortSignal;
19
22
  }) => Promise<ExternalContentReference>;
20
23
  readonly resolve: (sessionId: string, request: string, signal: AbortSignal) => Promise<ResolvedExternalContent | null>;
21
- readonly read: (sessionId: string, request: string, signal: AbortSignal) => Promise<Uint8Array | null>;
24
+ readonly read: (sessionId: string, request: string, signal: AbortSignal) => Promise<ReadExternalContent | null>;
22
25
  }
23
26
  /** Files are disposable; authorization grants and metadata never leave memory. */
24
27
  export declare class LocalExternalContentStore implements ExternalContentStore, AsyncDisposable {
@@ -1 +1 @@
1
- {"version":3,"file":"external-content-store.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/content/external-content-store.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;KAChC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC1G;AAQD,kFAAkF;AAClF,qBAAa,yBAA0B,YAAW,oBAAoB,EAAE,eAAe;;IAQnF,YAAY,cAAc,EAAE,MAAM,EAOjC;IA+BD,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAkD;IAiC3F,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAC0D;IAsB3G,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAKpC;IAEP,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,QAAa,OAAO,CAAC,IAAI,CAAC,CAMtD;CACL"}
1
+ {"version":3,"file":"external-content-store.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/content/external-content-store.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAChE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;KAChC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACnH;AAQD,kFAAkF;AAClF,qBAAa,yBAA0B,YAAW,oBAAoB,EAAE,eAAe;;IAQnF,YAAY,cAAc,EAAE,MAAM,EAOjC;IA+BD,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAkD;IAiC3F,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAC0D;IAsB3G,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CASpC;IAEP,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,QAAa,OAAO,CAAC,IAAI,CAAC,CAMtD;CACL"}
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- import { join } from "node:path";
2
+ import { extname, join } from "node:path";
3
3
  import { z } from "zod";
4
4
  import { ScratchDirectory } from "../../storage/files/scratch-directory.js";
5
5
  const contentRequest = /^mobius-content:(image|audio|resource):([a-f0-9]{64})$/u;
@@ -13,6 +13,10 @@ const metadataSchema = z.strictObject({
13
13
  .regex(/^[\u0020-\u007e]+$/u),
14
14
  name: z.string().min(1).max(500),
15
15
  });
16
+ function contentFileName(key, name) {
17
+ const extension = extname(name).toLowerCase();
18
+ return /^\.[a-z0-9]{1,16}$/u.test(extension) ? `${key}${extension}` : key;
19
+ }
16
20
  /** Files are disposable; authorization grants and metadata never leave memory. */
17
21
  export class LocalExternalContentStore {
18
22
  #scratch;
@@ -75,7 +79,7 @@ export class LocalExternalContentStore {
75
79
  }
76
80
  await this.#expire();
77
81
  active.throwIfAborted();
78
- const path = await this.#scratch.write(kind, key, bytes, active);
82
+ const path = await this.#scratch.write(kind, contentFileName(key, metadata.name), bytes, active);
79
83
  active.throwIfAborted();
80
84
  const retained = this.#entries.get(request);
81
85
  this.#entries.set(request, {
@@ -111,7 +115,11 @@ export class LocalExternalContentStore {
111
115
  read = (sessionId, request, signal) => this.#track(async () => {
112
116
  const active = AbortSignal.any([signal, this.#lifetime.signal]);
113
117
  const resolved = await this.#resolve(sessionId, request, active);
114
- return resolved === null ? null : this.#scratch.read(resolved.path, active);
118
+ if (resolved === null) {
119
+ return null;
120
+ }
121
+ const bytes = await this.#scratch.read(resolved.path, active);
122
+ return bytes === null ? null : { ...resolved, bytes };
115
123
  });
116
124
  [Symbol.asyncDispose] = async () => {
117
125
  clearInterval(this.#expirationTimer);