docs/packages/agent/async-subagents.md
把 async subagent 的权限说明改成当前真实行为:child session 创建时完成预授权,通常不会进入等待权限状态。
- 将
waiting_permission分支标记为保留场景。 - 说明 parent deny 继续传递,child 中的 ask 会转成 allow。
这页按文件解释当前分支的最终修改。重点是 workflow 的可观测日志、执行方式、取消行为、Desktop 状态同步、child agent 权限和 saved workflow 加载方式。
把 async subagent 的权限说明改成当前真实行为:child session 创建时完成预授权,通常不会进入等待权限状态。
waiting_permission 分支标记为保留场景。重写 approvalRouting 当前语义,避免文档继续暗示运行时会把 child approval 转发给 parent。
surface-to-parent 等配置名,但说明它们现在不代表运行时审批转发。更新 workflow 的核心 contract:自包含 inline/session script 在 worker 内用 node:vm 执行,trusted .mjs saved workflow 用 Node ESM 加载,不在 app 里引入 esbuild。
node:vm 限制默认全局对象,但不包装成安全沙箱。.mjs,同时兼容自包含 .js / .ts。api.agent() child 权限沿用 async subagent 的预授权规则。同步 headless 文档中的 child 权限描述,说明 child session 在创建时收窄权限,不等待运行时审批。
更新 TUI session store 的权限说明:TUI overlay 处理 parent session 的 pending permission,async subagent 通常不再往 overlay 塞 child permission。
把 workflow data dir 的加载改成异步,并在 session 创建、加载、fork 前等待它完成。
给 tool 执行 metadata 增加 isWorkflowAgentSession 标记,让工具能识别 workflow child agent。
把 workflow child agent 当作 child agent 处理:即使传了 runInBackground,也会以前台命令执行。
强化 api.agent() 的 child agent 创建逻辑和可观测性。
humanApprovalMode 设为 never。wait 和 browser,并禁止 workflow / agent 递归工具。新增 workflow 统一日志工具,输出 [dimcode][workflow][area] 格式,并提供错误和值的摘要函数。
给 workflow artifact 的写入、复制和保存加入 begin / done / failed 日志。
移除 esbuild 加载路径,改成 Node 原生 ESM 加载和自包含脚本加载。
.mjs 走 Node dynamic import,并用 mtime 避免缓存旧模块。.js / .ts 作为自包含 workflow script,用 inline runtime 读取 contract,实际执行走 worker 内 node:vm。这是本分支的核心 runtime 修改,集中处理 workflow 生命周期、worker 执行、取消、日志和错误码。
worker_threads.Worker 执行,cancel 时终止 worker。<error code="WORKFLOW_*">。.mjs,并允许 .mjs / .js / .ts。增强 inline script runtime 的日志、语法处理和 node:vm 预加载。
meta 和 default export 时不再使用 new Function。session catalog 查 artifact 时同时返回已编译 module,便于 session workflow 复用,不必重新从 artifact 文件加载。
完善 workflow tool 对模型的说明,并记录 workflow tool start 成功或失败。
WorkflowApi 可用字段和方法。api.agent() 让 child agent 执行。新增 worker 内运行的源码字符串,用来执行 file-backed workflow。
.mjs 或自包含 script;自包含 script 通过 node:vm 执行,不注入 process / require。phase、log、agent 都通过消息回主线程。api.agent() 先检查 options 可传输,避免 structured clone 错误丢掉 invocation 错误码。Desktop main 映射 error 时保留 workflowCode 或 code,不再统一改成 RUNTIME_ERROR。
给 Desktop main 的 workflow API 和事件转发加日志。
给 Workflow 面板和 Activity 停止动作增加 renderer 侧日志。
给 slash workflow 命令增加日志。
renderer bootstrap 处理 workflow 事件时增加日志。
实现 Desktop terminal wins:已有终态时,旧的 running update 不能覆盖 run 或 progress.run。
移除 esbuild 依赖,因为 saved workflow 不再通过 bundler 编译加载。
从 Rollup external 列表移除 esbuild,和依赖移除保持一致。
新增测试,确认 workflow child agent 请求 background exec 时仍以前台执行,并使用默认 timeout。
更新 loader 测试,覆盖异步 loader、自包含 .ts、原生 .mjs helper import 和 data dir source。
新增边界测试,确认 prompt-originated inline workflow 不会通过 module loader 重新加载 artifact 文件。
扩展 workflow manager 测试覆盖新行为。
process、require 和 globalThis.process。Function("...") 会失败。新增测试,确认 workflow tool description 明确列出 WorkflowApi,并且不包含具体 sleep 示例。
新增 Desktop mapper 测试,确认 workflow completed event 中的 WORKFLOW_SCRIPT_ERROR 可以传到 renderer payload。
新增 terminal wins 测试,确认 completed run 不会被之后到达的 stale running progress 覆盖。
同步移除 agent package 的 esbuild importer 依赖记录。
新增本说明页面,用静态 HTML 逐文件介绍 workflow 分支的最终修改,方便直接在浏览器中查看。