@lokvis/schema 0.2.2 → 0.4.1
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/dist/capability-names.generated.d.ts +19 -0
- package/dist/capability-names.generated.d.ts.map +1 -0
- package/dist/capability-names.generated.js +41 -0
- package/dist/capability-names.generated.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +56 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +18 -0
- package/dist/metadata.js.map +1 -0
- package/dist/plugin.d.ts +61 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/validators.d.ts +53 -8
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +36 -10
- package/dist/validators.js.map +1 -1
- package/dist/workflow.d.ts +30 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +19 -10
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/capability-names.generated.ts +94 -0
- package/src/index.ts +2 -0
- package/src/metadata.ts +58 -0
- package/src/plugin.ts +64 -2
- package/src/validators.ts +39 -12
- package/src/workflow.ts +43 -10
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTO-GENERATED BY scripts/codegen-capabilities.ts — DO NOT EDIT.
|
|
3
|
+
*
|
|
4
|
+
* 来源:packages/capability/manifests/ai.manifest.json, packages/capability/manifests/audio.manifest.json, packages/capability/manifests/developer.manifest.json, packages/capability/manifests/image.manifest.json, packages/capability/manifests/pdf.manifest.json, packages/capability/manifests/video.manifest.json
|
|
5
|
+
* 重跑:pnpm codegen
|
|
6
|
+
*
|
|
7
|
+
* 此文件提供精确字面量联合类型 BuiltinCapabilityName,
|
|
8
|
+
* 用于 IDE 自动补全与编译期拼写检查。
|
|
9
|
+
*
|
|
10
|
+
* 注意:
|
|
11
|
+
* - `CapabilityName`(见 capability.ts)仍是 `string` 别名,
|
|
12
|
+
* 接受任意能力名(含第三方 plugin 注册的自定义能力)
|
|
13
|
+
* - `BuiltinCapabilityName` 是已知内置能力的字面量子集,
|
|
14
|
+
* 可作为 `CapabilityName` 的精确化类型
|
|
15
|
+
*/
|
|
16
|
+
export type BuiltinCapabilityName = 'ai.ocr' | 'ai.caption' | 'ai.background-remove' | 'ai.generate-workflow' | 'ai.optimize-workflow' | 'ai.diagnose-error' | 'audio.trim' | 'audio.normalize' | 'audio.merge' | 'audio.transcode' | 'developer.inspect.capabilities' | 'developer.inspect.asset' | 'developer.validate.workflow' | 'developer.profile' | 'image.resize' | 'image.compress' | 'image.convert' | 'image.crop' | 'image.rotate' | 'image.flip' | 'image.watermark' | 'image.background' | 'image.filter' | 'pdf.merge' | 'pdf.split' | 'pdf.compress' | 'pdf.rotate' | 'pdf.watermark' | 'pdf.ocr' | 'pdf.sign' | 'video.compress' | 'video.transcode' | 'video.trim' | 'video.merge' | 'video.extract-audio' | 'video.to-gif' | 'video.screenshot';
|
|
17
|
+
/** 全部内置能力名常量数组(运行时校验 / 枚举用) */
|
|
18
|
+
export declare const BUILTIN_CAPABILITY_NAMES: readonly BuiltinCapabilityName[];
|
|
19
|
+
//# sourceMappingURL=capability-names.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-names.generated.d.ts","sourceRoot":"","sources":["../src/capability-names.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,YAAY,GACZ,sBAAsB,GACtB,sBAAsB,GACtB,sBAAsB,GACtB,mBAAmB,GACnB,YAAY,GACZ,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,gCAAgC,GAChC,yBAAyB,GACzB,6BAA6B,GAC7B,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,WAAW,GACX,WAAW,GACX,cAAc,GACd,YAAY,GACZ,eAAe,GACf,SAAS,GACT,UAAU,GACV,gBAAgB,GAChB,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,qBAAqB,GACrB,cAAc,GACd,kBAAkB,CAAC;AAEvB,+BAA+B;AAC/B,eAAO,MAAM,wBAAwB,EAAE,SAAS,qBAAqB,EAsCpE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** 全部内置能力名常量数组(运行时校验 / 枚举用) */
|
|
2
|
+
export const BUILTIN_CAPABILITY_NAMES = [
|
|
3
|
+
'ai.ocr',
|
|
4
|
+
'ai.caption',
|
|
5
|
+
'ai.background-remove',
|
|
6
|
+
'ai.generate-workflow',
|
|
7
|
+
'ai.optimize-workflow',
|
|
8
|
+
'ai.diagnose-error',
|
|
9
|
+
'audio.trim',
|
|
10
|
+
'audio.normalize',
|
|
11
|
+
'audio.merge',
|
|
12
|
+
'audio.transcode',
|
|
13
|
+
'developer.inspect.capabilities',
|
|
14
|
+
'developer.inspect.asset',
|
|
15
|
+
'developer.validate.workflow',
|
|
16
|
+
'developer.profile',
|
|
17
|
+
'image.resize',
|
|
18
|
+
'image.compress',
|
|
19
|
+
'image.convert',
|
|
20
|
+
'image.crop',
|
|
21
|
+
'image.rotate',
|
|
22
|
+
'image.flip',
|
|
23
|
+
'image.watermark',
|
|
24
|
+
'image.background',
|
|
25
|
+
'image.filter',
|
|
26
|
+
'pdf.merge',
|
|
27
|
+
'pdf.split',
|
|
28
|
+
'pdf.compress',
|
|
29
|
+
'pdf.rotate',
|
|
30
|
+
'pdf.watermark',
|
|
31
|
+
'pdf.ocr',
|
|
32
|
+
'pdf.sign',
|
|
33
|
+
'video.compress',
|
|
34
|
+
'video.transcode',
|
|
35
|
+
'video.trim',
|
|
36
|
+
'video.merge',
|
|
37
|
+
'video.extract-audio',
|
|
38
|
+
'video.to-gif',
|
|
39
|
+
'video.screenshot',
|
|
40
|
+
];
|
|
41
|
+
//# sourceMappingURL=capability-names.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-names.generated.js","sourceRoot":"","sources":["../src/capability-names.generated.ts"],"names":[],"mappings":"AAsDA,+BAA+B;AAC/B,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,QAAQ;IACR,YAAY;IACZ,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IACjB,gCAAgC;IAChC,yBAAyB;IACzB,6BAA6B;IAC7B,mBAAmB;IACnB,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,eAAe;IACf,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,cAAc;IACd,kBAAkB;CACnB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './workflow.js';
|
|
|
10
10
|
export * from './event.js';
|
|
11
11
|
export * from './plugin.js';
|
|
12
12
|
export * from './exif.js';
|
|
13
|
+
export * from './metadata.js';
|
|
13
14
|
export * from './mcp.js';
|
|
14
15
|
export * from './validators.js';
|
|
15
16
|
export declare const SCHEMA_VERSION: "1.0.0";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAE1B,cAAc,UAAU,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAGhC,eAAO,MAAM,cAAc,EAAG,OAAgB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,EAAG,OAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAE1B,cAAc,eAAe,CAAC;AAE9B,cAAc,UAAU,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAGhC,eAAO,MAAM,cAAc,EAAG,OAAgB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,EAAG,OAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,8 @@ export * from './workflow.js';
|
|
|
11
11
|
export * from './event.js';
|
|
12
12
|
export * from './plugin.js';
|
|
13
13
|
export * from './exif.js';
|
|
14
|
+
// 跨层共享的资产元数据查询类型(ImageMetadata / PdfInfo,见 metadata.ts)
|
|
15
|
+
export * from './metadata.js';
|
|
14
16
|
// MCP manifest 类型(见 docs/AI生态冲击调整方案.md §6.1)
|
|
15
17
|
export * from './mcp.js';
|
|
16
18
|
// Zod 校验器
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO;AACP,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,6CAA6C;AAC7C,cAAc,UAAU,CAAC;AAEzB,UAAU;AACV,cAAc,iBAAiB,CAAC;AAEhC,OAAO;AACP,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO;AACP,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,wDAAwD;AACxD,cAAc,eAAe,CAAC;AAC9B,6CAA6C;AAC7C,cAAc,UAAU,CAAC;AAEzB,UAAU;AACV,cAAc,iBAAiB,CAAC;AAEhC,OAAO;AACP,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 跨层共享的资产元数据查询类型。
|
|
3
|
+
*
|
|
4
|
+
* 与 ExifData 同一设计层级:某些 Plugin 能力本质是"元数据查询"而非
|
|
5
|
+
* "资产变换"(如 image dimensions 读取、pdf 页数读取),既不符合 Engine
|
|
6
|
+
* 层 Blob↔Blob 纯函数约束,也不符合 Capability Asset[]→Asset[] 契约。
|
|
7
|
+
* 这类能力通过 MetadataReader 注册,返回值类型定义在此处,
|
|
8
|
+
* 供 Runtime / SDK / 上层消费者(mcp-server 等)共享,避免跨层依赖。
|
|
9
|
+
*
|
|
10
|
+
* 与 AssetMetadata 的区别:
|
|
11
|
+
* - AssetMetadata:导入时一次性提取的通用元数据(size/mimeType/format/
|
|
12
|
+
* dimensions/duration/pages),所有 asset 都有
|
|
13
|
+
* - ImageMetadata / PdfInfo:按需查询的领域特定元数据,由 Plugin 通过
|
|
14
|
+
* MetadataReader 提供(如 image 经 sharp 解码读尺寸、pdf 经 pdf-lib
|
|
15
|
+
* 读页数),用于处理后输出资产的精确元数据报告
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* 图像元数据(width/height/format)。
|
|
19
|
+
*
|
|
20
|
+
* 由 plugin-image 的 `image.read-metadata` MetadataReader 提供,
|
|
21
|
+
* 内部调用 engine-image/node 的 getMetadata(sharp .metadata())。
|
|
22
|
+
* 与 engine-image/node 的 ImageMetadata 接口对齐(此处为共享类型源,
|
|
23
|
+
* engine-image 改为 re-export 本类型)。
|
|
24
|
+
*/
|
|
25
|
+
export interface ImageMetadata {
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
format: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* PDF 基本信息(页数)。
|
|
32
|
+
*
|
|
33
|
+
* 由 plugin-pdf 的 `pdf.read-info` MetadataReader 提供,
|
|
34
|
+
* 内部调用 engine-pdf 的 getPdfInfo(pdf-lib getPageCount)。
|
|
35
|
+
* 与 engine-pdf 的 PdfInfo 接口对齐(此处为共享类型源,
|
|
36
|
+
* engine-pdf 改为 re-export 本类型)。
|
|
37
|
+
*/
|
|
38
|
+
export interface PdfInfo {
|
|
39
|
+
pages: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 视频基本信息(分辨率/时长/帧率/编解码)。
|
|
43
|
+
*
|
|
44
|
+
* 由 plugin-video/node 的 `video.read-info` MetadataReader 提供,
|
|
45
|
+
* 内部调用 engine-video/node 的 getVideoInfo(ffprobe 解析)。
|
|
46
|
+
* 与 engine-video 的 VideoInfo 接口对齐(此处为共享类型源,
|
|
47
|
+
* engine-video 改为 re-export 本类型)。
|
|
48
|
+
*/
|
|
49
|
+
export interface VideoInfo {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
duration: number;
|
|
53
|
+
fps: number;
|
|
54
|
+
codec: string;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf"}
|
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 跨层共享的资产元数据查询类型。
|
|
3
|
+
*
|
|
4
|
+
* 与 ExifData 同一设计层级:某些 Plugin 能力本质是"元数据查询"而非
|
|
5
|
+
* "资产变换"(如 image dimensions 读取、pdf 页数读取),既不符合 Engine
|
|
6
|
+
* 层 Blob↔Blob 纯函数约束,也不符合 Capability Asset[]→Asset[] 契约。
|
|
7
|
+
* 这类能力通过 MetadataReader 注册,返回值类型定义在此处,
|
|
8
|
+
* 供 Runtime / SDK / 上层消费者(mcp-server 等)共享,避免跨层依赖。
|
|
9
|
+
*
|
|
10
|
+
* 与 AssetMetadata 的区别:
|
|
11
|
+
* - AssetMetadata:导入时一次性提取的通用元数据(size/mimeType/format/
|
|
12
|
+
* dimensions/duration/pages),所有 asset 都有
|
|
13
|
+
* - ImageMetadata / PdfInfo:按需查询的领域特定元数据,由 Plugin 通过
|
|
14
|
+
* MetadataReader 提供(如 image 经 sharp 解码读尺寸、pdf 经 pdf-lib
|
|
15
|
+
* 读页数),用于处理后输出资产的精确元数据报告
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -36,6 +36,34 @@ export interface PluginConfig {
|
|
|
36
36
|
/** 权限声明 */
|
|
37
37
|
permissions?: PluginPermission[];
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Plugin 权限沙箱契约(由 runtime 实现)。
|
|
41
|
+
*
|
|
42
|
+
* Plugin 通过 `ctx.sandbox` 访问自身权限声明,在调用受限 API 前主动断言:
|
|
43
|
+
* ctx.sandbox.assertNetworkAllowed('loading model manifest');
|
|
44
|
+
* 若声明 network:none,断言立即抛 PluginPermissionError;否则 no-op。
|
|
45
|
+
*
|
|
46
|
+
* 实现见 @lokvis/runtime 的 PluginPermissionSandbox 类。schema 仅定义契约
|
|
47
|
+
* (依赖反转:runtime 依赖 schema,而非反之)。
|
|
48
|
+
*/
|
|
49
|
+
export interface PluginPermissionSandbox {
|
|
50
|
+
/** 插件名(便于错误信息定位) */
|
|
51
|
+
readonly pluginName: string;
|
|
52
|
+
/** 声明的权限集合(只读) */
|
|
53
|
+
readonly declared: ReadonlySet<PluginPermission>;
|
|
54
|
+
/** 是否声明了指定权限 */
|
|
55
|
+
has(perm: PluginPermission): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* 断言网络调用允许(声明 network:none 时抛错)。
|
|
58
|
+
* Plugin 在调用 fetch / XHR 等前可主动调用。
|
|
59
|
+
*/
|
|
60
|
+
assertNetworkAllowed(reason: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* 断言文件系统访问允许(声明未含对应 filesystem:* 时抛错)。
|
|
63
|
+
* @param scope 'opfs'(OPFS 根目录)或 'local'(任意本地文件系统)
|
|
64
|
+
*/
|
|
65
|
+
assertFilesystemAllowed(scope: 'opfs' | 'local', reason: string): void;
|
|
66
|
+
}
|
|
39
67
|
/** Panel 定义(UI 扩展点) */
|
|
40
68
|
export interface PanelDefinition {
|
|
41
69
|
id: string;
|
|
@@ -53,7 +81,7 @@ export interface PanelDefinition {
|
|
|
53
81
|
* 元数据读取函数(依赖反转)。
|
|
54
82
|
*
|
|
55
83
|
* 某些 Plugin 能力本质是"元数据查询"而非"资产变换"(如 EXIF 读取:
|
|
56
|
-
* Blob → ExifData),既不符合 Engine 层 Blob↔Blob
|
|
84
|
+
* Blob → ExifData),既不符合 Engine 层 Blob↔Blob 纯函数约束,也不符合
|
|
57
85
|
* CapabilityImplementation 的 Asset[]→Asset[] 契约。这类能力通过
|
|
58
86
|
* MetadataReader 注册:Plugin 提供读取函数,Runtime 持有引用并按名调用。
|
|
59
87
|
*
|
|
@@ -67,9 +95,28 @@ export interface PanelDefinition {
|
|
|
67
95
|
* - 类型直接透传(ExifData),无需序列化
|
|
68
96
|
*
|
|
69
97
|
* @param asset 输入资产
|
|
98
|
+
* @param ctx 读取上下文(提供 log 可观测信号;TD-3.4 长期方案)
|
|
70
99
|
* @returns 读取结果;无数据 / 解析失败返回 null
|
|
71
100
|
*/
|
|
72
|
-
export type MetadataReader<T = unknown> = (asset: import('./asset.js').Asset) => Promise<T | null>;
|
|
101
|
+
export type MetadataReader<T = unknown> = (asset: import('./asset.js').Asset, ctx: MetadataReaderContext) => Promise<T | null>;
|
|
102
|
+
/**
|
|
103
|
+
* 元数据读取上下文(TD-3.4 长期方案)。
|
|
104
|
+
*
|
|
105
|
+
* 为 MetadataReader 提供可观测信号,使其能区分"无数据"(返回 null)
|
|
106
|
+
* 与"解析异常"(log warn 后返回 null),避免静默吞错。
|
|
107
|
+
*
|
|
108
|
+
* 与 ExecutionContext 的关系:
|
|
109
|
+
* - ExecutionContext 用于 Capability execute,含 workflowId / nodeId /
|
|
110
|
+
* signal / onProgress(走 WorkflowExecutor)
|
|
111
|
+
* - MetadataReaderContext 用于 MetadataReader,只含 log(走 Runtime
|
|
112
|
+
* 直接调用,无 workflow 上下文)
|
|
113
|
+
*
|
|
114
|
+
* log 签名与 ExecutionContext.log 一致,便于 Plugin 复用日志逻辑。
|
|
115
|
+
*/
|
|
116
|
+
export interface MetadataReaderContext {
|
|
117
|
+
/** 日志函数(与 ExecutionContext.log 一致签名) */
|
|
118
|
+
log: (level: 'info' | 'warn' | 'error', message: string) => void;
|
|
119
|
+
}
|
|
73
120
|
/**
|
|
74
121
|
* Plugin 上下文(Plugin 能访问的全部 API)
|
|
75
122
|
*
|
|
@@ -111,6 +158,18 @@ export interface PluginContext {
|
|
|
111
158
|
registerMetadataReader<T>(name: string, reader: MetadataReader<T>): void;
|
|
112
159
|
/** 注册 UI Panel */
|
|
113
160
|
registerPanel(panel: PanelDefinition): void;
|
|
161
|
+
/**
|
|
162
|
+
* 权限沙箱(W18.6)。
|
|
163
|
+
*
|
|
164
|
+
* Plugin 据此在调用受限 API 前主动断言:
|
|
165
|
+
* ctx.sandbox.assertNetworkAllowed('loading manifest');
|
|
166
|
+
*
|
|
167
|
+
* Runtime 在 installPlugin() 期间应用 network guard
|
|
168
|
+
* (monkey-patch fetch/XHR/WebSocket/EventSource),声明
|
|
169
|
+
* network:none 时这些 API 调用立即抛 NetworkGuardError。
|
|
170
|
+
* capability execute() 路径不自动应用守卫 —— plugin 应主动自检。
|
|
171
|
+
*/
|
|
172
|
+
readonly sandbox: PluginPermissionSandbox;
|
|
114
173
|
/** 日志 */
|
|
115
174
|
log(level: 'info' | 'warn' | 'error', message: string): void;
|
|
116
175
|
}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,kBAAkB;AAClB,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB;IACrB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,WAAW;IACX,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC;CAC3D;AAED
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/validators.d.ts
CHANGED
|
@@ -87,6 +87,17 @@ export declare const workflowEdgeSchema: z.ZodObject<{
|
|
|
87
87
|
from: string;
|
|
88
88
|
to: string;
|
|
89
89
|
}>;
|
|
90
|
+
/** E1: 多 target 输出定义 */
|
|
91
|
+
export declare const outputTargetSchema: z.ZodObject<{
|
|
92
|
+
name: z.ZodString;
|
|
93
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
94
|
+
}, "strip", z.ZodTypeAny, {
|
|
95
|
+
name: string;
|
|
96
|
+
params?: Record<string, unknown> | undefined;
|
|
97
|
+
}, {
|
|
98
|
+
name: string;
|
|
99
|
+
params?: Record<string, unknown> | undefined;
|
|
100
|
+
}>;
|
|
90
101
|
export declare const workflowSchema: z.ZodObject<{
|
|
91
102
|
$schema: z.ZodOptional<z.ZodString>;
|
|
92
103
|
id: z.ZodString;
|
|
@@ -165,20 +176,38 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
165
176
|
outputs: z.ZodObject<{
|
|
166
177
|
type: z.ZodEnum<["image", "video", "audio", "pdf", "text", "data", "unknown", "archive"]>;
|
|
167
178
|
format: z.ZodOptional<z.ZodString>;
|
|
179
|
+
targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
180
|
+
name: z.ZodString;
|
|
181
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
182
|
+
}, "strip", z.ZodTypeAny, {
|
|
183
|
+
name: string;
|
|
184
|
+
params?: Record<string, unknown> | undefined;
|
|
185
|
+
}, {
|
|
186
|
+
name: string;
|
|
187
|
+
params?: Record<string, unknown> | undefined;
|
|
188
|
+
}>, "many">>;
|
|
168
189
|
}, "strip", z.ZodTypeAny, {
|
|
169
190
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
170
191
|
format?: string | undefined;
|
|
192
|
+
targets?: {
|
|
193
|
+
name: string;
|
|
194
|
+
params?: Record<string, unknown> | undefined;
|
|
195
|
+
}[] | undefined;
|
|
171
196
|
}, {
|
|
172
197
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
173
198
|
format?: string | undefined;
|
|
199
|
+
targets?: {
|
|
200
|
+
name: string;
|
|
201
|
+
params?: Record<string, unknown> | undefined;
|
|
202
|
+
}[] | undefined;
|
|
174
203
|
}>;
|
|
175
204
|
official: z.ZodOptional<z.ZodBoolean>;
|
|
176
205
|
createdAt: z.ZodOptional<z.ZodNumber>;
|
|
177
206
|
updatedAt: z.ZodOptional<z.ZodNumber>;
|
|
178
207
|
}, "strip", z.ZodTypeAny, {
|
|
179
208
|
id: string;
|
|
180
|
-
version: string;
|
|
181
209
|
name: string;
|
|
210
|
+
version: string;
|
|
182
211
|
description: string;
|
|
183
212
|
author: {
|
|
184
213
|
id: string;
|
|
@@ -206,6 +235,10 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
206
235
|
outputs: {
|
|
207
236
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
208
237
|
format?: string | undefined;
|
|
238
|
+
targets?: {
|
|
239
|
+
name: string;
|
|
240
|
+
params?: Record<string, unknown> | undefined;
|
|
241
|
+
}[] | undefined;
|
|
209
242
|
};
|
|
210
243
|
$schema?: string | undefined;
|
|
211
244
|
official?: boolean | undefined;
|
|
@@ -213,8 +246,8 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
213
246
|
updatedAt?: number | undefined;
|
|
214
247
|
}, {
|
|
215
248
|
id: string;
|
|
216
|
-
version: string;
|
|
217
249
|
name: string;
|
|
250
|
+
version: string;
|
|
218
251
|
description: string;
|
|
219
252
|
author: {
|
|
220
253
|
id: string;
|
|
@@ -242,6 +275,10 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
242
275
|
outputs: {
|
|
243
276
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
244
277
|
format?: string | undefined;
|
|
278
|
+
targets?: {
|
|
279
|
+
name: string;
|
|
280
|
+
params?: Record<string, unknown> | undefined;
|
|
281
|
+
}[] | undefined;
|
|
245
282
|
};
|
|
246
283
|
$schema?: string | undefined;
|
|
247
284
|
official?: boolean | undefined;
|
|
@@ -266,8 +303,8 @@ export declare const pluginManifestSchema: z.ZodObject<{
|
|
|
266
303
|
}>;
|
|
267
304
|
permissions: z.ZodArray<z.ZodString, "many">;
|
|
268
305
|
}, "strip", z.ZodTypeAny, {
|
|
269
|
-
version: string;
|
|
270
306
|
name: string;
|
|
307
|
+
version: string;
|
|
271
308
|
description: string;
|
|
272
309
|
author: string;
|
|
273
310
|
license: string;
|
|
@@ -279,8 +316,8 @@ export declare const pluginManifestSchema: z.ZodObject<{
|
|
|
279
316
|
permissions: string[];
|
|
280
317
|
icon?: string | undefined;
|
|
281
318
|
}, {
|
|
282
|
-
version: string;
|
|
283
319
|
name: string;
|
|
320
|
+
version: string;
|
|
284
321
|
description: string;
|
|
285
322
|
author: string;
|
|
286
323
|
license: string;
|
|
@@ -322,8 +359,8 @@ export interface ValidateWorkflowOptions {
|
|
|
322
359
|
}
|
|
323
360
|
export declare function validateWorkflow(data: unknown, options?: ValidateWorkflowOptions): z.SafeParseError<{
|
|
324
361
|
id: string;
|
|
325
|
-
version: string;
|
|
326
362
|
name: string;
|
|
363
|
+
version: string;
|
|
327
364
|
description: string;
|
|
328
365
|
author: {
|
|
329
366
|
id: string;
|
|
@@ -351,6 +388,10 @@ export declare function validateWorkflow(data: unknown, options?: ValidateWorkfl
|
|
|
351
388
|
outputs: {
|
|
352
389
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
353
390
|
format?: string | undefined;
|
|
391
|
+
targets?: {
|
|
392
|
+
name: string;
|
|
393
|
+
params?: Record<string, unknown> | undefined;
|
|
394
|
+
}[] | undefined;
|
|
354
395
|
};
|
|
355
396
|
$schema?: string | undefined;
|
|
356
397
|
official?: boolean | undefined;
|
|
@@ -370,8 +411,8 @@ export declare function validateWorkflow(data: unknown, options?: ValidateWorkfl
|
|
|
370
411
|
success: true;
|
|
371
412
|
data: {
|
|
372
413
|
id: string;
|
|
373
|
-
version: string;
|
|
374
414
|
name: string;
|
|
415
|
+
version: string;
|
|
375
416
|
description: string;
|
|
376
417
|
author: {
|
|
377
418
|
id: string;
|
|
@@ -399,6 +440,10 @@ export declare function validateWorkflow(data: unknown, options?: ValidateWorkfl
|
|
|
399
440
|
outputs: {
|
|
400
441
|
type: "image" | "video" | "audio" | "pdf" | "text" | "data" | "unknown" | "archive";
|
|
401
442
|
format?: string | undefined;
|
|
443
|
+
targets?: {
|
|
444
|
+
name: string;
|
|
445
|
+
params?: Record<string, unknown> | undefined;
|
|
446
|
+
}[] | undefined;
|
|
402
447
|
};
|
|
403
448
|
$schema?: string | undefined;
|
|
404
449
|
official?: boolean | undefined;
|
|
@@ -409,8 +454,8 @@ export declare function validateWorkflow(data: unknown, options?: ValidateWorkfl
|
|
|
409
454
|
};
|
|
410
455
|
/** 校验 Plugin Manifest */
|
|
411
456
|
export declare function validatePluginManifest(data: unknown): z.SafeParseReturnType<{
|
|
412
|
-
version: string;
|
|
413
457
|
name: string;
|
|
458
|
+
version: string;
|
|
414
459
|
description: string;
|
|
415
460
|
author: string;
|
|
416
461
|
license: string;
|
|
@@ -422,8 +467,8 @@ export declare function validatePluginManifest(data: unknown): z.SafeParseReturn
|
|
|
422
467
|
permissions: string[];
|
|
423
468
|
icon?: string | undefined;
|
|
424
469
|
}, {
|
|
425
|
-
version: string;
|
|
426
470
|
name: string;
|
|
471
|
+
version: string;
|
|
427
472
|
description: string;
|
|
428
473
|
author: string;
|
|
429
474
|
license: string;
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,0EAQ1B,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,oHAWjC,CAAC;AAEH,+CAA+C;AAC/C,eAAO,MAAM,wBAAwB,qFASnC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU9B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,0EAQ1B,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,sBAAsB,oHAWjC,CAAC;AAEH,+CAA+C;AAC/C,eAAO,MAAM,wBAAwB,qFASnC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU9B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,wBAAwB;AACxB,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QACpC,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,GAAG,SAAS,CAAC;IACd,kBAAkB;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0IhF;AAqGD,yBAAyB;AACzB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;GAEnD"}
|
package/dist/validators.js
CHANGED
|
@@ -59,6 +59,11 @@ export const workflowEdgeSchema = z.object({
|
|
|
59
59
|
from: z.string(),
|
|
60
60
|
to: z.string(),
|
|
61
61
|
});
|
|
62
|
+
/** E1: 多 target 输出定义 */
|
|
63
|
+
export const outputTargetSchema = z.object({
|
|
64
|
+
name: z.string(),
|
|
65
|
+
params: z.record(z.unknown()).optional(),
|
|
66
|
+
});
|
|
62
67
|
export const workflowSchema = z.object({
|
|
63
68
|
$schema: z.string().optional(),
|
|
64
69
|
id: z.string(),
|
|
@@ -79,6 +84,7 @@ export const workflowSchema = z.object({
|
|
|
79
84
|
outputs: z.object({
|
|
80
85
|
type: workflowOutputTypeSchema,
|
|
81
86
|
format: z.string().optional(),
|
|
87
|
+
targets: z.array(outputTargetSchema).optional(),
|
|
82
88
|
}),
|
|
83
89
|
official: z.boolean().optional(),
|
|
84
90
|
createdAt: z.number().optional(),
|
|
@@ -182,6 +188,16 @@ export function validateWorkflow(data, options) {
|
|
|
182
188
|
errors.push(`Workflow contains a cycle: only ${visited}/${wf.nodes.length} nodes are reachable.`);
|
|
183
189
|
}
|
|
184
190
|
}
|
|
191
|
+
// 4b. E1: 多 target 名称唯一性校验
|
|
192
|
+
if (wf.outputs.targets && wf.outputs.targets.length > 0) {
|
|
193
|
+
const seenTargetNames = new Set();
|
|
194
|
+
for (const target of wf.outputs.targets) {
|
|
195
|
+
if (seenTargetNames.has(target.name)) {
|
|
196
|
+
errors.push(`Duplicate output target name: "${target.name}". Target names must be unique.`);
|
|
197
|
+
}
|
|
198
|
+
seenTargetNames.add(target.name);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
185
201
|
// 5. W10.2: capability 兼容性校验(可选,仅在 resolveCapability 提供时)
|
|
186
202
|
// 检查相邻节点(通过 edge 连接)的 outputTypes 与下一节点的 inputTypes 是否有交集。
|
|
187
203
|
// - 线性链:edge.from → edge.to,from 节点的 outputTypes 与 to 节点的 inputTypes 交集为空则报错
|
|
@@ -228,21 +244,31 @@ function validateCapabilityCompatibility(wf, resolveCapability, errors) {
|
|
|
228
244
|
capCache.set(node.capability, cap);
|
|
229
245
|
return cap;
|
|
230
246
|
};
|
|
231
|
-
// 5a.
|
|
247
|
+
// 5a. 全节点 capability 注册校验(transform + input + output 均覆盖)
|
|
248
|
+
// B4 修复:原实现仅检查入度 0 节点,transform 节点的 unknown capability
|
|
249
|
+
// 在 5b 边检查中被静默跳过(`!fromCap || !toCap` continue),导致用户得到
|
|
250
|
+
// "校验通过"假象,运行时才报错。现拆分为两步:
|
|
251
|
+
// - 5a:全节点 unknown capability 检查(不区分入度)
|
|
252
|
+
// - 5a-in:输入节点 inputTypes 与 workflow.inputs.type 兼容性检查
|
|
232
253
|
for (const node of wf.nodes) {
|
|
233
|
-
if (
|
|
254
|
+
if (!node.capability)
|
|
234
255
|
continue;
|
|
235
256
|
const cap = getCap(node);
|
|
236
|
-
// 未注册的 capability 不静默跳过:在 schema
|
|
237
|
-
//
|
|
238
|
-
// 整个 capability 兼容性校验跳过(
|
|
257
|
+
// 未注册的 capability 不静默跳过:在 schema 层显式报错
|
|
258
|
+
// resolveCapability 未提供时(getCap 始终返回 undefined)
|
|
259
|
+
// 整个 capability 兼容性校验跳过(由 validateWorkflow 的 if 守卫保证)
|
|
239
260
|
if (!cap) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
`Capability is not registered in the registry.`);
|
|
243
|
-
}
|
|
244
|
-
continue;
|
|
261
|
+
errors.push(`Node "${node.id}" references unknown capability "${node.capability}". ` +
|
|
262
|
+
`Capability is not registered in the registry.`);
|
|
245
263
|
}
|
|
264
|
+
}
|
|
265
|
+
// 5a-in. 输入节点(入度 0)的 inputTypes 与 workflow.inputs.type 兼容
|
|
266
|
+
for (const node of wf.nodes) {
|
|
267
|
+
if ((inDegree.get(node.id) ?? 0) > 0)
|
|
268
|
+
continue;
|
|
269
|
+
const cap = getCap(node);
|
|
270
|
+
if (!cap)
|
|
271
|
+
continue; // 5a 已报告未注册 capability,此处不重复
|
|
246
272
|
const inputTypeMatches = cap.inputTypes.includes(wf.inputs.type);
|
|
247
273
|
if (!inputTypeMatches) {
|
|
248
274
|
errors.push(`Node "${node.id}" (capability "${node.capability}") expects input types ` +
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow.d.ts
CHANGED
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
import type { AssetType } from './asset.js';
|
|
8
8
|
/** Workflow 节点类型 */
|
|
9
9
|
export type NodeType = 'load' | 'transform' | 'export';
|
|
10
|
+
/**
|
|
11
|
+
* 工作流最大节点数(M1 MVP 约束)。
|
|
12
|
+
*
|
|
13
|
+
* 定义在 schema 层(与 validateWorkflow 的 maxSteps option 同源),
|
|
14
|
+
* 供 @lokvis/workflow(WorkflowBuilder)与 @lokvis/runtime(WorkflowCoordinator)
|
|
15
|
+
* 共同消费,避免常量跨包分裂。
|
|
16
|
+
*/
|
|
17
|
+
export declare const MAX_WORKFLOW_STEPS = 5;
|
|
10
18
|
/** Workflow 节点定义 */
|
|
11
19
|
export interface WorkflowNode {
|
|
12
20
|
/** 节点唯一 ID */
|
|
@@ -38,10 +46,32 @@ export interface WorkflowInput {
|
|
|
38
46
|
/** 文件类型过滤 */
|
|
39
47
|
accept?: string[];
|
|
40
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Workflow 输出 target(E1:多 target 机制)。
|
|
51
|
+
*
|
|
52
|
+
* 一个线性 Workflow 可通过 targets 定义多个输出端口,
|
|
53
|
+
* 每个 target 的 params 会浅合并到链上每个 transform 节点的 params 中
|
|
54
|
+
* (target params 优先),从而用单条链产出多个不同尺寸/参数的文件。
|
|
55
|
+
*
|
|
56
|
+
* 典型场景:社交媒体多平台图适配(一条 resize→compress→convert 链,
|
|
57
|
+
* 5 个 target 分别覆盖 width/height 产出 5 个尺寸)。
|
|
58
|
+
*/
|
|
59
|
+
export interface OutputTarget {
|
|
60
|
+
/** target 名称(如 "instagram"、"twitter"),同一 outputs 内不可重复 */
|
|
61
|
+
name: string;
|
|
62
|
+
/** 参数覆盖(浅合并到每个 transform 节点的 params) */
|
|
63
|
+
params?: Record<string, unknown>;
|
|
64
|
+
}
|
|
41
65
|
/** Workflow 输出定义 */
|
|
42
66
|
export interface WorkflowOutput {
|
|
43
67
|
type: AssetType | 'archive';
|
|
44
68
|
format?: string;
|
|
69
|
+
/**
|
|
70
|
+
* 多 target 输出(E1)。
|
|
71
|
+
* 存在且非空时,runtime 为每个 target 独立执行一次 transform 链,
|
|
72
|
+
* 产出 len(targets) 个文件。所有 target 共享同一 output type/format。
|
|
73
|
+
*/
|
|
74
|
+
targets?: OutputTarget[];
|
|
45
75
|
}
|
|
46
76
|
/** Workflow 作者信息 */
|
|
47
77
|
export interface WorkflowAuthor {
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,oBAAoB;AACpB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEvD,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,QAAQ,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,oBAAoB;AACpB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow.js
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
* 第一年只支持 Linear Workflow(线性工作流)。
|
|
5
5
|
* 不支持:Branch / Loop / Condition / Parallel。
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* 工作流最大节点数(M1 MVP 约束)。
|
|
9
|
+
*
|
|
10
|
+
* 定义在 schema 层(与 validateWorkflow 的 maxSteps option 同源),
|
|
11
|
+
* 供 @lokvis/workflow(WorkflowBuilder)与 @lokvis/runtime(WorkflowCoordinator)
|
|
12
|
+
* 共同消费,避免常量跨包分裂。
|
|
13
|
+
*/
|
|
14
|
+
export const MAX_WORKFLOW_STEPS = 5;
|
|
7
15
|
/**
|
|
8
16
|
* 把 Workflow 转换为 AI 可理解的指令描述。
|
|
9
17
|
*
|
|
@@ -42,23 +50,24 @@ export function workflowToAiInstruction(workflow) {
|
|
|
42
50
|
/** 把 Workflow 的输入定义转为 JSON Schema(供 AI 理解输入约束) */
|
|
43
51
|
function workflowInputsToJsonSchema(workflow) {
|
|
44
52
|
const inputDef = workflow.inputs;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
description: `Path or asset ID of the input ${inputDef.type} file${inputDef.multiple ? '(s)' : ''}`,
|
|
51
|
-
},
|
|
53
|
+
// properties 单独声明为 Record<string, unknown>,动态修改 input_path 时无需强转
|
|
54
|
+
const properties = {
|
|
55
|
+
input_path: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: `Path or asset ID of the input ${inputDef.type} file${inputDef.multiple ? '(s)' : ''}`,
|
|
52
58
|
},
|
|
53
|
-
required: ['input_path'],
|
|
54
59
|
};
|
|
55
60
|
if (inputDef.multiple) {
|
|
56
|
-
|
|
61
|
+
properties.input_path = {
|
|
57
62
|
type: 'array',
|
|
58
63
|
items: { type: 'string' },
|
|
59
64
|
description: `List of input ${inputDef.type} file paths${inputDef.maxCount ? ` (max ${inputDef.maxCount})` : ''}`,
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
|
-
return
|
|
67
|
+
return {
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties,
|
|
70
|
+
required: ['input_path'],
|
|
71
|
+
};
|
|
63
72
|
}
|
|
64
73
|
//# sourceMappingURL=workflow.js.map
|
package/dist/workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAmKpC;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAE/E,kCAAkC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,8CAA8C;IAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;IAEtE,OAAO;QACL,WAAW,EACT,WAAW,QAAQ,CAAC,KAAK,CAAC,MAAM,mBAAmB,QAAQ,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC3F,YAAY;QACZ,WAAW,EAAE,0BAA0B,CAAC,QAAQ,CAAC;QACjD,OAAO,EAAE;YACP,KAAK,EAAE,EAAE,UAAU,EAAE,kBAAkB,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;YAC/D,cAAc,EAAE,aAAa,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,YAAY,EAAE;SAC7E;KACF,CAAC;AACJ,CAAC;AAED,kDAAkD;AAClD,SAAS,0BAA0B,CAAC,QAAkB;IACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;IACjC,iEAAiE;IACjE,MAAM,UAAU,GAA4B;QAC1C,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iCAAiC,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;SACpG;KACF,CAAC;IACF,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,UAAU,CAAC,UAAU,GAAG;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,iBAAiB,QAAQ,CAAC,IAAI,cAAc,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;SAClH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTO-GENERATED BY scripts/codegen-capabilities.ts — DO NOT EDIT.
|
|
3
|
+
*
|
|
4
|
+
* 来源:packages/capability/manifests/ai.manifest.json, packages/capability/manifests/audio.manifest.json, packages/capability/manifests/developer.manifest.json, packages/capability/manifests/image.manifest.json, packages/capability/manifests/pdf.manifest.json, packages/capability/manifests/video.manifest.json
|
|
5
|
+
* 重跑:pnpm codegen
|
|
6
|
+
*
|
|
7
|
+
* 此文件提供精确字面量联合类型 BuiltinCapabilityName,
|
|
8
|
+
* 用于 IDE 自动补全与编译期拼写检查。
|
|
9
|
+
*
|
|
10
|
+
* 注意:
|
|
11
|
+
* - `CapabilityName`(见 capability.ts)仍是 `string` 别名,
|
|
12
|
+
* 接受任意能力名(含第三方 plugin 注册的自定义能力)
|
|
13
|
+
* - `BuiltinCapabilityName` 是已知内置能力的字面量子集,
|
|
14
|
+
* 可作为 `CapabilityName` 的精确化类型
|
|
15
|
+
*/
|
|
16
|
+
export type BuiltinCapabilityName =
|
|
17
|
+
| 'ai.ocr'
|
|
18
|
+
| 'ai.caption'
|
|
19
|
+
| 'ai.background-remove'
|
|
20
|
+
| 'ai.generate-workflow'
|
|
21
|
+
| 'ai.optimize-workflow'
|
|
22
|
+
| 'ai.diagnose-error'
|
|
23
|
+
| 'audio.trim'
|
|
24
|
+
| 'audio.normalize'
|
|
25
|
+
| 'audio.merge'
|
|
26
|
+
| 'audio.transcode'
|
|
27
|
+
| 'developer.inspect.capabilities'
|
|
28
|
+
| 'developer.inspect.asset'
|
|
29
|
+
| 'developer.validate.workflow'
|
|
30
|
+
| 'developer.profile'
|
|
31
|
+
| 'image.resize'
|
|
32
|
+
| 'image.compress'
|
|
33
|
+
| 'image.convert'
|
|
34
|
+
| 'image.crop'
|
|
35
|
+
| 'image.rotate'
|
|
36
|
+
| 'image.flip'
|
|
37
|
+
| 'image.watermark'
|
|
38
|
+
| 'image.background'
|
|
39
|
+
| 'image.filter'
|
|
40
|
+
| 'pdf.merge'
|
|
41
|
+
| 'pdf.split'
|
|
42
|
+
| 'pdf.compress'
|
|
43
|
+
| 'pdf.rotate'
|
|
44
|
+
| 'pdf.watermark'
|
|
45
|
+
| 'pdf.ocr'
|
|
46
|
+
| 'pdf.sign'
|
|
47
|
+
| 'video.compress'
|
|
48
|
+
| 'video.transcode'
|
|
49
|
+
| 'video.trim'
|
|
50
|
+
| 'video.merge'
|
|
51
|
+
| 'video.extract-audio'
|
|
52
|
+
| 'video.to-gif'
|
|
53
|
+
| 'video.screenshot';
|
|
54
|
+
|
|
55
|
+
/** 全部内置能力名常量数组(运行时校验 / 枚举用) */
|
|
56
|
+
export const BUILTIN_CAPABILITY_NAMES: readonly BuiltinCapabilityName[] = [
|
|
57
|
+
'ai.ocr',
|
|
58
|
+
'ai.caption',
|
|
59
|
+
'ai.background-remove',
|
|
60
|
+
'ai.generate-workflow',
|
|
61
|
+
'ai.optimize-workflow',
|
|
62
|
+
'ai.diagnose-error',
|
|
63
|
+
'audio.trim',
|
|
64
|
+
'audio.normalize',
|
|
65
|
+
'audio.merge',
|
|
66
|
+
'audio.transcode',
|
|
67
|
+
'developer.inspect.capabilities',
|
|
68
|
+
'developer.inspect.asset',
|
|
69
|
+
'developer.validate.workflow',
|
|
70
|
+
'developer.profile',
|
|
71
|
+
'image.resize',
|
|
72
|
+
'image.compress',
|
|
73
|
+
'image.convert',
|
|
74
|
+
'image.crop',
|
|
75
|
+
'image.rotate',
|
|
76
|
+
'image.flip',
|
|
77
|
+
'image.watermark',
|
|
78
|
+
'image.background',
|
|
79
|
+
'image.filter',
|
|
80
|
+
'pdf.merge',
|
|
81
|
+
'pdf.split',
|
|
82
|
+
'pdf.compress',
|
|
83
|
+
'pdf.rotate',
|
|
84
|
+
'pdf.watermark',
|
|
85
|
+
'pdf.ocr',
|
|
86
|
+
'pdf.sign',
|
|
87
|
+
'video.compress',
|
|
88
|
+
'video.transcode',
|
|
89
|
+
'video.trim',
|
|
90
|
+
'video.merge',
|
|
91
|
+
'video.extract-audio',
|
|
92
|
+
'video.to-gif',
|
|
93
|
+
'video.screenshot',
|
|
94
|
+
];
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,8 @@ export * from './workflow.js';
|
|
|
12
12
|
export * from './event.js';
|
|
13
13
|
export * from './plugin.js';
|
|
14
14
|
export * from './exif.js';
|
|
15
|
+
// 跨层共享的资产元数据查询类型(ImageMetadata / PdfInfo,见 metadata.ts)
|
|
16
|
+
export * from './metadata.js';
|
|
15
17
|
// MCP manifest 类型(见 docs/AI生态冲击调整方案.md §6.1)
|
|
16
18
|
export * from './mcp.js';
|
|
17
19
|
|
package/src/metadata.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 跨层共享的资产元数据查询类型。
|
|
3
|
+
*
|
|
4
|
+
* 与 ExifData 同一设计层级:某些 Plugin 能力本质是"元数据查询"而非
|
|
5
|
+
* "资产变换"(如 image dimensions 读取、pdf 页数读取),既不符合 Engine
|
|
6
|
+
* 层 Blob↔Blob 纯函数约束,也不符合 Capability Asset[]→Asset[] 契约。
|
|
7
|
+
* 这类能力通过 MetadataReader 注册,返回值类型定义在此处,
|
|
8
|
+
* 供 Runtime / SDK / 上层消费者(mcp-server 等)共享,避免跨层依赖。
|
|
9
|
+
*
|
|
10
|
+
* 与 AssetMetadata 的区别:
|
|
11
|
+
* - AssetMetadata:导入时一次性提取的通用元数据(size/mimeType/format/
|
|
12
|
+
* dimensions/duration/pages),所有 asset 都有
|
|
13
|
+
* - ImageMetadata / PdfInfo:按需查询的领域特定元数据,由 Plugin 通过
|
|
14
|
+
* MetadataReader 提供(如 image 经 sharp 解码读尺寸、pdf 经 pdf-lib
|
|
15
|
+
* 读页数),用于处理后输出资产的精确元数据报告
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 图像元数据(width/height/format)。
|
|
20
|
+
*
|
|
21
|
+
* 由 plugin-image 的 `image.read-metadata` MetadataReader 提供,
|
|
22
|
+
* 内部调用 engine-image/node 的 getMetadata(sharp .metadata())。
|
|
23
|
+
* 与 engine-image/node 的 ImageMetadata 接口对齐(此处为共享类型源,
|
|
24
|
+
* engine-image 改为 re-export 本类型)。
|
|
25
|
+
*/
|
|
26
|
+
export interface ImageMetadata {
|
|
27
|
+
width: number;
|
|
28
|
+
height: number;
|
|
29
|
+
format: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* PDF 基本信息(页数)。
|
|
34
|
+
*
|
|
35
|
+
* 由 plugin-pdf 的 `pdf.read-info` MetadataReader 提供,
|
|
36
|
+
* 内部调用 engine-pdf 的 getPdfInfo(pdf-lib getPageCount)。
|
|
37
|
+
* 与 engine-pdf 的 PdfInfo 接口对齐(此处为共享类型源,
|
|
38
|
+
* engine-pdf 改为 re-export 本类型)。
|
|
39
|
+
*/
|
|
40
|
+
export interface PdfInfo {
|
|
41
|
+
pages: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 视频基本信息(分辨率/时长/帧率/编解码)。
|
|
46
|
+
*
|
|
47
|
+
* 由 plugin-video/node 的 `video.read-info` MetadataReader 提供,
|
|
48
|
+
* 内部调用 engine-video/node 的 getVideoInfo(ffprobe 解析)。
|
|
49
|
+
* 与 engine-video 的 VideoInfo 接口对齐(此处为共享类型源,
|
|
50
|
+
* engine-video 改为 re-export 本类型)。
|
|
51
|
+
*/
|
|
52
|
+
export interface VideoInfo {
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
duration: number;
|
|
56
|
+
fps: number;
|
|
57
|
+
codec: string;
|
|
58
|
+
}
|
package/src/plugin.ts
CHANGED
|
@@ -48,6 +48,35 @@ export interface PluginConfig {
|
|
|
48
48
|
permissions?: PluginPermission[];
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Plugin 权限沙箱契约(由 runtime 实现)。
|
|
53
|
+
*
|
|
54
|
+
* Plugin 通过 `ctx.sandbox` 访问自身权限声明,在调用受限 API 前主动断言:
|
|
55
|
+
* ctx.sandbox.assertNetworkAllowed('loading model manifest');
|
|
56
|
+
* 若声明 network:none,断言立即抛 PluginPermissionError;否则 no-op。
|
|
57
|
+
*
|
|
58
|
+
* 实现见 @lokvis/runtime 的 PluginPermissionSandbox 类。schema 仅定义契约
|
|
59
|
+
* (依赖反转:runtime 依赖 schema,而非反之)。
|
|
60
|
+
*/
|
|
61
|
+
export interface PluginPermissionSandbox {
|
|
62
|
+
/** 插件名(便于错误信息定位) */
|
|
63
|
+
readonly pluginName: string;
|
|
64
|
+
/** 声明的权限集合(只读) */
|
|
65
|
+
readonly declared: ReadonlySet<PluginPermission>;
|
|
66
|
+
/** 是否声明了指定权限 */
|
|
67
|
+
has(perm: PluginPermission): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* 断言网络调用允许(声明 network:none 时抛错)。
|
|
70
|
+
* Plugin 在调用 fetch / XHR 等前可主动调用。
|
|
71
|
+
*/
|
|
72
|
+
assertNetworkAllowed(reason: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* 断言文件系统访问允许(声明未含对应 filesystem:* 时抛错)。
|
|
75
|
+
* @param scope 'opfs'(OPFS 根目录)或 'local'(任意本地文件系统)
|
|
76
|
+
*/
|
|
77
|
+
assertFilesystemAllowed(scope: 'opfs' | 'local', reason: string): void;
|
|
78
|
+
}
|
|
79
|
+
|
|
51
80
|
/** Panel 定义(UI 扩展点) */
|
|
52
81
|
export interface PanelDefinition {
|
|
53
82
|
id: string;
|
|
@@ -64,7 +93,7 @@ export interface PanelDefinition {
|
|
|
64
93
|
* 元数据读取函数(依赖反转)。
|
|
65
94
|
*
|
|
66
95
|
* 某些 Plugin 能力本质是"元数据查询"而非"资产变换"(如 EXIF 读取:
|
|
67
|
-
* Blob → ExifData),既不符合 Engine 层 Blob↔Blob
|
|
96
|
+
* Blob → ExifData),既不符合 Engine 层 Blob↔Blob 纯函数约束,也不符合
|
|
68
97
|
* CapabilityImplementation 的 Asset[]→Asset[] 契约。这类能力通过
|
|
69
98
|
* MetadataReader 注册:Plugin 提供读取函数,Runtime 持有引用并按名调用。
|
|
70
99
|
*
|
|
@@ -78,12 +107,33 @@ export interface PanelDefinition {
|
|
|
78
107
|
* - 类型直接透传(ExifData),无需序列化
|
|
79
108
|
*
|
|
80
109
|
* @param asset 输入资产
|
|
110
|
+
* @param ctx 读取上下文(提供 log 可观测信号;TD-3.4 长期方案)
|
|
81
111
|
* @returns 读取结果;无数据 / 解析失败返回 null
|
|
82
112
|
*/
|
|
83
113
|
export type MetadataReader<T = unknown> = (
|
|
84
|
-
asset: import('./asset.js').Asset
|
|
114
|
+
asset: import('./asset.js').Asset,
|
|
115
|
+
ctx: MetadataReaderContext
|
|
85
116
|
) => Promise<T | null>;
|
|
86
117
|
|
|
118
|
+
/**
|
|
119
|
+
* 元数据读取上下文(TD-3.4 长期方案)。
|
|
120
|
+
*
|
|
121
|
+
* 为 MetadataReader 提供可观测信号,使其能区分"无数据"(返回 null)
|
|
122
|
+
* 与"解析异常"(log warn 后返回 null),避免静默吞错。
|
|
123
|
+
*
|
|
124
|
+
* 与 ExecutionContext 的关系:
|
|
125
|
+
* - ExecutionContext 用于 Capability execute,含 workflowId / nodeId /
|
|
126
|
+
* signal / onProgress(走 WorkflowExecutor)
|
|
127
|
+
* - MetadataReaderContext 用于 MetadataReader,只含 log(走 Runtime
|
|
128
|
+
* 直接调用,无 workflow 上下文)
|
|
129
|
+
*
|
|
130
|
+
* log 签名与 ExecutionContext.log 一致,便于 Plugin 复用日志逻辑。
|
|
131
|
+
*/
|
|
132
|
+
export interface MetadataReaderContext {
|
|
133
|
+
/** 日志函数(与 ExecutionContext.log 一致签名) */
|
|
134
|
+
log: (level: 'info' | 'warn' | 'error', message: string) => void;
|
|
135
|
+
}
|
|
136
|
+
|
|
87
137
|
/**
|
|
88
138
|
* Plugin 上下文(Plugin 能访问的全部 API)
|
|
89
139
|
*
|
|
@@ -129,6 +179,18 @@ export interface PluginContext {
|
|
|
129
179
|
registerMetadataReader<T>(name: string, reader: MetadataReader<T>): void;
|
|
130
180
|
/** 注册 UI Panel */
|
|
131
181
|
registerPanel(panel: PanelDefinition): void;
|
|
182
|
+
/**
|
|
183
|
+
* 权限沙箱(W18.6)。
|
|
184
|
+
*
|
|
185
|
+
* Plugin 据此在调用受限 API 前主动断言:
|
|
186
|
+
* ctx.sandbox.assertNetworkAllowed('loading manifest');
|
|
187
|
+
*
|
|
188
|
+
* Runtime 在 installPlugin() 期间应用 network guard
|
|
189
|
+
* (monkey-patch fetch/XHR/WebSocket/EventSource),声明
|
|
190
|
+
* network:none 时这些 API 调用立即抛 NetworkGuardError。
|
|
191
|
+
* capability execute() 路径不自动应用守卫 —— plugin 应主动自检。
|
|
192
|
+
*/
|
|
193
|
+
readonly sandbox: PluginPermissionSandbox;
|
|
132
194
|
/** 日志 */
|
|
133
195
|
log(level: 'info' | 'warn' | 'error', message: string): void;
|
|
134
196
|
}
|
package/src/validators.ts
CHANGED
|
@@ -70,6 +70,12 @@ export const workflowEdgeSchema = z.object({
|
|
|
70
70
|
to: z.string(),
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
+
/** E1: 多 target 输出定义 */
|
|
74
|
+
export const outputTargetSchema = z.object({
|
|
75
|
+
name: z.string(),
|
|
76
|
+
params: z.record(z.unknown()).optional(),
|
|
77
|
+
});
|
|
78
|
+
|
|
73
79
|
export const workflowSchema = z.object({
|
|
74
80
|
$schema: z.string().optional(),
|
|
75
81
|
id: z.string(),
|
|
@@ -90,6 +96,7 @@ export const workflowSchema = z.object({
|
|
|
90
96
|
outputs: z.object({
|
|
91
97
|
type: workflowOutputTypeSchema,
|
|
92
98
|
format: z.string().optional(),
|
|
99
|
+
targets: z.array(outputTargetSchema).optional(),
|
|
93
100
|
}),
|
|
94
101
|
official: z.boolean().optional(),
|
|
95
102
|
createdAt: z.number().optional(),
|
|
@@ -242,6 +249,17 @@ export function validateWorkflow(data: unknown, options?: ValidateWorkflowOption
|
|
|
242
249
|
}
|
|
243
250
|
}
|
|
244
251
|
|
|
252
|
+
// 4b. E1: 多 target 名称唯一性校验
|
|
253
|
+
if (wf.outputs.targets && wf.outputs.targets.length > 0) {
|
|
254
|
+
const seenTargetNames = new Set<string>();
|
|
255
|
+
for (const target of wf.outputs.targets) {
|
|
256
|
+
if (seenTargetNames.has(target.name)) {
|
|
257
|
+
errors.push(`Duplicate output target name: "${target.name}". Target names must be unique.`);
|
|
258
|
+
}
|
|
259
|
+
seenTargetNames.add(target.name);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
245
263
|
// 5. W10.2: capability 兼容性校验(可选,仅在 resolveCapability 提供时)
|
|
246
264
|
// 检查相邻节点(通过 edge 连接)的 outputTypes 与下一节点的 inputTypes 是否有交集。
|
|
247
265
|
// - 线性链:edge.from → edge.to,from 节点的 outputTypes 与 to 节点的 inputTypes 交集为空则报错
|
|
@@ -296,22 +314,31 @@ function validateCapabilityCompatibility(
|
|
|
296
314
|
return cap;
|
|
297
315
|
};
|
|
298
316
|
|
|
299
|
-
// 5a.
|
|
317
|
+
// 5a. 全节点 capability 注册校验(transform + input + output 均覆盖)
|
|
318
|
+
// B4 修复:原实现仅检查入度 0 节点,transform 节点的 unknown capability
|
|
319
|
+
// 在 5b 边检查中被静默跳过(`!fromCap || !toCap` continue),导致用户得到
|
|
320
|
+
// "校验通过"假象,运行时才报错。现拆分为两步:
|
|
321
|
+
// - 5a:全节点 unknown capability 检查(不区分入度)
|
|
322
|
+
// - 5a-in:输入节点 inputTypes 与 workflow.inputs.type 兼容性检查
|
|
300
323
|
for (const node of wf.nodes) {
|
|
301
|
-
if (
|
|
324
|
+
if (!node.capability) continue;
|
|
302
325
|
const cap = getCap(node);
|
|
303
|
-
// 未注册的 capability 不静默跳过:在 schema
|
|
304
|
-
//
|
|
305
|
-
// 整个 capability 兼容性校验跳过(
|
|
326
|
+
// 未注册的 capability 不静默跳过:在 schema 层显式报错
|
|
327
|
+
// resolveCapability 未提供时(getCap 始终返回 undefined)
|
|
328
|
+
// 整个 capability 兼容性校验跳过(由 validateWorkflow 的 if 守卫保证)
|
|
306
329
|
if (!cap) {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
`
|
|
310
|
-
|
|
311
|
-
);
|
|
312
|
-
}
|
|
313
|
-
continue;
|
|
330
|
+
errors.push(
|
|
331
|
+
`Node "${node.id}" references unknown capability "${node.capability}". ` +
|
|
332
|
+
`Capability is not registered in the registry.`
|
|
333
|
+
);
|
|
314
334
|
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// 5a-in. 输入节点(入度 0)的 inputTypes 与 workflow.inputs.type 兼容
|
|
338
|
+
for (const node of wf.nodes) {
|
|
339
|
+
if ((inDegree.get(node.id) ?? 0) > 0) continue;
|
|
340
|
+
const cap = getCap(node);
|
|
341
|
+
if (!cap) continue; // 5a 已报告未注册 capability,此处不重复
|
|
315
342
|
const inputTypeMatches = cap.inputTypes.includes(wf.inputs.type);
|
|
316
343
|
if (!inputTypeMatches) {
|
|
317
344
|
errors.push(
|
package/src/workflow.ts
CHANGED
|
@@ -10,6 +10,15 @@ import type { AssetType } from './asset.js';
|
|
|
10
10
|
/** Workflow 节点类型 */
|
|
11
11
|
export type NodeType = 'load' | 'transform' | 'export';
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* 工作流最大节点数(M1 MVP 约束)。
|
|
15
|
+
*
|
|
16
|
+
* 定义在 schema 层(与 validateWorkflow 的 maxSteps option 同源),
|
|
17
|
+
* 供 @lokvis/workflow(WorkflowBuilder)与 @lokvis/runtime(WorkflowCoordinator)
|
|
18
|
+
* 共同消费,避免常量跨包分裂。
|
|
19
|
+
*/
|
|
20
|
+
export const MAX_WORKFLOW_STEPS = 5;
|
|
21
|
+
|
|
13
22
|
/** Workflow 节点定义 */
|
|
14
23
|
export interface WorkflowNode {
|
|
15
24
|
/** 节点唯一 ID */
|
|
@@ -44,10 +53,33 @@ export interface WorkflowInput {
|
|
|
44
53
|
accept?: string[];
|
|
45
54
|
}
|
|
46
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Workflow 输出 target(E1:多 target 机制)。
|
|
58
|
+
*
|
|
59
|
+
* 一个线性 Workflow 可通过 targets 定义多个输出端口,
|
|
60
|
+
* 每个 target 的 params 会浅合并到链上每个 transform 节点的 params 中
|
|
61
|
+
* (target params 优先),从而用单条链产出多个不同尺寸/参数的文件。
|
|
62
|
+
*
|
|
63
|
+
* 典型场景:社交媒体多平台图适配(一条 resize→compress→convert 链,
|
|
64
|
+
* 5 个 target 分别覆盖 width/height 产出 5 个尺寸)。
|
|
65
|
+
*/
|
|
66
|
+
export interface OutputTarget {
|
|
67
|
+
/** target 名称(如 "instagram"、"twitter"),同一 outputs 内不可重复 */
|
|
68
|
+
name: string;
|
|
69
|
+
/** 参数覆盖(浅合并到每个 transform 节点的 params) */
|
|
70
|
+
params?: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
|
|
47
73
|
/** Workflow 输出定义 */
|
|
48
74
|
export interface WorkflowOutput {
|
|
49
75
|
type: AssetType | 'archive';
|
|
50
76
|
format?: string;
|
|
77
|
+
/**
|
|
78
|
+
* 多 target 输出(E1)。
|
|
79
|
+
* 存在且非空时,runtime 为每个 target 独立执行一次 transform 链,
|
|
80
|
+
* 产出 len(targets) 个文件。所有 target 共享同一 output type/format。
|
|
81
|
+
*/
|
|
82
|
+
targets?: OutputTarget[];
|
|
51
83
|
}
|
|
52
84
|
|
|
53
85
|
/** Workflow 作者信息 */
|
|
@@ -191,22 +223,23 @@ export function workflowToAiInstruction(workflow: Workflow): WorkflowAiInstructi
|
|
|
191
223
|
/** 把 Workflow 的输入定义转为 JSON Schema(供 AI 理解输入约束) */
|
|
192
224
|
function workflowInputsToJsonSchema(workflow: Workflow): object {
|
|
193
225
|
const inputDef = workflow.inputs;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
description: `Path or asset ID of the input ${inputDef.type} file${inputDef.multiple ? '(s)' : ''}`,
|
|
200
|
-
},
|
|
226
|
+
// properties 单独声明为 Record<string, unknown>,动态修改 input_path 时无需强转
|
|
227
|
+
const properties: Record<string, unknown> = {
|
|
228
|
+
input_path: {
|
|
229
|
+
type: 'string',
|
|
230
|
+
description: `Path or asset ID of the input ${inputDef.type} file${inputDef.multiple ? '(s)' : ''}`,
|
|
201
231
|
},
|
|
202
|
-
required: ['input_path'],
|
|
203
232
|
};
|
|
204
233
|
if (inputDef.multiple) {
|
|
205
|
-
|
|
234
|
+
properties.input_path = {
|
|
206
235
|
type: 'array',
|
|
207
236
|
items: { type: 'string' },
|
|
208
237
|
description: `List of input ${inputDef.type} file paths${inputDef.maxCount ? ` (max ${inputDef.maxCount})` : ''}`,
|
|
209
238
|
};
|
|
210
239
|
}
|
|
211
|
-
return
|
|
240
|
+
return {
|
|
241
|
+
type: 'object',
|
|
242
|
+
properties,
|
|
243
|
+
required: ['input_path'],
|
|
244
|
+
};
|
|
212
245
|
}
|