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