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.
- package/README.md +2 -2
- package/dist/adapters/build.d.mts +1 -1
- package/dist/adapters/build.mjs +9 -6
- package/dist/adapters/cli.d.mts +1 -1
- package/dist/adapters/cli.mjs +1 -1
- package/dist/adapters/dev.d.mts +2 -2
- package/dist/adapters/dev.mjs +1 -1
- package/dist/adapters/embedded.d.mts +1 -1
- package/dist/adapters/kit.d.mts +1 -1
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.mjs +6 -3
- package/dist/adapters/vite.d.mts +1 -1
- package/dist/adapters/vite.mjs +1 -1
- package/dist/client/index.d.mts +42 -6
- package/dist/client/index.mjs +1673 -2
- package/dist/constants.d.mts +1 -1
- package/dist/{context-BsNZMCnr.mjs → context-BfvbAyGk.mjs} +428 -40
- package/dist/{dev-Djy5hbgs.mjs → dev-B8i_CBlQ.mjs} +6 -5
- package/dist/{devtool-CIqONpYU.d.mts → devtool-Bm6zZAw5.d.mts} +365 -27
- package/dist/host-h3-BMvrFzIJ.mjs +24 -0
- package/dist/{index-BwrLhNmz.d.mts → index-BCo03GEF.d.mts} +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/node/index.d.mts +44 -7
- package/dist/node/index.mjs +5 -5
- package/dist/recipes/open-helpers.d.mts +1 -1
- package/dist/recipes/open-helpers.mjs +3 -1
- package/dist/rpc/index.d.mts +2 -2
- package/dist/rpc/index.mjs +2 -2
- package/dist/rpc/transports/ws-client.d.mts +1 -1
- package/dist/rpc/transports/ws-client.mjs +1 -1
- package/dist/rpc/transports/ws-server.d.mts +1 -1
- package/dist/rpc/transports/ws-server.mjs +1 -1
- package/dist/{rpc-D7LxIh8t.mjs → rpc-INbWfHoX.mjs} +1 -1
- package/dist/{serialization-BN2ZQEE9.mjs → serialization-DwKi05Pn.mjs} +1 -1
- package/dist/{server-CaUeMcAh.d.mts → server-DksyT-um.d.mts} +1 -1
- package/dist/{server-DrBxa6ZV.mjs → server-qRRM8t3v.mjs} +27 -2
- package/dist/{static-dump-cyGfMmRf.mjs → static-dump-C1aVSwxY.mjs} +1 -1
- package/dist/types/index.d.mts +4 -4
- package/dist/utils/events.d.mts +1 -1
- package/dist/utils/shared-state.d.mts +2 -2
- package/dist/utils/shared-state.mjs +1 -1
- package/dist/utils/state.d.mts +2 -1
- package/dist/utils/state.mjs +1 -1
- package/dist/utils/streaming-channel.d.mts +2 -0
- package/dist/utils/streaming-channel.mjs +255 -0
- package/dist/utils/when.d.mts +1 -1
- package/dist/{ws-client-DOYwYluO.d.mts → ws-client-DQySVfF_.d.mts} +1 -1
- package/dist/{ws-server-DHMeNOY_.d.mts → ws-server-VQqESKAs.d.mts} +13 -1
- package/package.json +9 -17
- package/skills/devframe/README.md +13 -0
- package/skills/devframe/SKILL.md +452 -0
- package/skills/devframe/templates/counter-devtool.ts +29 -0
- package/skills/devframe/templates/spa-devtool.ts +33 -0
- package/skills/devframe/templates/vite-client.ts +11 -0
- package/dist/client-C6w_NshP.mjs +0 -1569
- package/dist/helpers/nuxt/index.d.mts +0 -46
- package/dist/helpers/nuxt/index.mjs +0 -58
- package/dist/helpers/nuxt/runtime/plugin.client.d.mts +0 -8
- package/dist/helpers/nuxt/runtime/plugin.client.mjs +0 -12
- package/dist/host-h3-w3c0t8ZO.mjs +0 -18
- package/dist/immer-HjMAm3b6.mjs +0 -894
- /package/dist/{_shared-BcPXmcjq.mjs → _shared-S-Ujqz_L.mjs} +0 -0
- /package/dist/{main-CuGOfqoX.mjs → main-DpINGndA.mjs} +0 -0
- /package/dist/{open-JfacLHs0.mjs → open-BtOOEldu.mjs} +0 -0
- /package/dist/{transports-DSV5_5QM.mjs → transports-BPUzHhI2.mjs} +0 -0
- /package/dist/{types-gWbe-b2R.d.mts → types-ag029cAe.d.mts} +0 -0
- /package/dist/{when-BAE663Hv.d.mts → when-aBBXAEh5.d.mts} +0 -0
package/dist/node/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as import_dist } from "../human-id-CHS0s28X.mjs";
|
|
2
|
-
import { _ as
|
|
3
|
-
import { t as createH3DevToolsHost } from "../host-h3-
|
|
4
|
-
import { t as startHttpAndWs } from "../server-
|
|
5
|
-
import { t as collectStaticRpcDump } from "../static-dump-
|
|
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-
|
|
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-
|
|
55
|
+
const { default: open } = await import("../open-BtOOEldu.mjs");
|
|
54
56
|
await open(path);
|
|
55
57
|
}
|
|
56
58
|
});
|
package/dist/rpc/index.d.mts
CHANGED
|
@@ -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-
|
|
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-
|
|
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 };
|
package/dist/rpc/index.mjs
CHANGED
|
@@ -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-
|
|
2
|
-
import { a as structuredCloneSerialize, i as structuredCloneParse, n as strictJsonStringify, o as structuredCloneStringify, r as structuredCloneDeserialize, t as STRUCTURED_CLONE_PREFIX } from "../serialization-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
@@ -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://
|
|
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 {
|
|
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
|
-
|
|
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-
|
|
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) {
|
package/dist/types/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import { m as RpcFunctionAgentOptions } from "../types-
|
|
3
|
-
import { t as DevToolsNodeRpcSessionMeta } from "../ws-server-
|
|
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,
|
|
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 };
|
package/dist/utils/events.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { Immutable, ImmutableArray, ImmutableMap, ImmutableObject, ImmutableSet, SharedState, SharedStateEvents, SharedStateOptions,
|
|
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;
|
package/dist/utils/state.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
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;
|
package/dist/utils/state.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createEventEmitter } from "./events.mjs";
|
|
2
|
-
import {
|
|
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 };
|
package/dist/utils/when.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as resolveContextValue, n as WhenExpression, r as evaluateWhen, t as WhenContext } from "../when-
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
+
```
|