devframe 0.1.19 → 0.1.20

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 (67) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/build.d.mts +1 -1
  3. package/dist/adapters/build.mjs +9 -6
  4. package/dist/adapters/cli.d.mts +1 -1
  5. package/dist/adapters/cli.mjs +1 -1
  6. package/dist/adapters/dev.d.mts +2 -2
  7. package/dist/adapters/dev.mjs +1 -1
  8. package/dist/adapters/embedded.d.mts +1 -1
  9. package/dist/adapters/kit.d.mts +1 -1
  10. package/dist/adapters/mcp.d.mts +1 -1
  11. package/dist/adapters/mcp.mjs +6 -3
  12. package/dist/adapters/vite.d.mts +1 -1
  13. package/dist/adapters/vite.mjs +1 -1
  14. package/dist/client/index.d.mts +42 -6
  15. package/dist/client/index.mjs +1673 -2
  16. package/dist/constants.d.mts +1 -1
  17. package/dist/{context-BsNZMCnr.mjs → context-BfvbAyGk.mjs} +428 -40
  18. package/dist/{dev-Djy5hbgs.mjs → dev-B8i_CBlQ.mjs} +6 -5
  19. package/dist/{devtool-CIqONpYU.d.mts → devtool-Bm6zZAw5.d.mts} +365 -27
  20. package/dist/host-h3-BMvrFzIJ.mjs +24 -0
  21. package/dist/{index-BwrLhNmz.d.mts → index-BCo03GEF.d.mts} +1 -1
  22. package/dist/index.d.mts +4 -4
  23. package/dist/node/index.d.mts +44 -7
  24. package/dist/node/index.mjs +5 -5
  25. package/dist/recipes/open-helpers.d.mts +1 -1
  26. package/dist/recipes/open-helpers.mjs +3 -1
  27. package/dist/rpc/index.d.mts +2 -2
  28. package/dist/rpc/index.mjs +2 -2
  29. package/dist/rpc/transports/ws-client.d.mts +1 -1
  30. package/dist/rpc/transports/ws-client.mjs +1 -1
  31. package/dist/rpc/transports/ws-server.d.mts +1 -1
  32. package/dist/rpc/transports/ws-server.mjs +1 -1
  33. package/dist/{rpc-D7LxIh8t.mjs → rpc-INbWfHoX.mjs} +1 -1
  34. package/dist/{serialization-BN2ZQEE9.mjs → serialization-DwKi05Pn.mjs} +1 -1
  35. package/dist/{server-CaUeMcAh.d.mts → server-DksyT-um.d.mts} +1 -1
  36. package/dist/{server-DrBxa6ZV.mjs → server-qRRM8t3v.mjs} +27 -2
  37. package/dist/{static-dump-cyGfMmRf.mjs → static-dump-C1aVSwxY.mjs} +1 -1
  38. package/dist/types/index.d.mts +4 -4
  39. package/dist/utils/events.d.mts +1 -1
  40. package/dist/utils/shared-state.d.mts +2 -2
  41. package/dist/utils/shared-state.mjs +1 -1
  42. package/dist/utils/state.d.mts +2 -1
  43. package/dist/utils/state.mjs +1 -1
  44. package/dist/utils/streaming-channel.d.mts +2 -0
  45. package/dist/utils/streaming-channel.mjs +255 -0
  46. package/dist/utils/when.d.mts +1 -1
  47. package/dist/{ws-client-DOYwYluO.d.mts → ws-client-DQySVfF_.d.mts} +1 -1
  48. package/dist/{ws-server-DHMeNOY_.d.mts → ws-server-VQqESKAs.d.mts} +13 -1
  49. package/package.json +9 -17
  50. package/skills/devframe/README.md +13 -0
  51. package/skills/devframe/SKILL.md +452 -0
  52. package/skills/devframe/templates/counter-devtool.ts +29 -0
  53. package/skills/devframe/templates/spa-devtool.ts +33 -0
  54. package/skills/devframe/templates/vite-client.ts +11 -0
  55. package/dist/client-C6w_NshP.mjs +0 -1569
  56. package/dist/helpers/nuxt/index.d.mts +0 -46
  57. package/dist/helpers/nuxt/index.mjs +0 -58
  58. package/dist/helpers/nuxt/runtime/plugin.client.d.mts +0 -8
  59. package/dist/helpers/nuxt/runtime/plugin.client.mjs +0 -12
  60. package/dist/host-h3-w3c0t8ZO.mjs +0 -18
  61. package/dist/immer-HjMAm3b6.mjs +0 -894
  62. /package/dist/{_shared-BcPXmcjq.mjs → _shared-S-Ujqz_L.mjs} +0 -0
  63. /package/dist/{main-CuGOfqoX.mjs → main-DpINGndA.mjs} +0 -0
  64. /package/dist/{open-JfacLHs0.mjs → open-BtOOEldu.mjs} +0 -0
  65. /package/dist/{transports-DSV5_5QM.mjs → transports-BPUzHhI2.mjs} +0 -0
  66. /package/dist/{types-gWbe-b2R.d.mts → types-ag029cAe.d.mts} +0 -0
  67. /package/dist/{when-BAE663Hv.d.mts → when-aBBXAEh5.d.mts} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { t as import_dist } from "../human-id-CHS0s28X.mjs";
2
- import { _ as revokeAuthToken, a as RpcFunctionsHost, c as getInternalContext, d as DevToolsDiagnosticsHost, f as DevToolsCommandsHost, g as revokeActiveConnectionsForToken, h as ContextUtils, i as DevToolsMessagesHost, l as internalContextMap, n as DevToolsViewHost, o as createRpcSharedStateServerHost, p as DevToolsAgentHost, r as DevToolsTerminalHost, s as DevToolsDockHost, t as createHostContext, u as createStorage } from "../context-BsNZMCnr.mjs";
3
- import { t as createH3DevToolsHost } from "../host-h3-w3c0t8ZO.mjs";
4
- import { t as startHttpAndWs } from "../server-DrBxa6ZV.mjs";
5
- import { t as collectStaticRpcDump } from "../static-dump-cyGfMmRf.mjs";
2
+ import { _ as revokeActiveConnectionsForToken, a as RpcFunctionsHost, c as DevToolsDockHost, d as createStorage, f as DevToolsDiagnosticsHost, g as ContextUtils, i as DevToolsMessagesHost, l as getInternalContext, m as DevToolsAgentHost, n as DevToolsViewHost, o as createRpcStreamingServerHost, p as DevToolsCommandsHost, r as DevToolsTerminalHost, s as createRpcSharedStateServerHost, t as createHostContext, u as internalContextMap, v as revokeAuthToken } from "../context-BfvbAyGk.mjs";
3
+ import { t as createH3DevToolsHost } from "../host-h3-BMvrFzIJ.mjs";
4
+ import { t as startHttpAndWs } from "../server-qRRM8t3v.mjs";
5
+ import { t as collectStaticRpcDump } from "../static-dump-C1aVSwxY.mjs";
6
6
  import { isIP } from "node:net";
7
7
  //#region src/node/auth-state.ts
8
8
  let pendingAuth = null;
@@ -67,4 +67,4 @@ function normalizeHttpServerUrl(host, port) {
67
67
  return `http://${host === "127.0.0.1" ? "localhost" : isIP(host) === 6 ? `[${host}]` : host}:${port}`;
68
68
  }
69
69
  //#endregion
70
- export { ContextUtils, DevToolsAgentHost, DevToolsCommandsHost, DevToolsDiagnosticsHost, DevToolsDockHost, DevToolsMessagesHost, DevToolsTerminalHost, DevToolsViewHost, RpcFunctionsHost, abortPendingAuth, collectStaticRpcDump, consumeTempAuthToken, createH3DevToolsHost, createHostContext, createRpcSharedStateServerHost, createStorage, getInternalContext, getPendingAuth, getTempAuthToken, internalContextMap, isObject, normalizeHttpServerUrl, refreshTempAuthToken, revokeActiveConnectionsForToken, revokeAuthToken, setPendingAuth, startHttpAndWs };
70
+ export { ContextUtils, DevToolsAgentHost, DevToolsCommandsHost, DevToolsDiagnosticsHost, DevToolsDockHost, DevToolsMessagesHost, DevToolsTerminalHost, DevToolsViewHost, RpcFunctionsHost, abortPendingAuth, collectStaticRpcDump, consumeTempAuthToken, createH3DevToolsHost, createHostContext, createRpcSharedStateServerHost, createRpcStreamingServerHost, createStorage, getInternalContext, getPendingAuth, getTempAuthToken, internalContextMap, isObject, normalizeHttpServerUrl, refreshTempAuthToken, revokeActiveConnectionsForToken, revokeAuthToken, setPendingAuth, startHttpAndWs };
@@ -1,4 +1,4 @@
1
- import { b as RpcFunctionSetupResult, m as RpcFunctionAgentOptions, s as RpcDump, w as Thenable } from "../types-gWbe-b2R.mjs";
1
+ import { b as RpcFunctionSetupResult, m as RpcFunctionAgentOptions, s as RpcDump, w as Thenable } from "../types-ag029cAe.mjs";
2
2
  import * as v from "valibot";
3
3
 
4
4
  //#region src/recipes/open-helpers.d.ts
@@ -25,6 +25,7 @@ import * as v from "valibot";
25
25
  const openInEditor = defineRpcFunction({
26
26
  name: "devframe:open-in-editor",
27
27
  type: "action",
28
+ jsonSerializable: true,
28
29
  args: [v.string()],
29
30
  returns: v.void(),
30
31
  async handler(filename) {
@@ -47,10 +48,11 @@ const openInEditor = defineRpcFunction({
47
48
  const openInFinder = defineRpcFunction({
48
49
  name: "devframe:open-in-finder",
49
50
  type: "action",
51
+ jsonSerializable: true,
50
52
  args: [v.string()],
51
53
  returns: v.void(),
52
54
  async handler(path) {
53
- const { default: open } = await import("../open-JfacLHs0.mjs");
55
+ const { default: open } = await import("../open-BtOOEldu.mjs");
54
56
  await open(path);
55
57
  }
56
58
  });
@@ -1,3 +1,3 @@
1
- import { _ as RpcCacheManager, a as structuredCloneDeserialize, c as structuredCloneStringify, d as createClientFromDump, f as dumpFunctions, g as RpcFunctionsCollectorBase, h as defineRpcFunction, i as strictJsonStringify, l as getRpcHandler, m as createDefineWrapperWithContext, n as validateDefinitions, o as structuredCloneParse, p as getDefinitionsWithDumps, r as STRUCTURED_CLONE_PREFIX, s as structuredCloneSerialize, t as validateDefinition, u as getRpcResolvedSetupResult, v as RpcCacheOptions } from "../index-BwrLhNmz.mjs";
2
- import { C as RpcReturnSchema, S as RpcFunctionsCollector, _ as RpcFunctionDefinitionAnyWithContext, a as RpcDefinitionsFilter, b as RpcFunctionSetupResult, c as RpcDumpClientOptions, d as RpcDumpGetter, f as RpcDumpRecord, g as RpcFunctionDefinitionAny, h as RpcFunctionDefinition, i as RpcArgsSchema, l as RpcDumpCollectionOptions, m as RpcFunctionAgentOptions, n as BirpcReturn, o as RpcDefinitionsToFunctions, p as RpcDumpStore, r as EntriesToObject, s as RpcDump, t as BirpcFn, u as RpcDumpDefinition, v as RpcFunctionDefinitionBase, w as Thenable, x as RpcFunctionType, y as RpcFunctionDefinitionToFunction } from "../types-gWbe-b2R.mjs";
1
+ import { _ as RpcCacheManager, a as structuredCloneDeserialize, c as structuredCloneStringify, d as createClientFromDump, f as dumpFunctions, g as RpcFunctionsCollectorBase, h as defineRpcFunction, i as strictJsonStringify, l as getRpcHandler, m as createDefineWrapperWithContext, n as validateDefinitions, o as structuredCloneParse, p as getDefinitionsWithDumps, r as STRUCTURED_CLONE_PREFIX, s as structuredCloneSerialize, t as validateDefinition, u as getRpcResolvedSetupResult, v as RpcCacheOptions } from "../index-BCo03GEF.mjs";
2
+ import { C as RpcReturnSchema, S as RpcFunctionsCollector, _ as RpcFunctionDefinitionAnyWithContext, a as RpcDefinitionsFilter, b as RpcFunctionSetupResult, c as RpcDumpClientOptions, d as RpcDumpGetter, f as RpcDumpRecord, g as RpcFunctionDefinitionAny, h as RpcFunctionDefinition, i as RpcArgsSchema, l as RpcDumpCollectionOptions, m as RpcFunctionAgentOptions, n as BirpcReturn, o as RpcDefinitionsToFunctions, p as RpcDumpStore, r as EntriesToObject, s as RpcDump, t as BirpcFn, u as RpcDumpDefinition, v as RpcFunctionDefinitionBase, w as Thenable, x as RpcFunctionType, y as RpcFunctionDefinitionToFunction } from "../types-ag029cAe.mjs";
3
3
  export { BirpcFn, BirpcReturn, EntriesToObject, RpcArgsSchema, RpcCacheManager, RpcCacheOptions, RpcDefinitionsFilter, RpcDefinitionsToFunctions, RpcDump, RpcDumpClientOptions, RpcDumpCollectionOptions, RpcDumpDefinition, RpcDumpGetter, RpcDumpRecord, RpcDumpStore, RpcFunctionAgentOptions, RpcFunctionDefinition, RpcFunctionDefinitionAny, RpcFunctionDefinitionAnyWithContext, RpcFunctionDefinitionBase, RpcFunctionDefinitionToFunction, RpcFunctionSetupResult, RpcFunctionType, RpcFunctionsCollector, RpcFunctionsCollectorBase, RpcReturnSchema, STRUCTURED_CLONE_PREFIX, Thenable, createClientFromDump, createDefineWrapperWithContext, defineRpcFunction, dumpFunctions, getDefinitionsWithDumps, getRpcHandler, getRpcResolvedSetupResult, strictJsonStringify, structuredCloneDeserialize, structuredCloneParse, structuredCloneSerialize, structuredCloneStringify, validateDefinition, validateDefinitions };
@@ -1,4 +1,4 @@
1
- import { a as validateDefinitions, c as getRpcResolvedSetupResult, i as validateDefinition, l as RpcCacheManager, n as dumpFunctions, o as RpcFunctionsCollectorBase, r as getDefinitionsWithDumps, s as getRpcHandler, t as createClientFromDump } from "../rpc-D7LxIh8t.mjs";
2
- import { a as structuredCloneSerialize, i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify, r as structuredCloneDeserialize, t as STRUCTURED_CLONE_PREFIX } from "../serialization-BN2ZQEE9.mjs";
1
+ import { a as validateDefinitions, c as getRpcResolvedSetupResult, i as validateDefinition, l as RpcCacheManager, n as dumpFunctions, o as RpcFunctionsCollectorBase, r as getDefinitionsWithDumps, s as getRpcHandler, t as createClientFromDump } from "../rpc-INbWfHoX.mjs";
2
+ import { a as structuredCloneSerialize, i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify, r as structuredCloneDeserialize, t as STRUCTURED_CLONE_PREFIX } from "../serialization-DwKi05Pn.mjs";
3
3
  import { n as defineRpcFunction, t as createDefineWrapperWithContext } from "../define-Bb4zh-Dc.mjs";
4
4
  export { RpcCacheManager, RpcFunctionsCollectorBase, STRUCTURED_CLONE_PREFIX, createClientFromDump, createDefineWrapperWithContext, defineRpcFunction, dumpFunctions, getDefinitionsWithDumps, getRpcHandler, getRpcResolvedSetupResult, strictJsonStringify, structuredCloneDeserialize, structuredCloneParse, structuredCloneSerialize, structuredCloneStringify, validateDefinition, validateDefinitions };
@@ -1,2 +1,2 @@
1
- import { n as createWsRpcChannel, t as WsRpcChannelOptions } from "../../ws-client-DOYwYluO.mjs";
1
+ import { n as createWsRpcChannel, t as WsRpcChannelOptions } from "../../ws-client-DQySVfF_.mjs";
2
2
  export { WsRpcChannelOptions, createWsRpcChannel };
@@ -1,4 +1,4 @@
1
- import { i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify } from "../../serialization-BN2ZQEE9.mjs";
1
+ import { i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify } from "../../serialization-DwKi05Pn.mjs";
2
2
  //#region src/rpc/transports/ws-client.ts
3
3
  function NOOP() {}
4
4
  const EMPTY_DEFS = /* @__PURE__ */ new Map();
@@ -1,2 +1,2 @@
1
- import { n as WsRpcTransportOptions, r as attachWsRpcTransport, t as DevToolsNodeRpcSessionMeta } from "../../ws-server-DHMeNOY_.mjs";
1
+ import { n as WsRpcTransportOptions, r as attachWsRpcTransport, t as DevToolsNodeRpcSessionMeta } from "../../ws-server-VQqESKAs.mjs";
2
2
  export { DevToolsNodeRpcSessionMeta, WsRpcTransportOptions, attachWsRpcTransport };
@@ -1,4 +1,4 @@
1
- import { i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify } from "../../serialization-BN2ZQEE9.mjs";
1
+ import { i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify } from "../../serialization-DwKi05Pn.mjs";
2
2
  import { createServer } from "node:https";
3
3
  import { WebSocketServer } from "ws";
4
4
  //#region src/rpc/transports/ws-server.ts
@@ -1,4 +1,4 @@
1
- import { c as logger } from "./serialization-BN2ZQEE9.mjs";
1
+ import { c as logger } from "./serialization-DwKi05Pn.mjs";
2
2
  import { hash } from "ohash";
3
3
  //#region src/rpc/cache.ts
4
4
  /**
@@ -2,7 +2,7 @@ import { consoleReporter, createLogger, defineDiagnostics, plainFormatter } from
2
2
  import { deserialize as structuredCloneDeserialize, parse as structuredCloneParse, serialize as structuredCloneSerialize, stringify as structuredCloneStringify } from "structured-clone-es";
3
3
  //#region src/rpc/diagnostics.ts
4
4
  const diagnostics = defineDiagnostics({
5
- docsBase: "https://devtools.vite.dev/devframe/errors",
5
+ docsBase: "https://devfra.me/errors",
6
6
  codes: {
7
7
  DF0019: {
8
8
  message: (p) => `RPC function "${p.name}" has \`agent\` set but \`jsonSerializable\` is not \`true\` — MCP requires JSON-serializable data.`,
@@ -1,4 +1,4 @@
1
- import { H as DevToolsRpcClientFunctions, U as DevToolsRpcServerFunctions, d as DevToolsNodeContext } from "./devtool-CIqONpYU.mjs";
1
+ import { $ as DevToolsRpcServerFunctions, Q as DevToolsRpcClientFunctions, d as DevToolsNodeContext } from "./devtool-Bm6zZAw5.mjs";
2
2
  import { BirpcGroup } from "birpc";
3
3
  import { WebSocketServer } from "ws";
4
4
  import { App } from "h3";
@@ -18,11 +18,36 @@ async function startHttpAndWs(options) {
18
18
  const wss = new WebSocketServer({ server: httpServer });
19
19
  const rpcHost = context.rpc;
20
20
  const asyncStorage = new AsyncLocalStorage();
21
- const rpcGroup = createRpcServer(rpcHost.functions);
22
- attachWsRpcTransport(rpcGroup, { wss });
21
+ const rpcGroup = createRpcServer(rpcHost.functions, { rpcOptions: { resolver(name, fn) {
22
+ const rpc = this;
23
+ if (!fn) return void 0;
24
+ return async function(...args) {
25
+ return await asyncStorage.run({
26
+ rpc,
27
+ meta: rpc.$meta
28
+ }, async () => {
29
+ return (await fn).apply(this, args);
30
+ });
31
+ };
32
+ } } });
33
+ attachWsRpcTransport(rpcGroup, {
34
+ wss,
35
+ onDisconnected: (_ws, meta) => {
36
+ rpcHost._emitSessionDisconnected(meta);
37
+ }
38
+ });
23
39
  rpcHost._rpcGroup = rpcGroup;
24
40
  rpcHost._asyncStorage = asyncStorage;
25
41
  rpcHost._authDisabled = options.auth === false;
42
+ if (options.auth === false && !rpcHost.definitions.has("vite:anonymous:auth")) rpcHost.register({
43
+ name: "vite:anonymous:auth",
44
+ type: "action",
45
+ handler: () => {
46
+ const session = rpcHost.getCurrentRpcSession();
47
+ if (session) session.meta.isTrusted = true;
48
+ return { isTrusted: true };
49
+ }
50
+ });
26
51
  await new Promise((resolveListen) => {
27
52
  httpServer.listen(port, bindHost, () => resolveListen());
28
53
  });
@@ -1,4 +1,4 @@
1
- import { n as dumpFunctions, s as getRpcHandler } from "./rpc-D7LxIh8t.mjs";
1
+ import { n as dumpFunctions, s as getRpcHandler } from "./rpc-INbWfHoX.mjs";
2
2
  import { DEVTOOLS_RPC_DUMP_DIRNAME } from "./constants.mjs";
3
3
  //#region src/node/static-dump.ts
4
4
  function makeDumpKey(name) {
@@ -1,4 +1,4 @@
1
- import { $ as DevToolsLogsHost, $t as EventsMap, A as DevToolsViewHost, At as DevToolsDiagnosticsHost, B as DevToolsTerminalStatus, Bt as DevToolsServerCommandEntry, Ct as DevToolsViewLauncher, Dt as JsonRenderer, Et as JsonRenderSpec, F as DevToolsChildProcessTerminalSession, Ft as DevToolsCommandHandle, G as DevToolsLogElementPosition, Gt as AgentResourceContent, H as DevToolsRpcClientFunctions, Ht as AgentHandle, I as DevToolsTerminalHost, It as DevToolsCommandKeybinding, J as DevToolsLogEntryInput, Jt as AgentToolInput, K as DevToolsLogEntry, Kt as AgentResourceInput, L as DevToolsTerminalSession, Lt as DevToolsCommandShortcutOverrides, M as PartialWithoutId, Mt as DevToolsClientCommand, N as Thenable, Nt as DevToolsCommandBase, Ot as RemoteDockOptions, P as DevToolsChildProcessExecuteOptions, Pt as DevToolsCommandEntry, Q as DevToolsLogsClient, Qt as EventUnsubscribe, R as DevToolsTerminalSessionBase, Rt as DevToolsCommandsHost, St as DevToolsViewJsonRender, Tt as JsonRenderElement, U as DevToolsRpcServerFunctions, Ut as AgentManifest, V as DevToolsDocksUserSettings, Vt as DevToolsServerCommandInput, W as DevToolsRpcSharedStates, Wt as AgentResource, X as DevToolsLogHandle, Xt as DevToolsAgentHostEvents, Y as DevToolsLogFilePosition, Yt as DevToolsAgentHost, Z as DevToolsLogLevel, Zt as EventEmitter, _ as RpcSharedStateGetOptions, _t as DevToolsDockUserEntry, a as DevtoolRuntime, at as DevToolsMessageHandle, bt as DevToolsViewCustomRender, c as defineDevtool, ct as DevToolsMessagesHost, d as DevToolsNodeContext, dt as DevToolsDockEntriesGrouped, et as DevToolsMessageElementPosition, f as DevToolsNodeUtils, ft as DevToolsDockEntry, g as RpcFunctionsHost, gt as DevToolsDockHost, h as RpcBroadcastOptions, ht as DevToolsDockEntryIcon, i as DevtoolDeploymentKind, it as DevToolsMessageFilePosition, j as EntriesToObject, jt as DevToolsDiagnosticsLogger, kt as DevToolsDiagnosticsDefinition, l as ConnectionMeta, lt as DevToolsHost, m as DevToolsNodeRpcSession, mt as DevToolsDockEntryCategory, n as DevtoolCliOptions, nt as DevToolsMessageEntryFrom, o as DevtoolSetupInfo, ot as DevToolsMessageLevel, p as RemoteConnectionInfo, pt as DevToolsDockEntryBase, q as DevToolsLogEntryFrom, qt as AgentTool, r as DevtoolDefinition, rt as DevToolsMessageEntryInput, s as DevtoolSpaOptions, st as DevToolsMessagesClient, t as DevtoolBrowserContext, tt as DevToolsMessageEntry, u as DevToolsCapabilities, ut as ClientScriptEntry, v as RpcSharedStateHost, vt as DevToolsViewAction, wt as DevToolsViewLauncherStatus, xt as DevToolsViewIframe, yt as DevToolsViewBuiltin, z as DevToolsTerminalSessionStreamChunkEvent, zt as DevToolsCommandsHostEvents } from "../devtool-CIqONpYU.mjs";
2
- import { m as RpcFunctionAgentOptions } from "../types-gWbe-b2R.mjs";
3
- import { t as DevToolsNodeRpcSessionMeta } from "../ws-server-DHMeNOY_.mjs";
4
- export { AgentHandle, AgentManifest, AgentResource, AgentResourceContent, AgentResourceInput, AgentTool, AgentToolInput, ClientScriptEntry, ConnectionMeta, DevToolsAgentHost, DevToolsAgentHostEvents, DevToolsCapabilities, DevToolsChildProcessExecuteOptions, DevToolsChildProcessTerminalSession, DevToolsClientCommand, DevToolsCommandBase, DevToolsCommandEntry, DevToolsCommandHandle, DevToolsCommandKeybinding, DevToolsCommandShortcutOverrides, DevToolsCommandsHost, DevToolsCommandsHostEvents, DevToolsDiagnosticsDefinition, DevToolsDiagnosticsHost, DevToolsDiagnosticsLogger, DevToolsDockEntriesGrouped, DevToolsDockEntry, DevToolsDockEntryBase, DevToolsDockEntryCategory, DevToolsDockEntryIcon, DevToolsDockHost, DevToolsDockUserEntry, DevToolsDocksUserSettings, DevToolsHost, DevToolsLogElementPosition, DevToolsLogEntry, DevToolsLogEntryFrom, DevToolsLogEntryInput, DevToolsLogFilePosition, DevToolsLogHandle, DevToolsLogLevel, DevToolsLogsClient, DevToolsLogsHost, DevToolsMessageElementPosition, DevToolsMessageEntry, DevToolsMessageEntryFrom, DevToolsMessageEntryInput, DevToolsMessageFilePosition, DevToolsMessageHandle, DevToolsMessageLevel, DevToolsMessagesClient, DevToolsMessagesHost, DevToolsNodeContext, DevToolsNodeRpcSession, DevToolsNodeRpcSessionMeta, DevToolsNodeUtils, DevToolsRpcClientFunctions, DevToolsRpcServerFunctions, DevToolsRpcSharedStates, DevToolsServerCommandEntry, DevToolsServerCommandInput, DevToolsTerminalHost, DevToolsTerminalSession, DevToolsTerminalSessionBase, DevToolsTerminalSessionStreamChunkEvent, DevToolsTerminalStatus, DevToolsViewAction, DevToolsViewBuiltin, DevToolsViewCustomRender, DevToolsViewHost, DevToolsViewIframe, DevToolsViewJsonRender, DevToolsViewLauncher, DevToolsViewLauncherStatus, DevtoolBrowserContext, DevtoolCliOptions, DevtoolDefinition, DevtoolDeploymentKind, DevtoolRuntime, DevtoolSetupInfo, DevtoolSpaOptions, EntriesToObject, EventEmitter, EventUnsubscribe, EventsMap, JsonRenderElement, JsonRenderSpec, JsonRenderer, PartialWithoutId, RemoteConnectionInfo, RemoteDockOptions, RpcBroadcastOptions, RpcFunctionAgentOptions, RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost, Thenable, defineDevtool };
1
+ import { $ as DevToolsRpcServerFunctions, $t as AgentManifest, At as DevToolsViewCustomRender, Bt as DevToolsDiagnosticsHost, Ct as DevToolsDockEntryBase, Dt as DevToolsDockUserEntry, Et as DevToolsDockHost, Ft as JsonRenderElement, G as DevToolsChildProcessExecuteOptions, Gt as DevToolsCommandHandle, H as EntriesToObject, Ht as DevToolsClientCommand, It as JsonRenderSpec, J as DevToolsTerminalSession, Jt as DevToolsCommandsHost, K as DevToolsChildProcessTerminalSession, Kt as DevToolsCommandKeybinding, Lt as JsonRenderer, Mt as DevToolsViewJsonRender, Nt as DevToolsViewLauncher, Ot as DevToolsViewAction, Pt as DevToolsViewLauncherStatus, Q as DevToolsRpcClientFunctions, Qt as AgentHandle, Rt as RemoteDockOptions, St as DevToolsDockEntry, Tt as DevToolsDockEntryIcon, U as PartialWithoutId, Ut as DevToolsCommandBase, V as DevToolsViewHost, Vt as DevToolsDiagnosticsLogger, W as Thenable, Wt as DevToolsCommandEntry, X as DevToolsTerminalStatus, Xt as DevToolsServerCommandEntry, Y as DevToolsTerminalSessionBase, Yt as DevToolsCommandsHostEvents, Z as DevToolsDocksUserSettings, Zt as DevToolsServerCommandInput, _ as RpcSharedStateGetOptions, _t as DevToolsMessagesClient, a as DevtoolRuntime, an as DevToolsAgentHost, at as DevToolsLogFilePosition, b as RpcStreamingChannelOptions, bt as ClientScriptEntry, c as defineDevtool, cn as EventUnsubscribe, ct as DevToolsLogsClient, d as DevToolsNodeContext, dt as DevToolsMessageEntry, en as AgentResource, et as DevToolsRpcSharedStates, f as DevToolsNodeUtils, ft as DevToolsMessageEntryFrom, g as RpcFunctionsHost, gt as DevToolsMessageLevel, h as RpcBroadcastOptions, ht as DevToolsMessageHandle, i as DevtoolDeploymentKind, in as AgentToolInput, it as DevToolsLogEntryInput, jt as DevToolsViewIframe, kt as DevToolsViewBuiltin, l as ConnectionMeta, ln as EventsMap, lt as DevToolsLogsHost, m as DevToolsNodeRpcSession, mt as DevToolsMessageFilePosition, n as DevtoolCliOptions, nn as AgentResourceInput, nt as DevToolsLogEntry, o as DevtoolSetupInfo, on as DevToolsAgentHostEvents, ot as DevToolsLogHandle, p as RemoteConnectionInfo, pt as DevToolsMessageEntryInput, q as DevToolsTerminalHost, qt as DevToolsCommandShortcutOverrides, r as DevtoolDefinition, rn as AgentTool, rt as DevToolsLogEntryFrom, s as DevtoolSpaOptions, sn as EventEmitter, st as DevToolsLogLevel, t as DevtoolBrowserContext, tn as AgentResourceContent, tt as DevToolsLogElementPosition, u as DevToolsCapabilities, ut as DevToolsMessageElementPosition, v as RpcSharedStateHost, vt as DevToolsMessagesHost, wt as DevToolsDockEntryCategory, x as RpcStreamingHost, xt as DevToolsDockEntriesGrouped, y as RpcStreamingChannel, yt as DevToolsHost, zt as DevToolsDiagnosticsDefinition } from "../devtool-Bm6zZAw5.mjs";
2
+ import { m as RpcFunctionAgentOptions } from "../types-ag029cAe.mjs";
3
+ import { t as DevToolsNodeRpcSessionMeta } from "../ws-server-VQqESKAs.mjs";
4
+ export { AgentHandle, AgentManifest, AgentResource, AgentResourceContent, AgentResourceInput, AgentTool, AgentToolInput, ClientScriptEntry, ConnectionMeta, DevToolsAgentHost, DevToolsAgentHostEvents, DevToolsCapabilities, DevToolsChildProcessExecuteOptions, DevToolsChildProcessTerminalSession, DevToolsClientCommand, DevToolsCommandBase, DevToolsCommandEntry, DevToolsCommandHandle, DevToolsCommandKeybinding, DevToolsCommandShortcutOverrides, DevToolsCommandsHost, DevToolsCommandsHostEvents, DevToolsDiagnosticsDefinition, DevToolsDiagnosticsHost, DevToolsDiagnosticsLogger, DevToolsDockEntriesGrouped, DevToolsDockEntry, DevToolsDockEntryBase, DevToolsDockEntryCategory, DevToolsDockEntryIcon, DevToolsDockHost, DevToolsDockUserEntry, DevToolsDocksUserSettings, DevToolsHost, DevToolsLogElementPosition, DevToolsLogEntry, DevToolsLogEntryFrom, DevToolsLogEntryInput, DevToolsLogFilePosition, DevToolsLogHandle, DevToolsLogLevel, DevToolsLogsClient, DevToolsLogsHost, DevToolsMessageElementPosition, DevToolsMessageEntry, DevToolsMessageEntryFrom, DevToolsMessageEntryInput, DevToolsMessageFilePosition, DevToolsMessageHandle, DevToolsMessageLevel, DevToolsMessagesClient, DevToolsMessagesHost, DevToolsNodeContext, DevToolsNodeRpcSession, DevToolsNodeRpcSessionMeta, DevToolsNodeUtils, DevToolsRpcClientFunctions, DevToolsRpcServerFunctions, DevToolsRpcSharedStates, DevToolsServerCommandEntry, DevToolsServerCommandInput, DevToolsTerminalHost, DevToolsTerminalSession, DevToolsTerminalSessionBase, DevToolsTerminalStatus, DevToolsViewAction, DevToolsViewBuiltin, DevToolsViewCustomRender, DevToolsViewHost, DevToolsViewIframe, DevToolsViewJsonRender, DevToolsViewLauncher, DevToolsViewLauncherStatus, DevtoolBrowserContext, DevtoolCliOptions, DevtoolDefinition, DevtoolDeploymentKind, DevtoolRuntime, DevtoolSetupInfo, DevtoolSpaOptions, EntriesToObject, EventEmitter, EventUnsubscribe, EventsMap, JsonRenderElement, JsonRenderSpec, JsonRenderer, PartialWithoutId, RemoteConnectionInfo, RemoteDockOptions, RpcBroadcastOptions, RpcFunctionAgentOptions, RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost, RpcStreamingChannel, RpcStreamingChannelOptions, RpcStreamingHost, Thenable, defineDevtool };
@@ -1,4 +1,4 @@
1
- import { $t as EventsMap, Zt as EventEmitter } from "../devtool-CIqONpYU.mjs";
1
+ import { ln as EventsMap, sn as EventEmitter } from "../devtool-Bm6zZAw5.mjs";
2
2
 
3
3
  //#region src/utils/events.d.ts
4
4
  /**
@@ -1,2 +1,2 @@
1
- import { C as ImmutableSet, D as createSharedState, E as SharedStateOptions, S as ImmutableObject, T as SharedStateEvents, b as ImmutableArray, k as Patch, w as SharedState, x as ImmutableMap, y as Immutable } from "../devtool-CIqONpYU.mjs";
2
- export { Immutable, ImmutableArray, ImmutableMap, ImmutableObject, ImmutableSet, SharedState, SharedStateEvents, SharedStateOptions, Patch as SharedStatePatch, createSharedState };
1
+ import { B as createSharedState, F as ImmutableSet, I as SharedState, L as SharedStateEvents, M as ImmutableArray, N as ImmutableMap, P as ImmutableObject, R as SharedStateOptions, j as Immutable, z as SharedStatePatch } from "../devtool-Bm6zZAw5.mjs";
2
+ export { Immutable, ImmutableArray, ImmutableMap, ImmutableObject, ImmutableSet, SharedState, SharedStateEvents, SharedStateOptions, SharedStatePatch, createSharedState };
@@ -1,6 +1,6 @@
1
1
  import { createEventEmitter } from "./events.mjs";
2
- import { i as produceWithPatches, n as enablePatches, r as produce, t as applyPatches } from "../immer-HjMAm3b6.mjs";
3
2
  import { nanoid } from "./nanoid.mjs";
3
+ import { applyPatches, enablePatches, produce, produceWithPatches } from "immer";
4
4
  //#region src/utils/shared-state.ts
5
5
  function createSharedState(options) {
6
6
  const { enablePatches: enablePatches$1 = false } = options;
@@ -1,4 +1,5 @@
1
- import { O as Objectish, Zt as EventEmitter, k as Patch } from "../devtool-CIqONpYU.mjs";
1
+ import { sn as EventEmitter } from "../devtool-Bm6zZAw5.mjs";
2
+ import { Objectish, Patch } from "immer";
2
3
 
3
4
  //#region src/utils/state.d.ts
4
5
  type ImmutablePrimitive = undefined | null | boolean | string | number | Function;
@@ -1,5 +1,5 @@
1
1
  import { createEventEmitter } from "./events.mjs";
2
- import { i as produceWithPatches, r as produce, t as applyPatches } from "../immer-HjMAm3b6.mjs";
2
+ import { applyPatches, produce, produceWithPatches } from "immer";
3
3
  //#region src/utils/state.ts
4
4
  function createSharedState(options) {
5
5
  const { enablePatches = false } = options;
@@ -0,0 +1,2 @@
1
+ import { A as createStreamSink, C as CreateStreamReaderOptions, D as StreamSink, E as StreamReader, O as StreamSinkEvents, S as BufferedChunk, T as StreamErrorPayload, k as createStreamReader, w as CreateStreamSinkOptions } from "../devtool-Bm6zZAw5.mjs";
2
+ export { BufferedChunk, CreateStreamReaderOptions, CreateStreamSinkOptions, StreamErrorPayload, StreamReader, StreamSink, StreamSinkEvents, createStreamReader, createStreamSink };
@@ -0,0 +1,255 @@
1
+ import { createEventEmitter } from "./events.mjs";
2
+ import { nanoid } from "./nanoid.mjs";
3
+ //#region src/utils/streaming-channel.ts
4
+ const DEFAULT_HIGH_WATER_MARK = 256;
5
+ var StreamClosedError = class extends Error {
6
+ name = "StreamClosedError";
7
+ };
8
+ /**
9
+ * Build a server-side stream sink. RPC-agnostic — the RPC host wires
10
+ * `events.on('chunk' | 'end')` to broadcast, and reads `buffer` to replay
11
+ * for late or reconnecting subscribers.
12
+ */
13
+ function createStreamSink(options = {}) {
14
+ const id = options.id ?? nanoid();
15
+ const replayWindow = Math.max(0, options.replayWindow ?? 0);
16
+ const events = createEventEmitter();
17
+ const controller = new AbortController();
18
+ const buffer = [];
19
+ let closed = false;
20
+ let lastSeq = 0;
21
+ function write(chunk) {
22
+ if (closed) throw new StreamClosedError(`Cannot write to a closed stream "${id}"`);
23
+ lastSeq += 1;
24
+ if (replayWindow > 0) {
25
+ buffer.push({
26
+ seq: lastSeq,
27
+ chunk
28
+ });
29
+ if (buffer.length > replayWindow) buffer.splice(0, buffer.length - replayWindow);
30
+ }
31
+ events.emit("chunk", lastSeq, chunk);
32
+ }
33
+ function error(reason) {
34
+ if (closed) return;
35
+ closed = true;
36
+ const payload = toErrorPayload(reason);
37
+ controller.abort(reason);
38
+ events.emit("end", payload);
39
+ }
40
+ function close() {
41
+ if (closed) return;
42
+ closed = true;
43
+ if (!controller.signal.aborted) controller.abort("stream closed");
44
+ events.emit("end", void 0);
45
+ }
46
+ function abort(reason) {
47
+ if (closed) return;
48
+ if (!controller.signal.aborted) controller.abort(reason ?? "aborted");
49
+ }
50
+ const writable = new WritableStream({
51
+ write(chunk) {
52
+ write(chunk);
53
+ },
54
+ close() {
55
+ close();
56
+ },
57
+ abort(reason) {
58
+ error(reason);
59
+ }
60
+ });
61
+ return {
62
+ id,
63
+ signal: controller.signal,
64
+ get closed() {
65
+ return closed;
66
+ },
67
+ get lastSeq() {
68
+ return lastSeq;
69
+ },
70
+ write,
71
+ error,
72
+ close,
73
+ abort,
74
+ writable,
75
+ events,
76
+ buffer
77
+ };
78
+ }
79
+ /**
80
+ * Build a client-side stream reader. RPC-agnostic — the RPC host calls
81
+ * `_push(seq, chunk)` on each incoming chunk and `_end(error?)` on the
82
+ * terminal frame. Consumers iterate with `for await` or pipe `readable`.
83
+ */
84
+ function createStreamReader(options = {}) {
85
+ const id = options.id ?? nanoid();
86
+ const highWaterMark = Math.max(1, options.highWaterMark ?? DEFAULT_HIGH_WATER_MARK);
87
+ const queue = [];
88
+ let lastSeenSeq = 0;
89
+ let done = false;
90
+ let cancelled = false;
91
+ let endError;
92
+ let pending;
93
+ let pullController;
94
+ let readableInstance;
95
+ function drainNext() {
96
+ if (!pending) return;
97
+ if (queue.length > 0) {
98
+ const value = queue.shift();
99
+ const r = pending;
100
+ pending = void 0;
101
+ r.resolve({
102
+ value,
103
+ done: false
104
+ });
105
+ return;
106
+ }
107
+ if (done) {
108
+ const r = pending;
109
+ pending = void 0;
110
+ if (endError) {
111
+ const err = new Error(endError.message);
112
+ err.name = endError.name;
113
+ r.reject(err);
114
+ } else r.resolve({
115
+ value: void 0,
116
+ done: true
117
+ });
118
+ }
119
+ }
120
+ function feedReadable() {
121
+ if (!pullController) return;
122
+ while (queue.length > 0) {
123
+ const v = queue.shift();
124
+ try {
125
+ pullController.enqueue(v);
126
+ } catch {
127
+ break;
128
+ }
129
+ }
130
+ if (done && pullController) {
131
+ try {
132
+ if (endError) {
133
+ const err = new Error(endError.message);
134
+ err.name = endError.name;
135
+ pullController.error(err);
136
+ } else pullController.close();
137
+ } catch {}
138
+ pullController = void 0;
139
+ }
140
+ }
141
+ function push(seq, chunk) {
142
+ if (done || cancelled) return;
143
+ if (seq <= lastSeenSeq) return;
144
+ lastSeenSeq = seq;
145
+ queue.push(chunk);
146
+ if (queue.length > highWaterMark) {
147
+ const overflow = queue.length - highWaterMark;
148
+ queue.splice(0, overflow);
149
+ options.onOverflow?.(overflow);
150
+ }
151
+ drainNext();
152
+ if (readableInstance) feedReadable();
153
+ }
154
+ function end(error) {
155
+ if (done) return;
156
+ done = true;
157
+ endError = error;
158
+ drainNext();
159
+ if (readableInstance) feedReadable();
160
+ }
161
+ function cancel() {
162
+ if (cancelled || done) return;
163
+ cancelled = true;
164
+ options.onCancel?.();
165
+ end(void 0);
166
+ }
167
+ function getReadable() {
168
+ if (readableInstance) return readableInstance;
169
+ readableInstance = new ReadableStream({
170
+ start(controller) {
171
+ pullController = controller;
172
+ feedReadable();
173
+ },
174
+ cancel() {
175
+ cancel();
176
+ }
177
+ });
178
+ return readableInstance;
179
+ }
180
+ return {
181
+ id,
182
+ get cancelled() {
183
+ return cancelled;
184
+ },
185
+ get done() {
186
+ return done;
187
+ },
188
+ get lastSeenSeq() {
189
+ return lastSeenSeq;
190
+ },
191
+ get readable() {
192
+ return getReadable();
193
+ },
194
+ cancel,
195
+ _push: push,
196
+ _end: end,
197
+ [Symbol.asyncIterator]() {
198
+ return {
199
+ next() {
200
+ if (queue.length > 0) return Promise.resolve({
201
+ value: queue.shift(),
202
+ done: false
203
+ });
204
+ if (done) {
205
+ if (endError) {
206
+ const err = new Error(endError.message);
207
+ err.name = endError.name;
208
+ return Promise.reject(err);
209
+ }
210
+ return Promise.resolve({
211
+ value: void 0,
212
+ done: true
213
+ });
214
+ }
215
+ return new Promise((resolve, reject) => {
216
+ pending = {
217
+ resolve,
218
+ reject
219
+ };
220
+ });
221
+ },
222
+ return() {
223
+ cancel();
224
+ return Promise.resolve({
225
+ value: void 0,
226
+ done: true
227
+ });
228
+ }
229
+ };
230
+ }
231
+ };
232
+ }
233
+ function toErrorPayload(reason) {
234
+ if (reason instanceof Error) return {
235
+ name: reason.name || "Error",
236
+ message: reason.message
237
+ };
238
+ if (typeof reason === "string") return {
239
+ name: "Error",
240
+ message: reason
241
+ };
242
+ try {
243
+ return {
244
+ name: "Error",
245
+ message: JSON.stringify(reason)
246
+ };
247
+ } catch {
248
+ return {
249
+ name: "Error",
250
+ message: String(reason)
251
+ };
252
+ }
253
+ }
254
+ //#endregion
255
+ export { createStreamReader, createStreamSink };
@@ -1,2 +1,2 @@
1
- import { i as resolveContextValue, n as WhenExpression, r as evaluateWhen, t as WhenContext } from "../when-BAE663Hv.mjs";
1
+ import { i as resolveContextValue, n as WhenExpression, r as evaluateWhen, t as WhenContext } from "../when-aBBXAEh5.mjs";
2
2
  export { WhenContext, WhenExpression, evaluateWhen, resolveContextValue };
@@ -1,4 +1,4 @@
1
- import { g as RpcFunctionDefinitionAny } from "./types-gWbe-b2R.mjs";
1
+ import { g as RpcFunctionDefinitionAny } from "./types-ag029cAe.mjs";
2
2
  import { ChannelOptions } from "birpc";
3
3
 
4
4
  //#region src/rpc/transports/ws-client.d.ts
@@ -1,4 +1,4 @@
1
- import { g as RpcFunctionDefinitionAny } from "./types-gWbe-b2R.mjs";
1
+ import { g as RpcFunctionDefinitionAny } from "./types-ag029cAe.mjs";
2
2
  import { BirpcGroup, ChannelOptions } from "birpc";
3
3
  import { ServerOptions } from "node:https";
4
4
  import { WebSocket, WebSocketServer } from "ws";
@@ -11,6 +11,18 @@ interface DevToolsNodeRpcSessionMeta {
11
11
  clientAuthToken?: string;
12
12
  isTrusted?: boolean;
13
13
  subscribedStates: Set<string>;
14
+ /**
15
+ * Streams this session has subscribed to via
16
+ * `rpc.streaming.subscribe(channel, id)`. Tracked here for O(1) cleanup
17
+ * on disconnect; the wire format is `${channel}\x1F${id}`.
18
+ */
19
+ subscribedStreams?: Set<string>;
20
+ /**
21
+ * Inbound streams this session is currently uploading to (via
22
+ * `rpc.streaming.upload(channel, id)`). Tracked for cleanup on
23
+ * disconnect; same wire format as `subscribedStreams`.
24
+ */
25
+ uploadingStreams?: Set<string>;
14
26
  }
15
27
  interface WsRpcTransportOptions {
16
28
  /** Attach to an existing WebSocketServer. When provided, `port`, `host`, and `https` are ignored. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "devframe",
3
3
  "type": "module",
4
- "version": "0.1.19",
4
+ "version": "0.1.20",
5
5
  "description": "Framework for building generic DevTools",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -29,8 +29,6 @@
29
29
  "./adapters/vite": "./dist/adapters/vite.mjs",
30
30
  "./client": "./dist/client/index.mjs",
31
31
  "./constants": "./dist/constants.mjs",
32
- "./helpers/nuxt": "./dist/helpers/nuxt/index.mjs",
33
- "./helpers/nuxt/runtime/plugin.client": "./dist/helpers/nuxt/runtime/plugin.client.mjs",
34
32
  "./node": "./dist/node/index.mjs",
35
33
  "./recipes/open-helpers": "./dist/recipes/open-helpers.mjs",
36
34
  "./rpc": "./dist/rpc/index.mjs",
@@ -45,46 +43,41 @@
45
43
  "./utils/promise": "./dist/utils/promise.mjs",
46
44
  "./utils/shared-state": "./dist/utils/shared-state.mjs",
47
45
  "./utils/state": "./dist/utils/state.mjs",
46
+ "./utils/streaming-channel": "./dist/utils/streaming-channel.mjs",
48
47
  "./utils/when": "./dist/utils/when.mjs",
49
48
  "./package.json": "./package.json"
50
49
  },
51
50
  "types": "./dist/index.d.ts",
52
51
  "files": [
53
- "dist"
52
+ "dist",
53
+ "skills"
54
54
  ],
55
55
  "peerDependencies": {
56
- "@modelcontextprotocol/sdk": "^1.0.0",
57
- "@nuxt/kit": "^3.0.0 || ^4.0.0",
58
- "launch-editor": "^2.0.0"
56
+ "@modelcontextprotocol/sdk": "^1.0.0"
59
57
  },
60
58
  "peerDependenciesMeta": {
61
59
  "@modelcontextprotocol/sdk": {
62
60
  "optional": true
63
- },
64
- "@nuxt/kit": {
65
- "optional": true
66
- },
67
- "launch-editor": {
68
- "optional": true
69
61
  }
70
62
  },
71
63
  "dependencies": {
72
- "@valibot/to-json-schema": "^1.6.0",
64
+ "@valibot/to-json-schema": "^1.7.0",
73
65
  "ansis": "^4.2.0",
74
66
  "birpc": "^4.0.0",
75
67
  "cac": "^7.0.0",
76
68
  "h3": "^1.15.11",
69
+ "immer": "^11.1.7",
70
+ "launch-editor": "^2.13.2",
77
71
  "logs-sdk": "^0.0.6",
78
72
  "ohash": "^2.0.11",
79
73
  "pathe": "^2.0.3",
80
74
  "sirv": "^3.0.2",
81
75
  "structured-clone-es": "^2.0.0",
82
- "valibot": "^1.3.1",
76
+ "valibot": "^1.4.0",
83
77
  "ws": "^8.20.0"
84
78
  },
85
79
  "devDependencies": {
86
80
  "@modelcontextprotocol/sdk": "^1.29.0",
87
- "@nuxt/kit": "^4.4.4",
88
81
  "launch-editor": "^2.13.2",
89
82
  "tsdown": "^0.21.10",
90
83
  "whenexpr": "^0.1.2"
@@ -97,7 +90,6 @@
97
90
  "define-lazy-prop": "3.0.0",
98
91
  "get-port-please": "3.2.0",
99
92
  "human-id": "4.1.3",
100
- "immer": "11.1.4",
101
93
  "is-docker": "3.0.0",
102
94
  "is-in-ssh": "1.0.0",
103
95
  "is-inside-container": "1.0.0",
@@ -0,0 +1,13 @@
1
+ # devframe skill
2
+
3
+ An agent skill that teaches Claude Code how to build a full-featured
4
+ devtool with devframe.
5
+
6
+ ## Opt-in
7
+
8
+ Until devframe publishes an installable skill, link this directory from
9
+ your Claude Code skills path. Example for the CLI:
10
+
11
+ ```sh
12
+ ln -s "$PWD/devframe/skills/devframe" "$HOME/.claude/skills/devframe"
13
+ ```