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 身份冻结。

Datos de origen

Repositorio
alikon-art/DeterminFlow
Última actividad en el origen
3 de agosto de 2026 a las 09:20
Idioma detectado de SKILL.md
chino
Estrellas
875
Forks
131

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
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。
Ver en GitHub