Skip to main content

script-library-guide

创建、更新、删除、引用或排查 DeterminFlow Script Library 脚本时必须加载此技能;也适用于 Workflow Script 节点、inline 与 library 选择、SCRIPT.md、script_argv、共享 workspace、WF_VAR/script_out 输出协议、Plugin 脚本 owner 冲突与 Task 身份冻结。

Informations de source

Dépôt
alikon-art/DeterminFlow
Dernière activité de la source
3 août 2026 à 09:20
Langue détectée de SKILL.md
chinois
Étoiles
875
Forks
131

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
script-library-guide
description
创建、更新、删除、引用或排查 DeterminFlow Script Library 脚本时必须加载此技能;也适用于 Workflow Script 节点、inline 与 library 选择、SCRIPT.md、script_argv、共享 workspace、WF_VAR/script_out 输出协议、Plugin 脚本 owner 冲突与 Task 身份冻结。
metadata
{"display_name":"script-library-guide","version":"1.0.0","author":"system","category":"workflow","priority":50,"workflow_only":false}
# Script Library 指南 ## 何时用 inline,何时用 library - 只服务一个 Workflow、与模板一起演进的脚本使用 `inline`,位于 `data/workflows/{workflow_id}/script/{name}.{sh|py}`。 - 被多个 Workflow 复用、需要独立说明的脚本使用 `library`,实例可写目录是 `data/script-library/{group}/{name}/`。 - Plugin 可提供只读 Script Library roots;修改它们必须回到 Plugin 源码。 涉及完整 Workflow 拓扑、变量和 Task 生命周期时同时加载 `workflow-guide`。 ## 目录与身份 ```text data/script-library/{group}/{name}/ ├── {name}.sh # 或 {name}.py,二选一 └── SCRIPT.md # 推荐:说明用途、输入、输出、副作用和版本 ``` `group` 与 `name` 只使用字母、数字、下划线或连字符。入口文件名必须与脚本目录名一致。 同一个 `{group}/{name}` 只能有一个 active owner;用户资源与 Plugin 资源重名会 fail closed, 不会按优先级静默覆盖。 Task 创建时会冻结 library 脚本的 owner、revision 与文件摘要。执行前再次核验;脚本或 Plugin revision 漂移时拒绝执行。因此更新脚本后要创建新 Task,不能期待旧 Task 自动采用 新内容。 ## Script 节点配置 新节点使用数组形式 `script_argv`: ```json { "node_type": "script", "node_params": { "script_source": "library", "script_type": "python", "script_group": "utils", "script_name": "normalize", "script_argv": ["--input", "{{source_file}}", "--mode", "strict"], "timeout": "300" } } ``` - `script_source` 是 `inline` 或 `library`。 - `script_type` 是 `shell` 或 `python`,必须与真实入口一致。 - `script_group` 仅在 library 模式必需。 - `script_argv` 每项是一个完整 argv,变量中的空格、引号和 JSON 不会被 Shell 再拆分。 - `script_args` 只兼容历史定义,新建和修改不要使用。 - `timeout` 是正整数秒;根据真实最坏耗时设置,不用无限超时掩盖卡死。 引擎直接以 argv 启动,不经过 Shell。执行工作目录是 Workflow 共享 workspace。环境变量 包括 `WORKFLOW_ID`、`TASK_ID`、`SCRIPT_DIR`、`WORKSPACE_DIR`;Plugin owner 还可提供其 声明的运行环境。 ## 输出协议 脚本通过 stdout 与 Workflow 交换结构化结果: ```text <WF_VAR>result_key:value</WF_VAR> <script_out>给节点历史与下游摘要使用的短说明</script_out> ``` - 标签大小写必须完全一致。 - 每个 `WF_VAR` 的 key 使用稳定变量名;list/dict 值输出合法 JSON 双引号格式。 - 业务日志不要伪造协议标签。 - stdout/stderr 会截断,长产物写入共享 workspace,只输出路径与摘要。 - 退出码非 0、超时、入口缺失、身份漂移或协议解析错误都应视为节点失败。 ## 管理 API | 操作 | API | |---|---| | 列分组 | `GET /api/workflows/script-library/groups` | | 列脚本 | `GET /api/workflows/script-library/scripts?group={group}` | | 读/写脚本 | `GET/PUT /api/workflows/script-library/{group}/{name}/script?type={type}` | | 读/写说明 | `GET/PUT /api/workflows/script-library/{group}/{name}/meta` | | 删除脚本 | `DELETE /api/workflows/script-library/{group}/{name}` | | 删除空分组 | `DELETE /api/workflows/script-library/{group}` | 写 API 只写用户 root。读取 API 可解析 active user/Plugin roots。不要用 API 修改只读 Plugin 脚本;同名冲突时先解决 owner 边界。 ## SCRIPT.md 内容 说明至少包含: - 脚本用途和不适用场景; - `script_type`、argv 参数和必需环境变量; - 读取与写入的 workspace 路径; - `WF_VAR` 与 `script_out` 输出; - 外部副作用、幂等性和重试风险; - version 与 owner。 不要在说明或脚本中写 Secret;通过受控环境注入。 ## 验证顺序 1. 列出 catalog,确认 owner、group、name 与 type 唯一且正确。 2. 在隔离 workspace 直接运行脚本,覆盖正常输入、空输入与错误输入。 3. 检查退出码、stdout 协议、stderr 和产物路径。 4. 创建新 Workflow Task,确认创建时身份冻结成功。 5. 运行 Script 节点,核对变量池、节点 summary 和下游消费。 6. 有副作用的脚本验证幂等性;不幂等时禁用自动重试或增加显式保护。 ## 常见错误 - 目录叫 `hello-world`,入口却叫 `hello_world.sh`:入口必须与目录名相同。 - library 节点没填 `script_group`:解析失败。 - 更新脚本后运行旧 Task:身份守卫因漂移拒绝执行。 - 把 JSON 放进 `script_args`:Shell 拆分破坏参数,改用 `script_argv`。 - 从脚本目录写相对产物:当前工作目录是共享 workspace,不是 `SCRIPT_DIR`。 - 用户与 Plugin 定义同 ID:catalog 冲突,必须改名或停用 owner。
Voir sur GitHub