1. 设计结论
agentic_workflow 调用入口。将其能力拆为 search_workflows、create_workflow、revise_workflow 和具体 Workflow 执行;另提供只供用户手动使用的 auto_workflow 完整入口。Chat Agent 路径
Agent → 搜索 / 创建 / 修订 / 工作流Agent自己判断是否直接调用已有Program;目录较大或候选未加载时才搜索。Agent不调用 auto_workflow。
用户手动路径
用户 → auto_workflow(task)一次请求完成搜索、一次可见选择、必要时创建、随后执行;每一步仍在DAG中独立可见。
auto_workflow 是便捷编排入口,不是候选 Workflow,也不是组件。搜索结果必须排除它,生成代码不得 import 它,Agent 工具集合不得暴露它。workflow/ 只用于按代码类型归类。目录、辅助文件和内部子目录都不是 Program;Programs、Registry 和调用图只把实际注册的 Agent method 作为可运行实体。目录层级不得改变公开名称、调用方式或运行语义。工作流参数归属
用户提供任务、证据和交付要求。执行参数归工作流管理,不通过高级选项、设置对话框或参数提问暴露给用户。
工作流有多个依赖任务的参数时,在执行前发起一次不带工具的模型请求,生成完整计划。提供真实运行时能力与应用限制,验证每个字段及跨字段约束;输出无效或规划失败时应用完整回退方案,并传播取消。固定不变量仍由代码控制,模型不得修改权限、凭证或应用上限。在可恢复工作开始前持久化生效计划,恢复时复用。
规范开发示例、参数契约和验收清单位于 工作流编写。缺失任务事实时可以澄清,但不得将执行调优交给用户。
2. 当前实现与已确认缺口
| 当前事实 | 问题 | 目标处理 |
|---|---|---|
公开入口是 search_workflows、create_workflow、revise_workflow 和用户级 auto_workflow;旧 agentic_workflow 不再注册。resume_workflow 保留为内部函数。 | 旧名称没有说明它会搜索、生成、发布并执行。 | 新调用走四个明确入口;历史 run 只读恢复。 |
只读搜索、create/revise 发布和具体 Workflow 执行是独立公共行为;auto_workflow 只编排这些入口,不再保存另一套实现。 | 只读发现、持久写入和业务执行不得共享一个生命周期。 | 按公共合同拆行为;不再存在复合执行路径。 |
已有项目以 Git revision、snapshot 和 project_ref.json 固定运行输入。 | 版本和恢复能力必须独立于编排入口。 | 保留项目格式、快照、checkpoint 和显式 resume。 |
| 普通执行失败保留原错误和 checkpoint,不改写已发布 Workflow。 | 一次普通执行不得静默修改已发布源码。 | 发布前结构/测试修复留在 create;已发布修改只能显式 revise。 |
auto_workflow 出现在用户表单和 Programs 页(自动入口 · 仅用户手动),不出现在 Agent 工具清单。 | 用户需要完整入口,Agent 已有自己的任务路由,二者语义不同。 | auto_workflow 用户可见、Agent 不可见。 |
method_options = dict(tool_visible=) 传入 Layer-2 register(..., expose);默认 True,现有函数仍全部曝光。 | 需要用装饰器表达“用户可见、Agent 工具不可见”。 | auto_workflow 以 tool_visible=False 注册。 |
执行期 repair 已删除。create_workflow 内保留发布前 bounded author 重试(PROJECT_AUTHOR_ATTEMPTS)。 | 普通运行失败不得自动发布新 revision。 | 已发布修改只走显式 revise_workflow。 |
四个公开入口已迁入 workflow/,旧源码目录已删除。 | 分类路径与运行身份必须持续保持独立。 | Programs只把分类目录用于导航,函数节点和函数级调用图来自Registry与所选入口的可达AST。 |
新项目使用多文件package合同,但产品页仍描述无参数 workflow()、禁止全部import和执行期自动重写。 | 人类作者会按旧合同编写;真实规则只能从validator报错中逐项推断。 | 以现行validator为唯一规则来源,提供英中作者页和共享CLI静态校验。 |
tests/test_workflow.py当前只参加AST与import检查,不会在发布前执行。 | 静态合法不等于行为正确;直接执行未信任测试又会越过安全边界。 | 先明确静态validate;后续以强制sandbox、禁网、凭据过滤、写目录和timeout限制实现行为测试门。 |
本设计复用已有的 Workflow package、Git、snapshot、checkpoint、DAG caller 和取消状态设施;不引入第二个执行Runtime、图DSL、Workflow数据库或字符串dispatcher。
代码分类与运行身份
Python目录只负责源码组织,运行身份只来自注册信息。两者不得互相推导:目录名不能自动成为Program,移动文件也不能自动改变公开函数名。
openprogram/programs/workflow/
└── workflow/ # 分类目录,不可运行
├── __init__.py # 可放入口与共享实现
├── <helper>.py # 仅在确有独立职责时创建
└── <subsystem>/ # 需要时继续按职责分类
Registry / Programs 展示的运行实体:
search_workflows
create_workflow
revise_workflow
auto_workflow
不产生运行实体:
workflow
__init__.py
任意 helper 文件
任意内部子目录
| 层 | 唯一职责 | 禁止行为 |
|---|---|---|
| 文件系统 | 按 agentic / workflow 类型组织Python源码;入口、辅助实现和内部子目录可放在同一分类树中。 | 不得因目录或文件存在就注册Program;不预先创建 runtime.py、legacy.py 等没有独立职责的文件。 |
| 注册表 | 以装饰器注册的函数名、Schema、exposure和来源文件作为权威运行身份。 | 不得用父目录名覆盖函数名;不得重新注册旧 agentic_workflow。 |
| Programs目录 | 目录节点只用于展开;函数节点来自Registry,可点击、查看和运行。 | 不得把 workflow/ 显示为可运行Program;不得把helper文件显示为函数。 |
| 调用图 | 根节点使用用户选择的注册函数;依赖边从该函数的实际调用关系生成。 | 不得以源码目录名作为根节点;不得因同文件含多个入口而显示旧聚合名称。 |
| Runtime | 继续通过公共函数名调用;run、checkpoint、取消和legacy恢复合同保持不变。 | 不得把源码移动转换成新的执行路径、状态格式或兼容入口。 |
3. 目标架构与两条主路径
Chat Agent 决策顺序
- 已加载的Program或Workflow明显匹配:直接调用,不先搜索。
- 可能存在未加载的动态Workflow:调用
search_workflows。 - 完整匹配:直接调用候选的固定revision。
- 只有部分能力:一次性任务可直接组合调用;需要复用、恢复、定时或稳定结构时调用
create_workflow。 - 没有匹配:普通一次性任务仍可由Agent直接使用工具完成;用户明确要求复用资产或任务具有稳定重复结构时才创建。
4. 公共能力合同
| 入口 | 调用者 | 职责 | 禁止行为 |
|---|---|---|---|
search_workflows(task) | Agent、用户 | 确定性返回排序候选、固定revision、合同、权限和命中依据。 | 不得调用模型、写文件、执行候选或发布。 |
create_workflow(task) | Agent、用户 | 读取候选组件,生成一个新package,验证后发布并返回ref。 | 不得执行用户任务;不得修改已有项目。 |
revise_workflow(workflow_id, request) | Agent、用户 | 基于指定revision创建新候选,验证后发布新revision。 | 不得由普通运行失败静默触发;不得覆盖旧revision。 |
auto_workflow(task) | 仅用户手动 | 调用搜索,由一个可见的selection Agent判断reuse/create,最后调用确定的Workflow。通过Layer-2 unexposed注册实现Agent工具不可见。 | 不得出现在Agent工具集合或搜索候选;不得自动revise已发布项目。 |
| 具体Workflow入口 | Agent、用户、其他Workflow | 执行确定业务合同。 | 不得重新进入全局搜索或authoring。 |
{
"action": "reuse | create",
"workflow_id": "research_report",
"workflow_revision": "<immutable git revision>",
"result": {},
"run_id": "<workflow run id>"
}
auto_workflow 的返回值必须说明选择了复用还是创建。搜索、创建和执行分别生成DAG子节点,不能只留下一个无法解释的总节点。
6. 生命周期、失败与信任边界
| 阶段 | 允许状态变化 | 失败规则 |
|---|---|---|
| search | 无持久run;只读结果 | catalog损坏项被报告或跳过;不得改变项目。 |
| create / revise | running → completed | failed | cancelled | 失败和取消不发布;candidate可回收,诊断写入run state。 |
| workflow run | running → completed | failed | capped | cancelled | interrupted | 保留原错误和checkpoint;不自动改写已发布Workflow。 |
| auto | 聚合子调用状态 | 任一子调用失败即停止;不得把部分结果标记为completed。 |
| resume | 只恢复指定run | 固定原snapshot/revision,不重新搜索或重新选择项目。 |
边界要求
- authoring写入仅限本次candidate和run state;网络、凭据和外部工具遵循当前会话权限。
- 同一目标Workflow发布必须串行;不同项目可以并行。运行snapshot不受并发发布影响。
- 取消、权限拒绝、timeout、provider terminal error和外部Stop不进入repair。
- 调用表单继承会话顶部Project;不提供第二个工作目录覆盖项。
- 本地App刷新检测到活动run时拒绝刷新,不能通过重启把运行状态改写为失败或取消。
- 旧
code.py、legacy snapshot和历史run只读恢复;新调用不再产生旧格式。
7. 官方框架对照
对照只用于确定边界,不把其他框架的Runtime或DSL引入OpenProgram。下表的“未覆盖”表示所列官方页面没有定义自动生成并发布持久Python Workflow的完整产品合同。
| 官方资料 | 相关能力 | 采用或修改 | 未直接覆盖 |
|---|---|---|---|
| OpenAI Agents SDK · 编排 | 区分LLM决策与代码编排;manager可把专用Agent当tool调用。 | 采用“Chat Agent拥有用户对话,专用能力是独立工具”;auto_workflow使用代码编排。 | 不定义本地Workflow catalog的生成、Git发布和旧run兼容。 |
| OpenAI Agents SDK · 工具搜索 | 大型工具面可以延迟搜索和加载,搜索活动保持可观察。 | 采用按需搜索,不要求每条消息先搜索;搜索返回合同而不是直接执行。 | 不负责创建新的持久工具实现。 |
| LangGraph · 工作流与 agent | 明确区分预定路径Workflow与动态决定工具的Agent。 | 采用职责区分;保留Python控制流,不新增图DSL。 | 不定义Agent自动编写、测试并发布新的Python Workflow。 |
| LangGraph · 子图 | 通过输入输出Schema复用subgraph,父子持久化边界明确。 | 采用合同化组合和固定依赖revision;OpenProgram以Python import表达关系。 | 不提供OpenProgram式Git项目catalog和authoring发布流程。 |
| CrewAI · Flows | Flow使用显式事件、状态和Crew组合完成结构化流程。 | 只采用“确定流程与Agent协作分层”的原则。 | 所列页面不描述运行时搜索并生成持久Flow资产。 |
采用、修改与拒绝
| 选择 | 结论 | 边界 |
|---|---|---|
| Agent按需搜索工具/Workflow | 采用 | 已知Program直接调用;大目录才搜索。 |
| 可复用子流程的合同化组合 | 修改采用 | 用Python import、Schema和固定Git revision,不引入subgraph DSL。 |
| manager式完整入口 | 修改采用 | 仅用户手动 auto_workflow;Agent不递归调用它。 |
| 运行失败自动重写已发布流程 | 拒绝 | 修改必须显式进入 revise_workflow。 |
| 所有一次性任务自动持久化 | 拒绝 | 没有复用或恢复价值时由Agent直接完成。 |
| 按任务措辞创建近似Workflow | 拒绝 | selection按候选合同判断能力;语言、输出路径、日期范围和普通参数差异不构成新执行结构。 |
8. 实施计划
每个阶段独立提交,并依次经过公共RED、最小GREEN、规格审查和质量审查。前一阶段未通过两类审查时不进入下一阶段。现有 tests/component/agent/test_agentic_workflow.py 锚定单体入口,各阶段必须同步迁移对应测试归属,避免最后删入口时测试整体失效。
曝光机制接线
给 Agent method 增加工具级曝光参数并传入Layer-2 register(..., expose);复用已有 _unexposed/exposed_names()。
提取只读搜索
从现有模块抽出 search_workflows 公共合同;返回固定revision、Schema、权限和匹配信息;排除 auto_workflow 与legacy项目。搜索相关测试迁到新入口。
拆出创建与修订
将candidate、验证、依赖固定和publish迁入 create_workflow;再以显式目标和新revision实现 revise_workflow。创建不执行用户任务。删除执行期repair路径;author/validate/publish测试迁到新入口。
建立用户级 auto_workflow
使用前两阶段公共能力实现search → visible select → reuse/create → run。完整DAG显示每个步骤;调用表单仅含 task 并继承会话Project;用Phase 0机制注册为Agent不可见。
移除新 agentic_workflow 调用
停止注册旧入口,删除只服务旧复合路径的selection/repair分支。保留显式 resume_workflow(run_id) 和legacy只读执行器。剩余锚定单体入口的测试删除或迁移,resume/legacy测试保留。
agentic_workflow;历史run仍可查看和恢复且artifact不变。分类目录、UI、文档和最终门禁
先固定“目录只分类、Registry定义运行身份”的合同,再将相关源码归入 workflow/。Programs按实际目录生成可展开导航,按Registry生成函数节点;调用图根节点使用被选择的函数名。最后同步产品文档,并在默认App完成direct、reuse、create、cancel和legacy恢复验收。
agentic_workflow/;Registry不存在旧名称;Programs中 workflow 只能展开,不能运行;展开后只显示四个注册函数;helper文件和内部目录不显示为Program;调用图根节点使用所选函数名;目录移动不改变注册Schema、执行、恢复和取消行为;这些约束必须有自动化回归测试,随后通过文档构建、0死链和默认App可视验收。统一作者静态校验
把现行package validator暴露为人类CLI与agent author共用的只读入口,新增英中作者规范页;create/revise在发布前通过同一函数复验candidate。legacy读取、行为测试、scaffold、publish CLI和catalog迁移不混入本阶段。
强制隔离的行为测试门
发布前运行candidate测试,但执行必须使用与用户profile无关的强制sandbox,禁网、过滤凭据、限制写目录、设置timeout;sandbox缺失、测试失败或取消均不得发布。
最小文件边界
| 范围 | 首选改动位置 | 明确不做 |
|---|---|---|
| Runtime与公共函数 | openprogram/programs/workflow/ 分类目录;入口文件、共享实现和必要的内部子目录在该分类内按普通Python代码组织。 | 不把分类目录注册为Program;不在移动源码时重写执行Runtime;不预造没有实际职责的文件。 |
| 注册和曝光 | openprogram/programs/_registry.py、_runtime.py 的现有exposure机制。 | 不新增第二套权限或工具注册系统。 |
| 组件与运行测试 | 现有Workflow公共入口测试、注册合同测试和legacy恢复测试;测试文件名可后续独立清理,不参与运行身份。 | 不因源码迁移重写Runtime测试;不以mock-only测试替代公共入口。 |
| 程序界面 | 现有Programs route、catalog和page组件;后端分别返回分类节点与注册函数节点。 | 不在前端维护第二份Workflow函数清单;不新建Workflow数据库或独立管理应用。 |
9. 公共验收矩阵
| 场景 | 公共入口 | 必须观察到 |
|---|---|---|
| Agent已有精确工具 | Chat消息 | 直接Workflow Call;没有search/create/auto节点。 |
| 目录中有完整匹配 | search_workflows → 工作流 | 返回固定ref并复用;没有仓库或revision变化。 |
| 只有部分组件 | create_workflow | 新package以import引用组件;没有复制依赖源码;不执行用户任务。 |
| 显式修改 | revise_workflow | 旧revision可继续执行;新revision通过全部发布门后成为active。 |
| 用户完整自动运行 | auto_workflow | DAG显示search、唯一selection Agent、可选create和最终Workflow;结果含action和ref。 |
| 同类任务改写措辞或语言 | auto_workflow | 搜索候选携带已验证的name、summary和tags能力摘要;已有Workflow能力覆盖时复用固定revision;零词项分数本身不得作为create依据。有候选时,create必须返回具体且非空的missing_capability,否则在authoring前拒绝。 |
| Agent工具发现 | 聊天 Agent 工具清单 | 包含search/create/revise和具体Workflow,不包含auto或旧agentic入口。 |
| Programs分类浏览 | functions / agentic / workflow | workflow 是不可运行的分类节点;其子项只含四个注册函数;源码helper与内部目录不成为Program。 |
| Programs调用图 | 选择任一Workflow管理函数 | 标题和根节点使用所选函数名;不出现旧 agentic_workflow 或目录名替代运行身份。 |
| 运行失败 | 具体Workflow | 状态failed、原错误保留、已发布源码和HEAD不变。 |
| 取消或Stop | create/revise/auto/run | 相关run最终为cancelled;没有repair、publish或遗留running。 |
| 并发发布同一项目 | 两个revise调用 | 串行验证active revision;不丢失commit,不覆盖新HEAD。 |
| 旧run恢复 | 内部兼容恢复(resume_workflow(run_id)) | 固定旧artifact只读执行;不创建新项目、不发布、不改旧snapshot。 |
/Applications/OpenProgram.app 的真实表单和Chat路径,并在重新加载会话后核对DAG caller、运行状态、Workflow ref和catalog变化。10. 实现状态
参数归属是设计要求,并有开发示例。现有工作流需逐个采用;Goal 当前自动选择推理强度,其他设置保留默认值。本文不将全目录的完整参数规划标为已实现。
| 能力 | 当前证据 | 状态 |
|---|---|---|
| Git Workflow package、snapshot、checkpoint与显式resume | 当前运行时已有对应实现;本设计要求保留。 | 已有 |
Agent method 工具级曝光接线到Layer-2 | method_options = dict(tool_visible=) 传入 Layer-2 register(..., expose);默认 True,现有函数仍全部曝光。 | 已实现 |
独立 search_workflows | 公共只读入口返回固定 revision、Schema、权限和命中依据;排除 auto_workflow 与无入口 legacy 项目;不调用模型、不写文件、不执行、不发布。 | 已实现 |
独立 create_workflow / revise_workflow | create 只新增项目且不执行用户任务;revise 在候选与 active revision 内容相同时拒绝发布(revision unchanged),否则只新增一个 revision;依赖 revision 写入 pyproject.toml 的 workflow-dependencies;失败与取消不发布。 | 已实现 |
用户级 auto_workflow | 源码位于 openprogram/programs/workflow/auto_workflow.py;用户表单与 Programs 自动入口可见;以 tool_visible=False 注册;编排 search → 可见 selection Agent(public agent(),AUTO_DECISION_ATTEMPTS=3)→ reuse/create → 按 pin 执行;不自动 revise。该入口是单文件完整 Workflow,当前没有独立 steps、依赖或测试包,因此不增加同名目录。 | 已实现 |
| 近似Workflow创建抑制 | search结果向selection提供已验证的name、summary和tags;selection合同优先复用能力覆盖的候选;措辞、语言、输出路径、日期范围和普通参数差异不得触发create;零词项分数只表示检索无词项重合;候选非空时,无missing_capability的create在发布前失败。 | 已实现 |
| 共享静态author validator与CLI | Agent candidate与本地目录使用同一package合同;openprogram workflows validate只读、支持文本与JSON诊断,不import或执行candidate代码;读取开发目录时忽略Python生成的__pycache__,但不放宽源码位置合同;metadata身份、唯一公开入口、安全__all__、decorator来源和最终re-export binding均由同一validator检查。 | 已实现 |
| 发布前行为测试门 | 手工test/publish与生成式create/revise均在强制OS sandbox中执行行为测试,不依赖用户profile;独立审查通过,完整集成验收仍在进行。 | 待实现 |
| 按 revision 执行与依赖 pin | _run_published_workflow 通过 git archive 检出选定 revision;workflow_dependencies 随发布持久化并在执行时 pin,旧 revision 在新 HEAD 发布后仍可运行。 | 已实现 |
旧版 code.py resume | resume_workflow 对 legacy run 只读重放 snapshot/code.py;失败返回 failed,不调用 planner、不改写 artifact。 | 已实现 |
| Workflow取消终态 | 内部 resume_workflow(run_id) 直接回归覆盖 package snapshot、legacy code.py 和 SINGLE:CancelledError 持久化为不再执行的 cancelled run 投影,KeyboardInterrupt 持久化为允许后续调用复用 artifact/checkpoint 的 interrupted run 投影;两者均保留原异常传播。为恢复尝试生成并持久化新的 canonical execution_id 仍由统一 Execution 接入负责。 | 已实现 |
停止新的 agentic_workflow 调用 | 旧入口不再注册;新 catalog、新 DAG 和新 run 不出现 agentic_workflow;resume_workflow 保留为内部函数。 | 已完成 |
| 分类目录与运行实体分离 | workflow/ 仅作为分类;Programs按Registry展示四个公开函数,支持嵌套分类和多入口文件;调用图按所选函数及可达helper分析,目录和helper不参与运行身份。规格与质量复审均通过。 | 已实现 |
| 默认App真实验收 | 代码与文档门禁已齐,等待默认 /Applications/OpenProgram.app 完成 direct / reuse / create / cancel / legacy resume 可视验收。 | 待实现 |
Phase 0–6 的源码实现、组件回归、CLI公共路径、文档构建与两类独立复审已完成;强制sandbox行为测试门和默认App真实验收仍待完成。
11. 明确排除
- 不新增
@workflow、图DSL、第二个Runtime、字符串call_workflow()dispatcher。 - 不自动把所有用户消息转成Workflow,也不为一次性任务默认创建项目。
- 不自动修改已发布Workflow,不在普通执行错误后隐式发布revision。
- 不建立Workflow数据库、后台Git轮询、远程push、Marketplace或远程依赖解析。
- 本阶段不实现scaffold、人工publish命令、catalog状态目录迁移或执行未信任测试;这些分别进入后续任务。
- 不改变Agent、Program和Workflow现有Python调用语义;本设计只拆入口与生命周期。
可迁移工作流包契约
工作流是位于以下目录的自包含 Python 包: openprogram/programs/workflow/<workflow_id>。移动 OpenProgram 检出目录时,公开函数名与包相对位置保持稳定。包元数据、导入、依赖版本、UI 链接和调用请求不得包含开发者主目录。
| 关注点 | 契约 |
|---|---|
| 身份 | 小写包标识符就是注册的可调用名称。Python 组合使用普通导入与直接调用,不引入新的运行时、装饰器或调用协议。 |
| 内部位置 | 持久化 {"scope":"programs","path":"workflow/weekly_report"} ,使用由两个部分组成的规范 POSIX 路径。作用域表示当前项目中的 openprogram/programs/ 。仅在文件系统边界基于当前 OpenProgram 程序目录解析,绝不基于对话工作目录解析。拒绝作用域内绝对路径、路径穿越和歧义匹配。Wheel 中非 Git 的工作流副本不与独立版本化源码包竞争;两个匹配的 Git 项目仍视为歧义。 |
| 外部安装 | 已安装 App 可使用 owner 显式登记的源码检出目录。唯一的 catalog_root 安装绑定标识该目录; refresh-local-app.sh 根据正在安装的检出目录更新绑定。此绑定与各包的可迁移路径不同。外部开发符号链接保留显式授权;相对标识符不授权任意外部代码。 |
| 迁移 | 将先前获授权的项目内绝对条目转换为带作用域的相对条目,包括旧检出目录已不存在的记录。只有已知目录中结构有效且匹配的包可满足旧工作流条目。移动检出目录时不重复执行无限制目录发现。保留无关外部记录与授权撤销。 |
| CLI 列表 | openprogram programs list 包含授权注册机制已经加载的已发布 Workflow 入口,包括位于一级分类目录中的项目。名称与说明来自已注册可调用对象及其源码。保留内置条目和可选 Program 安装状态,同名条目只列出一次。不得为列出条目而导入或列出任意未登记目录、改变工具暴露规则或执行 Workflow 函数体。通过隔离 owner 目录的新 CLI 进程验收,并包含一个未授权的相邻项目。 |
| 发现与界面 | 启动参数与收藏共用一个可调用目录。刷新同时更新 React 与运行时读取方。可调用对象缺失或无效时显示错误,“使用”操作不能静默等待后消失。侧栏与程序入口共用交接流程。缓存缺失时发起一次经认证的目录请求,将响应发布给两个共享读取方;仍不可用时显示本地化错误。路由清理、新启动或聊天 owner 变化取消过期的表单打开。延迟聊天重置完成前不消费待处理启动。 |
| 编写 | 实现前设计输入、输出、副作用、失败与取消行为。元数据、公开入口、辅助函数、测试和 README 都放在包内。验证结构、执行行为检查、发布不可变版本,再验证发现、收藏与参数表单打开。静态验证通过不等于执行证据。 |
| 兼容性 | 保留现有函数名、schema、收藏顺序、固定依赖、普通 Python 导入与未提交工作流文件。运行时绝对路径只是内部文件系统细节,不作为持久化包身份。 |
编写与发布生命周期
正式手动接口为 openprogram workflows validate DIRECTORY, openprogram workflows test DIRECTORY,以及 openprogram workflows publish DIRECTORY。Validate 只读。Test 将验证后的候选和固定依赖复制到临时工作区,在必需的操作系统沙箱中运行测试,禁用网络、不含凭证、保护源文件并限制进程寿命。手动发布与生成式 create/revise 入口共用同一个必需的行为测试检查。Publish 对实际提交的快照重新验证和测试,不信任旧成功报告。现有包要求显式提供 --replace ,且目标目录干净。失败、超时、沙箱不可用或测试失败时均不发布。
文档中的 from workflows.NAME import NAME 导入与实时目录中的 openprogram.programs.workflow.NAME 解析到同一获授权可调用对象。实时别名仅暴露命名且获授权的入口。快照执行明确管理自己的 workflows 命名空间并持续加载固定内容,不回退到实时目录。包 README 说明用途、输入、输出、影响、失败/取消行为、依赖、测试与可复现调用。
验收
- 登记后移动检出目录,无需编辑包元数据或逐包路径即可发现并解析同一获授权工作流。
- 从失效的检出目录前缀恢复已登记的周报包,不授权无关目录。
- 拒绝路径穿越、未知作用域、未授权包和歧义解析;保留显式安装的外部源。
- 默认已安装 App 中显示原有 weekly_report 收藏,点击“使用”打开任务表单;验收期间不执行或提交报告。
- 英文编写指南与中文译文规定相同的创建、验证、发布、迁移和故障排查行为,命令已对照 CLI 核实。
实现状态
带作用域的源码持久化、获授权旧路径迁移、已安装目录导入和共享表单启动已通过独立规格与质量审查。手动测试/发布、文档化导入别名与编写文档也通过独立审查。全仓验证尚未完成,不代表完整测试集通过。已安装 App 验收与部署记录在发布证据中。