@devframes/hub 0.9.10 → 0.9.11

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.
@@ -1,5 +1,5 @@
1
1
  import { a as resolveClientModuleSpecifier } from "./remote-url-UClKLQ5_.mjs";
2
- import { b as diagnostics, v as prepareDevframe, y as skippedInStaticBuild } from "./context-BWaW6N53.mjs";
2
+ import { v as prepareDevframe, y as diagnostics } from "./context-Cdrtg-Kk.mjs";
3
3
  import { joinURL, withTrailingSlash } from "ufo";
4
4
  import { DEVFRAME_CONNECTION_META_FILENAME, DEVFRAME_DOCK_IMPORTS_FILENAME, DEVFRAME_MCP_ROUTE, DEVFRAME_WS_ROUTE } from "devframe/constants";
5
5
  import { existsSync } from "node:fs";
@@ -77,9 +77,10 @@ function renderClientImportsModule(ctx) {
77
77
  /**
78
78
  * Pass 1: mount each devframe under `<base><id>/` (SPA, meta, iframe dock)
79
79
  * and queue its declared services, guarding the id against reserved hub
80
- * filenames and route-pattern characters. Returns the deferred setup thunks.
80
+ * filenames and route-pattern characters. Returns the deferred setup thunks;
81
+ * each mounted frame is recorded on `ctx.frames`.
81
82
  */
82
- async function mountDevframes(ctx, devframes, base, frames, hubMcpEnabled) {
83
+ async function mountDevframes(ctx, devframes, base, hubMcpEnabled) {
83
84
  const setups = [];
84
85
  for (const { devframe: def, dock } of devframes) {
85
86
  if (RESERVED_HUB_PATHS.includes(def.id)) throw diagnostics.DF8000({ id: def.id });
@@ -91,11 +92,6 @@ async function mountDevframes(ctx, devframes, base, frames, hubMcpEnabled) {
91
92
  ...dock ? { dock } : {}
92
93
  });
93
94
  if (run) setups.push(run);
94
- if (!skippedInStaticBuild(ctx, def)) frames.push({
95
- id: def.id,
96
- base: frameBase,
97
- title: def.name
98
- });
99
95
  }
100
96
  return setups;
101
97
  }
@@ -1,6 +1,6 @@
1
- import { C as DevframeMessageEntryInput, O as DevframeMessagesClient } from "../context-Di-fhMKP.mjs";
1
+ import { k as DevframeMessagesClient, w as DevframeMessageEntryInput } from "../context-BmHQp89a.mjs";
2
2
  import { A as DevframeViewIframe, C as DevframeDockUserEntry, F as RemoteConnectionInfo, P as NavTarget, S as DevframeDockPanelState, _ as DevframeDockEntry, a as DevframeCommandEntry, b as DevframeDockEntryIcon, g as DevframeDockEntriesGrouped, n as DevframeClientCommand, p as ClientScriptEntry, s as DevframeCommandKeybinding, t as DevframeDocksUserSettings } from "../settings-CWHPzCWS.mjs";
3
- import "../index-faD2d5iX.mjs";
3
+ import "../index-Dv8iu9St.mjs";
4
4
  import { DevframeClientRpcHost, DevframeConnection, DevframeConnectionStatus, DevframeRpcClient, DevframeRpcClientOptions, DevframeRpcContext, RpcClientEvents, RpcClientEvents as RpcClientEvents$1 } from "devframe/client";
5
5
  import { EventEmitter } from "devframe/types";
6
6
  import { SharedState } from "devframe/utils/shared-state";
@@ -476,6 +476,20 @@ declare module 'devframe/types' {
476
476
  'hub:terminals:resize': (id: string, cols: number, rows: number) => Promise<void>;
477
477
  }
478
478
  }
479
+ /**
480
+ * A devframe mounted into a hub context, recorded as it is installed
481
+ * (whether through `initHub({ devframes })`, `buildHub`, or `ctx.install`).
482
+ * Enumerable via {@link DevframeHubContext.frames} so a host that mounted the
483
+ * context itself can still discover what to advertise in `__index.json`.
484
+ */
485
+ interface HubMountedFrame {
486
+ /** Dock id the devframe mounted under (disambiguated for duplicates). */
487
+ id: string;
488
+ /** Hub-base-relative mount base of the frame's SPA (trailing slash). */
489
+ base: string;
490
+ /** Human title (the definition's `name`). */
491
+ title: string;
492
+ }
479
493
  /**
480
494
  * Hub-augmented node context that extends devframe's framework-neutral
481
495
  * `DevframeNodeContext` with the hub-level subsystems (`docks`,
@@ -495,6 +509,13 @@ interface DevframeHubContext extends DevframeNodeContext {
495
509
  terminals: DevframeTerminalsHost;
496
510
  messages: DevframeMessagesHost;
497
511
  commands: DevframeCommandsHost;
512
+ /**
513
+ * Every devframe mounted into this context, in mount order. Populated by
514
+ * `ctx.install` (and the batch mount `initHub`/`buildHub` run through it),
515
+ * so a host that assembled and mounted the context itself can hand it to
516
+ * `buildHub({ context })` to emit the discovery documents.
517
+ */
518
+ readonly frames: readonly HubMountedFrame[];
498
519
  /**
499
520
  * Install a {@link DevframeDefinition} into this hub: serve its SPA at the
500
521
  * resolved base, synthesize an iframe dock from its metadata, and run its
@@ -518,4 +539,4 @@ interface CreateHubContextOptions extends CreateHostContextOptions {}
518
539
  */
519
540
  declare function createHubContext(options: CreateHubContextOptions): Promise<DevframeHubContext>;
520
541
  //#endregion
521
- export { DevframeMessagesLevelShortcuts as A, DevframeMessageEntryInput as C, DevframeMessageShortcutInput as D, DevframeMessageLevel as E, DevframeMessagesClient as O, DevframeMessageEntryFrom as S, DevframeMessageHandle as T, DevframeMessageAction as _, DevframeChildProcessExecuteOptions as a, DevframeMessageElementPosition as b, DevframeChildProcessTerminalSession as c, DevframePtyResult as d, DevframePtyTerminalSession as f, DevframeTerminalsHost as g, DevframeTerminalStatus as h, InstallDevframeOptions as i, DevframeMessagesListDelta as j, DevframeMessagesHost as k, DevframePtyExecuteOptions as l, DevframeTerminalSessionBase as m, DevframeHubContext as n, DevframeChildProcessOutput as o, DevframeTerminalSession as p, createHubContext as r, DevframeChildProcessResult as s, CreateHubContextOptions as t, DevframePtyOutput as u, DevframeMessageActivateAction as v, DevframeMessageFilePosition as w, DevframeMessageEntry as x, DevframeMessageCommandAction as y };
542
+ export { DevframeMessagesHost as A, DevframeMessageEntryFrom as C, DevframeMessageLevel as D, DevframeMessageHandle as E, DevframeMessagesListDelta as M, DevframeMessageShortcutInput as O, DevframeMessageEntry as S, DevframeMessageFilePosition as T, DevframeTerminalsHost as _, InstallDevframeOptions as a, DevframeMessageCommandAction as b, DevframeChildProcessResult as c, DevframePtyOutput as d, DevframePtyResult as f, DevframeTerminalStatus as g, DevframeTerminalSessionBase as h, createHubContext as i, DevframeMessagesLevelShortcuts as j, DevframeMessagesClient as k, DevframeChildProcessTerminalSession as l, DevframeTerminalSession as m, DevframeHubContext as n, DevframeChildProcessExecuteOptions as o, DevframePtyTerminalSession as p, HubMountedFrame as r, DevframeChildProcessOutput as s, CreateHubContextOptions as t, DevframePtyExecuteOptions as u, DevframeMessageAction as v, DevframeMessageEntryInput as w, DevframeMessageElementPosition as x, DevframeMessageActivateAction as y };
@@ -32,8 +32,8 @@ const diagnostics = defineDiagnostics({
32
32
  fix: "The filenames directly under the hub base (`__connection.json`, `__ws`, `__index.json`, `__client-imports.js`, `__mcp`, `embedded.js`) are reserved for the hub protocol. Rename the devframe id, or override its mount with a non-colliding `basePath`."
33
33
  },
34
34
  DF8002: {
35
- why: "initHub received both `devframes` and `context`; the two assembly modes are mutually exclusive.",
36
- fix: "Pass `devframes` to let the instance create the hub context and mount each frame itself, or pass a pre-built `context` (your host already mounted the frames), but never both."
35
+ why: "`initHub`/`buildHub` received both `devframes` and `context`; the two assembly modes are mutually exclusive.",
36
+ fix: "Pass `devframes` to let it create the hub context and mount each frame itself, or pass a pre-built `context` (your host already mounted the frames), but never both."
37
37
  },
38
38
  DF8003: {
39
39
  why: "connectionMeta() was called before initHub finished initializing.",
@@ -155,7 +155,7 @@ async function resolvePageScriptClientScript(ctx, clientScript, base) {
155
155
  const { importFrom } = clientScript;
156
156
  if (!isAbsolute(importFrom) || !existsSync(importFrom)) return clientScript;
157
157
  const scriptBase = withTrailingSlash(joinURL(base, "__page-script"));
158
- await ctx.host.mountStatic(scriptBase, dirname(importFrom));
158
+ ctx.views.hostStatic(scriptBase, dirname(importFrom));
159
159
  return {
160
160
  ...clientScript,
161
161
  importFrom: joinURL(scriptBase, basename(importFrom))
@@ -235,6 +235,11 @@ async function prepareDevframe(ctx, d, options = {}) {
235
235
  const clientScript = await resolvePageScriptClientScript(ctx, dockDefaults.clientScript, base);
236
236
  if (clientScript) dockDefaults.clientScript = clientScript;
237
237
  await serveDevframeAssets(ctx, d, id, base);
238
+ ctx.frames.push({
239
+ id,
240
+ base,
241
+ title: d.name
242
+ });
238
243
  ctx.docks.register({
239
244
  id,
240
245
  title: d.name,
@@ -1288,6 +1293,7 @@ async function createHubContext(options) {
1288
1293
  context.terminals = terminals;
1289
1294
  context.messages = messages;
1290
1295
  context.commands = commands;
1296
+ context.frames = [];
1291
1297
  context.install = (devframe, options) => installDevframe(context, devframe, options);
1292
1298
  await docks.init();
1293
1299
  const debounceMs = options.mode === "build" ? 0 : 10;
@@ -1337,4 +1343,4 @@ async function createHubContext(options) {
1337
1343
  return context;
1338
1344
  }
1339
1345
  //#endregion
1340
- export { DevframeCommandsHost as _, hubMessagesAdd as a, diagnostics as b, hubMessagesUpdate as c, hubTerminalsRestart as d, hubTerminalsTerminate as f, DevframeDocksHost as g, DevframeMessagesHost as h, hubDocksActivate as i, hubTerminalsRemove as l, DevframeTerminalsHost as m, builtinHubRpcDeclarations as n, hubMessagesClear as o, hubTerminalsWrite as p, hubCommandsExecute as r, hubMessagesRemove as s, createHubContext as t, hubTerminalsResize as u, prepareDevframe as v, skippedInStaticBuild as y };
1346
+ export { DevframeCommandsHost as _, hubMessagesAdd as a, hubMessagesUpdate as c, hubTerminalsRestart as d, hubTerminalsTerminate as f, DevframeDocksHost as g, DevframeMessagesHost as h, hubDocksActivate as i, hubTerminalsRemove as l, DevframeTerminalsHost as m, builtinHubRpcDeclarations as n, hubMessagesClear as o, hubTerminalsWrite as p, hubCommandsExecute as r, hubMessagesRemove as s, createHubContext as t, hubTerminalsResize as u, prepareDevframe as v, diagnostics as y };
@@ -1,4 +1,4 @@
1
- import "./context-Di-fhMKP.mjs";
1
+ import "./context-BmHQp89a.mjs";
2
2
  import "./settings-CWHPzCWS.mjs";
3
3
  import { RpcDefinitionsFilter, RpcDefinitionsToFunctions } from "devframe/rpc";
4
4
  import { ConnectionMeta as ConnectionMeta$1, DevframeCapabilities, DevframeDiagnosticsHost, DevframeDiagnosticsLogger, DevframeHost as DevframeHost$1, DevframeNodeRpcSession, DevframeRpcClientFunctions, DevframeRpcServerFunctions, DevframeRpcSharedStates, DevframeViewHost, EventEmitter as EventEmitter$1, EventUnsubscribe, EventsMap, RpcBroadcastOptions, RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost, RpcStreamingChannel, RpcStreamingChannelOptions, RpcStreamingHost } from "devframe/types";
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { A as DevframeMessagesLevelShortcuts, C as DevframeMessageEntryInput, D as DevframeMessageShortcutInput, E as DevframeMessageLevel, O as DevframeMessagesClient, S as DevframeMessageEntryFrom, T as DevframeMessageHandle, _ as DevframeMessageAction, a as DevframeChildProcessExecuteOptions, b as DevframeMessageElementPosition, c as DevframeChildProcessTerminalSession, d as DevframePtyResult, f as DevframePtyTerminalSession, g as DevframeTerminalsHost, h as DevframeTerminalStatus, j as DevframeMessagesListDelta, k as DevframeMessagesHost, l as DevframePtyExecuteOptions, m as DevframeTerminalSessionBase, n as DevframeHubContext, o as DevframeChildProcessOutput, p as DevframeTerminalSession, s as DevframeChildProcessResult, t as CreateHubContextOptions, u as DevframePtyOutput, v as DevframeMessageActivateAction, w as DevframeMessageFilePosition, x as DevframeMessageEntry, y as DevframeMessageCommandAction } from "./context-Di-fhMKP.mjs";
1
+ import { A as DevframeMessagesHost, C as DevframeMessageEntryFrom, D as DevframeMessageLevel, E as DevframeMessageHandle, M as DevframeMessagesListDelta, O as DevframeMessageShortcutInput, S as DevframeMessageEntry, T as DevframeMessageFilePosition, _ as DevframeTerminalsHost, b as DevframeMessageCommandAction, c as DevframeChildProcessResult, d as DevframePtyOutput, f as DevframePtyResult, g as DevframeTerminalStatus, h as DevframeTerminalSessionBase, j as DevframeMessagesLevelShortcuts, k as DevframeMessagesClient, l as DevframeChildProcessTerminalSession, m as DevframeTerminalSession, n as DevframeHubContext, o as DevframeChildProcessExecuteOptions, p as DevframePtyTerminalSession, s as DevframeChildProcessOutput, t as CreateHubContextOptions, u as DevframePtyExecuteOptions, v as DevframeMessageAction, w as DevframeMessageEntryInput, x as DevframeMessageElementPosition, y as DevframeMessageActivateAction } from "./context-BmHQp89a.mjs";
2
2
  import { A as DevframeViewIframe, C as DevframeDockUserEntry, D as DevframeViewBuiltin, E as DevframeViewAction, F as RemoteConnectionInfo, I as RemoteDockOptions, M as DevframeViewLauncherStatus, N as FrameSubTabsConfig, O as DevframeViewCustomRender, P as NavTarget, S as DevframeDockPanelState, T as DevframeDocksHost, _ as DevframeDockEntry, a as DevframeCommandEntry, b as DevframeDockEntryIcon, c as DevframeCommandShortcutOverrides, d as DevframeServerCommandEntry, f as DevframeServerCommandInput, g as DevframeDockEntriesGrouped, h as DevframeDockBadgeVariant, i as DevframeCommandBase, j as DevframeViewLauncher, k as DevframeViewGroup, l as DevframeCommandsHost, m as DevframeDockActivation, n as DevframeClientCommand, o as DevframeCommandHandle, p as ClientScriptEntry, r as DevframeCommandAgentOptions, s as DevframeCommandKeybinding, t as DevframeDocksUserSettings, u as DevframeCommandsHostEvents, v as DevframeDockEntryBase, w as DevframeDocksActiveState, x as DevframeDockEntryRegistry, y as DevframeDockEntryCategory } from "./settings-CWHPzCWS.mjs";
3
- import { S as RpcStreamingHost, _ as RpcFunctionsHost, a as DevframeHost, b as RpcStreamingChannel, c as DevframeRpcServerFunctions, d as EventEmitter, f as EventUnsubscribe, g as RpcDefinitionsToFunctions, h as RpcDefinitionsFilter, i as DevframeDiagnosticsLogger, l as DevframeRpcSharedStates, m as RpcBroadcastOptions, n as DevframeCapabilities, o as DevframeNodeRpcSession, p as EventsMap, r as DevframeDiagnosticsHost, s as DevframeRpcClientFunctions, t as ConnectionMeta, u as DevframeViewHost, v as RpcSharedStateGetOptions, x as RpcStreamingChannelOptions, y as RpcSharedStateHost } from "./index-faD2d5iX.mjs";
3
+ import { S as RpcStreamingHost, _ as RpcFunctionsHost, a as DevframeHost, b as RpcStreamingChannel, c as DevframeRpcServerFunctions, d as EventEmitter, f as EventUnsubscribe, g as RpcDefinitionsToFunctions, h as RpcDefinitionsFilter, i as DevframeDiagnosticsLogger, l as DevframeRpcSharedStates, m as RpcBroadcastOptions, n as DevframeCapabilities, o as DevframeNodeRpcSession, p as EventsMap, r as DevframeDiagnosticsHost, s as DevframeRpcClientFunctions, t as ConnectionMeta, u as DevframeViewHost, v as RpcSharedStateGetOptions, x as RpcStreamingChannelOptions, y as RpcSharedStateHost } from "./index-Dv8iu9St.mjs";
4
4
  import { WhenContext, WhenExpression } from "devframe/utils/when";
5
5
  //#region src/define.d.ts
6
6
  declare const defineHubRpcFunction: <NAME extends string, TYPE extends import("devframe/rpc").RpcFunctionType, ARGS extends any[], RETURN = void, const AS extends import("devframe/rpc").RpcArgsSchema | undefined = undefined, const RS extends import("devframe/rpc").RpcReturnSchema | undefined = undefined>(definition: import("devframe/rpc").RpcFunctionDefinition<NAME, TYPE, ARGS, RETURN, AS, RS, DevframeHubContext>) => import("devframe/rpc").RpcFunctionDefinition<NAME, TYPE, ARGS, RETURN, AS, RS, DevframeHubContext>;
@@ -1,4 +1,4 @@
1
- import { n as DevframeHubContext, t as CreateHubContextOptions } from "../context-Di-fhMKP.mjs";
1
+ import { n as DevframeHubContext, t as CreateHubContextOptions } from "../context-BmHQp89a.mjs";
2
2
  import { DevframeHubUi, DevframesInput, DockRendererRegistration } from "./initiate.mjs";
3
3
  import { DevframeServiceInput, DevframeStorageScope } from "devframe/types";
4
4
  //#region src/node/build.d.ts
@@ -18,6 +18,17 @@ interface BuildHubOptions {
18
18
  base?: string;
19
19
  /** Devframes to bake as docks, same input as `initHub({ devframes })`. */
20
20
  devframes?: DevframesInput;
21
+ /**
22
+ * Bring your own already-mounted hub context instead of `devframes`, the
23
+ * build counterpart of `initHub({ context })`: a host that assembled
24
+ * `createHubContext` + `ctx.install` itself (Vite DevTools' kit-augmented
25
+ * context, devframes mounted from Vite plugins) hands the mounted context
26
+ * here and `buildHub` bakes it, reading `ctx.frames` and
27
+ * `ctx.views.buildStaticDirs` for what to emit. `configure` and the UI
28
+ * slot's `setup` still run against it, so pass them here rather than running
29
+ * them yourself. Mutually exclusive with `devframes`.
30
+ */
31
+ context?: DevframeHubContext;
21
32
  /** Host-level wire services, same contract as `initHub({ services })`. */
22
33
  services?: DevframeServiceInput[];
23
34
  /** Extra RPC declarations registered at context creation. */
@@ -47,14 +58,22 @@ interface BuildHubOptions {
47
58
  getStorageDir?: (scope: DevframeStorageScope) => string;
48
59
  /** Pretty-print RPC dump JSON files. Default: `false` (minified shards). */
49
60
  pretty?: boolean;
61
+ /**
62
+ * Remove {@link BuildHubOptions.outDir} before writing. Default `true`,
63
+ * matching a from-scratch build. Pass `false` to bake into a directory that
64
+ * already holds sibling output (an app's own `dist/` the hub subtree lives
65
+ * beside).
66
+ */
67
+ clean?: boolean;
50
68
  }
51
69
  /**
52
70
  * Produce a self-contained static deploy of a whole hub, the multi-devframe
53
71
  * counterpart of devframe's `createBuild`:
54
72
  *
55
- * - Build a `mode: 'build'` hub context and mount every devframe: each
56
- * SPA is copied to `<outDir>/<id>/`, an absolute-path page script to
57
- * `<outDir>/<id>/__page-script/`, and its `setup(ctx)` runs.
73
+ * - Build a `mode: 'build'` hub context and mount every devframe (or reuse a
74
+ * `context` a host mounted itself): each SPA is copied to `<outDir>/<id>/`,
75
+ * an absolute-path page script to `<outDir>/<id>/__page-script/`, and its
76
+ * `setup(ctx)` runs.
58
77
  * - Copy the UI slot's viewer SPA, `embedded.js`, and the renderer
59
78
  * modules, and write the discovery documents (`__index.json`,
60
79
  * `__client-imports.js`).
@@ -66,8 +85,8 @@ interface BuildHubOptions {
66
85
  * (docks, commands, renderer manifest), so `createDevframeClientRuntime`
67
86
  * and every frame SPA boot from the dump with no live server.
68
87
  *
69
- * Reads work from the baked dump; live writes (messages, terminals,
70
- * commands execution) have no server and degrade to no-ops in the clients.
88
+ * Reads work from the baked dump; live writes (messages, terminals, commands
89
+ * execution) have no server and degrade to no-ops in the clients.
71
90
  */
72
91
  declare function buildHub(options: BuildHubOptions): Promise<void>;
73
92
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { a as normalizeHubBase, i as DOCK_RENDERERS_STATE_KEY } from "../constants-Da23JxCZ.mjs";
2
- import { b as diagnostics, t as createHubContext } from "../context-BWaW6N53.mjs";
3
- import { i as resolveRendererRegistrations, n as renderClientImportsModule, r as resolveDevframesInput, t as mountDevframes } from "../assemble-Hj36CCzH.mjs";
2
+ import { t as createHubContext, y as diagnostics } from "../context-Cdrtg-Kk.mjs";
3
+ import { i as resolveRendererRegistrations, n as renderClientImportsModule, r as resolveDevframesInput, t as mountDevframes } from "../assemble-BvY5jfgi.mjs";
4
4
  import { joinURL } from "ufo";
5
5
  import { DEVFRAME_CONNECTION_META_FILENAME, DEVFRAME_DOCK_IMPORTS_FILENAME } from "devframe/constants";
6
6
  import { existsSync } from "node:fs";
@@ -9,15 +9,17 @@ import process from "node:process";
9
9
  import { createH3DevframeHost } from "devframe/internal";
10
10
  import { collectStaticRpcDump, writeStaticRpcDump } from "devframe/rpc/dump";
11
11
  import { colors } from "devframe/utils/colors";
12
+ import { resolveStaticAssetsSource } from "devframe/utils/remote-assets";
12
13
  import { dirname, resolve } from "pathe";
13
14
  //#region src/node/build.ts
14
15
  /**
15
16
  * Produce a self-contained static deploy of a whole hub, the multi-devframe
16
17
  * counterpart of devframe's `createBuild`:
17
18
  *
18
- * - Build a `mode: 'build'` hub context and mount every devframe: each
19
- * SPA is copied to `<outDir>/<id>/`, an absolute-path page script to
20
- * `<outDir>/<id>/__page-script/`, and its `setup(ctx)` runs.
19
+ * - Build a `mode: 'build'` hub context and mount every devframe (or reuse a
20
+ * `context` a host mounted itself): each SPA is copied to `<outDir>/<id>/`,
21
+ * an absolute-path page script to `<outDir>/<id>/__page-script/`, and its
22
+ * `setup(ctx)` runs.
21
23
  * - Copy the UI slot's viewer SPA, `embedded.js`, and the renderer
22
24
  * modules, and write the discovery documents (`__index.json`,
23
25
  * `__client-imports.js`).
@@ -29,46 +31,56 @@ import { dirname, resolve } from "pathe";
29
31
  * (docks, commands, renderer manifest), so `createDevframeClientRuntime`
30
32
  * and every frame SPA boot from the dump with no live server.
31
33
  *
32
- * Reads work from the baked dump; live writes (messages, terminals,
33
- * commands execution) have no server and degrade to no-ops in the clients.
34
+ * Reads work from the baked dump; live writes (messages, terminals, commands
35
+ * execution) have no server and degrade to no-ops in the clients.
34
36
  */
35
37
  async function buildHub(options) {
38
+ if (options.context && options.devframes?.length) throw diagnostics.DF8002();
36
39
  const base = normalizeHubBase(options.base ?? "/__devframes/");
37
40
  const cwd = options.cwd ?? process.cwd();
38
41
  const outDir = resolve(cwd, options.outDir);
39
42
  const rendererRegistrations = resolveRendererRegistrations(options.renderers ?? []);
40
- if (existsSync(outDir)) await fs.rm(outDir, { recursive: true });
43
+ const ctx = options.context ?? await createAndMountContext(options, base, cwd);
44
+ await options.configure?.(ctx);
45
+ await options.ui?.setup?.(ctx);
46
+ if (options.clean !== false && existsSync(outDir)) await fs.rm(outDir, { recursive: true });
41
47
  await fs.mkdir(outDir, { recursive: true });
42
48
  /** Map a hub-base-relative URL base to its on-disk location under `outDir`. */
43
- function resolveOutPath(urlBase) {
49
+ const resolveOutPath = (urlBase) => {
44
50
  if (!urlBase.startsWith(base)) throw diagnostics.DF8006({
45
51
  urlBase,
46
52
  base
47
53
  });
48
54
  return resolve(outDir, urlBase.slice(base.length));
49
- }
50
- const frameMetaBases = [];
55
+ };
56
+ await copyBuildStatics(ctx, resolveOutPath);
57
+ await publishRendererManifest(ctx, rendererRegistrations, base, outDir);
58
+ await writeUiArtifacts(options.ui, outDir);
59
+ await fs.writeFile(resolve(outDir, DEVFRAME_DOCK_IMPORTS_FILENAME), renderClientImportsModule(ctx), "utf-8");
60
+ await writeHubIndex(ctx, base, outDir, options);
61
+ await writeConnectionMetas(ctx, base, outDir, resolveOutPath);
62
+ console.log(colors.cyan`[devframes-hub] writing RPC dump to ${resolve(outDir, "__rpc-dump")}`);
63
+ const dump = await collectStaticRpcDump(ctx.rpc.definitions.values(), ctx);
64
+ await writeStaticRpcDump(dump, outDir, { pretty: options.pretty });
65
+ const count = ctx.frames.length;
66
+ console.log(colors.green`[devframes-hub] built ${count} devframe${count === 1 ? "" : "s"} -> ${outDir}`);
67
+ }
68
+ /**
69
+ * Build a `mode: 'build'` hub context and mount the `devframes` input. The host
70
+ * copies nothing live (`mountStatic`/`mountConnectionMeta` are no-ops): every
71
+ * static is copied afterwards from `ctx.views.buildStaticDirs`, and each frame's
72
+ * meta is written from `ctx.frames`.
73
+ */
74
+ async function createAndMountContext(options, base, cwd) {
51
75
  const host = {
52
76
  ...createH3DevframeHost({
53
77
  origin: "http://localhost",
54
78
  appName: "devframes",
55
79
  workspaceRoot: cwd,
56
- /**
57
- * A static build "serves" by copying: a local dist verbatim, a remote
58
- * assets source by materializing every listed file.
59
- */
60
- mount: async (mountBase, source) => {
61
- const target = resolveOutPath(mountBase);
62
- await fs.mkdir(dirname(target), { recursive: true });
63
- if (typeof source === "string") await fs.cp(source, target, { recursive: true });
64
- else await source.materialize(target);
65
- }
80
+ mount: () => {}
66
81
  }),
67
82
  ...options.getStorageDir ? { getStorageDir: options.getStorageDir } : {},
68
- mountConnectionMeta: (frameBase) => {
69
- resolveOutPath(frameBase);
70
- frameMetaBases.push(frameBase);
71
- }
83
+ mountConnectionMeta: () => {}
72
84
  };
73
85
  const ctx = await createHubContext({
74
86
  cwd,
@@ -79,32 +91,30 @@ async function buildHub(options) {
79
91
  });
80
92
  const devframes = await resolveDevframesInput(options.devframes ?? []);
81
93
  for (const input of options.services ?? []) ctx.services.install(input);
82
- const frames = [];
83
- const setups = await mountDevframes(ctx, devframes, base, frames, false);
94
+ const setups = await mountDevframes(ctx, devframes, base, false);
84
95
  await ctx.services.ready();
85
96
  for (const run of setups) await run();
86
- await options.configure?.(ctx);
87
- await options.ui?.setup?.(ctx);
88
- await publishRendererManifest(ctx, rendererRegistrations, base, outDir);
89
- await writeUiArtifacts(options.ui, outDir);
90
- await fs.writeFile(resolve(outDir, DEVFRAME_DOCK_IMPORTS_FILENAME), renderClientImportsModule(ctx), "utf-8");
91
- await fs.writeFile(resolve(outDir, "__index.json"), `${JSON.stringify({
92
- name: options.name,
93
- version: options.version,
94
- base,
95
- frames,
96
- endpoints: {
97
- connection: DEVFRAME_CONNECTION_META_FILENAME,
98
- clientImports: DEVFRAME_DOCK_IMPORTS_FILENAME,
99
- index: "__index.json",
100
- ...options.ui?.embedded ? { embedded: "embedded.js" } : {}
101
- }
102
- }, null, 2)}\n`, "utf-8");
103
- await writeConnectionMetas(ctx, base, outDir, frameMetaBases.map(resolveOutPath));
104
- console.log(colors.cyan`[devframes-hub] writing RPC dump to ${resolve(outDir, "__rpc-dump")}`);
105
- const dump = await collectStaticRpcDump(ctx.rpc.definitions.values(), ctx);
106
- await writeStaticRpcDump(dump, outDir, { pretty: options.pretty });
107
- console.log(colors.green`[devframes-hub] built ${frames.length} devframe${frames.length === 1 ? "" : "s"} -> ${outDir}`);
97
+ return ctx;
98
+ }
99
+ /**
100
+ * Copy every static the context registered through `ctx.views.hostStatic`
101
+ * (recorded in `ctx.views.buildStaticDirs`): a local dir verbatim, a remote
102
+ * source by materializing every listed file. Reads the list rather than
103
+ * relying on a live host `mountStatic`, so a context whose host copied no
104
+ * statics at mount time (the build host, or a kit's) still gets its assets in.
105
+ * Each source re-resolves with the `resolveFrom` it was mounted with, so a
106
+ * remote source (e.g. a plugin's `--assets` package) resolves to the same
107
+ * locally-installed copy it would serve live.
108
+ */
109
+ async function copyBuildStatics(ctx, resolveOutPath) {
110
+ const storageDir = ctx.host.getStorageDir("project");
111
+ for (const { baseUrl, source, resolveFrom } of ctx.views.buildStaticDirs) {
112
+ const target = resolveOutPath(baseUrl);
113
+ const resolved = resolveStaticAssetsSource(source, storageDir, resolveFrom);
114
+ await fs.mkdir(dirname(target), { recursive: true });
115
+ if (typeof resolved === "string") await fs.cp(resolved, target, { recursive: true });
116
+ else await resolved.materialize(target);
117
+ }
108
118
  }
109
119
  /**
110
120
  * Publish the renderer manifest exactly like `initHub` does, so it is baked
@@ -137,14 +147,33 @@ async function writeUiArtifacts(ui, outDir) {
137
147
  await fs.writeFile(target, produce());
138
148
  }
139
149
  }
150
+ /** Write `<base>__index.json`: the discovery document listing every frame. */
151
+ async function writeHubIndex(ctx, base, outDir, options) {
152
+ await fs.writeFile(resolve(outDir, "__index.json"), `${JSON.stringify({
153
+ name: options.name,
154
+ version: options.version,
155
+ base,
156
+ frames: ctx.frames.map(({ id, base, title }) => ({
157
+ id,
158
+ base,
159
+ title
160
+ })),
161
+ endpoints: {
162
+ connection: DEVFRAME_CONNECTION_META_FILENAME,
163
+ clientImports: DEVFRAME_DOCK_IMPORTS_FILENAME,
164
+ index: "__index.json",
165
+ ...options.ui?.embedded ? { embedded: "embedded.js" } : {}
166
+ }
167
+ }, null, 2)}\n`, "utf-8");
168
+ }
140
169
  /**
141
- * Write the `backend: 'static'` connection meta at the hub base, and a copy
142
- * at every frame base whose `baseUrl` points relative resolution (the RPC
143
- * dump) back at the hub's own meta, so a frame SPA that fetched its
144
- * per-frame copy (instead of inheriting the host page's connection) still
145
- * finds the shared dump.
170
+ * Write the `backend: 'static'` connection meta at the hub base, and a copy at
171
+ * every frame base that served its own SPA (i.e. registered a static mount at
172
+ * that base) whose `baseUrl` points relative resolution (the RPC dump) back at
173
+ * the hub's own meta, so a frame SPA that fetched its per-frame copy (instead
174
+ * of inheriting the host page's connection) still finds the shared dump.
146
175
  */
147
- async function writeConnectionMetas(ctx, base, outDir, frameDirs) {
176
+ async function writeConnectionMetas(ctx, base, outDir, resolveOutPath) {
148
177
  const jsonSerializableMethods = [];
149
178
  for (const def of ctx.rpc.definitions.values()) if (def.jsonSerializable === true) jsonSerializableMethods.push(def.name);
150
179
  const meta = {
@@ -157,8 +186,10 @@ async function writeConnectionMetas(ctx, base, outDir, frameDirs) {
157
186
  ...meta,
158
187
  baseUrl: joinURL(base, DEVFRAME_CONNECTION_META_FILENAME)
159
188
  };
160
- for (const frameDir of frameDirs) {
161
- const target = resolve(frameDir, DEVFRAME_CONNECTION_META_FILENAME);
189
+ const servedBases = new Set(ctx.views.buildStaticDirs.map((dir) => dir.baseUrl));
190
+ for (const frame of ctx.frames) {
191
+ if (!servedBases.has(frame.base)) continue;
192
+ const target = resolve(resolveOutPath(frame.base), DEVFRAME_CONNECTION_META_FILENAME);
162
193
  await fs.mkdir(dirname(target), { recursive: true });
163
194
  await fs.writeFile(target, JSON.stringify(frameMeta, null, 2), "utf-8");
164
195
  }
@@ -1,4 +1,4 @@
1
- import { C as DevframeMessageEntryInput, D as DevframeMessageShortcutInput, T as DevframeMessageHandle, a as DevframeChildProcessExecuteOptions, c as DevframeChildProcessTerminalSession, f as DevframePtyTerminalSession, g as DevframeTerminalsHost$1, i as InstallDevframeOptions, j as DevframeMessagesListDelta, k as DevframeMessagesHost$1, l as DevframePtyExecuteOptions, m as DevframeTerminalSessionBase, n as DevframeHubContext, p as DevframeTerminalSession, r as createHubContext, t as CreateHubContextOptions, x as DevframeMessageEntry } from "../context-Di-fhMKP.mjs";
1
+ import { A as DevframeMessagesHost$1, E as DevframeMessageHandle, M as DevframeMessagesListDelta, O as DevframeMessageShortcutInput, S as DevframeMessageEntry, _ as DevframeTerminalsHost$1, a as InstallDevframeOptions, h as DevframeTerminalSessionBase, i as createHubContext, l as DevframeChildProcessTerminalSession, m as DevframeTerminalSession, n as DevframeHubContext, o as DevframeChildProcessExecuteOptions, p as DevframePtyTerminalSession, r as HubMountedFrame, t as CreateHubContextOptions, u as DevframePtyExecuteOptions, w as DevframeMessageEntryInput } from "../context-BmHQp89a.mjs";
2
2
  import { C as DevframeDockUserEntry, T as DevframeDocksHost$1, _ as DevframeDockEntry, d as DevframeServerCommandEntry, f as DevframeServerCommandInput, l as DevframeCommandsHost$1, o as DevframeCommandHandle, p as ClientScriptEntry, t as DevframeDocksUserSettings } from "../settings-CWHPzCWS.mjs";
3
3
  import { RpcFunctionDefinitionAny } from "devframe/rpc";
4
4
  import { SharedState } from "devframe/utils/shared-state";
@@ -388,4 +388,4 @@ declare const builtinHubRpcDeclarations: readonly RpcFunctionDefinitionAny[];
388
388
  */
389
389
  declare function createSimpleClientScript(fn: string | ((ctx: any) => void)): ClientScriptEntry;
390
390
  //#endregion
391
- export { CreateHubContextOptions, DevframeCommandsHost, DevframeDocksHost, DevframeHubContext, DevframeMessagesHost, DevframeTerminalsHost, type InstallDevframeOptions, builtinHubRpcDeclarations, createHubContext, createSimpleClientScript, hubCommandsExecute, hubDocksActivate, hubMessagesAdd, hubMessagesClear, hubMessagesRemove, hubMessagesUpdate, hubTerminalsRemove, hubTerminalsResize, hubTerminalsRestart, hubTerminalsTerminate, hubTerminalsWrite };
391
+ export { CreateHubContextOptions, DevframeCommandsHost, DevframeDocksHost, DevframeHubContext, DevframeMessagesHost, DevframeTerminalsHost, HubMountedFrame, type InstallDevframeOptions, builtinHubRpcDeclarations, createHubContext, createSimpleClientScript, hubCommandsExecute, hubDocksActivate, hubMessagesAdd, hubMessagesClear, hubMessagesRemove, hubMessagesUpdate, hubTerminalsRemove, hubTerminalsResize, hubTerminalsRestart, hubTerminalsTerminate, hubTerminalsWrite };
@@ -1,4 +1,4 @@
1
- import { _ as DevframeCommandsHost, a as hubMessagesAdd, c as hubMessagesUpdate, d as hubTerminalsRestart, f as hubTerminalsTerminate, g as DevframeDocksHost, h as DevframeMessagesHost, i as hubDocksActivate, l as hubTerminalsRemove, m as DevframeTerminalsHost, n as builtinHubRpcDeclarations, o as hubMessagesClear, p as hubTerminalsWrite, r as hubCommandsExecute, s as hubMessagesRemove, t as createHubContext, u as hubTerminalsResize } from "../context-BWaW6N53.mjs";
1
+ import { _ as DevframeCommandsHost, a as hubMessagesAdd, c as hubMessagesUpdate, d as hubTerminalsRestart, f as hubTerminalsTerminate, g as DevframeDocksHost, h as DevframeMessagesHost, i as hubDocksActivate, l as hubTerminalsRemove, m as DevframeTerminalsHost, n as builtinHubRpcDeclarations, o as hubMessagesClear, p as hubTerminalsWrite, r as hubCommandsExecute, s as hubMessagesRemove, t as createHubContext, u as hubTerminalsResize } from "../context-Cdrtg-Kk.mjs";
2
2
  import "ufo";
3
3
  import "node:fs";
4
4
  import "node:process";
@@ -1,4 +1,4 @@
1
- import { i as InstallDevframeOptions, n as DevframeHubContext, t as CreateHubContextOptions } from "../context-Di-fhMKP.mjs";
1
+ import { a as InstallDevframeOptions, n as DevframeHubContext, t as CreateHubContextOptions } from "../context-BmHQp89a.mjs";
2
2
  import { r as DEVFRAMES_HUB_BASE } from "../constants-Bz4yclHo.mjs";
3
3
  import { DevframeInstanceRecord } from "devframe/internal";
4
4
  import { ConnectionMeta, DevframeDefinition, DevframeServiceInput, DevframeSseOptions, DevframeStorageScope, DevframeWsOptions, McpSetting } from "devframe/types";
@@ -1,6 +1,6 @@
1
1
  import { a as normalizeHubBase, i as DOCK_RENDERERS_STATE_KEY, r as DEVFRAMES_HUB_BASE } from "../constants-Da23JxCZ.mjs";
2
- import { b as diagnostics, t as createHubContext } from "../context-BWaW6N53.mjs";
3
- import { i as resolveRendererRegistrations, n as renderClientImportsModule, r as resolveDevframesInput, t as mountDevframes } from "../assemble-Hj36CCzH.mjs";
2
+ import { t as createHubContext, y as diagnostics } from "../context-Cdrtg-Kk.mjs";
3
+ import { i as resolveRendererRegistrations, n as renderClientImportsModule, r as resolveDevframesInput, t as mountDevframes } from "../assemble-BvY5jfgi.mjs";
4
4
  import { joinURL, withoutLeadingSlash } from "ufo";
5
5
  import { DEVFRAME_CONNECTION_META_FILENAME, DEVFRAME_DOCK_IMPORTS_FILENAME, DEVFRAME_MCP_ROUTE } from "devframe/constants";
6
6
  import { readFile } from "node:fs/promises";
@@ -75,7 +75,6 @@ function initHub(options) {
75
75
  const baseNoSlash = base.slice(0, -1);
76
76
  const app = new H3();
77
77
  const cwd = options.cwd ?? process.cwd();
78
- const frames = [];
79
78
  const rendererRegistrations = resolveRendererRegistrations(options.renderers ?? []);
80
79
  const shell = createInstanceShell({
81
80
  base,
@@ -118,7 +117,7 @@ function initHub(options) {
118
117
  };
119
118
  const devframes = await resolveDevframesInput(options.devframes ?? []);
120
119
  for (const input of options.services ?? []) ctx.services.install(input);
121
- const setups = await mountDevframes(ctx, devframes, base, frames, options.mcp !== false);
120
+ const setups = await mountDevframes(ctx, devframes, base, options.mcp !== false);
122
121
  await ctx.services.ready();
123
122
  for (const run of setups) await run();
124
123
  await options.configure?.(ctx);
@@ -158,7 +157,11 @@ function initHub(options) {
158
157
  name: options.name,
159
158
  version: options.version,
160
159
  base,
161
- frames,
160
+ frames: ctx.frames.map(({ id, base, title }) => ({
161
+ id,
162
+ base,
163
+ title
164
+ })),
162
165
  endpoints: {
163
166
  connection: DEVFRAME_CONNECTION_META_FILENAME,
164
167
  clientImports: DEVFRAME_DOCK_IMPORTS_FILENAME,
@@ -1,4 +1,4 @@
1
- import { A as DevframeMessagesLevelShortcuts, C as DevframeMessageEntryInput, D as DevframeMessageShortcutInput, E as DevframeMessageLevel, O as DevframeMessagesClient, S as DevframeMessageEntryFrom, T as DevframeMessageHandle, _ as DevframeMessageAction, a as DevframeChildProcessExecuteOptions, b as DevframeMessageElementPosition, c as DevframeChildProcessTerminalSession, d as DevframePtyResult, f as DevframePtyTerminalSession, g as DevframeTerminalsHost, h as DevframeTerminalStatus, j as DevframeMessagesListDelta, k as DevframeMessagesHost, l as DevframePtyExecuteOptions, m as DevframeTerminalSessionBase, n as DevframeHubContext, o as DevframeChildProcessOutput, p as DevframeTerminalSession, s as DevframeChildProcessResult, t as CreateHubContextOptions, u as DevframePtyOutput, v as DevframeMessageActivateAction, w as DevframeMessageFilePosition, x as DevframeMessageEntry, y as DevframeMessageCommandAction } from "../context-Di-fhMKP.mjs";
1
+ import { A as DevframeMessagesHost, C as DevframeMessageEntryFrom, D as DevframeMessageLevel, E as DevframeMessageHandle, M as DevframeMessagesListDelta, O as DevframeMessageShortcutInput, S as DevframeMessageEntry, T as DevframeMessageFilePosition, _ as DevframeTerminalsHost, b as DevframeMessageCommandAction, c as DevframeChildProcessResult, d as DevframePtyOutput, f as DevframePtyResult, g as DevframeTerminalStatus, h as DevframeTerminalSessionBase, j as DevframeMessagesLevelShortcuts, k as DevframeMessagesClient, l as DevframeChildProcessTerminalSession, m as DevframeTerminalSession, n as DevframeHubContext, o as DevframeChildProcessExecuteOptions, p as DevframePtyTerminalSession, s as DevframeChildProcessOutput, t as CreateHubContextOptions, u as DevframePtyExecuteOptions, v as DevframeMessageAction, w as DevframeMessageEntryInput, x as DevframeMessageElementPosition, y as DevframeMessageActivateAction } from "../context-BmHQp89a.mjs";
2
2
  import { A as DevframeViewIframe, C as DevframeDockUserEntry, D as DevframeViewBuiltin, E as DevframeViewAction, F as RemoteConnectionInfo, I as RemoteDockOptions, M as DevframeViewLauncherStatus, N as FrameSubTabsConfig, O as DevframeViewCustomRender, P as NavTarget, S as DevframeDockPanelState, T as DevframeDocksHost, _ as DevframeDockEntry, a as DevframeCommandEntry, b as DevframeDockEntryIcon, c as DevframeCommandShortcutOverrides, d as DevframeServerCommandEntry, f as DevframeServerCommandInput, g as DevframeDockEntriesGrouped, h as DevframeDockBadgeVariant, i as DevframeCommandBase, j as DevframeViewLauncher, k as DevframeViewGroup, l as DevframeCommandsHost, m as DevframeDockActivation, n as DevframeClientCommand, o as DevframeCommandHandle, p as ClientScriptEntry, r as DevframeCommandAgentOptions, s as DevframeCommandKeybinding, t as DevframeDocksUserSettings, u as DevframeCommandsHostEvents, v as DevframeDockEntryBase, w as DevframeDocksActiveState, x as DevframeDockEntryRegistry, y as DevframeDockEntryCategory } from "../settings-CWHPzCWS.mjs";
3
- import { S as RpcStreamingHost, _ as RpcFunctionsHost, a as DevframeHost, b as RpcStreamingChannel, c as DevframeRpcServerFunctions, d as EventEmitter, f as EventUnsubscribe, g as RpcDefinitionsToFunctions, h as RpcDefinitionsFilter, i as DevframeDiagnosticsLogger, l as DevframeRpcSharedStates, m as RpcBroadcastOptions, n as DevframeCapabilities, o as DevframeNodeRpcSession, p as EventsMap, r as DevframeDiagnosticsHost, s as DevframeRpcClientFunctions, t as ConnectionMeta, u as DevframeViewHost, v as RpcSharedStateGetOptions, x as RpcStreamingChannelOptions, y as RpcSharedStateHost } from "../index-faD2d5iX.mjs";
3
+ import { S as RpcStreamingHost, _ as RpcFunctionsHost, a as DevframeHost, b as RpcStreamingChannel, c as DevframeRpcServerFunctions, d as EventEmitter, f as EventUnsubscribe, g as RpcDefinitionsToFunctions, h as RpcDefinitionsFilter, i as DevframeDiagnosticsLogger, l as DevframeRpcSharedStates, m as RpcBroadcastOptions, n as DevframeCapabilities, o as DevframeNodeRpcSession, p as EventsMap, r as DevframeDiagnosticsHost, s as DevframeRpcClientFunctions, t as ConnectionMeta, u as DevframeViewHost, v as RpcSharedStateGetOptions, x as RpcStreamingChannelOptions, y as RpcSharedStateHost } from "../index-Dv8iu9St.mjs";
4
4
  export { ClientScriptEntry, type ConnectionMeta, type CreateHubContextOptions, type DevframeCapabilities, DevframeChildProcessExecuteOptions, DevframeChildProcessOutput, DevframeChildProcessResult, DevframeChildProcessTerminalSession, DevframeClientCommand, DevframeCommandAgentOptions, DevframeCommandBase, DevframeCommandEntry, DevframeCommandHandle, DevframeCommandKeybinding, DevframeCommandShortcutOverrides, DevframeCommandsHost, DevframeCommandsHostEvents, type DevframeDiagnosticsHost, type DevframeDiagnosticsLogger, DevframeDockActivation, DevframeDockBadgeVariant, DevframeDockEntriesGrouped, DevframeDockEntry, DevframeDockEntryBase, DevframeDockEntryCategory, DevframeDockEntryIcon, DevframeDockEntryRegistry, DevframeDockPanelState, DevframeDockUserEntry, DevframeDocksActiveState, DevframeDocksHost, DevframeDocksUserSettings, type DevframeHost, type DevframeHubContext, DevframeMessageAction, DevframeMessageActivateAction, DevframeMessageCommandAction, DevframeMessageElementPosition, DevframeMessageEntry, DevframeMessageEntryFrom, DevframeMessageEntryInput, DevframeMessageFilePosition, DevframeMessageHandle, DevframeMessageLevel, DevframeMessageShortcutInput, DevframeMessagesClient, DevframeMessagesHost, DevframeMessagesLevelShortcuts, DevframeMessagesListDelta, type DevframeNodeRpcSession, DevframePtyExecuteOptions, DevframePtyOutput, DevframePtyResult, DevframePtyTerminalSession, type DevframeRpcClientFunctions, type DevframeRpcServerFunctions, type DevframeRpcSharedStates, DevframeServerCommandEntry, DevframeServerCommandInput, DevframeTerminalSession, DevframeTerminalSessionBase, DevframeTerminalStatus, DevframeTerminalsHost, DevframeViewAction, DevframeViewBuiltin, DevframeViewCustomRender, DevframeViewGroup, type DevframeViewHost, DevframeViewIframe, DevframeViewLauncher, DevframeViewLauncherStatus, type EventEmitter, type EventUnsubscribe, type EventsMap, FrameSubTabsConfig, NavTarget, RemoteConnectionInfo, RemoteDockOptions, type RpcBroadcastOptions, type RpcDefinitionsFilter, type RpcDefinitionsToFunctions, type RpcFunctionsHost, type RpcSharedStateGetOptions, type RpcSharedStateHost, type RpcStreamingChannel, type RpcStreamingChannelOptions, type RpcStreamingHost };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@devframes/hub",
3
3
  "type": "module",
4
- "version": "0.9.10",
4
+ "version": "0.9.11",
5
5
  "description": "Hub layer that orchestrates devframe docks, terminals, messages, and commands on any host.",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -35,7 +35,7 @@
35
35
  "dist"
36
36
  ],
37
37
  "peerDependencies": {
38
- "devframe": "0.9.10"
38
+ "devframe": "0.9.11"
39
39
  },
40
40
  "dependencies": {
41
41
  "@standard-schema/spec": "^1.1.0",
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/node": "^26.4.0",
52
- "devframe": "0.9.10",
52
+ "devframe": "0.9.11",
53
53
  "get-port-please": "^3.2.0",
54
54
  "mlly": "^1.8.2",
55
55
  "tsdown": "^0.22.14",