devframe 0.9.7 → 0.9.9
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/{_shared-BM3PdYli.mjs → _shared-C08SdQRl.mjs} +15 -4
- package/dist/{_shared-BJ6AmwTu.d.mts → _shared-CK3czkH4.d.mts} +25 -2
- package/dist/adapters/build.d.mts +6 -6
- package/dist/adapters/build.mjs +32 -22
- package/dist/adapters/cac.d.mts +16 -1
- package/dist/adapters/cac.mjs +8 -7
- package/dist/adapters/dev.d.mts +13 -13
- package/dist/adapters/dev.mjs +2 -2
- package/dist/adapters/embedded.d.mts +1 -1
- package/dist/adapters/initiate.d.mts +28 -26
- package/dist/adapters/initiate.mjs +1 -1
- package/dist/adapters/mcp.d.mts +28 -14
- package/dist/adapters/mcp.mjs +75 -39
- package/dist/{agent-tool-name-EgfoFO8C.mjs → agent-tool-name-DGzeuWcO.mjs} +2 -2
- package/dist/cli/main.d.mts +1 -1
- package/dist/cli/main.mjs +41 -17
- package/dist/client/index.d.mts +36 -36
- package/dist/client/index.mjs +83 -51
- package/dist/client-assets-DNdhagGm.mjs +16 -0
- package/dist/constants.d.mts +8 -7
- package/dist/constants.mjs +7 -6
- package/dist/{context-BhBzOXVa.d.mts → context-4AIVRLYF.d.mts} +173 -122
- package/dist/{context-omlma_1n.mjs → context-CwPUinjn.mjs} +126 -88
- package/dist/{context-KUqAfawQ.mjs → context-DIUvJW4D.mjs} +3 -3
- package/dist/{context-HOnG-WvG.d.mts → context-rgBSPFHS.d.mts} +5 -5
- package/dist/{crypto-token-XCqTSMg9.mjs → crypto-token-TVbGGFuj.mjs} +1 -1
- package/dist/{dev-Czit5IP4.mjs → dev-Eqq5PX0k.mjs} +37 -18
- package/dist/{diagnostics-BXWW3VK-.mjs → diagnostics-BMfN8mb1.mjs} +30 -17
- package/dist/{diagnostics-CD8nlgll.mjs → diagnostics-D0EVm5M6.mjs} +2 -2
- package/dist/{events-4daw0uK9.mjs → events-BV4Dj59a.mjs} +2 -2
- package/dist/{host-h3-fRbF9yor.mjs → host-h3-BJ4siyz7.mjs} +1 -1
- package/dist/in-page-channel/index.d.mts +59 -22
- package/dist/in-page-channel/index.mjs +71 -56
- package/dist/{index-BzyopqxV.d.mts → index-pIVt92jP.d.mts} +9 -9
- package/dist/{index-DcKxIMoI.d.mts → index-pKl67H6w.d.mts} +4 -4
- package/dist/index.d.mts +11 -13
- package/dist/index.mjs +6 -7
- package/dist/{instance-registry-BjlMQbFB.mjs → instance-registry-C7-41RSp.mjs} +8 -8
- package/dist/{instance-shell-Bh4l9Vz_.d.mts → instance-shell-7Z52PE4_.d.mts} +18 -18
- package/dist/{instance-shell-CpVW4zG0.mjs → instance-shell-cdVETpfz.mjs} +227 -58
- package/dist/internal/index.d.mts +51 -21
- package/dist/internal/index.mjs +10 -9
- package/dist/node/auth.d.mts +2 -2
- package/dist/node/auth.mjs +2 -2
- package/dist/node/hub-internals.d.mts +2 -2
- package/dist/node/hub-internals.mjs +2 -2
- package/dist/node/index.d.mts +5 -5
- package/dist/node/index.mjs +2 -2
- package/dist/{nostics-SPGDgHEP.d.mts → nostics-0sKe5HIj.d.mts} +2 -2
- package/dist/{nostics-CzECRXpE.mjs → nostics-D0PvLZsn.mjs} +1 -1
- package/dist/origin-DGDH8BI9.d.mts +45 -0
- package/dist/origin-DZit9g29.mjs +80 -0
- package/dist/recipes/common-rpc-functions.d.mts +5 -5
- package/dist/recipes/common-rpc-functions.mjs +3 -3
- package/dist/recipes/interactive-auth.d.mts +6 -6
- package/dist/recipes/interactive-auth.mjs +6 -6
- package/dist/{remote-assets-DezQmPQU.mjs → remote-assets-BIFWOlBW.mjs} +26 -6
- package/dist/{remote-assets-B13_vRkJ.d.mts → remote-assets-eBvSKZMS.d.mts} +7 -7
- package/dist/{revoke-COLW0cOi.mjs → revoke-cqztiCX4.mjs} +1 -1
- package/dist/rpc/dump.d.mts +2 -11
- package/dist/rpc/dump.mjs +1 -1
- package/dist/rpc/index.d.mts +2 -2
- package/dist/rpc/index.mjs +3 -3
- package/dist/rpc/transports/sse-client.d.mts +1 -1
- package/dist/rpc/transports/sse-client.mjs +30 -14
- package/dist/rpc/transports/sse-server.d.mts +4 -4
- package/dist/rpc/transports/sse-server.mjs +7 -7
- package/dist/rpc/transports/ws-bun.d.mts +5 -5
- package/dist/rpc/transports/ws-bun.mjs +8 -2
- package/dist/rpc/transports/ws-client.d.mts +1 -1
- package/dist/rpc/transports/ws-client.mjs +2 -2
- package/dist/rpc/transports/ws-deno.d.mts +4 -4
- package/dist/rpc/transports/ws-deno.mjs +8 -2
- package/dist/rpc/transports/ws-server.d.mts +2 -1
- package/dist/rpc/transports/ws-server.mjs +232 -1
- package/dist/{rpc-core-BHUsDl7s.d.mts → rpc-core-Ceu6AUz8.d.mts} +4 -4
- package/dist/{rpc-core-DlHd276T.mjs → rpc-core-DVQ7xi89.mjs} +14 -2
- package/dist/{serialization-BGzEwAdr.mjs → serialization-DTZnPQ1-.mjs} +20 -18
- package/dist/{services-install-CqqQVls5.mjs → services-install-P_DV7VYL.mjs} +32 -21
- package/dist/session-DPfj6zQG.mjs +16 -0
- package/dist/{shared-state-DoXutg_U.mjs → shared-state-CaxB1q0h.mjs} +4 -3
- package/dist/{simple-schema-DQPZrAaZ.mjs → simple-schema-Bi40l-P6.mjs} +2 -2
- package/dist/{sse-client-DwX021ST.d.mts → sse-client-BQ4jS3eO.d.mts} +4 -4
- package/dist/{state-CK9LjrnT.mjs → state-CeQQWzM-.mjs} +4 -4
- package/dist/{static-DV_qUSRS.mjs → static-DZ8P2Kn7.mjs} +130 -135
- package/dist/{storage-BXNVhKyR.mjs → storage-Dccf_IyD.mjs} +1 -1
- package/dist/types/index.d.mts +6 -6
- package/dist/{types-CMdPYhOx.d.mts → types-Dq4i156u.d.mts} +17 -17
- package/dist/utils/agent-tool-name.d.mts +2 -2
- package/dist/utils/agent-tool-name.mjs +2 -2
- package/dist/utils/colors.d.mts +1 -1
- package/dist/utils/crypto-token.d.mts +1 -1
- package/dist/utils/crypto-token.mjs +1 -1
- package/dist/utils/events.d.mts +1 -1
- package/dist/utils/nostics.d.mts +1 -1
- package/dist/utils/nostics.mjs +1 -1
- package/dist/utils/open.mjs +1 -1
- package/dist/utils/origin.d.mts +2 -0
- package/dist/utils/origin.mjs +80 -0
- package/dist/utils/remote-assets.d.mts +2 -2
- package/dist/utils/remote-assets.mjs +1 -1
- package/dist/utils/serve-static.d.mts +4 -4
- package/dist/utils/serve-static.mjs +56 -19
- package/dist/utils/shared-state.d.mts +1 -1
- package/dist/utils/shared-state.mjs +1 -1
- package/dist/utils/simple-schema.d.mts +5 -5
- package/dist/utils/simple-schema.mjs +2 -2
- package/dist/utils/streaming-channel.d.mts +1 -1
- package/dist/utils/streaming-channel.mjs +2 -2
- package/dist/utils/when.d.mts +5 -5
- package/dist/{validation-YrZH6atx.mjs → validation-BOy8IoFZ.mjs} +2 -2
- package/dist/{wire-codec-0K-o5MYW.mjs → wire-codec-dcCeXcSo.mjs} +3 -3
- package/dist/{ws-client-7_lZi-B9.d.mts → ws-client-Xpxt0oPA.d.mts} +3 -3
- package/dist/{ws-server-Di2oqr4q.d.mts → ws-server-D2nv68Hg.d.mts} +13 -22
- package/package.json +6 -5
- package/dist/ws-server-BdSLrhxE.mjs +0 -267
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v as RpcFunctionDefinitionAny } from "./types-
|
|
1
|
+
import { v as RpcFunctionDefinitionAny } from "./types-Dq4i156u.mjs";
|
|
2
2
|
import { ChannelOptions } from "birpc";
|
|
3
3
|
//#region src/rpc/transports/sse-client.d.ts
|
|
4
4
|
interface SseRpcChannelOptions {
|
|
@@ -10,7 +10,7 @@ interface SseRpcChannelOptions {
|
|
|
10
10
|
authToken?: string;
|
|
11
11
|
/**
|
|
12
12
|
* RPC function definitions (or just the `jsonSerializable` flag per
|
|
13
|
-
* method) used to dispatch the per-call wire serializer
|
|
13
|
+
* method) used to dispatch the per-call wire serializer, the same contract
|
|
14
14
|
* as the WS channel.
|
|
15
15
|
*/
|
|
16
16
|
definitions?: ReadonlyMap<string, Pick<RpcFunctionDefinitionAny, 'jsonSerializable'>>;
|
|
@@ -19,7 +19,7 @@ interface SseRpcChannelOptions {
|
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Build a birpc `ChannelOptions` object backed by an SSE stream (server →
|
|
22
|
-
* client) and HTTP `POST` (client → server)
|
|
22
|
+
* client) and HTTP `POST` (client → server): the WebSocket-free counterpart
|
|
23
23
|
* to `createWsRpcChannel`, wire-compatible with `attachSseRpcTransport`.
|
|
24
24
|
*
|
|
25
25
|
* The stream is consumed via `fetch` streaming (not `EventSource`), so it
|
|
@@ -27,7 +27,7 @@ interface SseRpcChannelOptions {
|
|
|
27
27
|
* (`event: session`) carries the session id; every `POST` echoes it in the
|
|
28
28
|
* `x-birpc-session` header. A response to a client-initiated request comes
|
|
29
29
|
* back in the `POST`'s own body and is re-injected into the channel; a
|
|
30
|
-
* dropped stream terminates the channel
|
|
30
|
+
* dropped stream terminates the channel; there is no reconnect, matching
|
|
31
31
|
* the WS channel's closed-is-done semantics.
|
|
32
32
|
*/
|
|
33
33
|
declare function createSseRpcChannel(options: SseRpcChannelOptions): ChannelOptions & {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DEVFRAME_OTP_URL_PARAM } from "./constants.mjs";
|
|
2
|
-
import { n as randomToken, r as timingSafeEqual, t as randomDigits } from "./crypto-token-
|
|
2
|
+
import { n as randomToken, r as timingSafeEqual, t as randomDigits } from "./crypto-token-TVbGGFuj.mjs";
|
|
3
3
|
//#region ../../node_modules/.pnpm/ua-parser-modern@0.1.1/node_modules/ua-parser-modern/dist/index.mjs
|
|
4
4
|
const EMPTY = "";
|
|
5
5
|
const UNKNOWN = "?";
|
|
@@ -1169,7 +1169,7 @@ function parseUA(uastringOrExtensions, extensions) {
|
|
|
1169
1169
|
*
|
|
1170
1170
|
* The client used to parse+format this itself, but that pulled
|
|
1171
1171
|
* `ua-parser-modern` into the browser bundle for a label nothing else on
|
|
1172
|
-
* the client needs
|
|
1172
|
+
* the client needs; the client now sends the raw string and parsing
|
|
1173
1173
|
* happens here, at the server ingress, keeping the persisted label format
|
|
1174
1174
|
* identical.
|
|
1175
1175
|
*/
|
|
@@ -1221,13 +1221,13 @@ function refreshTempAuthCode() {
|
|
|
1221
1221
|
}
|
|
1222
1222
|
/**
|
|
1223
1223
|
* Build a "magic link" authentication URL that embeds a one-time code (OTP) in
|
|
1224
|
-
* the URL **fragment**. Opening it authenticates the client without typing
|
|
1224
|
+
* the URL **fragment**. Opening it authenticates the client without typing;
|
|
1225
1225
|
* print it on startup (devframe stays headless, so the host prints its own
|
|
1226
1226
|
* banner). Defaults to the current code; the link is subject to the same TTL.
|
|
1227
1227
|
*
|
|
1228
1228
|
* The code rides the fragment (`#devframe_otp=…`), not the query string, so it
|
|
1229
1229
|
* is never sent to the server, written to an access log, or leaked in a
|
|
1230
|
-
* `Referer` header
|
|
1230
|
+
* `Referer` header; the browser client reads it locally (see
|
|
1231
1231
|
* `consumeOtpFromUrl`). Any existing fragment parameters are preserved.
|
|
1232
1232
|
*/
|
|
1233
1233
|
function buildOtpAuthUrl(baseUrl, code = tempAuthCode) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as validateDefinitions, r as getRpcHandler, s as hash } from "./validation-
|
|
2
|
-
import { t as diagnostics } from "./diagnostics-
|
|
1
|
+
import { n as validateDefinitions, r as getRpcHandler, s as hash } from "./validation-BOy8IoFZ.mjs";
|
|
2
|
+
import { t as diagnostics } from "./diagnostics-D0EVm5M6.mjs";
|
|
3
3
|
import { DEVFRAME_RPC_DUMP_DIRNAME } from "./constants.mjs";
|
|
4
4
|
//#region ../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js
|
|
5
5
|
var Node = class {
|
|
@@ -156,9 +156,9 @@ function serializeWithSeen(error, seen) {
|
|
|
156
156
|
};
|
|
157
157
|
const cause = error.cause;
|
|
158
158
|
if (cause !== void 0) out.cause = cause instanceof Error ? serializeWithSeen(cause, seen) : cause;
|
|
159
|
-
for (const key of Object.
|
|
159
|
+
for (const [key, value] of Object.entries(error)) {
|
|
160
160
|
if (key === "name" || key === "message" || key === "cause") continue;
|
|
161
|
-
out[key] =
|
|
161
|
+
out[key] = value;
|
|
162
162
|
}
|
|
163
163
|
return out;
|
|
164
164
|
}
|
|
@@ -168,13 +168,11 @@ function serializeWithSeen(error, seen) {
|
|
|
168
168
|
* the original `name`, and re-attaches any custom own properties.
|
|
169
169
|
*/
|
|
170
170
|
function reviveDumpError(stored) {
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
error
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
error[key] = stored[key];
|
|
177
|
-
}
|
|
171
|
+
const { name, message, cause: rawCause, ...extras } = stored;
|
|
172
|
+
const cause = rawCause instanceof Error ? rawCause : isPlainErrorShape(rawCause) ? reviveDumpError(rawCause) : rawCause;
|
|
173
|
+
const error = cause !== void 0 ? new Error(message, { cause }) : new Error(message);
|
|
174
|
+
error.name = name;
|
|
175
|
+
Object.assign(error, extras);
|
|
178
176
|
return error;
|
|
179
177
|
}
|
|
180
178
|
function isPlainErrorShape(value) {
|
|
@@ -191,15 +189,77 @@ function getDumpFallbackKey(functionName) {
|
|
|
191
189
|
async function resolveGetter(valueOrGetter) {
|
|
192
190
|
return typeof valueOrGetter === "function" ? await valueOrGetter() : valueOrGetter;
|
|
193
191
|
}
|
|
192
|
+
/** Run tasks sequentially (`concurrency <= 1`) or through a `p-limit` pool. */
|
|
193
|
+
async function runDumpTasks(tasks, concurrency) {
|
|
194
|
+
if (concurrency <= 1) {
|
|
195
|
+
const out = [];
|
|
196
|
+
for (const task of tasks) out.push(await task());
|
|
197
|
+
return out;
|
|
198
|
+
}
|
|
199
|
+
const limit = pLimit(concurrency);
|
|
200
|
+
return Promise.all(tasks.map((task) => limit(task)));
|
|
201
|
+
}
|
|
194
202
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* @example
|
|
199
|
-
* ```ts
|
|
200
|
-
* const store = await dumpFunctions([greet], context, { concurrency: 10 })
|
|
201
|
-
* ```
|
|
203
|
+
* Resolve one definition's handler + dump config and register it in the store.
|
|
204
|
+
* Returns `undefined` for definitions that carry no dump.
|
|
202
205
|
*/
|
|
206
|
+
async function resolveDumpTask(definition, context, store) {
|
|
207
|
+
if (definition.type === "event" || definition.type === "action") return void 0;
|
|
208
|
+
const setupResult = definition.setup ? await Promise.resolve(definition.setup(context)) : {};
|
|
209
|
+
const handler = setupResult.handler || definition.handler;
|
|
210
|
+
if (!handler) throw diagnostics.DF0024({ name: definition.name });
|
|
211
|
+
let dump = setupResult.dump ?? definition.dump;
|
|
212
|
+
if (!dump && definition.type === "static") dump = { inputs: [[]] };
|
|
213
|
+
if (!dump && definition.snapshot) dump = async (_ctx, h) => {
|
|
214
|
+
const output = await Promise.resolve(h());
|
|
215
|
+
return {
|
|
216
|
+
records: [{
|
|
217
|
+
inputs: [],
|
|
218
|
+
output
|
|
219
|
+
}],
|
|
220
|
+
fallback: output
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
if (!dump) return void 0;
|
|
224
|
+
if (typeof dump === "function") dump = await Promise.resolve(dump(context, handler));
|
|
225
|
+
store.definitions[definition.name] = {
|
|
226
|
+
name: definition.name,
|
|
227
|
+
type: definition.type
|
|
228
|
+
};
|
|
229
|
+
return {
|
|
230
|
+
handler,
|
|
231
|
+
dump,
|
|
232
|
+
definition
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Write a resolved dump's pre-defined records and fallback into the store, and
|
|
237
|
+
* return the per-input execution tasks that fill in the rest.
|
|
238
|
+
*/
|
|
239
|
+
function collectDumpTasks(resolution, store) {
|
|
240
|
+
const { definition, handler, dump } = resolution;
|
|
241
|
+
const { inputs, records, fallback } = dump;
|
|
242
|
+
if (records) for (const record of records) store.records[getDumpRecordKey(definition.name, record.inputs)] = record;
|
|
243
|
+
if ("fallback" in dump) store.records[getDumpFallbackKey(definition.name)] = {
|
|
244
|
+
inputs: [],
|
|
245
|
+
output: fallback
|
|
246
|
+
};
|
|
247
|
+
if (!inputs) return [];
|
|
248
|
+
return inputs.map((input) => async () => {
|
|
249
|
+
const recordKey = getDumpRecordKey(definition.name, input);
|
|
250
|
+
try {
|
|
251
|
+
store.records[recordKey] = {
|
|
252
|
+
inputs: input,
|
|
253
|
+
output: await Promise.resolve(handler(...input))
|
|
254
|
+
};
|
|
255
|
+
} catch (error) {
|
|
256
|
+
store.records[recordKey] = {
|
|
257
|
+
inputs: input,
|
|
258
|
+
error: serializeDumpError(error)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
203
263
|
async function dumpFunctions(definitions, context, options = {}) {
|
|
204
264
|
validateDefinitions(definitions);
|
|
205
265
|
const concurrency = options.concurrency === true ? 5 : options.concurrency === false || options.concurrency == null ? 1 : options.concurrency;
|
|
@@ -207,79 +267,7 @@ async function dumpFunctions(definitions, context, options = {}) {
|
|
|
207
267
|
definitions: {},
|
|
208
268
|
records: {}
|
|
209
269
|
};
|
|
210
|
-
|
|
211
|
-
if (definition.type === "event" || definition.type === "action") return;
|
|
212
|
-
const setupResult = definition.setup ? await Promise.resolve(definition.setup(context)) : {};
|
|
213
|
-
const handler = setupResult.handler || definition.handler;
|
|
214
|
-
if (!handler) throw diagnostics.DF0024({ name: definition.name });
|
|
215
|
-
let dump = setupResult.dump ?? definition.dump;
|
|
216
|
-
if (!dump && definition.type === "static") dump = { inputs: [[]] };
|
|
217
|
-
if (!dump && definition.snapshot) dump = async (_ctx, h) => {
|
|
218
|
-
const output = await Promise.resolve(h(...[]));
|
|
219
|
-
return {
|
|
220
|
-
records: [{
|
|
221
|
-
inputs: [],
|
|
222
|
-
output
|
|
223
|
-
}],
|
|
224
|
-
fallback: output
|
|
225
|
-
};
|
|
226
|
-
};
|
|
227
|
-
if (!dump) return;
|
|
228
|
-
if (typeof dump === "function") dump = await Promise.resolve(dump(context, handler));
|
|
229
|
-
store.definitions[definition.name] = {
|
|
230
|
-
name: definition.name,
|
|
231
|
-
type: definition.type
|
|
232
|
-
};
|
|
233
|
-
return {
|
|
234
|
-
handler,
|
|
235
|
-
dump,
|
|
236
|
-
definition
|
|
237
|
-
};
|
|
238
|
-
});
|
|
239
|
-
let functionsToDump = [];
|
|
240
|
-
if (concurrency <= 1) for (const task of tasksResolutions) {
|
|
241
|
-
const resolution = await task();
|
|
242
|
-
if (resolution) functionsToDump.push(resolution);
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
const limit = pLimit(concurrency);
|
|
246
|
-
functionsToDump = (await Promise.all(tasksResolutions.map((task) => limit(task)))).filter((x) => !!x);
|
|
247
|
-
}
|
|
248
|
-
const dumpTasks = [];
|
|
249
|
-
for (const { definition, handler, dump } of functionsToDump) {
|
|
250
|
-
const { inputs, records, fallback } = dump;
|
|
251
|
-
if (records) for (const record of records) {
|
|
252
|
-
const recordKey = getDumpRecordKey(definition.name, record.inputs);
|
|
253
|
-
store.records[recordKey] = record;
|
|
254
|
-
}
|
|
255
|
-
if ("fallback" in dump) {
|
|
256
|
-
const fallbackKey = getDumpFallbackKey(definition.name);
|
|
257
|
-
store.records[fallbackKey] = {
|
|
258
|
-
inputs: [],
|
|
259
|
-
output: fallback
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
if (inputs) for (const input of inputs) dumpTasks.push(async () => {
|
|
263
|
-
const recordKey = getDumpRecordKey(definition.name, input);
|
|
264
|
-
try {
|
|
265
|
-
const output = await Promise.resolve(handler(...input));
|
|
266
|
-
store.records[recordKey] = {
|
|
267
|
-
inputs: input,
|
|
268
|
-
output
|
|
269
|
-
};
|
|
270
|
-
} catch (error) {
|
|
271
|
-
store.records[recordKey] = {
|
|
272
|
-
inputs: input,
|
|
273
|
-
error: serializeDumpError(error)
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
if (concurrency <= 1) for (const task of dumpTasks) await task();
|
|
279
|
-
else {
|
|
280
|
-
const limit = pLimit(concurrency);
|
|
281
|
-
await Promise.all(dumpTasks.map((task) => limit(task)));
|
|
282
|
-
}
|
|
270
|
+
await runDumpTasks((await runDumpTasks(definitions.map((definition) => () => resolveDumpTask(definition, context, store)), concurrency)).filter((x) => !!x).flatMap((resolution) => collectDumpTasks(resolution, store)), concurrency);
|
|
283
271
|
return store;
|
|
284
272
|
}
|
|
285
273
|
/**
|
|
@@ -359,6 +347,54 @@ function makeQueryFallbackPath(name) {
|
|
|
359
347
|
async function resolveRecord(record) {
|
|
360
348
|
return typeof record === "function" ? await record() : record;
|
|
361
349
|
}
|
|
350
|
+
async function collectStaticDefinition(definition, context, serialization, files) {
|
|
351
|
+
const handler = await getRpcHandler(definition, context);
|
|
352
|
+
const path = makeStaticPath(definition.name);
|
|
353
|
+
files[path] = {
|
|
354
|
+
serialization,
|
|
355
|
+
fnName: definition.name,
|
|
356
|
+
data: { output: await Promise.resolve(handler()) }
|
|
357
|
+
};
|
|
358
|
+
return {
|
|
359
|
+
type: "static",
|
|
360
|
+
path,
|
|
361
|
+
serialization
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
async function collectQueryDefinition(definition, context, serialization, files) {
|
|
365
|
+
const store = await dumpFunctions([definition], context);
|
|
366
|
+
if (!(definition.name in store.definitions)) return void 0;
|
|
367
|
+
const queryEntry = {
|
|
368
|
+
type: "query",
|
|
369
|
+
records: {},
|
|
370
|
+
serialization
|
|
371
|
+
};
|
|
372
|
+
const prefix = `${definition.name}---`;
|
|
373
|
+
for (const [recordKey, recordOrGetter] of Object.entries(store.records)) {
|
|
374
|
+
if (!recordKey.startsWith(prefix)) continue;
|
|
375
|
+
const key = recordKey.slice(prefix.length);
|
|
376
|
+
const record = await resolveRecord(recordOrGetter);
|
|
377
|
+
if (key === "fallback") {
|
|
378
|
+
const path = makeQueryFallbackPath(definition.name);
|
|
379
|
+
files[path] = {
|
|
380
|
+
serialization,
|
|
381
|
+
fnName: definition.name,
|
|
382
|
+
data: record
|
|
383
|
+
};
|
|
384
|
+
queryEntry.fallback = path;
|
|
385
|
+
} else {
|
|
386
|
+
const path = makeQueryRecordPath(definition.name, key);
|
|
387
|
+
files[path] = {
|
|
388
|
+
serialization,
|
|
389
|
+
fnName: definition.name,
|
|
390
|
+
data: record
|
|
391
|
+
};
|
|
392
|
+
queryEntry.records[key] = path;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (!Object.keys(queryEntry.records).length && !queryEntry.fallback) return void 0;
|
|
396
|
+
return queryEntry;
|
|
397
|
+
}
|
|
362
398
|
async function collectStaticRpcDump(definitions, context) {
|
|
363
399
|
const manifest = {};
|
|
364
400
|
const files = {};
|
|
@@ -366,53 +402,12 @@ async function collectStaticRpcDump(definitions, context) {
|
|
|
366
402
|
const type = definition.type ?? "query";
|
|
367
403
|
const serialization = definition.jsonSerializable === true ? "json" : "structured-clone";
|
|
368
404
|
if (type === "static") {
|
|
369
|
-
|
|
370
|
-
const path = makeStaticPath(definition.name);
|
|
371
|
-
files[path] = {
|
|
372
|
-
serialization,
|
|
373
|
-
fnName: definition.name,
|
|
374
|
-
data: { output: await Promise.resolve(handler()) }
|
|
375
|
-
};
|
|
376
|
-
manifest[definition.name] = {
|
|
377
|
-
type: "static",
|
|
378
|
-
path,
|
|
379
|
-
serialization
|
|
380
|
-
};
|
|
405
|
+
manifest[definition.name] = await collectStaticDefinition(definition, context, serialization, files);
|
|
381
406
|
continue;
|
|
382
407
|
}
|
|
383
408
|
if (type !== "query") continue;
|
|
384
|
-
const
|
|
385
|
-
if (
|
|
386
|
-
const queryEntry = {
|
|
387
|
-
type: "query",
|
|
388
|
-
records: {},
|
|
389
|
-
serialization
|
|
390
|
-
};
|
|
391
|
-
const prefix = `${definition.name}---`;
|
|
392
|
-
for (const [recordKey, recordOrGetter] of Object.entries(store.records)) {
|
|
393
|
-
if (!recordKey.startsWith(prefix)) continue;
|
|
394
|
-
const key = recordKey.slice(prefix.length);
|
|
395
|
-
const record = await resolveRecord(recordOrGetter);
|
|
396
|
-
if (key === "fallback") {
|
|
397
|
-
const path = makeQueryFallbackPath(definition.name);
|
|
398
|
-
files[path] = {
|
|
399
|
-
serialization,
|
|
400
|
-
fnName: definition.name,
|
|
401
|
-
data: record
|
|
402
|
-
};
|
|
403
|
-
queryEntry.fallback = path;
|
|
404
|
-
} else {
|
|
405
|
-
const path = makeQueryRecordPath(definition.name, key);
|
|
406
|
-
files[path] = {
|
|
407
|
-
serialization,
|
|
408
|
-
fnName: definition.name,
|
|
409
|
-
data: record
|
|
410
|
-
};
|
|
411
|
-
queryEntry.records[key] = path;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
if (!Object.keys(queryEntry.records).length && !queryEntry.fallback) continue;
|
|
415
|
-
manifest[definition.name] = queryEntry;
|
|
409
|
+
const queryEntry = await collectQueryDefinition(definition, context, serialization, files);
|
|
410
|
+
if (queryEntry) manifest[definition.name] = queryEntry;
|
|
416
411
|
}
|
|
417
412
|
return {
|
|
418
413
|
manifest,
|
package/dist/types/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { g as RpcFunctionAgentOptions } from "../types-
|
|
2
|
-
import {
|
|
3
|
-
import { $ as
|
|
4
|
-
import { a as RemoteAssetsStore, i as RemoteAssetsProviderCustom, n as RemoteAssetsErrorMessage, o as StaticAssetsSource, r as RemoteAssetsProvider, t as RemoteAssets } from "../remote-assets-
|
|
5
|
-
import { i as DevframeDefineDiagnosticsOptions } from "../nostics-
|
|
6
|
-
export { AgentHandle, AgentManifest, AgentResource, AgentResourceContent, AgentResourceInput, AgentTool, AgentToolInput, AgentToolProvider, AgentToolProviderHandle, ConnectionMeta, ConnectionMetaSse, ConnectionMetaWebsocket, DevframeAgentHost, DevframeAgentHostEvents, DevframeCapabilities, DevframeCliOptions, DevframeConnectionConfigsRegistry, type DevframeDefineDiagnosticsOptions, DevframeDefinition, DevframeDeploymentKind, DevframeDiagnosticsHost, DevframeDiagnosticsLogger, DevframeDockDefaults, DevframeDuplicationStrategy, DevframeHost, DevframeNodeContext, DevframeNodeRpcSession, type DevframeNodeRpcSessionMeta, DevframeRpcClientFunctions, type DevframeRpcConnection, type DevframeRpcConnectionRequest, DevframeRpcOptions, DevframeRpcServerFunctions, DevframeRpcSharedStates, type DevframeRpcTransportKind, DevframeScopedNodeContext, DevframeScopedNodeRpc, DevframeScopedStreamingHost, DevframeServiceDefinition, DevframeServiceDescriptor, DevframeServiceId, DevframeServiceInput, DevframeServiceMeta, DevframeServiceOf, DevframeServiceScopeOf, DevframeServicesHost, DevframeServicesRegistry, DevframeServicesScopeRegistry, DevframeServicesState, DevframeSettings, DevframeSettingsRegistry, DevframeSettingsStore, DevframeSetupInfo, DevframeSnapshotRpcEntry, DevframeSnapshotRpcInputs, DevframeSseOptions, DevframeStorageScope, DevframeViewHost, DevframeWsOptions, EventEmitter, EventUnsubscribe, EventsMap, McpRouteOptions, RemoteAssets, RemoteAssetsErrorMessage, RemoteAssetsProvider, RemoteAssetsProviderCustom, RemoteAssetsStore, RpcBroadcastOptions, type RpcFunctionAgentOptions, RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost, RpcStreamingChannel, RpcStreamingChannelOptions, RpcStreamingHost, ScopedBroadcastOptions, ScopedClientFunctions, ScopedRpcFn, ScopedServerFunctions, ScopedSharedStates, SettingsForNamespace, StaticAssetsSource };
|
|
1
|
+
import { g as RpcFunctionAgentOptions } from "../types-Dq4i156u.mjs";
|
|
2
|
+
import { c as DevframeNodeRpcSessionMeta, d as DevframeRpcTransportKind, l as DevframeRpcConnection, u as DevframeRpcConnectionRequest } from "../ws-server-D2nv68Hg.mjs";
|
|
3
|
+
import { $ as DevframeServiceScopeOf, At as AgentManifest, B as DevframeSetupInfo, Bt as EventEmitter, Ct as DevframeDiagnosticsLogger, F as DevframeDefinition, Ft as AgentToolInput, G as McpAuthorization, H as DevframeSnapshotRpcInputs, Ht as EventsMap, I as DevframeDeploymentKind, It as AgentToolProvider, J as DevframeServiceDescriptor, K as McpRouteOptions, L as DevframeDockDefaults, Lt as AgentToolProviderHandle, Mt as AgentResourceContent, Nt as AgentResourceInput, P as DevframeCliOptions, Pt as AgentTool, Q as DevframeServiceOf, R as DevframeDuplicationStrategy, Rt as DevframeAgentHost, St as DevframeDiagnosticsHost, U as DevframeSseOptions, V as DevframeSnapshotRpcEntry, Vt as EventUnsubscribe, W as DevframeWsOptions, X as DevframeServiceInput, Y as DevframeServiceId, Z as DevframeServiceMeta, _t as DevframeRpcClientFunctions, a as DevframeConnectionConfigsRegistry, at as DevframeScopedNodeRpc, bt as DevframeHost, c as RpcBroadcastOptions, ct as DevframeSettingsRegistry, d as RpcSharedStateHost, dt as ScopedClientFunctions, et as DevframeServicesHost, f as RpcStreamingChannel, ft as ScopedRpcFn, gt as DevframeViewHost, ht as SettingsForNamespace, i as DevframeCapabilities, it as DevframeScopedNodeContext, jt as AgentResource, kt as AgentHandle, l as RpcFunctionsHost, lt as DevframeSettingsStore, m as RpcStreamingHost, mt as ScopedSharedStates, n as ConnectionMetaSse, nt as DevframeServicesScopeRegistry, o as DevframeNodeContext, ot as DevframeScopedStreamingHost, p as RpcStreamingChannelOptions, pt as ScopedServerFunctions, q as DevframeServiceDefinition, r as ConnectionMetaWebsocket, rt as DevframeServicesState, s as DevframeNodeRpcSession, st as DevframeSettings, t as ConnectionMeta, tt as DevframeServicesRegistry, u as RpcSharedStateGetOptions, ut as ScopedBroadcastOptions, vt as DevframeRpcServerFunctions, xt as DevframeStorageScope, yt as DevframeRpcSharedStates, z as DevframeRpcOptions, zt as DevframeAgentHostEvents } from "../context-4AIVRLYF.mjs";
|
|
4
|
+
import { a as RemoteAssetsStore, i as RemoteAssetsProviderCustom, n as RemoteAssetsErrorMessage, o as StaticAssetsSource, r as RemoteAssetsProvider, t as RemoteAssets } from "../remote-assets-eBvSKZMS.mjs";
|
|
5
|
+
import { i as DevframeDefineDiagnosticsOptions } from "../nostics-0sKe5HIj.mjs";
|
|
6
|
+
export { AgentHandle, AgentManifest, AgentResource, AgentResourceContent, AgentResourceInput, AgentTool, AgentToolInput, AgentToolProvider, AgentToolProviderHandle, ConnectionMeta, ConnectionMetaSse, ConnectionMetaWebsocket, DevframeAgentHost, DevframeAgentHostEvents, DevframeCapabilities, DevframeCliOptions, DevframeConnectionConfigsRegistry, type DevframeDefineDiagnosticsOptions, DevframeDefinition, DevframeDeploymentKind, DevframeDiagnosticsHost, DevframeDiagnosticsLogger, DevframeDockDefaults, DevframeDuplicationStrategy, DevframeHost, DevframeNodeContext, DevframeNodeRpcSession, type DevframeNodeRpcSessionMeta, DevframeRpcClientFunctions, type DevframeRpcConnection, type DevframeRpcConnectionRequest, DevframeRpcOptions, DevframeRpcServerFunctions, DevframeRpcSharedStates, type DevframeRpcTransportKind, DevframeScopedNodeContext, DevframeScopedNodeRpc, DevframeScopedStreamingHost, DevframeServiceDefinition, DevframeServiceDescriptor, DevframeServiceId, DevframeServiceInput, DevframeServiceMeta, DevframeServiceOf, DevframeServiceScopeOf, DevframeServicesHost, DevframeServicesRegistry, DevframeServicesScopeRegistry, DevframeServicesState, DevframeSettings, DevframeSettingsRegistry, DevframeSettingsStore, DevframeSetupInfo, DevframeSnapshotRpcEntry, DevframeSnapshotRpcInputs, DevframeSseOptions, DevframeStorageScope, DevframeViewHost, DevframeWsOptions, EventEmitter, EventUnsubscribe, EventsMap, McpAuthorization, McpRouteOptions, RemoteAssets, RemoteAssetsErrorMessage, RemoteAssetsProvider, RemoteAssetsProviderCustom, RemoteAssetsStore, RpcBroadcastOptions, type RpcFunctionAgentOptions, RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost, RpcStreamingChannel, RpcStreamingChannelOptions, RpcStreamingHost, ScopedBroadcastOptions, ScopedClientFunctions, ScopedRpcFn, ScopedServerFunctions, ScopedSharedStates, SettingsForNamespace, StaticAssetsSource };
|
|
@@ -22,12 +22,12 @@ type RpcFunctionType = 'static' | 'action' | 'event' | 'query';
|
|
|
22
22
|
/**
|
|
23
23
|
* Agent exposure settings for an RPC function. When this field is set,
|
|
24
24
|
* the function is surfaced to agents (e.g. via the devframe MCP adapter)
|
|
25
|
-
* as a callable tool. Functions without an `agent` field are not exposed
|
|
25
|
+
* as a callable tool. Functions without an `agent` field are not exposed;
|
|
26
26
|
* default-deny.
|
|
27
27
|
*/
|
|
28
28
|
interface RpcFunctionAgentOptions {
|
|
29
29
|
/**
|
|
30
|
-
* Human-readable description shown to the agent. Required
|
|
30
|
+
* Human-readable description shown to the agent. Required, since agents
|
|
31
31
|
* rely on this to decide when to invoke the tool. Keep it to ~1–3
|
|
32
32
|
* sentences explaining what the tool does and when to use it.
|
|
33
33
|
*/
|
|
@@ -40,9 +40,9 @@ interface RpcFunctionAgentOptions {
|
|
|
40
40
|
/**
|
|
41
41
|
* Safety classification. Drives MCP annotations (`readOnlyHint`,
|
|
42
42
|
* `destructiveHint`) downstream.
|
|
43
|
-
* - `'read'
|
|
44
|
-
* - `'action'
|
|
45
|
-
* - `'destructive'
|
|
43
|
+
* - `'read'`: no side effects; safe to call freely.
|
|
44
|
+
* - `'action'`: mutates state but not destructive.
|
|
45
|
+
* - `'destructive'`: may perform destructive updates.
|
|
46
46
|
*
|
|
47
47
|
* When omitted it is inferred from the function `type`:
|
|
48
48
|
* - `'static'` / `'query'` → `'read'`
|
|
@@ -158,17 +158,17 @@ interface RpcFunctionDefinitionBase {
|
|
|
158
158
|
/** Function type (static, action, event, or query) */
|
|
159
159
|
type?: RpcFunctionType;
|
|
160
160
|
/**
|
|
161
|
-
* Declares whether this function's args/return are JSON-serializable
|
|
162
|
-
*
|
|
161
|
+
* Declares whether this function's args/return are JSON-serializable,
|
|
162
|
+
* i.e. no `Map`, `Set`, `Date`, `BigInt`, class instances, circular
|
|
163
163
|
* references, `undefined` leaves, `Symbol`, or `Function` values.
|
|
164
164
|
*
|
|
165
|
-
* - `true
|
|
165
|
+
* - `true`: args and return are encoded with strict `JSON.stringify`
|
|
166
166
|
* on the wire and on disk. Misshapen values throw `DF0019` at the
|
|
167
167
|
* sender, surfacing the bug *during the offending call* rather than
|
|
168
168
|
* silently coercing to `{}` later. Required for `agent` exposure.
|
|
169
|
-
* - `false` (default)
|
|
169
|
+
* - `false` (default): payloads use `structured-clone-es`, which
|
|
170
170
|
* round-trips Maps/Sets/cycles. Functions in this mode cannot be
|
|
171
|
-
* exposed via the `agent` field
|
|
171
|
+
* exposed via the `agent` field; registration throws `DF0018`.
|
|
172
172
|
*/
|
|
173
173
|
jsonSerializable?: boolean;
|
|
174
174
|
}
|
|
@@ -221,9 +221,9 @@ type RpcFunctionDefinition<NAME extends string, TYPE extends RpcFunctionType = '
|
|
|
221
221
|
* Declares whether this function's args/return are JSON-serializable
|
|
222
222
|
* (no Map/Set/Date/BigInt/cycles/class instances/undefined/Symbol/Function).
|
|
223
223
|
*
|
|
224
|
-
* - `true
|
|
224
|
+
* - `true`: wire and dump use strict `JSON.stringify`; misshapen
|
|
225
225
|
* values throw `DF0019` at the call site. Required for `agent`.
|
|
226
|
-
* - `false` (default)
|
|
226
|
+
* - `false` (default): `structured-clone-es` round-trips fancy
|
|
227
227
|
* types. Cannot be `agent`-exposed (registration throws `DF0018`).
|
|
228
228
|
*/
|
|
229
229
|
jsonSerializable?: boolean;
|
|
@@ -244,7 +244,7 @@ type RpcFunctionDefinition<NAME extends string, TYPE extends RpcFunctionType = '
|
|
|
244
244
|
* handler once with no arguments and stores the result as both a
|
|
245
245
|
* no-args record and the fallback so any call variant resolves
|
|
246
246
|
* to the same snapshot. Only valid on `query` (or untyped)
|
|
247
|
-
* functions
|
|
247
|
+
* functions; `static` already has equivalent default behavior.
|
|
248
248
|
*/
|
|
249
249
|
snapshot?: boolean;
|
|
250
250
|
/** Per-context setup-result cache, populated by `getRpcResolvedSetupResult`. @internal */
|
|
@@ -266,9 +266,9 @@ type RpcFunctionDefinition<NAME extends string, TYPE extends RpcFunctionType = '
|
|
|
266
266
|
* Declares whether this function's args/return are JSON-serializable
|
|
267
267
|
* (no Map/Set/Date/BigInt/cycles/class instances/undefined/Symbol/Function).
|
|
268
268
|
*
|
|
269
|
-
* - `true
|
|
269
|
+
* - `true`: wire and dump use strict `JSON.stringify`; misshapen
|
|
270
270
|
* values throw `DF0019` at the call site. Required for `agent`.
|
|
271
|
-
* - `false` (default)
|
|
271
|
+
* - `false` (default): `structured-clone-es` round-trips fancy
|
|
272
272
|
* types. Cannot be `agent`-exposed (registration throws `DF0018`).
|
|
273
273
|
*/
|
|
274
274
|
jsonSerializable?: boolean;
|
|
@@ -281,7 +281,7 @@ type RpcFunctionDefinition<NAME extends string, TYPE extends RpcFunctionType = '
|
|
|
281
281
|
setup?: (context: CONTEXT) => Thenable<RpcFunctionSetupResult<InferArgsType<AS>, Thenable<InferReturnType<RS>>>>;
|
|
282
282
|
/**
|
|
283
283
|
* Function implementation (required if setup doesn't provide one).
|
|
284
|
-
* The declared `returns` schema describes the *resolved* value
|
|
284
|
+
* The declared `returns` schema describes the *resolved* value:
|
|
285
285
|
* async handlers return a promise of it (the runtime always awaits).
|
|
286
286
|
*/
|
|
287
287
|
handler?: (...args: InferArgsType<AS>) => Thenable<InferReturnType<RS>>;
|
|
@@ -293,7 +293,7 @@ type RpcFunctionDefinition<NAME extends string, TYPE extends RpcFunctionType = '
|
|
|
293
293
|
* handler once with no arguments and stores the result as both a
|
|
294
294
|
* no-args record and the fallback so any call variant resolves
|
|
295
295
|
* to the same snapshot. Only valid on `query` (or untyped)
|
|
296
|
-
* functions
|
|
296
|
+
* functions; `static` already has equivalent default behavior.
|
|
297
297
|
*/
|
|
298
298
|
snapshot?: boolean;
|
|
299
299
|
/** Per-context setup-result cache, populated by `getRpcResolvedSetupResult`. @internal */
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Derive the wire-safe agent tool name for an internal tool id.
|
|
4
4
|
*
|
|
5
|
-
* Devframe tool ids are colon-namespaced
|
|
5
|
+
* Devframe tool ids are colon-namespaced: `devframe:<area>:<fn>` for
|
|
6
6
|
* built-ins, `devframes:plugin:<slug>:<fn>` for plugin RPCs, and hub
|
|
7
7
|
* command ids for command-derived tools. MCP clients constrain tool names
|
|
8
8
|
* to `^[a-zA-Z0-9_-]{1,128}$`, so the agent/MCP boundary derives the wire
|
|
9
9
|
* name automatically: every run of characters outside `[a-zA-Z0-9_-]`
|
|
10
10
|
* becomes a single `_`, truncated to 128 characters. Internal ids never
|
|
11
|
-
* change
|
|
11
|
+
* change; resolution back to the id happens at the boundary.
|
|
12
12
|
*
|
|
13
13
|
* ```
|
|
14
14
|
* devframe:state:read → devframe_state_read
|
|
@@ -7,13 +7,13 @@ const MAX_TOOL_NAME_LENGTH = 128;
|
|
|
7
7
|
/**
|
|
8
8
|
* Derive the wire-safe agent tool name for an internal tool id.
|
|
9
9
|
*
|
|
10
|
-
* Devframe tool ids are colon-namespaced
|
|
10
|
+
* Devframe tool ids are colon-namespaced: `devframe:<area>:<fn>` for
|
|
11
11
|
* built-ins, `devframes:plugin:<slug>:<fn>` for plugin RPCs, and hub
|
|
12
12
|
* command ids for command-derived tools. MCP clients constrain tool names
|
|
13
13
|
* to `^[a-zA-Z0-9_-]{1,128}$`, so the agent/MCP boundary derives the wire
|
|
14
14
|
* name automatically: every run of characters outside `[a-zA-Z0-9_-]`
|
|
15
15
|
* becomes a single `_`, truncated to 128 characters. Internal ids never
|
|
16
|
-
* change
|
|
16
|
+
* change; resolution back to the id happens at the boundary.
|
|
17
17
|
*
|
|
18
18
|
* ```
|
|
19
19
|
* devframe:state:read → devframe_state_read
|
package/dist/utils/colors.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//#region src/utils/crypto-token.d.ts
|
|
2
2
|
/**
|
|
3
3
|
* Generate a high-entropy, URL-safe (hex) random token suitable for use as a
|
|
4
|
-
* bearer credential
|
|
4
|
+
* bearer credential, e.g. the persistent client auth token or an ephemeral
|
|
5
5
|
* remote-dock token. Defaults to 16 bytes (128 bits) of entropy.
|
|
6
6
|
*/
|
|
7
7
|
declare function randomToken(byteLength?: number): string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const HEX = "0123456789abcdef";
|
|
3
3
|
/**
|
|
4
4
|
* Generate a high-entropy, URL-safe (hex) random token suitable for use as a
|
|
5
|
-
* bearer credential
|
|
5
|
+
* bearer credential, e.g. the persistent client auth token or an ephemeral
|
|
6
6
|
* remote-dock token. Defaults to 16 bytes (128 bits) of entropy.
|
|
7
7
|
*/
|
|
8
8
|
function randomToken(byteLength = 16) {
|
package/dist/utils/events.d.mts
CHANGED
package/dist/utils/nostics.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as Diagnostic, c as DiagnosticHandle, d as Diagnostics, f as ansiFormatter, g as formatDiagnostic, h as defineProdDiagnostics, i as DevframeDefineDiagnosticsOptions, l as DiagnosticInit, m as defineDiagnostics, n as ConsoleMethod, o as DiagnosticCallParams, p as createConsoleReporter, r as ConsoleReporterOptions, s as DiagnosticDefinition, t as AnyDiagnosticReporter, u as DiagnosticReporter } from "../nostics-
|
|
1
|
+
import { a as Diagnostic, c as DiagnosticHandle, d as Diagnostics, f as ansiFormatter, g as formatDiagnostic, h as defineProdDiagnostics, i as DevframeDefineDiagnosticsOptions, l as DiagnosticInit, m as defineDiagnostics, n as ConsoleMethod, o as DiagnosticCallParams, p as createConsoleReporter, r as ConsoleReporterOptions, s as DiagnosticDefinition, t as AnyDiagnosticReporter, u as DiagnosticReporter } from "../nostics-0sKe5HIj.mjs";
|
|
2
2
|
export { type AnyDiagnosticReporter, type ConsoleMethod, type ConsoleReporterOptions, DevframeDefineDiagnosticsOptions, type Diagnostic, type DiagnosticCallParams, type DiagnosticDefinition, type DiagnosticHandle, type DiagnosticInit, type DiagnosticReporter, type Diagnostics, ansiFormatter, createConsoleReporter, defineDiagnostics, defineProdDiagnostics, formatDiagnostic };
|
package/dist/utils/nostics.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as defineProdDiagnostics, i as defineDiagnostics, n as ansiFormatter, o as formatDiagnostic, r as createConsoleReporter, t as Diagnostic } from "../nostics-
|
|
1
|
+
import { a as defineProdDiagnostics, i as defineDiagnostics, n as ansiFormatter, o as formatDiagnostic, r as createConsoleReporter, t as Diagnostic } from "../nostics-D0PvLZsn.mjs";
|
|
2
2
|
export { Diagnostic, ansiFormatter, createConsoleReporter, defineDiagnostics, defineProdDiagnostics, formatDiagnostic };
|
package/dist/utils/open.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { spawn } from "node:child_process";
|
|
|
4
4
|
//#region src/utils/open.ts
|
|
5
5
|
/**
|
|
6
6
|
* Launches `command` detached from the current process and resolves once
|
|
7
|
-
* the OS has accepted the spawn (not once the launched app exits)
|
|
7
|
+
* the OS has accepted the spawn (not once the launched app exits), the
|
|
8
8
|
* same "fire and forget" behavior `open`'s default (`wait: false`) gave us.
|
|
9
9
|
*/
|
|
10
10
|
function spawnDetached(command, args) {
|