@agimon-ai/doompi-ui 0.0.1-alpha.87 → 0.0.1-alpha.88

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.
@@ -0,0 +1,46 @@
1
+ import { defineMcpWidget } from "@agimon-ai/doompi-core/web";
2
+ import { McpToolFields, McpToolFrame, McpToolOutput } from "@agimon-ai/doompi-web-components";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/extensions/workspaces/sessions/(frontend)/tool/find.mcp.tsx
5
+ function FindMcpWidget(props) {
6
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
7
+ ...props,
8
+ title: "Find files",
9
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [
10
+ ["Pattern", props.args.pattern],
11
+ ["Path", props.args.path],
12
+ ["Limit", props.args.limit]
13
+ ] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
14
+ });
15
+ }
16
+ var find_mcp_default = defineMcpWidget(FindMcpWidget);
17
+ //#endregion
18
+ //#region src/extensions/workspaces/sessions/(frontend)/tool/ls.mcp.tsx
19
+ function LsMcpWidget(props) {
20
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
21
+ ...props,
22
+ title: "List directory",
23
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [["Path", props.args.path], ["Limit", props.args.limit]] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
24
+ });
25
+ }
26
+ var ls_mcp_default = defineMcpWidget(LsMcpWidget);
27
+ //#endregion
28
+ //#region src/extensions/workspaces/sessions/(frontend)/tool/write.mcp.tsx
29
+ function WriteMcpWidget(props) {
30
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
31
+ ...props,
32
+ title: "Write file",
33
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [["Path", props.args.path], ["Characters", typeof props.args.content === "string" ? props.args.content.length : void 0]] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
34
+ });
35
+ }
36
+ //#endregion
37
+ //#region generated/mcp-ui.ts
38
+ const widgets = {
39
+ "@agimon-ai/doompi-ui/find": find_mcp_default,
40
+ "@agimon-ai/doompi-ui/ls": ls_mcp_default,
41
+ "@agimon-ai/doompi-ui/write": defineMcpWidget(WriteMcpWidget)
42
+ };
43
+ //#endregion
44
+ export { widgets };
45
+
46
+ //# sourceMappingURL=mcp-ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1","Widget2"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/find.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/ls.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/write.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction FindMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Find files\">\n <McpToolFields\n fields={[\n ['Pattern', props.args.pattern],\n ['Path', props.args.path],\n ['Limit', props.args.limit],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(FindMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction LsMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"List directory\">\n <McpToolFields\n fields={[\n ['Path', props.args.path],\n ['Limit', props.args.limit],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(LsMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction WriteMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Write file\">\n <McpToolFields\n fields={[\n ['Path', props.args.path],\n ['Characters', typeof props.args.content === 'string' ? props.args.content.length : undefined],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(WriteMcpWidget);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { DoomMcpWidgetProps } from '@agimon-ai/doompi-core/mcpWidget';\nimport Widget0 from \"../src/extensions/workspaces/sessions/(frontend)/tool/find.mcp\";\nimport Widget1 from \"../src/extensions/workspaces/sessions/(frontend)/tool/ls.mcp\";\nimport Widget2 from \"../src/extensions/workspaces/sessions/(frontend)/tool/write.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<DoomMcpWidgetProps>>> = {\n \"@agimon-ai/doompi-ui/find\": Widget0,\n \"@agimon-ai/doompi-ui/ls\": Widget1,\n \"@agimon-ai/doompi-ui/write\": Widget2,\n};\n"],"mappings":";;;;AAGA,SAAS,cAAc,OAA2B;CAChD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ;GACN,CAAC,WAAW,MAAM,KAAK,OAAO;GAC9B,CAAC,QAAQ,MAAM,KAAK,IAAI;GACxB,CAAC,SAAS,MAAM,KAAK,KAAK;EAC5B,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;AAEA,IAAA,mBAAe,gBAAgB,aAAa;;;ACf5C,SAAS,YAAY,OAA2B;CAC9C,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ,CACN,CAAC,QAAQ,MAAM,KAAK,IAAI,GACxB,CAAC,SAAS,MAAM,KAAK,KAAK,CAC5B,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;AAEA,IAAA,iBAAe,gBAAgB,WAAW;;;ACd1C,SAAS,eAAe,OAA2B;CACjD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ,CACN,CAAC,QAAQ,MAAM,KAAK,IAAI,GACxB,CAAC,cAAc,OAAO,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,QAAQ,SAAS,KAAA,CAAS,CAC/F,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;;;ACRA,MAAa,UAAuE;CAClF,6BAA6BA;CAC7B,2BAA2BC;CAC3B,8BDOa,gBAAgB,cCPCC;AAChC"}
@@ -51,13 +51,20 @@ const via = (identity, value) => value === void 0 ? void 0 : {
51
51
  ...identity,
52
52
  ...value
53
53
  };
54
+ const withWidget = (key, value) => value === void 0 ? value : {
55
+ ...value,
56
+ _meta: {
57
+ ...value._meta,
58
+ ["doompi/widget"]: key
59
+ }
60
+ };
54
61
  const mcp = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpPlugin)({
55
62
  name: "@agimon-ai/doompi-ui",
56
63
  session: (context) => ({ get tools() {
57
64
  return [
58
- via({ name: "find" }, at(find_mcp_default, context)),
59
- via({ name: "ls" }, at(ls_mcp_default, context)),
60
- via({ name: "write" }, at(write_mcp_default, context))
65
+ withWidget("@agimon-ai/doompi-ui/find", via({ name: "find" }, at(find_mcp_default, context))),
66
+ withWidget("@agimon-ai/doompi-ui/ls", via({ name: "ls" }, at(ls_mcp_default, context))),
67
+ withWidget("@agimon-ai/doompi-ui/write", via({ name: "write" }, at(write_mcp_default, context)))
61
68
  ];
62
69
  } })
63
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.cjs","names":["createWriteTool","createFindTool","createLsTool","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const tool = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const tool = createFindTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const tool = createLsTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;AAIA,SAAgB,mBACd,SACoE;CACpE,MAAM,QAAA,GAAOA,gCAAAA,gBAAAA,CAAgB,QAAQ,UAAU,GAAG;CAClD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,QAAA,GAAOC,gCAAAA,eAAAA,CAAe,QAAQ,UAAU,GAAG;CACjD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,QAAA,GAAOC,gCAAAA,aAAAA,CAAa,QAAQ,UAAU,GAAG;CAC/C,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;;;ACnDA,IAAA,oBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,iBAAiB;;;ACApG,IAAA,kBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,eAAe;;;ACAlG,IAAA,qBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,OAAA,GAAMC,gCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,kBAAU,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC;EAAC;CAAG,EAChM;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.cjs","names":["createWriteTool","createFindTool","createLsTool","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const tool = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const tool = createFindTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const tool = createLsTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/doompi-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/doompi-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;AAIA,SAAgB,mBACd,SACoE;CACpE,MAAM,QAAA,GAAOA,gCAAAA,gBAAAA,CAAgB,QAAQ,UAAU,GAAG;CAClD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,QAAA,GAAOC,gCAAAA,eAAAA,CAAe,QAAQ,UAAU,GAAG;CACjD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,QAAA,GAAOC,gCAAAA,aAAAA,CAAa,QAAQ,UAAU,GAAG;CAC/C,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;;;ACnDA,IAAA,oBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,iBAAiB;;;ACApG,IAAA,kBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,eAAe;;;ACAlG,IAAA,qBAAA,GAAeC,gCAAAA,cAAAA,CAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,kBAAkB;CAAI;AACpF;AAEA,MAAa,OAAA,GAAMC,gCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,WAAW,6BAA6B,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,2BAA2B,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,8BAA8B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC1T;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAaa,+CAAG"}
1
+ {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAiBa,+CAAG"}
@@ -47,13 +47,20 @@ const via = (identity, value) => value === void 0 ? void 0 : {
47
47
  ...identity,
48
48
  ...value
49
49
  };
50
+ const withWidget = (key, value) => value === void 0 ? value : {
51
+ ...value,
52
+ _meta: {
53
+ ...value._meta,
54
+ ["doompi/widget"]: key
55
+ }
56
+ };
50
57
  const mcp = defineMcpPlugin({
51
58
  name: "@agimon-ai/doompi-ui",
52
59
  session: (context) => ({ get tools() {
53
60
  return [
54
- via({ name: "find" }, at(find_mcp_default, context)),
55
- via({ name: "ls" }, at(ls_mcp_default, context)),
56
- via({ name: "write" }, at(write_mcp_default, context))
61
+ withWidget("@agimon-ai/doompi-ui/find", via({ name: "find" }, at(find_mcp_default, context))),
62
+ withWidget("@agimon-ai/doompi-ui/ls", via({ name: "ls" }, at(ls_mcp_default, context))),
63
+ withWidget("@agimon-ai/doompi-ui/write", via({ name: "write" }, at(write_mcp_default, context)))
57
64
  ];
58
65
  } })
59
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.mjs","names":["toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const tool = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const tool = createFindTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const tool = createLsTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;AAIA,SAAgB,mBACd,SACoE;CACpE,MAAM,OAAO,gBAAgB,QAAQ,UAAU,GAAG;CAClD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,OAAO,eAAe,QAAQ,UAAU,GAAG;CACjD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,OAAO,aAAa,QAAQ,UAAU,GAAG;CAC/C,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;;;ACnDA,IAAA,mBAAe,cAAoE,iBAAiB;;;ACApG,IAAA,iBAAe,cAAoE,eAAe;;;ACAlG,IAAA,oBAAe,cAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGA,kBAAU,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC;EAAC;CAAG,EAChM;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.mjs","names":["toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const tool = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const tool = createFindTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const tool = createLsTool(context.execution.cwd);\n return {\n ...tool,\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n execute(toolCallId, parameters, signal, onUpdate) {\n return tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate,\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/doompi-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/doompi-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;AAIA,SAAgB,mBACd,SACoE;CACpE,MAAM,OAAO,gBAAgB,QAAQ,UAAU,GAAG;CAClD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,OAAO,eAAe,QAAQ,UAAU,GAAG;CACjD,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,OAAO,aAAa,QAAQ,UAAU,GAAG;CAC/C,OAAO;EACL,GAAG;EACH,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAChD,OAAO,KAAK,QACV,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,QACF;EACF;CACF;AACF;;;ACnDA,IAAA,mBAAe,cAAoE,iBAAiB;;;ACApG,IAAA,iBAAe,cAAoE,eAAe;;;ACAlG,IAAA,oBAAe,cAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,kBAAkB;CAAI;AACpF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,WAAW,6BAA6B,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGA,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,2BAA2B,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,8BAA8B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC1T;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi-ui",
3
- "version": "0.0.1-alpha.87",
3
+ "version": "0.0.1-alpha.88",
4
4
  "description": "Leader-key menus, themes, and TUI components for DoomPi and Pi extensions.",
5
5
  "keywords": [
6
6
  "ai",
@@ -170,18 +170,19 @@
170
170
  "access": "public"
171
171
  },
172
172
  "dependencies": {
173
- "@agimon-ai/doompi-core": "0.0.1-alpha.87",
174
- "@agimon-ai/doompi-hashline": "0.0.1-alpha.53",
175
- "@agimon-ai/doompi-minor-mode": "0.0.1-alpha.87",
176
- "@agimon-ai/doompi-telemetry": "0.0.1-alpha.81",
173
+ "@agimon-ai/doompi-core": "0.0.1-alpha.88",
174
+ "@agimon-ai/doompi-hashline": "0.0.1-alpha.54",
175
+ "@agimon-ai/doompi-minor-mode": "0.0.1-alpha.88",
176
+ "@agimon-ai/doompi-telemetry": "0.0.1-alpha.82",
177
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.46",
177
178
  "@deepseek-ai/cordis": "4.0.2",
178
179
  "@earendil-works/pi-tui": "0.87.1",
179
180
  "yaml": "2.9.1"
180
181
  },
181
182
  "devDependencies": {
182
- "@agimon-ai/doompi-build": "0.0.1-alpha.13",
183
- "@agimon-ai/doompi-core": "0.0.1-alpha.87",
184
- "@agimon-ai/doompi-web-components": "0.0.1-alpha.45",
183
+ "@agimon-ai/doompi-build": "0.0.1-alpha.14",
184
+ "@agimon-ai/doompi-core": "0.0.1-alpha.88",
185
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.46",
185
186
  "@earendil-works/pi-coding-agent": "0.87.1",
186
187
  "@tanstack/react-store": "0.11.1",
187
188
  "@tanstack/store": "0.11.1",
@@ -195,8 +196,8 @@
195
196
  "vitest": "5.0.1"
196
197
  },
197
198
  "peerDependencies": {
198
- "@agimon-ai/doompi-core": "0.0.1-alpha.87",
199
- "@agimon-ai/doompi-web-components": "0.0.1-alpha.45",
199
+ "@agimon-ai/doompi-core": "0.0.1-alpha.88",
200
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.46",
200
201
  "@earendil-works/pi-coding-agent": "0.87.1"
201
202
  },
202
203
  "peerDependenciesMeta": {
@@ -215,7 +216,16 @@
215
216
  "dist": "./dist/extensions/mcp.mjs",
216
217
  "scopes": [
217
218
  "session"
218
- ]
219
+ ],
220
+ "ui": {
221
+ "entry": "./generated/mcp-ui.ts",
222
+ "dist": "./dist/extensions/mcp-ui.mjs",
223
+ "widgets": [
224
+ "@agimon-ai/doompi-ui/find",
225
+ "@agimon-ai/doompi-ui/ls",
226
+ "@agimon-ai/doompi-ui/write"
227
+ ]
228
+ }
219
229
  },
220
230
  "doompiServer": {
221
231
  "entry": "./generated/server.ts",
@@ -245,7 +255,7 @@
245
255
  "build": "tsdown && tsdown --config tsdown.mcp.config.ts",
246
256
  "build:mcp": "tsdown --config tsdown.mcp.config.ts",
247
257
  "test": "vitest --run",
248
- "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.web.json",
258
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.web.json && tsc --noEmit -p tsconfig.mcp.json",
249
259
  "lint": "oxlint . && oxfmt . --check",
250
260
  "fixcode": "oxlint . --fix && oxfmt ."
251
261
  }