chore: commit workspace updates

This commit is contained in:
ddCat
2026-09-14 01:11:56 +08:00
parent 01a2d171f5
commit 9727656b2b
491 changed files with 12826 additions and 72249 deletions

View File

@@ -71,7 +71,7 @@ Eagle 插件把桌面 Eagle 资料库接入站点素材面板。浏览器不会
- Eagle 通常运行在本机。后端必须继续执行私网目标校验,只允许管理员明确配置的本机服务,不能把该代理变成任意 URL 抓取器。
- \`baseUrl\` 只保存服务地址,不包含 Token、Cookie 或查询密钥。
- 原文件和 data URL 不进入日志、localStorage 或错误上报。
- 多用户部署中,服务器的 \`127.0.0.1\` 指服务器自身,不是访问者电脑;这种部署需要本地 Agent/隧道方案,不能假装直连可用。
- 多用户部署中,服务器的 \`127.0.0.1\` 指服务器自身,不是访问者电脑;请使用 Eagle 官方可访问的客户端连接方式,不能假装直连可用。
## 常见问题

View File

@@ -1,7 +1,5 @@
import "./eagle";
import "./prompt-optimizer";
import "./workflows";
import "./portrait-clearance";
import "./ai-art-critique";
import "./media-conversion";
import "./editor/editor-shell";

View File

@@ -1,37 +0,0 @@
import { MEDIA_CONVERSION_NODE_TYPE } from "@/lib/media-conversion/contracts";
import { registerPlugin } from "../plugin-registry";
import { PLUGIN_API_VERSION, type PluginManifest, type RegisteredPlugin } from "../plugin-types";
export const MEDIA_CONVERSION_PLUGIN_ID = "media-conversion";
const manifest: PluginManifest = {
apiVersion: PLUGIN_API_VERSION,
id: MEDIA_CONVERSION_PLUGIN_ID,
name: "媒体转换节点",
version: "0.1.0",
publishedAt: "2026-09-08",
updatedAt: "2026-09-08",
description: "在画布中提供图片转换节点,支持灰度、Canny 边缘、AI 线稿、本地 Depth Anything V2 深度图和 OpenPose 姿态骨架。",
documentation:
"# 媒体转换节点\n\n连接图片到转换节点后,可以在节点内选择灰度图、Canny 边缘、AI 线稿、深度图或姿态骨架。AI 线稿使用本机 ControlNet Aux 预处理模型,深度图使用本机已安装的 Depth Anything V2 Small 模型,姿态骨架使用 ControlNet Aux 的 OpenPose 人体预处理模型运行;这些操作都不会加载 Stable Diffusion 重绘管线。姿态转换只绘制人体骨架,未检测到人物时会跳过并提示。视频转换和透明抠图模型仍在验证,暂时会明确提示不可用。\n\n该插件只读取当前节点的媒体输入,并把结果保存回当前画布节点的本地素材存储。",
author: "影策团队",
surfaces: ["node"],
permissions: ["canvas.read", "canvas.write", "media.read"],
trusted: true,
runtime: { web: "declarative" },
contributes: {
transforms: [
{
id: MEDIA_CONVERSION_NODE_TYPE,
input: "media",
output: "media",
runtime: "declarative",
},
],
},
};
export const mediaConversionPlugin: RegisteredPlugin = { manifest };
registerPlugin(mediaConversionPlugin);

View File

@@ -1,48 +0,0 @@
import { registerPlugin } from "@/lib/plugins/plugin-registry";
import type { PluginManifest, RegisteredPlugin } from "@/lib/plugins/plugin-types";
import { PORTRAIT_CLEARANCE_NODE_TYPE, PORTRAIT_CLEARANCE_PLUGIN_ID, createDefaultPortraitClearanceState } from "@/lib/portrait-clearance/contracts";
import { prepareAnalysisNodeAction } from "../analysis-node-action";
const manifest: PluginManifest = {
apiVersion: "yingce.plugin/v1",
id: PORTRAIT_CLEARANCE_PLUGIN_ID,
name: "肖像权可识别性排查",
version: "0.1.0",
description: "对虚拟人和人物图片执行本地人脸预检、网络候选排查与审慎风险报告。",
author: "内置工具",
surfaces: ["node", "fullscreen"],
permissions: [
"canvas.read",
"canvas.write",
"asset.read",
"asset.import",
"ai.text",
"external.open",
],
trusted: true,
runtime: { backend: "trusted-backend", web: "declarative" },
contributes: {
canvasNodes: [
{
id: PORTRAIT_CLEARANCE_NODE_TYPE,
label: "肖像排查",
defaultTitle: "肖像可识别性排查",
defaultSize: { width: 560, height: 420 },
schema: { type: "object", properties: { portraitClearance: { type: "object" } } },
renderer: "declarative",
},
],
},
};
export const portraitClearancePlugin: RegisteredPlugin = {
manifest,
agentActions: [prepareAnalysisNodeAction(PORTRAIT_CLEARANCE_NODE_TYPE, "肖像可识别性排查", () => ({ portraitClearance: createDefaultPortraitClearanceState() }))],
readAgentNode: (node) => {
const state = node.metadata?.portraitClearance;
return { mode: state?.mode, task: state?.task, lastResult: state?.lastResult, execution: "仅返回已观测任务和结果;新分析仍通过插件自己的任务入口启动。" };
},
};
registerPlugin(portraitClearancePlugin);

View File

@@ -2,12 +2,11 @@ import { registerPlugin } from "../plugin-registry";
import { PLUGIN_API_VERSION, type PluginManifest, type RegisteredPlugin } from "../plugin-types";
export const RUNNINGHUB_PLUGIN_ID = "runninghub-workflow-provider";
export const COMFYUI_PLUGIN_ID = "comfyui-workflow-provider";
export type WorkflowProvider = "runninghub" | "comfyui";
export type WorkflowProvider = "runninghub";
export function workflowPluginId(provider: WorkflowProvider) {
return provider === "runninghub" ? RUNNINGHUB_PLUGIN_ID : COMFYUI_PLUGIN_ID;
return RUNNINGHUB_PLUGIN_ID;
}
export function workflowProviderPluginEnabled(statuses: Record<string, string>, provider: WorkflowProvider) {
@@ -42,23 +41,4 @@ const runningHubManifest: PluginManifest = {
contributes: { workflows: workflowContributions(RUNNINGHUB_PLUGIN_ID, "RunningHub") },
};
const comfyUIManifest: PluginManifest = {
id: COMFYUI_PLUGIN_ID,
name: "ComfyUI Bridge 工作流",
version: "1.0.0",
publishedAt: "2026-08-25",
updatedAt: "2026-08-25",
apiVersion: PLUGIN_API_VERSION,
description: "通过本机或云端 Bridge 发现、映射并执行 ComfyUI API 工作流。",
documentation:
"# ComfyUI Bridge 工作流\n\n该插件把 ComfyUI API JSON 工作流接入画布工作流节点。Bridge 在能访问 ComfyUI 的机器上运行,工作流字段映射和执行请求由宿主处理。\n\n在插件设置中可以打开完整的 ComfyUI Bridge 配置页,注册设备、发现工作流并测试请求。",
author: "内置工作流",
surfaces: ["node", "settings"],
permissions: ["generation.run", "external.open"],
trusted: true,
runtime: { backend: "trusted-backend", web: "trusted-backend" },
contributes: { workflows: workflowContributions(COMFYUI_PLUGIN_ID, "ComfyUI Bridge") },
};
registerPlugin({ manifest: runningHubManifest } satisfies RegisteredPlugin);
registerPlugin({ manifest: comfyUIManifest } satisfies RegisteredPlugin);

View File

@@ -322,13 +322,13 @@ export type PluginAgentAction = {
description: string;
inputSchema: Record<string, unknown>;
/** Pure planner: validate input and return operations, never perform side effects here. */
buildOperations: (input: Record<string, unknown>, snapshot: import("@/lib/canvas/canvas-agent-ops").CanvasAgentSnapshot) => import("@/lib/canvas/canvas-agent-ops").CanvasAgentOp[];
buildOperations: (input: Record<string, unknown>, snapshot: import("@/lib/canvas/canvas-operation-contract").CanvasSnapshot) => import("@/lib/canvas/canvas-operation-contract").CanvasOperation[];
};
export type RegisteredPlugin = {
agentActions?: PluginAgentAction[];
/** Pure, bounded projection: never return embedded media or provider credentials. */
readAgentNode?: (node: import("@/types/canvas").CanvasNodeData, snapshot: import("@/lib/canvas/canvas-agent-ops").CanvasAgentSnapshot) => Record<string, unknown>;
readAgentNode?: (node: import("@/types/canvas").CanvasNodeData, snapshot: import("@/lib/canvas/canvas-operation-contract").CanvasSnapshot) => Record<string, unknown>;
/** v1 或 v2 插件清单;v2 清单结构为 v1 超集(含 editorSlots 声明)。 */
manifest: PluginManifest | PluginManifestV2;
source?: "bundled" | "uploaded" | string;