devframe 1.2.6 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/{_shared-B6K2DKhb.mjs → _shared-C06DH07o.mjs} +3 -1
  2. package/dist/{_shared-BvDsc83f.d.mts → _shared-DbO-OtUC.d.mts} +6 -2
  3. package/dist/adapters/build.d.mts +1 -1
  4. package/dist/adapters/build.mjs +3 -3
  5. package/dist/adapters/cac.d.mts +1 -1
  6. package/dist/adapters/cac.mjs +4 -7
  7. package/dist/adapters/dev.d.mts +10 -4
  8. package/dist/adapters/dev.mjs +2 -2
  9. package/dist/adapters/embedded.d.mts +1 -1
  10. package/dist/adapters/initiate.d.mts +2 -2
  11. package/dist/adapters/initiate.mjs +1 -1
  12. package/dist/adapters/mcp.d.mts +3 -3
  13. package/dist/{agentic-JXlb0uiD.d.mts → agentic-D6HePbWg.d.mts} +1 -1
  14. package/dist/{browser-agent-rpc-BXhoSh1z.mjs → browser-agent-rpc-KH4HHvHf.mjs} +24 -2
  15. package/dist/cli/main.mjs +1 -1
  16. package/dist/client/index.d.mts +1 -1
  17. package/dist/client/index.mjs +2 -2
  18. package/dist/{host-agent-DB1yECaG.mjs → client-agent-DuLhUF6d.mjs} +148 -2
  19. package/dist/{context-B-2gsJ6Z.mjs → context-BY72d2gV.mjs} +1 -1
  20. package/dist/{context-CeD8-IZA.mjs → context-CmSDJAEI.mjs} +6 -46
  21. package/dist/{context-dOWXVHc6.d.mts → context-Dko5QFWF.d.mts} +209 -117
  22. package/dist/{context-O8NJzl93.d.mts → context-eIUOSrKu.d.mts} +1 -1
  23. package/dist/{dev-pIWWAGYd.mjs → dev-C-wQTIrV.mjs} +42 -23
  24. package/dist/{diagnostics-Dngy7cNp.mjs → diagnostics-BJjvKfVK.mjs} +8 -0
  25. package/dist/in-page-channel/index.d.mts +1 -1
  26. package/dist/in-page-channel/index.mjs +1 -1
  27. package/dist/{index-DVGcpYm7.d.mts → index-BMj-o_sP.d.mts} +2 -2
  28. package/dist/index.d.mts +3 -3
  29. package/dist/{instance-registry-B--XFmLS.mjs → instance-registry-vlz81P9X.mjs} +1 -1
  30. package/dist/{instance-shell-DyVmJA6B.mjs → instance-shell-CBgy8YzK.mjs} +56 -15
  31. package/dist/{instance-shell-DrvOWxqh.d.mts → instance-shell-yfm1AYk8.d.mts} +2 -2
  32. package/dist/{interactive-auth-CCZdQDy_.mjs → interactive-auth-BsqLFXw8.mjs} +1 -1
  33. package/dist/internal/index.d.mts +33 -7
  34. package/dist/internal/index.mjs +7 -7
  35. package/dist/{mcp-content-9_Pdtziq.d.mts → mcp-content-wcQxvrrW.d.mts} +1 -1
  36. package/dist/node/auth.d.mts +2 -2
  37. package/dist/node/hub-internals.d.mts +2 -2
  38. package/dist/node/hub-internals.mjs +2 -2
  39. package/dist/node/index.d.mts +1 -1
  40. package/dist/node/index.mjs +2 -2
  41. package/dist/recipes/interactive-auth.d.mts +2 -2
  42. package/dist/recipes/interactive-auth.mjs +1 -1
  43. package/dist/{remote-assets-DoZ1AMpq.mjs → remote-assets-DOva7l3s.mjs} +1 -1
  44. package/dist/rpc/transports/ws-bun.d.mts +1 -1
  45. package/dist/rpc/transports/ws-deno.d.mts +1 -1
  46. package/dist/{rpc-core-D6NWQW-B.d.mts → rpc-core-BQ1mesqZ.d.mts} +2 -2
  47. package/dist/{rpc-core-Dl50hXG3.mjs → rpc-core-oXIq2hjO.mjs} +1 -1
  48. package/dist/{shared-state-Cow3u-_m.mjs → shared-state-Cc-Jrhma.mjs} +5 -2
  49. package/dist/{storage-BQy9865B.mjs → storage-BzAr-S6I.mjs} +1 -1
  50. package/dist/types/index.d.mts +2 -2
  51. package/dist/utils/events.d.mts +1 -1
  52. package/dist/utils/remote-assets.mjs +1 -1
  53. package/dist/utils/shared-state.d.mts +1 -1
  54. package/dist/utils/shared-state.mjs +1 -1
  55. package/dist/utils/streaming-channel.d.mts +1 -1
  56. package/package.json +8 -8
@@ -373,6 +373,187 @@ interface DevframeAuthHandler {
373
373
  buildOpenUrl?: (url: string) => string;
374
374
  }
375
375
  //#endregion
376
+ //#region src/types/mcp.d.ts
377
+ /**
378
+ * The MCP adapter surface, typed here so `devframe` (which probes for and
379
+ * lazily loads `@devframes/agentic`) and `@devframes/agentic/mcp` (which
380
+ * implements it) share one contract without a type-level dependency cycle.
381
+ * None of these shapes reference the MCP SDK: the SDK is an implementation
382
+ * detail of `@devframes/agentic`, freely swappable behind this surface.
383
+ * The h3-bound `mountMcpHttp` shapes live in `node/agentic.ts` (exported via
384
+ * `devframe/internal`) instead: `devframe/types` must stay lib-neutral, and
385
+ * h3's declarations are not.
386
+ */
387
+ interface CreateMcpServerOptions {
388
+ /**
389
+ * Transport to use. `createMcpServer` itself runs `'stdio'` (a standalone
390
+ * process with its own host context); the Streamable-HTTP transport is
391
+ * served route-based by the dev server instead; see `mountMcpHttp` and
392
+ * the `mcp` option on `createDevServer` / `createCac`'s `--mcp` flag.
393
+ */
394
+ transport?: 'stdio';
395
+ /**
396
+ * Expose shared-state keys as MCP resources.
397
+ * - `true` (default): every key the host publishes
398
+ * - `false`: none
399
+ * - `(key) => boolean`: filter
400
+ */
401
+ exposeSharedState?: boolean | ((key: string) => boolean);
402
+ /**
403
+ * Usage guidance sent as `instructions` in the MCP `initialize` (and
404
+ * `server/discover`) result. Omitted or empty sends no instructions.
405
+ */
406
+ instructions?: string;
407
+ /**
408
+ * Resource templates served through `resources/templates/list`, and read
409
+ * through `resources/read`. Omitted or empty keeps the resources unchanged.
410
+ */
411
+ resourceTemplates?: McpResourceTemplate[];
412
+ /**
413
+ * Host subscription for resource-list changes; each `notify()` sends
414
+ * `notifications/resources/list_changed`. See {@link McpResourcesChangedHook}.
415
+ */
416
+ onResourcesChanged?: McpResourcesChangedHook;
417
+ /** Override the name reported in the MCP handshake. */
418
+ serverName?: string;
419
+ /** Override the version reported in the MCP handshake. Defaults to `definition.version ?? '0.0.0'`. */
420
+ serverVersion?: string;
421
+ /** Called once the transport is connected. */
422
+ onReady?: (info: {
423
+ transport: 'stdio';
424
+ }) => void;
425
+ }
426
+ /**
427
+ * One MCP content block in a tool result. Attach blocks to a tool's return
428
+ * value with `withMcpContent` (from `devframe`) to send them in place of the
429
+ * default JSON text block. `data` is base64.
430
+ */
431
+ type McpContentBlock = {
432
+ type: 'text';
433
+ text: string;
434
+ } | {
435
+ type: 'image';
436
+ data: string;
437
+ mimeType: string;
438
+ } | {
439
+ type: 'audio';
440
+ data: string;
441
+ mimeType: string;
442
+ };
443
+ interface McpServerHandle {
444
+ stop: () => Promise<void>;
445
+ }
446
+ interface CreateMcpFetchHandlerOptions {
447
+ /** Name reported in the MCP handshake. */
448
+ serverName: string;
449
+ /** Version reported in the MCP handshake. */
450
+ serverVersion: string;
451
+ /** Expose shared-state keys as MCP resources; see {@link CreateMcpServerOptions.exposeSharedState}. */
452
+ exposeSharedState: boolean | ((key: string) => boolean);
453
+ /** Usage guidance for the handshake; see {@link CreateMcpServerOptions.instructions}. */
454
+ instructions?: string;
455
+ /** Resource templates; see {@link CreateMcpServerOptions.resourceTemplates}. */
456
+ resourceTemplates?: McpResourceTemplate[];
457
+ /** Host subscription for resource-list changes; see {@link CreateMcpServerOptions.onResourcesChanged}. */
458
+ onResourcesChanged?: McpResourcesChangedHook;
459
+ /**
460
+ * Optional identity check, layered on top of the origin gate and checked
461
+ * **after** it: a bearer token string (matched in constant time against
462
+ * `Authorization: Bearer <token>`), a `(request) => boolean` callback, or
463
+ * `false` (the default) for origin-only, trusting same-machine callers. A
464
+ * callback governs identity only and cannot relax the origin gate. See
465
+ * {@link McpAuthorization}.
466
+ */
467
+ authorization?: McpAuthorization;
468
+ /**
469
+ * Origin allow-list beyond the loopback default. `false` disables the
470
+ * origin gate entirely. Default: loopback-only.
471
+ *
472
+ * Unlike the WS transport, the MCP route does **not** allow `Origin`-less
473
+ * requests: a route-based endpoint is reachable by any local process, so a
474
+ * request must carry an `Origin` that passes the gate. Native clients
475
+ * (e.g. `devframe connect`) send their loopback origin explicitly.
476
+ */
477
+ allowedOrigins?: readonly string[] | false;
478
+ }
479
+ /** Connection facts a host knows about a request beyond the `Request` itself. */
480
+ interface McpConnectionInfo {
481
+ /**
482
+ * The connecting peer's remote address (a node socket's `remoteAddress`),
483
+ * used to prove a same-machine caller when the endpoint relies on the
484
+ * loopback origin default with no identity check. A host that can resolve a
485
+ * trustworthy peer address (the h3/node mount) supplies it; when it's
486
+ * omitted the origin gate stays the only locality signal.
487
+ */
488
+ remoteAddress?: string;
489
+ }
490
+ interface McpFetchHandler {
491
+ /**
492
+ * WHATWG-`fetch` handler for the MCP endpoint. Hand every method
493
+ * (POST/GET/DELETE) on the endpoint's path to it; routing by path is the
494
+ * host's job. Pass {@link McpConnectionInfo} when the host can resolve the
495
+ * peer address so the default trust boundary can enforce same-machine
496
+ * locality.
497
+ */
498
+ fetch: (request: Request, connection?: McpConnectionInfo) => Promise<Response>;
499
+ /** Tear down the handler (aborts in-flight exchanges, drops the change bridge). */
500
+ dispose: () => Promise<void>;
501
+ }
502
+ /** One concrete resource that an {@link McpResourceTemplate} lists in `resources/list`. */
503
+ interface McpResourceTemplateEntry {
504
+ /** The resource URI. It SHOULD match the `uriTemplate` of its template, so `resources/read` finds it. */
505
+ uri: string;
506
+ name: string;
507
+ /** Human-readable name for display. */
508
+ title?: string;
509
+ description?: string;
510
+ /** Defaults to the `mimeType` of the template. */
511
+ mimeType?: string;
512
+ }
513
+ /**
514
+ * What an {@link McpResourceTemplate} returns from `read`, sent as the
515
+ * `resources/read` result: `text` as is, or else `json` as JSON text.
516
+ */
517
+ interface McpResourceTemplateContent {
518
+ text?: string;
519
+ json?: unknown;
520
+ /** Defaults to the `mimeType` of the template, then `application/json`. */
521
+ mimeType?: string;
522
+ }
523
+ /**
524
+ * A resource template the MCP server lists in `resources/templates/list` and
525
+ * reads in `resources/read`. The `uriTemplate` uses RFC 6570 level 1 only:
526
+ * plain `{name}` expressions, with text between any two of them. Each
527
+ * expression matches a non-empty value with no `/`, and its value is
528
+ * percent-decoded.
529
+ *
530
+ * `list` and `read` get the node context of the devframe (or of the hub), so
531
+ * they can read live state such as `ctx.rpc.sharedState` or `ctx.agent`. The
532
+ * route options are resolved before `setup()` runs, so a template cannot
533
+ * capture that context in a closure.
534
+ */
535
+ interface McpResourceTemplate {
536
+ /** RFC 6570 level 1 URI template, e.g. `my-tool://file/{path}`. Anything else throws `DF0084`. */
537
+ uriTemplate: string;
538
+ name: string;
539
+ /** Human-readable name for display. */
540
+ title?: string;
541
+ description?: string;
542
+ /** MIME type of every resource the template stands for. */
543
+ mimeType?: string;
544
+ /** The concrete resources the template stands for right now. They are added to `resources/list`. */
545
+ list?: (ctx: DevframeNodeContext) => McpResourceTemplateEntry[] | Promise<McpResourceTemplateEntry[]>;
546
+ /** Read one resource: `params` holds the decoded value of each `{name}`, `uri` the requested URI. */
547
+ read: (params: Record<string, string>, uri: string, ctx: DevframeNodeContext) => McpResourceTemplateContent | Promise<McpResourceTemplateContent>;
548
+ }
549
+ /**
550
+ * A host subscription for resource-list changes. Call `notify()` each time
551
+ * the resources change; the MCP server then sends
552
+ * `notifications/resources/list_changed`. Return a function that removes the
553
+ * subscription; the MCP server calls it on teardown.
554
+ */
555
+ type McpResourcesChangedHook = (notify: () => void, ctx: DevframeNodeContext) => () => void;
556
+ //#endregion
376
557
  //#region src/types/diagnostics.d.ts
377
558
  /**
378
559
  * The shared diagnostics lookup exposed by the host. A `Proxy` that resolves
@@ -509,6 +690,13 @@ interface BrowserAgentToolManifest {
509
690
  tags?: readonly string[];
510
691
  inputSchema?: unknown;
511
692
  }
693
+ /** What a connected document reports about itself alongside its tool manifest. */
694
+ interface BrowserAgentClientInfo {
695
+ url: string;
696
+ title: string;
697
+ visible: boolean;
698
+ focused: boolean;
699
+ }
512
700
  //#endregion
513
701
  //#region src/types/rpc-augments.d.ts
514
702
  /**
@@ -573,7 +761,7 @@ interface DevframeRpcServerFunctions {
573
761
  /** Methods eligible for automatic client caching. @internal */
574
762
  'devframe:rpc:cacheable-functions': () => Promise<string[]>;
575
763
  /** Replace this connection's browser-agent tool manifest, tagged with the calling tab's stable client id. @internal */
576
- 'devframe:agent:sync-client-tools': (clientId: string, tools: BrowserAgentToolManifest[]) => Promise<void>;
764
+ 'devframe:agent:sync-client-tools': (clientId: string, tools: BrowserAgentToolManifest[], info: BrowserAgentClientInfo) => Promise<void>;
577
765
  /**
578
766
  * Authenticate a connection with a previously-issued bearer token; resolves
579
767
  * whether the connection is now trusted. The interactive handler is provided
@@ -809,8 +997,8 @@ interface DevframeSettingsStore<T extends Record<string, any> = Record<string, a
809
997
  /**
810
998
  * The two settings scopes available on a scoped context.
811
999
  *
812
- * - `project`: per-workspace state, persisted under the host's
813
- * `workspace` storage dir. Project-local settings.
1000
+ * - `project`: per-checkout state, persisted under the
1001
+ * `project` storage dir. Project-local settings.
814
1002
  * - `global`: per-user state, persisted under the host's `global`
815
1003
  * storage dir. Machine-wide preferences.
816
1004
  */
@@ -1296,6 +1484,23 @@ interface McpRouteOptions {
1296
1484
  * Omitted or empty sends no instructions.
1297
1485
  */
1298
1486
  instructions?: string;
1487
+ /**
1488
+ * Resource templates the route serves through MCP
1489
+ * `resources/templates/list`. `resources/read` tries them after the
1490
+ * registered resources and the shared-state resources (a
1491
+ * `devframe://resource/` or `devframe://state/` URI never reaches them);
1492
+ * the first template whose `uriTemplate` matches the URI reads it. `resources/list` adds the
1493
+ * entries each template's `list` returns. Omitted or empty keeps the
1494
+ * resources unchanged.
1495
+ */
1496
+ resourceTemplates?: McpResourceTemplate[];
1497
+ /**
1498
+ * Host subscription for resource-list changes. Call `notify()` each time
1499
+ * the resources change (for example, the entries of a resource template);
1500
+ * the route then sends `notifications/resources/list_changed`. Return a
1501
+ * function that removes the subscription; the route calls it on teardown.
1502
+ */
1503
+ onResourcesChanged?: McpResourcesChangedHook;
1299
1504
  }
1300
1505
  interface DevframeCliOptions {
1301
1506
  /** Binary name; default: the devframe's `id`. */
@@ -1597,119 +1802,6 @@ type DevframeSnapshotRpcEntry = string | {
1597
1802
  inputs: DevframeSnapshotRpcInputs;
1598
1803
  };
1599
1804
  //#endregion
1600
- //#region src/types/mcp.d.ts
1601
- /**
1602
- * The MCP adapter surface, typed here so `devframe` (which probes for and
1603
- * lazily loads `@devframes/agentic`) and `@devframes/agentic/mcp` (which
1604
- * implements it) share one contract without a type-level dependency cycle.
1605
- * None of these shapes reference the MCP SDK: the SDK is an implementation
1606
- * detail of `@devframes/agentic`, freely swappable behind this surface.
1607
- * The h3-bound `mountMcpHttp` shapes live in `node/agentic.ts` (exported via
1608
- * `devframe/internal`) instead: `devframe/types` must stay lib-neutral, and
1609
- * h3's declarations are not.
1610
- */
1611
- interface CreateMcpServerOptions {
1612
- /**
1613
- * Transport to use. `createMcpServer` itself runs `'stdio'` (a standalone
1614
- * process with its own host context); the Streamable-HTTP transport is
1615
- * served route-based by the dev server instead; see `mountMcpHttp` and
1616
- * the `mcp` option on `createDevServer` / `createCac`'s `--mcp` flag.
1617
- */
1618
- transport?: 'stdio';
1619
- /**
1620
- * Expose shared-state keys as MCP resources.
1621
- * - `true` (default): every key the host publishes
1622
- * - `false`: none
1623
- * - `(key) => boolean`: filter
1624
- */
1625
- exposeSharedState?: boolean | ((key: string) => boolean);
1626
- /**
1627
- * Usage guidance sent as `instructions` in the MCP `initialize` (and
1628
- * `server/discover`) result. Omitted or empty sends no instructions.
1629
- */
1630
- instructions?: string;
1631
- /** Override the name reported in the MCP handshake. */
1632
- serverName?: string;
1633
- /** Override the version reported in the MCP handshake. Defaults to `definition.version ?? '0.0.0'`. */
1634
- serverVersion?: string;
1635
- /** Called once the transport is connected. */
1636
- onReady?: (info: {
1637
- transport: 'stdio';
1638
- }) => void;
1639
- }
1640
- /**
1641
- * One MCP content block in a tool result. Attach blocks to a tool's return
1642
- * value with `withMcpContent` (from `devframe`) to send them in place of the
1643
- * default JSON text block. `data` is base64.
1644
- */
1645
- type McpContentBlock = {
1646
- type: 'text';
1647
- text: string;
1648
- } | {
1649
- type: 'image';
1650
- data: string;
1651
- mimeType: string;
1652
- } | {
1653
- type: 'audio';
1654
- data: string;
1655
- mimeType: string;
1656
- };
1657
- interface McpServerHandle {
1658
- stop: () => Promise<void>;
1659
- }
1660
- interface CreateMcpFetchHandlerOptions {
1661
- /** Name reported in the MCP handshake. */
1662
- serverName: string;
1663
- /** Version reported in the MCP handshake. */
1664
- serverVersion: string;
1665
- /** Expose shared-state keys as MCP resources; see {@link CreateMcpServerOptions.exposeSharedState}. */
1666
- exposeSharedState: boolean | ((key: string) => boolean);
1667
- /** Usage guidance for the handshake; see {@link CreateMcpServerOptions.instructions}. */
1668
- instructions?: string;
1669
- /**
1670
- * Optional identity check, layered on top of the origin gate and checked
1671
- * **after** it: a bearer token string (matched in constant time against
1672
- * `Authorization: Bearer <token>`), a `(request) => boolean` callback, or
1673
- * `false` (the default) for origin-only, trusting same-machine callers. A
1674
- * callback governs identity only and cannot relax the origin gate. See
1675
- * {@link McpAuthorization}.
1676
- */
1677
- authorization?: McpAuthorization;
1678
- /**
1679
- * Origin allow-list beyond the loopback default. `false` disables the
1680
- * origin gate entirely. Default: loopback-only.
1681
- *
1682
- * Unlike the WS transport, the MCP route does **not** allow `Origin`-less
1683
- * requests: a route-based endpoint is reachable by any local process, so a
1684
- * request must carry an `Origin` that passes the gate. Native clients
1685
- * (e.g. `devframe connect`) send their loopback origin explicitly.
1686
- */
1687
- allowedOrigins?: readonly string[] | false;
1688
- }
1689
- /** Connection facts a host knows about a request beyond the `Request` itself. */
1690
- interface McpConnectionInfo {
1691
- /**
1692
- * The connecting peer's remote address (a node socket's `remoteAddress`),
1693
- * used to prove a same-machine caller when the endpoint relies on the
1694
- * loopback origin default with no identity check. A host that can resolve a
1695
- * trustworthy peer address (the h3/node mount) supplies it; when it's
1696
- * omitted the origin gate stays the only locality signal.
1697
- */
1698
- remoteAddress?: string;
1699
- }
1700
- interface McpFetchHandler {
1701
- /**
1702
- * WHATWG-`fetch` handler for the MCP endpoint. Hand every method
1703
- * (POST/GET/DELETE) on the endpoint's path to it; routing by path is the
1704
- * host's job. Pass {@link McpConnectionInfo} when the host can resolve the
1705
- * peer address so the default trust boundary can enforce same-machine
1706
- * locality.
1707
- */
1708
- fetch: (request: Request, connection?: McpConnectionInfo) => Promise<Response>;
1709
- /** Tear down the handler (aborts in-flight exchanges, drops the change bridge). */
1710
- dispose: () => Promise<void>;
1711
- }
1712
- //#endregion
1713
1805
  //#region src/utils/shared-state.d.ts
1714
1806
  type ImmutablePrimitive = undefined | null | boolean | string | number | Function;
1715
1807
  type Immutable<T> = T extends ImmutablePrimitive ? T : T extends Array<infer U> ? ImmutableArray<U> : T extends Map<infer K, infer V> ? ImmutableMap<K, V> : T extends Set<infer M> ? ImmutableSet<M> : ImmutableObject<T>;
@@ -2311,4 +2403,4 @@ interface ConnectionMeta {
2311
2403
  */
2312
2404
  interface DevframeConnectionConfigsRegistry {}
2313
2405
  //#endregion
2314
- export { McpSetting as $, SharedStateEvents as A, DevframeDiagnosticsLogger as At, DevframeCliOptions as B, AgentResourceInput as Bt, createStreamSink as C, DevframeViewHost as Ct, ImmutableObject as D, DevframeHost as Dt, ImmutableMap as E, DevframeRpcSharedStates as Et, CreateMcpServerOptions as F, parseCliFlags as Ft, DevframeRpcOptions as G, DevframeAgentHost as Gt, DevframeDeploymentKind as H, AgentToolInput as Ht, McpConnectionInfo as I, AgentHandle as It, DevframeSnapshotRpcInputs as J, EventUnsubscribe as Jt, DevframeSetupInfo as K, DevframeAgentHostEvents as Kt, McpContentBlock as L, AgentManifest as Lt, SharedStatePatch as M, CliFlagsSchema as Mt, createSharedState as N, InferCliFlags as Nt, ImmutableSet as O, DevframeStorageScope as Ot, CreateMcpFetchHandlerOptions as P, defineCliFlags as Pt, McpRouteOptions as Q, McpFetchHandler as R, AgentResource as Rt, createStreamReader as S, SettingsForNamespace as St, ImmutableArray as T, DevframeRpcServerFunctions as Tt, DevframeDockDefaults as U, AgentToolProvider as Ut, DevframeDefinition as V, AgentTool as Vt, DevframeDuplicationStrategy as W, AgentToolProviderHandle as Wt, DevframeWsOptions as X, DevframeSseOptions as Y, EventsMap as Yt, McpAuthorization as Z, CreateStreamSinkOptions as _, ScopedBroadcastOptions as _t, DevframeConnectionConfigsRegistry as a, DevframeServiceOf as at, StreamSink as b, ScopedServerFunctions as bt, RpcBroadcastOptions as c, DevframeServicesRegistry as ct, RpcSharedStateHost as d, DevframeScopedNodeContext as dt, DevframeServiceDefinition as et, RpcStreamingChannel as f, DevframeScopedNodeRpc as ft, CreateStreamReaderOptions as g, DevframeSettingsStore as gt, BufferedChunk as h, DevframeSettingsRegistry as ht, DevframeCapabilities as i, DevframeServiceMeta as it, SharedStateOptions as j, DevframeAuthHandler as jt, SharedState as k, DevframeDiagnosticsHost as kt, RpcFunctionsHost as l, DevframeServicesScopeRegistry as lt, RpcStreamingHost as m, DevframeSettings as mt, ConnectionMetaSse as n, DevframeServiceId as nt, DevframeNodeContext as o, DevframeServiceScopeOf as ot, RpcStreamingChannelOptions as p, DevframeScopedStreamingHost as pt, DevframeSnapshotRpcEntry as q, EventEmitter as qt, ConnectionMetaWebsocket as r, DevframeServiceInput as rt, DevframeNodeRpcSession as s, DevframeServicesHost as st, ConnectionMeta as t, DevframeServiceDescriptor as tt, RpcSharedStateGetOptions as u, DevframeServicesState as ut, StreamErrorPayload as v, ScopedClientFunctions as vt, Immutable as w, DevframeRpcClientFunctions as wt, StreamSinkEvents as x, ScopedSharedStates as xt, StreamReader as y, ScopedRpcFn as yt, McpServerHandle as z, AgentResourceContent as zt };
2406
+ export { DevframeServiceOf as $, EventUnsubscribe as $t, SharedStateEvents as A, McpFetchHandler as At, DevframeSetupInfo as B, parseCliFlags as Bt, createStreamSink as C, DevframeStorageScope as Ct, ImmutableObject as D, CreateMcpServerOptions as Dt, ImmutableMap as E, CreateMcpFetchHandlerOptions as Et, DevframeDefinition as F, McpServerHandle as Ft, McpAuthorization as G, AgentResourceInput as Gt, DevframeSnapshotRpcInputs as H, AgentManifest as Ht, DevframeDeploymentKind as I, DevframeAuthHandler as It, DevframeServiceDefinition as J, AgentToolProvider as Jt, McpRouteOptions as K, AgentTool as Kt, DevframeDockDefaults as L, CliFlagsSchema as Lt, SharedStatePatch as M, McpResourceTemplateContent as Mt, createSharedState as N, McpResourceTemplateEntry as Nt, ImmutableSet as O, McpConnectionInfo as Ot, DevframeCliOptions as P, McpResourcesChangedHook as Pt, DevframeServiceMeta as Q, EventEmitter as Qt, DevframeDuplicationStrategy as R, InferCliFlags as Rt, createStreamReader as S, DevframeHost as St, ImmutableArray as T, DevframeDiagnosticsLogger as Tt, DevframeSseOptions as U, AgentResource as Ut, DevframeSnapshotRpcEntry as V, AgentHandle as Vt, DevframeWsOptions as W, AgentResourceContent as Wt, DevframeServiceId as X, DevframeAgentHost as Xt, DevframeServiceDescriptor as Y, AgentToolProviderHandle as Yt, DevframeServiceInput as Z, DevframeAgentHostEvents as Zt, CreateStreamSinkOptions as _, DevframeViewHost as _t, DevframeConnectionConfigsRegistry as a, DevframeScopedNodeContext as at, StreamSink as b, DevframeRpcSharedStates as bt, RpcBroadcastOptions as c, DevframeSettings as ct, RpcSharedStateHost as d, ScopedBroadcastOptions as dt, EventsMap as en, DevframeServiceScopeOf as et, RpcStreamingChannel as f, ScopedClientFunctions as ft, CreateStreamReaderOptions as g, SettingsForNamespace as gt, BufferedChunk as h, ScopedSharedStates as ht, DevframeCapabilities as i, DevframeServicesState as it, SharedStateOptions as j, McpResourceTemplate as jt, SharedState as k, McpContentBlock as kt, RpcFunctionsHost as l, DevframeSettingsRegistry as lt, RpcStreamingHost as m, ScopedServerFunctions as mt, ConnectionMetaSse as n, DevframeServicesRegistry as nt, DevframeNodeContext as o, DevframeScopedNodeRpc as ot, RpcStreamingChannelOptions as p, ScopedRpcFn as pt, McpSetting as q, AgentToolInput as qt, ConnectionMetaWebsocket as r, DevframeServicesScopeRegistry as rt, DevframeNodeRpcSession as s, DevframeScopedStreamingHost as st, ConnectionMeta as t, DevframeServicesHost as tt, RpcSharedStateGetOptions as u, DevframeSettingsStore as ut, StreamErrorPayload as v, DevframeRpcClientFunctions as vt, Immutable as w, DevframeDiagnosticsHost as wt, StreamSinkEvents as x, BrowserAgentClientInfo as xt, StreamReader as y, DevframeRpcServerFunctions as yt, DevframeRpcOptions as z, defineCliFlags as zt };
@@ -1,4 +1,4 @@
1
- import { k as SharedState, o as DevframeNodeContext } from "./context-dOWXVHc6.mjs";
1
+ import { k as SharedState, o as DevframeNodeContext } from "./context-Dko5QFWF.mjs";
2
2
  //#region src/node/hub-internals/context.d.ts
3
3
  interface InternalAnonymousAuthStorage {
4
4
  trusted: Record<string, {
@@ -1,10 +1,10 @@
1
1
  import { DEVFRAME_CONNECTION_META_FILENAME } from "./constants.mjs";
2
- import { t as diagnostics } from "./diagnostics-Dngy7cNp.mjs";
3
- import { t as createHostContext } from "./context-CeD8-IZA.mjs";
4
- import { t as resolveStaticAssetsSource } from "./remote-assets-DoZ1AMpq.mjs";
5
- import { a as resolveMcpConfig, c as joinURL, d as withoutLeadingSlash, i as resolveDevServerPort, l as withBase, n as normalizeBasePath, r as resolveBasePath, s as importAgenticMcp, t as loadAutoMcpAdapter } from "./_shared-B6K2DKhb.mjs";
2
+ import { t as diagnostics } from "./diagnostics-BJjvKfVK.mjs";
3
+ import { t as createHostContext } from "./context-CmSDJAEI.mjs";
4
+ import { t as resolveStaticAssetsSource } from "./remote-assets-DOva7l3s.mjs";
5
+ import { a as resolveMcpConfig, c as joinURL, d as withoutLeadingSlash, i as resolveDevServerPort, l as withBase, n as normalizeBasePath, r as resolveBasePath, s as importAgenticMcp, t as loadAutoMcpAdapter } from "./_shared-C06DH07o.mjs";
6
6
  import { t as createH3DevframeHost } from "./host-h3-BROI6SQ4.mjs";
7
- import { i as normalizeHttpServerUrl, n as resolveInstanceRegister, t as createInstanceShell } from "./instance-shell-DyVmJA6B.mjs";
7
+ import { a as isAddressInUse, i as normalizeHttpServerUrl, n as resolveInstanceRegister, o as listenWithLoopbackTwin, t as createInstanceShell } from "./instance-shell-CBgy8YzK.mjs";
8
8
  import { open } from "./utils/open.mjs";
9
9
  import { mountStaticHandler } from "./utils/serve-static.mjs";
10
10
  import { resolve } from "pathe";
@@ -141,6 +141,8 @@ async function mountMcpRoute(app, context, def, base, setting) {
141
141
  serverVersion: def.version ?? "0.0.0",
142
142
  exposeSharedState: config.exposeSharedState ?? true,
143
143
  instructions: config.instructions,
144
+ resourceTemplates: config.resourceTemplates,
145
+ onResourcesChanged: config.onResourcesChanged,
144
146
  authorization: config.authorization,
145
147
  allowedOrigins: config.allowedOrigins
146
148
  });
@@ -172,28 +174,11 @@ async function mountMcpRoute(app, context, def, base, setting) {
172
174
  async function createDevServer(def, options = {}) {
173
175
  if (def.capabilities?.dev === false && !options.force) throw diagnostics.DF0058({ id: def.id });
174
176
  const host = options.host ?? def.cli?.host ?? "localhost";
175
- const requestedPort = options.port ?? await resolveDevServerPort(def, { host });
176
177
  const flags = options.flags ?? {};
177
178
  const basePath = options.basePath ? normalizeBasePath(options.basePath) : resolveBasePath(def, "standalone");
178
179
  const app = options.app ?? new H3();
179
180
  const server = createServer(toNodeHandler(app));
180
- try {
181
- await new Promise((resolveListen, rejectListen) => {
182
- const onError = (error) => rejectListen(error);
183
- server.once("error", onError);
184
- server.listen(requestedPort, host, () => {
185
- server.removeListener("error", onError);
186
- resolveListen();
187
- });
188
- });
189
- } catch (error) {
190
- throw diagnostics.DF0052({
191
- host,
192
- port: requestedPort,
193
- reason: error instanceof Error ? error.message : String(error),
194
- cause: error
195
- });
196
- }
181
+ const { requestedPort, closeLoopbackTwin } = await listenDevServer(server, def, host, options);
197
182
  const address = server.address();
198
183
  const port = typeof address === "object" && address ? address.port : requestedPort;
199
184
  const origin = normalizeHttpServerUrl(host, port);
@@ -231,6 +216,7 @@ async function createDevServer(def, options = {}) {
231
216
  try {
232
217
  await devframe.ready;
233
218
  } catch (error) {
219
+ await closeLoopbackTwin();
234
220
  await new Promise((resolveClose) => server.close(() => resolveClose()));
235
221
  throw error;
236
222
  }
@@ -251,10 +237,43 @@ async function createDevServer(def, options = {}) {
251
237
  connectionMeta: transport.connectionMeta,
252
238
  async close() {
253
239
  await devframe.close();
240
+ await closeLoopbackTwin();
254
241
  await new Promise((resolveClose) => server.close(() => resolveClose()));
255
242
  }
256
243
  };
257
244
  }
245
+ /**
246
+ * Bind the dev server. `getPort` probes only `host`, so it can call a port
247
+ * free while another process holds it on the other loopback address of
248
+ * `localhost`. The twin bind catches that, and a port that was not pinned
249
+ * moves to the next free one.
250
+ */
251
+ async function listenDevServer(server, def, host, options) {
252
+ let requestedPort = options.port ?? await resolveDevServerPort(def, {
253
+ host,
254
+ defaultPort: options.defaultPort
255
+ });
256
+ for (let attempt = 1;; attempt++) try {
257
+ return {
258
+ requestedPort,
259
+ closeLoopbackTwin: await listenWithLoopbackTwin(server, requestedPort, host)
260
+ };
261
+ } catch (error) {
262
+ if (options.port == null && attempt < 3 && isAddressInUse(error)) {
263
+ requestedPort = await resolveDevServerPort(def, {
264
+ host,
265
+ defaultPort: requestedPort + 1
266
+ });
267
+ continue;
268
+ }
269
+ throw diagnostics.DF0052({
270
+ host,
271
+ port: requestedPort,
272
+ reason: error instanceof Error ? error.message : String(error),
273
+ cause: error
274
+ });
275
+ }
276
+ }
258
277
  async function maybeOpenBrowser(def, flags, origin, override, authHandler) {
259
278
  const flagsOpen = flags.open;
260
279
  const cliOpen = def.cli?.open;
@@ -186,6 +186,14 @@ const diagnostics = defineDiagnostics({
186
186
  DF0081: {
187
187
  why: (p) => `Tool "${p.name}" returned invalid MCP content blocks: ${p.reason}`,
188
188
  fix: "Pass `withMcpContent` a non-empty array of `{ type: 'text', text }`, `{ type: 'image', data, mimeType }` or `{ type: 'audio', data, mimeType }` blocks, with string fields and base64 `data`."
189
+ },
190
+ DF0082: {
191
+ why: (p) => `Tool "${p.tool}" was addressed to client "${p.clientId}", but no connected browser tab has that id and the tool.${p.live.length ? ` Connected clients: ${p.live.join(", ")}.` : " No browser tab is connected."}`,
192
+ fix: "Re-list the connected clients (`devframe:agent:list-clients`) and retry with a live `client_id`, or omit `client_id` to target the most recently focused tab."
193
+ },
194
+ DF0084: {
195
+ why: (p) => `MCP resource template "${p.name}" has an invalid \`uriTemplate\` "${p.uriTemplate}": ${p.reason}`,
196
+ fix: "Use RFC 6570 level 1 only: plain `{name}` expressions made of letters, digits, `_` and `.`, with no operator (`+`, `#`, `/`, `?`, …), modifier (`:n`, `*`) or list of names, and no `{` or `}` outside an expression."
189
197
  }
190
198
  }
191
199
  });
@@ -1,5 +1,5 @@
1
1
  import { D as InferArgsType, E as Thenable, O as InferReturnType, T as RpcReturnSchema, m as RpcFunctionAgentOptions, n as RpcArgsSchema } from "../types-BmDbfHCx.mjs";
2
- import { k as SharedState, qt as EventEmitter } from "../context-dOWXVHc6.mjs";
2
+ import { Qt as EventEmitter, k as SharedState } from "../context-Dko5QFWF.mjs";
3
3
  //#region src/in-page-channel/types.d.ts
4
4
  /**
5
5
  * The shared contract of one in-page channel, declared once (usually in a
@@ -1,6 +1,6 @@
1
1
  import { a as defineDiagnostics, i as createBirpc, n as argsToJsonSchema, o as DEVFRAME_EVENTS, r as resolveAgentSafety, t as toolInputToRpcArgs } from "../tool-input-CES3Pc4y.mjs";
2
2
  import { createEventEmitter } from "../utils/events.mjs";
3
- import { t as createSharedState } from "../shared-state-Cow3u-_m.mjs";
3
+ import { t as createSharedState } from "../shared-state-Cc-Jrhma.mjs";
4
4
  import { nanoid } from "../utils/nanoid.mjs";
5
5
  import { r as registerBrowserAgentTool } from "../browser-agent-Pu-FLk6I.mjs";
6
6
  //#region src/in-page-channel/diagnostics.ts
@@ -1,5 +1,5 @@
1
- import { k as SharedState, o as DevframeNodeContext, s as DevframeNodeRpcSession } from "./context-dOWXVHc6.mjs";
2
- import { n as InternalAnonymousAuthStorage } from "./context-O8NJzl93.mjs";
1
+ import { k as SharedState, o as DevframeNodeContext, s as DevframeNodeRpcSession } from "./context-Dko5QFWF.mjs";
2
+ import { n as InternalAnonymousAuthStorage } from "./context-eIUOSrKu.mjs";
3
3
  //#region src/node/auth/revoke.d.ts
4
4
  /**
5
5
  * Flip `isTrusted` to false on any live WS clients connected with `token`
package/dist/index.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { C as RpcFunctionType, T as RpcReturnSchema, h as RpcFunctionDefinition, m as RpcFunctionAgentOptions, n as RpcArgsSchema } from "./types-BmDbfHCx.mjs";
2
- import { $ as McpSetting, At as DevframeDiagnosticsLogger, B as DevframeCliOptions, Bt as AgentResourceInput, Ct as DevframeViewHost, Dt as DevframeHost, Et as DevframeRpcSharedStates, F as CreateMcpServerOptions, G as DevframeRpcOptions, Gt as DevframeAgentHost, H as DevframeDeploymentKind, Ht as AgentToolInput, I as McpConnectionInfo, It as AgentHandle, J as DevframeSnapshotRpcInputs, Jt as EventUnsubscribe, K as DevframeSetupInfo, Kt as DevframeAgentHostEvents, L as McpContentBlock, Lt as AgentManifest, Ot as DevframeStorageScope, P as CreateMcpFetchHandlerOptions, Q as McpRouteOptions, R as McpFetchHandler, Rt as AgentResource, St as SettingsForNamespace, Tt as DevframeRpcServerFunctions, U as DevframeDockDefaults, Ut as AgentToolProvider, V as DevframeDefinition, Vt as AgentTool, W as DevframeDuplicationStrategy, Wt as AgentToolProviderHandle, X as DevframeWsOptions, Y as DevframeSseOptions, Yt as EventsMap, Z as McpAuthorization, _t as ScopedBroadcastOptions, a as DevframeConnectionConfigsRegistry, at as DevframeServiceOf, bt as ScopedServerFunctions, c as RpcBroadcastOptions, ct as DevframeServicesRegistry, d as RpcSharedStateHost, dt as DevframeScopedNodeContext, et as DevframeServiceDefinition, f as RpcStreamingChannel, ft as DevframeScopedNodeRpc, gt as DevframeSettingsStore, ht as DevframeSettingsRegistry, i as DevframeCapabilities, it as DevframeServiceMeta, kt as DevframeDiagnosticsHost, l as RpcFunctionsHost, lt as DevframeServicesScopeRegistry, m as RpcStreamingHost, mt as DevframeSettings, n as ConnectionMetaSse, nt as DevframeServiceId, o as DevframeNodeContext, ot as DevframeServiceScopeOf, p as RpcStreamingChannelOptions, pt as DevframeScopedStreamingHost, q as DevframeSnapshotRpcEntry, qt as EventEmitter, r as ConnectionMetaWebsocket, rt as DevframeServiceInput, s as DevframeNodeRpcSession, st as DevframeServicesHost, t as ConnectionMeta, tt as DevframeServiceDescriptor, u as RpcSharedStateGetOptions, ut as DevframeServicesState, vt as ScopedClientFunctions, wt as DevframeRpcClientFunctions, xt as ScopedSharedStates, yt as ScopedRpcFn, z as McpServerHandle, zt as AgentResourceContent } from "./context-dOWXVHc6.mjs";
2
+ import { $ as DevframeServiceOf, $t as EventUnsubscribe, At as McpFetchHandler, B as DevframeSetupInfo, Ct as DevframeStorageScope, Dt as CreateMcpServerOptions, Et as CreateMcpFetchHandlerOptions, F as DevframeDefinition, Ft as McpServerHandle, G as McpAuthorization, Gt as AgentResourceInput, H as DevframeSnapshotRpcInputs, Ht as AgentManifest, I as DevframeDeploymentKind, J as DevframeServiceDefinition, Jt as AgentToolProvider, K as McpRouteOptions, Kt as AgentTool, L as DevframeDockDefaults, Mt as McpResourceTemplateContent, Nt as McpResourceTemplateEntry, Ot as McpConnectionInfo, P as DevframeCliOptions, Pt as McpResourcesChangedHook, Q as DevframeServiceMeta, Qt as EventEmitter, R as DevframeDuplicationStrategy, St as DevframeHost, Tt as DevframeDiagnosticsLogger, U as DevframeSseOptions, Ut as AgentResource, V as DevframeSnapshotRpcEntry, Vt as AgentHandle, W as DevframeWsOptions, Wt as AgentResourceContent, X as DevframeServiceId, Xt as DevframeAgentHost, Y as DevframeServiceDescriptor, Yt as AgentToolProviderHandle, Z as DevframeServiceInput, Zt as DevframeAgentHostEvents, _t as DevframeViewHost, a as DevframeConnectionConfigsRegistry, at as DevframeScopedNodeContext, bt as DevframeRpcSharedStates, c as RpcBroadcastOptions, ct as DevframeSettings, d as RpcSharedStateHost, dt as ScopedBroadcastOptions, en as EventsMap, et as DevframeServiceScopeOf, f as RpcStreamingChannel, ft as ScopedClientFunctions, gt as SettingsForNamespace, ht as ScopedSharedStates, i as DevframeCapabilities, it as DevframeServicesState, jt as McpResourceTemplate, kt as McpContentBlock, l as RpcFunctionsHost, lt as DevframeSettingsRegistry, m as RpcStreamingHost, mt as ScopedServerFunctions, n as ConnectionMetaSse, nt as DevframeServicesRegistry, o as DevframeNodeContext, ot as DevframeScopedNodeRpc, p as RpcStreamingChannelOptions, pt as ScopedRpcFn, q as McpSetting, qt as AgentToolInput, r as ConnectionMetaWebsocket, rt as DevframeServicesScopeRegistry, s as DevframeNodeRpcSession, st as DevframeScopedStreamingHost, t as ConnectionMeta, tt as DevframeServicesHost, u as RpcSharedStateGetOptions, ut as DevframeSettingsStore, vt as DevframeRpcClientFunctions, wt as DevframeDiagnosticsHost, yt as DevframeRpcServerFunctions, z as DevframeRpcOptions } from "./context-Dko5QFWF.mjs";
3
3
  import { a as DevframeWsPeer, i as DevframeRpcTransportKind, n as DevframeRpcConnection, r as DevframeRpcConnectionRequest, t as DevframeNodeRpcSessionMeta } from "./session-r6PDixP6.mjs";
4
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
5
  import { i as DevframeDefineDiagnosticsOptions } from "./nostics-DWvukRwa.mjs";
6
- import { n as withMcpContent } from "./mcp-content-9_Pdtziq.mjs";
6
+ import { n as withMcpContent } from "./mcp-content-wcQxvrrW.mjs";
7
7
  //#region src/define.d.ts
8
8
  export declare const defineRpcFunction: <NAME extends string, TYPE extends RpcFunctionType, ARGS extends any[], RETURN = void, const AS extends RpcArgsSchema | undefined = undefined, const RS extends RpcReturnSchema | undefined = undefined>(definition: RpcFunctionDefinition<NAME, TYPE, ARGS, RETURN, AS, RS, DevframeNodeContext>) => RpcFunctionDefinition<NAME, TYPE, ARGS, RETURN, AS, RS, DevframeNodeContext>;
9
9
  /**
@@ -12,4 +12,4 @@ export declare const defineRpcFunction: <NAME extends string, TYPE extends RpcFu
12
12
  */
13
13
  export declare function defineDevframe(d: DevframeDefinition): DevframeDefinition;
14
14
  //#endregion
15
- export { type AgentHandle, type AgentManifest, type AgentResource, type AgentResourceContent, type AgentResourceInput, type AgentTool, type AgentToolInput, type AgentToolProvider, type AgentToolProviderHandle, type ConnectionMeta, type ConnectionMetaSse, type ConnectionMetaWebsocket, type CreateMcpFetchHandlerOptions, type CreateMcpServerOptions, type DevframeAgentHost, type DevframeAgentHostEvents, type DevframeCapabilities, type DevframeCliOptions, type DevframeConnectionConfigsRegistry, type DevframeDefineDiagnosticsOptions, type DevframeDefinition, type DevframeDeploymentKind, type DevframeDiagnosticsHost, type DevframeDiagnosticsLogger, type DevframeDockDefaults, type DevframeDuplicationStrategy, type DevframeHost, type DevframeNodeContext, type DevframeNodeRpcSession, type DevframeNodeRpcSessionMeta, type DevframeRpcClientFunctions, type DevframeRpcConnection, type DevframeRpcConnectionRequest, type DevframeRpcOptions, type DevframeRpcServerFunctions, type DevframeRpcSharedStates, type DevframeRpcTransportKind, type DevframeScopedNodeContext, type DevframeScopedNodeRpc, type DevframeScopedStreamingHost, type DevframeServiceDefinition, type DevframeServiceDescriptor, type DevframeServiceId, type DevframeServiceInput, type DevframeServiceMeta, type DevframeServiceOf, type DevframeServiceScopeOf, type DevframeServicesHost, type DevframeServicesRegistry, type DevframeServicesScopeRegistry, type DevframeServicesState, type DevframeSettings, type DevframeSettingsRegistry, type DevframeSettingsStore, type DevframeSetupInfo, type DevframeSnapshotRpcEntry, type DevframeSnapshotRpcInputs, type DevframeSseOptions, type DevframeStorageScope, type DevframeViewHost, type DevframeWsOptions, type DevframeWsPeer, type EventEmitter, type EventUnsubscribe, type EventsMap, type McpAuthorization, type McpConnectionInfo, type McpContentBlock, type McpFetchHandler, type McpRouteOptions, type McpServerHandle, type McpSetting, type RemoteAssets, type RemoteAssetsErrorMessage, type RemoteAssetsProvider, type RemoteAssetsProviderCustom, type RemoteAssetsStore, type RpcBroadcastOptions, type RpcFunctionAgentOptions, type RpcFunctionsHost, type RpcSharedStateGetOptions, type RpcSharedStateHost, type RpcStreamingChannel, type RpcStreamingChannelOptions, type RpcStreamingHost, type ScopedBroadcastOptions, type ScopedClientFunctions, type ScopedRpcFn, type ScopedServerFunctions, type ScopedSharedStates, type SettingsForNamespace, type StaticAssetsSource, withMcpContent };
15
+ export { type AgentHandle, type AgentManifest, type AgentResource, type AgentResourceContent, type AgentResourceInput, type AgentTool, type AgentToolInput, type AgentToolProvider, type AgentToolProviderHandle, type ConnectionMeta, type ConnectionMetaSse, type ConnectionMetaWebsocket, type CreateMcpFetchHandlerOptions, type CreateMcpServerOptions, type DevframeAgentHost, type DevframeAgentHostEvents, type DevframeCapabilities, type DevframeCliOptions, type DevframeConnectionConfigsRegistry, type DevframeDefineDiagnosticsOptions, type DevframeDefinition, type DevframeDeploymentKind, type DevframeDiagnosticsHost, type DevframeDiagnosticsLogger, type DevframeDockDefaults, type DevframeDuplicationStrategy, type DevframeHost, type DevframeNodeContext, type DevframeNodeRpcSession, type DevframeNodeRpcSessionMeta, type DevframeRpcClientFunctions, type DevframeRpcConnection, type DevframeRpcConnectionRequest, type DevframeRpcOptions, type DevframeRpcServerFunctions, type DevframeRpcSharedStates, type DevframeRpcTransportKind, type DevframeScopedNodeContext, type DevframeScopedNodeRpc, type DevframeScopedStreamingHost, type DevframeServiceDefinition, type DevframeServiceDescriptor, type DevframeServiceId, type DevframeServiceInput, type DevframeServiceMeta, type DevframeServiceOf, type DevframeServiceScopeOf, type DevframeServicesHost, type DevframeServicesRegistry, type DevframeServicesScopeRegistry, type DevframeServicesState, type DevframeSettings, type DevframeSettingsRegistry, type DevframeSettingsStore, type DevframeSetupInfo, type DevframeSnapshotRpcEntry, type DevframeSnapshotRpcInputs, type DevframeSseOptions, type DevframeStorageScope, type DevframeViewHost, type DevframeWsOptions, type DevframeWsPeer, type EventEmitter, type EventUnsubscribe, type EventsMap, type McpAuthorization, type McpConnectionInfo, type McpContentBlock, type McpFetchHandler, type McpResourceTemplate, type McpResourceTemplateContent, type McpResourceTemplateEntry, type McpResourcesChangedHook, type McpRouteOptions, type McpServerHandle, type McpSetting, type RemoteAssets, type RemoteAssetsErrorMessage, type RemoteAssetsProvider, type RemoteAssetsProviderCustom, type RemoteAssetsStore, type RpcBroadcastOptions, type RpcFunctionAgentOptions, type RpcFunctionsHost, type RpcSharedStateGetOptions, type RpcSharedStateHost, type RpcStreamingChannel, type RpcStreamingChannelOptions, type RpcStreamingHost, type ScopedBroadcastOptions, type ScopedClientFunctions, type ScopedRpcFn, type ScopedServerFunctions, type ScopedSharedStates, type SettingsForNamespace, type StaticAssetsSource, withMcpContent };
@@ -1,5 +1,5 @@
1
1
  import { n as __exportAll } from "./rolldown-runtime-B4iAMlE-.mjs";
2
- import { t as diagnostics } from "./diagnostics-Dngy7cNp.mjs";
2
+ import { t as diagnostics } from "./diagnostics-BJjvKfVK.mjs";
3
3
  import { join } from "pathe";
4
4
  import { mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
5
  import process from "node:process";