@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.
- package/dist/cli.js +2321 -2086
- package/dist/cli.js.map +4 -4
- package/dist/daemon/lifecycle/worker.d.ts.map +1 -1
- package/dist/daemon/lifecycle/worker.js +10 -9
- package/dist/daemon/lifecycle/worker.js.map +1 -1
- package/dist/daemon/pairing/pair-local-machine.d.ts +5 -21
- package/dist/daemon/pairing/pair-local-machine.d.ts.map +1 -1
- package/dist/daemon/pairing/pair-local-machine.js +22 -254
- package/dist/daemon/pairing/pair-local-machine.js.map +1 -1
- package/dist/engine/acp/harness/codex/session-update.d.ts.map +1 -1
- package/dist/engine/acp/harness/codex/session-update.js +5 -1
- package/dist/engine/acp/harness/codex/session-update.js.map +1 -1
- package/dist/engine/index.d.ts +0 -2
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +0 -2
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/runtime/command/registry/prompt.js +4 -4
- package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
- package/dist/engine/runtime/command/registry/session.d.ts.map +1 -1
- package/dist/engine/runtime/command/registry/session.js +8 -1
- package/dist/engine/runtime/command/registry/session.js.map +1 -1
- package/dist/engine/runtime/connection/connection-manager.d.ts +13 -0
- package/dist/engine/runtime/connection/connection-manager.d.ts.map +1 -0
- package/dist/engine/runtime/connection/connection-manager.js +13 -0
- package/dist/engine/runtime/connection/connection-manager.js.map +1 -0
- package/dist/engine/runtime/connection/runtime-installation-store.d.ts +0 -2
- package/dist/engine/runtime/connection/runtime-installation-store.d.ts.map +1 -1
- package/dist/engine/runtime/connection/runtime-installation-store.js +0 -6
- package/dist/engine/runtime/connection/runtime-installation-store.js.map +1 -1
- package/dist/engine/runtime/engine.d.ts +25 -36
- package/dist/engine/runtime/engine.d.ts.map +1 -1
- package/dist/engine/runtime/engine.js +76 -127
- package/dist/engine/runtime/engine.js.map +1 -1
- package/dist/engine/runtime/pairing.d.ts +19 -0
- package/dist/engine/runtime/pairing.d.ts.map +1 -0
- package/dist/engine/runtime/pairing.js +227 -0
- package/dist/engine/runtime/pairing.js.map +1 -0
- package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
- package/dist/engine/runtime/relay/session-event-publisher.js +22 -1
- package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
- package/dist/engine/runtime/runtime-loop.d.ts +43 -0
- package/dist/engine/runtime/runtime-loop.d.ts.map +1 -0
- package/dist/engine/runtime/runtime-loop.js +123 -0
- package/dist/engine/runtime/runtime-loop.js.map +1 -0
- package/dist/engine/session/content/external-content-store.d.ts +4 -1
- package/dist/engine/session/content/external-content-store.d.ts.map +1 -1
- package/dist/engine/session/content/external-content-store.js +11 -3
- package/dist/engine/session/content/external-content-store.js.map +1 -1
- package/dist/engine/session/prompt/prompt-artifacts.d.ts +6 -1
- package/dist/engine/session/prompt/prompt-artifacts.d.ts.map +1 -1
- package/dist/engine/session/prompt/prompt-artifacts.js +12 -17
- package/dist/engine/session/prompt/prompt-artifacts.js.map +1 -1
- package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
- package/dist/engine/session/prompt/prompt-lifecycle.js +2 -1
- package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
- package/dist/engine/session/workspace/workspace-directory.d.ts +1 -0
- package/dist/engine/session/workspace/workspace-directory.d.ts.map +1 -1
- package/dist/engine/session/workspace/workspace-directory.js +2 -1
- package/dist/engine/session/workspace/workspace-directory.js.map +1 -1
- package/dist/engine.js +1950 -1792
- package/dist/engine.js.map +4 -4
- package/dist/exports/engine.d.ts +2 -4
- package/dist/exports/engine.d.ts.map +1 -1
- package/dist/exports/engine.js +1 -4
- package/dist/exports/engine.js.map +1 -1
- 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;
|
|
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":"AAAA,OAAO,EAEH,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,GAKrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,0FAA0F;AAC1F,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAC3C,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;AACzG,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,CAAC;
|
|
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<
|
|
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":"
|
|
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
|
-
|
|
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);
|