Self-Programming Workflow · 2 / 3

创建、隔离与发布

本页只定义 agentic_workflow(task) 如何复用、修改或创建项目,以及candidate隔离、可执行测试门、发布判定与实现交付顺序。

1. 一次调用只使用一个 authoring Agent

agentic_workflow(task) 仍是现有 @agentic_function。它不是所有Workflow的调用网关,也不先要求模型返回 reuse / revise / create JSON。Agent直接查看任务、可用公开入口和只读源码;只有需要改代码时才写candidate。

<author-root>/
├── available/workflows/<package>/   # 固定HEAD的只读git archive快照
└── candidate/                       # 唯一可写根项目;初始为空
直接复用

调用一个现有公开入口;无源码变化,不创建仓库。

修改现有项目

把一个只读快照复制到candidate后修改;依赖项目保持只读。

创建组合项目

写一个多文件package,通过静态Python import复用已有Workflow。

外部进程在authoring期间提交新代码不会改变本次快照。Agent不能直接写 ~/.openprogram/workflows,也不能产生多个candidate根项目。

2. Runtime 根据事实判定结果

删除“selection turn → decision JSON → author turn → project JSON”。只保留一个 agent() loop和一个确定性收尾函数;不增加新装饰器、resolver、dispatcher或模型工具协议。

3. 发布门必须执行真实测试

冻结候选

固定根项目与全部可达依赖;后续检查和执行使用同一份源码。

结构与依赖检查

验证标准package、唯一参数化入口、允许的import、缺失依赖和循环依赖。

运行项目测试

执行 python -m unittest discover -s tests -p "test_*.py";测试只存在或可解析不算通过。

执行本次任务

在同一候选快照调用公开入口并记录DAG;失败回到同一个Agent修正。

提交和发布

测试与入口执行都成功后才创建commit并fast-forward目标仓库。

测试进程边界合同
写入只允许写本次临时目录,不能写源仓库、其他Workflow或用户目录。
网络与凭据入口测试替换模型和外部Workflow调用;不获得provider凭据,不自动访问网络或安装依赖。
时间与输出使用有界超时和输出上限;超时终止整个测试进程树。
取消立即终止测试,删除临时候选,不创建commit,也不更新管理页面测试状态。

4. 公共入口验收

公共路径必须观察到的结果
发现现有入口可完成同一个Agent直接调用并返回;没有selection JSON、第二个author turn或新仓库。
创建缺失能力生成独立Git仓库和多文件package,公开入口是现有 @agentic_function(task)
现有B/C可完成新任务只生成import B/C的编排项目,不复制B/C源码。
测试失败、超时或取消不提交、不fast-forward,原仓库HEAD保持不变。
仓库有未提交修改本次执行仍使用固定commit;修改只在authoring worktree验证后发布。
循环或缺失依赖隔离worker启动前返回结构化错误。

5. 实现交付顺序

任务代码边界完成证据
A · 单一Agent authoringopenprogram/programs/agentic_functions/agentic_workflow/__init__.py直接复用、修改现有项目、创建组合项目三条公共RED。
B · 可执行测试门同一Workflow runtime与component测试失败、超时、取消保持HEAD不变;通过时只发布一个commit。
C · 只读管理视图仓库扫描结果由Programs route与前端共用详见DAG与管理网页

明确不做