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.
Files changed (116) hide show
  1. package/dist/{_shared-BM3PdYli.mjs → _shared-C08SdQRl.mjs} +15 -4
  2. package/dist/{_shared-BJ6AmwTu.d.mts → _shared-CK3czkH4.d.mts} +25 -2
  3. package/dist/adapters/build.d.mts +6 -6
  4. package/dist/adapters/build.mjs +32 -22
  5. package/dist/adapters/cac.d.mts +16 -1
  6. package/dist/adapters/cac.mjs +8 -7
  7. package/dist/adapters/dev.d.mts +13 -13
  8. package/dist/adapters/dev.mjs +2 -2
  9. package/dist/adapters/embedded.d.mts +1 -1
  10. package/dist/adapters/initiate.d.mts +28 -26
  11. package/dist/adapters/initiate.mjs +1 -1
  12. package/dist/adapters/mcp.d.mts +28 -14
  13. package/dist/adapters/mcp.mjs +75 -39
  14. package/dist/{agent-tool-name-EgfoFO8C.mjs → agent-tool-name-DGzeuWcO.mjs} +2 -2
  15. package/dist/cli/main.d.mts +1 -1
  16. package/dist/cli/main.mjs +41 -17
  17. package/dist/client/index.d.mts +36 -36
  18. package/dist/client/index.mjs +83 -51
  19. package/dist/client-assets-DNdhagGm.mjs +16 -0
  20. package/dist/constants.d.mts +8 -7
  21. package/dist/constants.mjs +7 -6
  22. package/dist/{context-BhBzOXVa.d.mts → context-4AIVRLYF.d.mts} +173 -122
  23. package/dist/{context-omlma_1n.mjs → context-CwPUinjn.mjs} +126 -88
  24. package/dist/{context-KUqAfawQ.mjs → context-DIUvJW4D.mjs} +3 -3
  25. package/dist/{context-HOnG-WvG.d.mts → context-rgBSPFHS.d.mts} +5 -5
  26. package/dist/{crypto-token-XCqTSMg9.mjs → crypto-token-TVbGGFuj.mjs} +1 -1
  27. package/dist/{dev-Czit5IP4.mjs → dev-Eqq5PX0k.mjs} +37 -18
  28. package/dist/{diagnostics-BXWW3VK-.mjs → diagnostics-BMfN8mb1.mjs} +30 -17
  29. package/dist/{diagnostics-CD8nlgll.mjs → diagnostics-D0EVm5M6.mjs} +2 -2
  30. package/dist/{events-4daw0uK9.mjs → events-BV4Dj59a.mjs} +2 -2
  31. package/dist/{host-h3-fRbF9yor.mjs → host-h3-BJ4siyz7.mjs} +1 -1
  32. package/dist/in-page-channel/index.d.mts +59 -22
  33. package/dist/in-page-channel/index.mjs +71 -56
  34. package/dist/{index-BzyopqxV.d.mts → index-pIVt92jP.d.mts} +9 -9
  35. package/dist/{index-DcKxIMoI.d.mts → index-pKl67H6w.d.mts} +4 -4
  36. package/dist/index.d.mts +11 -13
  37. package/dist/index.mjs +6 -7
  38. package/dist/{instance-registry-BjlMQbFB.mjs → instance-registry-C7-41RSp.mjs} +8 -8
  39. package/dist/{instance-shell-Bh4l9Vz_.d.mts → instance-shell-7Z52PE4_.d.mts} +18 -18
  40. package/dist/{instance-shell-CpVW4zG0.mjs → instance-shell-cdVETpfz.mjs} +227 -58
  41. package/dist/internal/index.d.mts +51 -21
  42. package/dist/internal/index.mjs +10 -9
  43. package/dist/node/auth.d.mts +2 -2
  44. package/dist/node/auth.mjs +2 -2
  45. package/dist/node/hub-internals.d.mts +2 -2
  46. package/dist/node/hub-internals.mjs +2 -2
  47. package/dist/node/index.d.mts +5 -5
  48. package/dist/node/index.mjs +2 -2
  49. package/dist/{nostics-SPGDgHEP.d.mts → nostics-0sKe5HIj.d.mts} +2 -2
  50. package/dist/{nostics-CzECRXpE.mjs → nostics-D0PvLZsn.mjs} +1 -1
  51. package/dist/origin-DGDH8BI9.d.mts +45 -0
  52. package/dist/origin-DZit9g29.mjs +80 -0
  53. package/dist/recipes/common-rpc-functions.d.mts +5 -5
  54. package/dist/recipes/common-rpc-functions.mjs +3 -3
  55. package/dist/recipes/interactive-auth.d.mts +6 -6
  56. package/dist/recipes/interactive-auth.mjs +6 -6
  57. package/dist/{remote-assets-DezQmPQU.mjs → remote-assets-BIFWOlBW.mjs} +26 -6
  58. package/dist/{remote-assets-B13_vRkJ.d.mts → remote-assets-eBvSKZMS.d.mts} +7 -7
  59. package/dist/{revoke-COLW0cOi.mjs → revoke-cqztiCX4.mjs} +1 -1
  60. package/dist/rpc/dump.d.mts +2 -11
  61. package/dist/rpc/dump.mjs +1 -1
  62. package/dist/rpc/index.d.mts +2 -2
  63. package/dist/rpc/index.mjs +3 -3
  64. package/dist/rpc/transports/sse-client.d.mts +1 -1
  65. package/dist/rpc/transports/sse-client.mjs +30 -14
  66. package/dist/rpc/transports/sse-server.d.mts +4 -4
  67. package/dist/rpc/transports/sse-server.mjs +7 -7
  68. package/dist/rpc/transports/ws-bun.d.mts +5 -5
  69. package/dist/rpc/transports/ws-bun.mjs +8 -2
  70. package/dist/rpc/transports/ws-client.d.mts +1 -1
  71. package/dist/rpc/transports/ws-client.mjs +2 -2
  72. package/dist/rpc/transports/ws-deno.d.mts +4 -4
  73. package/dist/rpc/transports/ws-deno.mjs +8 -2
  74. package/dist/rpc/transports/ws-server.d.mts +2 -1
  75. package/dist/rpc/transports/ws-server.mjs +232 -1
  76. package/dist/{rpc-core-BHUsDl7s.d.mts → rpc-core-Ceu6AUz8.d.mts} +4 -4
  77. package/dist/{rpc-core-DlHd276T.mjs → rpc-core-DVQ7xi89.mjs} +14 -2
  78. package/dist/{serialization-BGzEwAdr.mjs → serialization-DTZnPQ1-.mjs} +20 -18
  79. package/dist/{services-install-CqqQVls5.mjs → services-install-P_DV7VYL.mjs} +32 -21
  80. package/dist/session-DPfj6zQG.mjs +16 -0
  81. package/dist/{shared-state-DoXutg_U.mjs → shared-state-CaxB1q0h.mjs} +4 -3
  82. package/dist/{simple-schema-DQPZrAaZ.mjs → simple-schema-Bi40l-P6.mjs} +2 -2
  83. package/dist/{sse-client-DwX021ST.d.mts → sse-client-BQ4jS3eO.d.mts} +4 -4
  84. package/dist/{state-CK9LjrnT.mjs → state-CeQQWzM-.mjs} +4 -4
  85. package/dist/{static-DV_qUSRS.mjs → static-DZ8P2Kn7.mjs} +130 -135
  86. package/dist/{storage-BXNVhKyR.mjs → storage-Dccf_IyD.mjs} +1 -1
  87. package/dist/types/index.d.mts +6 -6
  88. package/dist/{types-CMdPYhOx.d.mts → types-Dq4i156u.d.mts} +17 -17
  89. package/dist/utils/agent-tool-name.d.mts +2 -2
  90. package/dist/utils/agent-tool-name.mjs +2 -2
  91. package/dist/utils/colors.d.mts +1 -1
  92. package/dist/utils/crypto-token.d.mts +1 -1
  93. package/dist/utils/crypto-token.mjs +1 -1
  94. package/dist/utils/events.d.mts +1 -1
  95. package/dist/utils/nostics.d.mts +1 -1
  96. package/dist/utils/nostics.mjs +1 -1
  97. package/dist/utils/open.mjs +1 -1
  98. package/dist/utils/origin.d.mts +2 -0
  99. package/dist/utils/origin.mjs +80 -0
  100. package/dist/utils/remote-assets.d.mts +2 -2
  101. package/dist/utils/remote-assets.mjs +1 -1
  102. package/dist/utils/serve-static.d.mts +4 -4
  103. package/dist/utils/serve-static.mjs +56 -19
  104. package/dist/utils/shared-state.d.mts +1 -1
  105. package/dist/utils/shared-state.mjs +1 -1
  106. package/dist/utils/simple-schema.d.mts +5 -5
  107. package/dist/utils/simple-schema.mjs +2 -2
  108. package/dist/utils/streaming-channel.d.mts +1 -1
  109. package/dist/utils/streaming-channel.mjs +2 -2
  110. package/dist/utils/when.d.mts +5 -5
  111. package/dist/{validation-YrZH6atx.mjs → validation-BOy8IoFZ.mjs} +2 -2
  112. package/dist/{wire-codec-0K-o5MYW.mjs → wire-codec-dcCeXcSo.mjs} +3 -3
  113. package/dist/{ws-client-7_lZi-B9.d.mts → ws-client-Xpxt0oPA.d.mts} +3 -3
  114. package/dist/{ws-server-Di2oqr4q.d.mts → ws-server-D2nv68Hg.d.mts} +13 -22
  115. package/package.json +6 -5
  116. package/dist/ws-server-BdSLrhxE.mjs +0 -267
@@ -1,4 +1,4 @@
1
- import { v as RpcFunctionDefinitionAny } from "./types-CMdPYhOx.mjs";
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 — same contract
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) — the WebSocket-free counterpart
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 — there is no reconnect, matching
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-XCqTSMg9.mjs";
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 — the client now sends the raw string and parsing
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 — the browser client reads it locally (see
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-YrZH6atx.mjs";
2
- import { t as diagnostics } from "./diagnostics-CD8nlgll.mjs";
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.keys(error)) {
159
+ for (const [key, value] of Object.entries(error)) {
160
160
  if (key === "name" || key === "message" || key === "cause") continue;
161
- out[key] = error[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 cause = stored.cause instanceof Error ? stored.cause : isPlainErrorShape(stored.cause) ? reviveDumpError(stored.cause) : stored.cause;
172
- const error = cause !== void 0 ? new Error(stored.message, { cause }) : new Error(stored.message);
173
- error.name = stored.name;
174
- for (const key of Object.keys(stored)) {
175
- if (key === "name" || key === "message" || key === "cause") continue;
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
- * Collects pre-computed dumps by executing functions with their defined input combinations.
196
- * Static functions without dump config automatically get `{ inputs: [[]] }`.
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
- const tasksResolutions = definitions.map((definition) => async () => {
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
- const handler = await getRpcHandler(definition, context);
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 store = await dumpFunctions([definition], context);
385
- if (!(definition.name in store.definitions)) continue;
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,
@@ -1,4 +1,4 @@
1
- import { t as diagnostics } from "./diagnostics-BXWW3VK-.mjs";
1
+ import { t as diagnostics } from "./diagnostics-BMfN8mb1.mjs";
2
2
  import { createSharedState } from "devframe/utils/shared-state";
3
3
  import process from "node:process";
4
4
  import { dirname } from "pathe";
@@ -1,6 +1,6 @@
1
- import { g as RpcFunctionAgentOptions } from "../types-CMdPYhOx.mjs";
2
- import { d as DevframeRpcConnection, f as DevframeRpcConnectionRequest, p as DevframeRpcTransportKind, u as DevframeNodeRpcSessionMeta } from "../ws-server-Di2oqr4q.mjs";
3
- import { $ as DevframeServicesHost, At as AgentResource, B as DevframeSetupInfo, Bt as EventUnsubscribe, F as DevframeDefinition, Ft as AgentToolProvider, G as McpRouteOptions, H as DevframeSnapshotRpcInputs, I as DevframeDeploymentKind, It as AgentToolProviderHandle, J as DevframeServiceId, K as DevframeServiceDefinition, L as DevframeDockDefaults, Lt as DevframeAgentHost, Mt as AgentResourceInput, Nt as AgentTool, Ot as AgentHandle, P as DevframeCliOptions, Pt as AgentToolInput, Q as DevframeServiceScopeOf, R as DevframeDuplicationStrategy, Rt as DevframeAgentHostEvents, St as DevframeDiagnosticsLogger, U as DevframeSseOptions, V as DevframeSnapshotRpcEntry, Vt as EventsMap, W as DevframeWsOptions, X as DevframeServiceMeta, Y as DevframeServiceInput, Z as DevframeServiceOf, _t as DevframeRpcServerFunctions, a as DevframeConnectionConfigsRegistry, at as DevframeScopedStreamingHost, bt as DevframeStorageScope, c as RpcBroadcastOptions, ct as DevframeSettingsStore, d as RpcSharedStateHost, dt as ScopedRpcFn, et as DevframeServicesRegistry, f as RpcStreamingChannel, ft as ScopedServerFunctions, gt as DevframeRpcClientFunctions, ht as DevframeViewHost, i as DevframeCapabilities, it as DevframeScopedNodeRpc, jt as AgentResourceContent, kt as AgentManifest, l as RpcFunctionsHost, lt as ScopedBroadcastOptions, m as RpcStreamingHost, mt as SettingsForNamespace, n as ConnectionMetaSse, nt as DevframeServicesState, o as DevframeNodeContext, ot as DevframeSettings, p as RpcStreamingChannelOptions, pt as ScopedSharedStates, q as DevframeServiceDescriptor, r as ConnectionMetaWebsocket, rt as DevframeScopedNodeContext, s as DevframeNodeRpcSession, st as DevframeSettingsRegistry, t as ConnectionMeta, tt as DevframeServicesScopeRegistry, u as RpcSharedStateGetOptions, ut as ScopedClientFunctions, vt as DevframeRpcSharedStates, xt as DevframeDiagnosticsHost, yt as DevframeHost, z as DevframeRpcOptions, zt as EventEmitter } from "../context-BhBzOXVa.mjs";
4
- import { a as RemoteAssetsStore, i as RemoteAssetsProviderCustom, n as RemoteAssetsErrorMessage, o as StaticAssetsSource, r as RemoteAssetsProvider, t as RemoteAssets } from "../remote-assets-B13_vRkJ.mjs";
5
- import { i as DevframeDefineDiagnosticsOptions } from "../nostics-SPGDgHEP.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, 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 — agents
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'` — no side effects; safe to call freely.
44
- * - `'action'` — mutates state but not destructive.
45
- * - `'destructive'` — may perform destructive updates.
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
- * — i.e. no `Map`, `Set`, `Date`, `BigInt`, class instances, circular
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` — args and return are encoded with strict `JSON.stringify`
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) — payloads use `structured-clone-es`, which
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 — registration throws `DF0018`.
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` — wire and dump use strict `JSON.stringify`; misshapen
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) — `structured-clone-es` round-trips fancy
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 — `static` already has equivalent default behavior.
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` — wire and dump use strict `JSON.stringify`; misshapen
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) — `structured-clone-es` round-trips fancy
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 — `static` already has equivalent default behavior.
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 — `devframe:<area>:<fn>` for
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 — resolution back to the id happens at the boundary.
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 — `devframe:<area>:<fn>` for
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 — resolution back to the id happens at the boundary.
16
+ * change; resolution back to the id happens at the boundary.
17
17
  *
18
18
  * ```
19
19
  * devframe:state:read → devframe_state_read
@@ -1,6 +1,6 @@
1
1
  //#region src/utils/colors.d.ts
2
2
  /**
3
- * A colorizer — callable as a function (`colors.red('foo')`) or as a
3
+ * A colorizer, callable as a function (`colors.red('foo')`) or as a
4
4
  * tagged template (``colors.red`foo ${bar}` ``).
5
5
  */
6
6
  interface ColorFn {
@@ -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 — e.g. the persistent client auth token or an ephemeral
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 — e.g. the persistent client auth token or an ephemeral
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) {
@@ -1,4 +1,4 @@
1
- import { Vt as EventsMap, zt as EventEmitter } from "../context-BhBzOXVa.mjs";
1
+ import { Bt as EventEmitter, Ht as EventsMap } from "../context-4AIVRLYF.mjs";
2
2
  //#region src/utils/events.d.ts
3
3
  /**
4
4
  * Create event emitter.
@@ -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-SPGDgHEP.mjs";
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 };
@@ -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-CzECRXpE.mjs";
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 };
@@ -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) — the
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) {
@@ -0,0 +1,2 @@
1
+ import { n as isLoopbackHostname, r as validateOriginCandidate, t as isAllowedOrigin } from "../origin-DGDH8BI9.mjs";
2
+ export { isAllowedOrigin, isLoopbackHostname, validateOriginCandidate };