feat(runtime): 即梦本机运行时 - 接入安全生成闭环与桌面本机渠道

Refs #225

Co-authored-by: zkhyww <127009345+zkhyww@users.noreply.github.com>
This commit is contained in:
ddCat
2026-08-15 12:45:29 +08:00
parent 8f2232feee
commit 57e1820f41
179 changed files with 49746 additions and 1897 deletions

View File

@@ -2,17 +2,25 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { AGENT_PROMPT, loadConfig, type CanvasAgentConfig, VERSION } from "./config.js";
import { registerDreaminaMcp } from "./modules/dreamina-mcp.js";
import { toolDescriptions, toolInputSchemas, toolNames, type ToolName } from "./schemas.js";
type CanvasAgentToolResponse = { ok?: boolean; result?: unknown; error?: string };
export async function startMcpServer() {
export async function startMcpServer(options: { canvasOnly?: boolean } = {}) {
const config = loadConfig(true);
const server = new McpServer({ name: "canvas-agent", version: VERSION }, { instructions: AGENT_PROMPT });
toolNames.forEach((name) => registerCanvasTool(server, config, name));
registerMcpTools(server, config, {
canvasOnly: options.canvasOnly ?? process.argv.slice(3).includes("--canvas-only"),
});
await server.connect(new StdioServerTransport());
}
export function registerMcpTools(server: McpServer, config: CanvasAgentConfig, options: { canvasOnly?: boolean } = {}) {
toolNames.forEach((name) => registerCanvasTool(server, config, name));
if (!options.canvasOnly) registerDreaminaMcp(server, config);
}
function registerCanvasTool(server: McpServer, config: CanvasAgentConfig, name: ToolName) {
const schema = toolInputSchemas[name];
server.registerTool(name, { description: toolDescriptions[name], inputSchema: schema.shape }, async (input: unknown) => {
@@ -27,3 +35,5 @@ async function postCanvasAgentTool(config: CanvasAgentConfig, name: ToolName, in
if (!body.ok) throw new Error(body.error || "tool call failed");
return body.result;
}
export { postDreaminaCliTool } from "./modules/dreamina-mcp.js";