ASTER CODE / Meta Harness
任务分轮执行
保存工作要求、目标、计划和等待条件,并由宿主限制自动续跑。
工作策略保存什么
WorkPolicyV1 保存宿主选择的一段工作要求,带有 ID 和版本号。它在会话的事实日志中记录,并进入原有的 guidelines 提示槽。
use aster_core::{SessionOptions, WorkPolicyV1};
let policy = WorkPolicyV1::new(
"project-engineering",
1,
"先读调用方,修改后运行项目已有的检查。",
)?;
let options = SessionOptions::new().with_work_policy(policy);
策略 ID 最多 128 个 UTF-8 字节,版本号必须大于 0,说明文本不能为空且最多 4096 字节。它提供工作要求,不授予工具权限,也不生成验证通过的结果。
策略跟随原会话保存。重新打开已绑定会话时,不能悄悄换成另一份策略;没有策略的旧会话也不能在恢复时直接补绑。需要不同工作要求时,应按接口规则建立新会话。
长期目标与一次运行有什么区别
一个目标可以分成计划中的多个步骤,再分多次 Run 执行。文档和接口把这样的单次执行称为 slice。每次 slice 仍经过原有工具权限、完成检查和资源收尾。
一次运行通过验证,不代表整个目标已经达成。所有目标步骤都被接受、没有打开的等待条件,并且所有 slice 都处理完后,目标才可以完成。
目标接口的顺序
| 接口 | 作用 | 是否执行模型 |
|---|---|---|
| apply_goal_definition | 创建或修订目标定义 | 不会仅因修改定义就开始运行 |
| apply_goal_plan | 提出计划,再接受对应的计划版本 | 接受计划本身不启动运行 |
| apply_goal_wait | 声明或观察提问、确认、资料版本或 UTC 到期等待 | 按等待状态决定能否继续 |
| preview_goal_tick | 查看此刻是否具备推进条件 | 预览不授予执行权 |
| tick_goal / stream_goal_tick | 重新检查并最多接纳一个原有运行 | 只有判断为 Advance 时推进 |
| control_goal | 暂停、恢复或取消,必要时先停止活动运行 | 不把暂停和恢复当作完成 |
| reconcile_goal_slices | 核对已失去执行者的 slice | 不直接重放原操作 |
目标命令携带会话、工作区、策略摘要以及预期的目标与计划版本。旧版本命令、其他会话的引用或尚未处理完的 slice 会被拒绝。修改计划时需要处理并发版本,不能只靠一段自然语言覆盖旧计划。
等待与下一轮
推进结果可能是 Advance、Wait、NeedsInput、Paused、BudgetExhausted、Reconcile 或 Complete。只有 Advance 表示宿主可以继续提交这一轮执行。
确认和提问需要对应回答,UTC 到期等待可以由时钟满足。两者不能互换。宿主可以根据结果停下来显示问题、等待资料更新,或让用户决定下一步。
每次 tick 最多接纳一个 Run。持续推进需要宿主再次调用接口,或使用产品已有的有界推进流程。组件本身不会另开后台调度器。
自动续跑的限制
Core/SDK 未设置续跑策略时关闭自动续跑。 普通 ACP 默认最多接纳 8 个切片,停滞上限为 2 个。 默认期限为宿主初始化后 24 小时。
--unattended 默认最多接纳 1000 个切片,停滞上限为 3 个。
续跑受本次执行的截止时间约束。
可信 ACL 的显式声明覆盖默认值。
当前新接纳来源使用 turn_progress_delta_v3。
进展依据包含净变化、已接受步骤和原始进展维度。
只读调用成功本身不代表目标取得进展。
重复写入相同内容不会产生新的工作区状态。
历史来源沿用原有语义,暂停与恢复保留累计历史。
goal_control 声明只接受宿主可信配置或用户配置,工作区文件不能提高它的权限或上限。这个块包含 automatic_enabled、max_slices、max_no_progress_slices 和 deadline_unix_ms,四项都必须提供;后三项使用十进制字符串,期限是绝对 UTC 毫秒时间戳。
请按当前时钟选择有限期限,不要复制文档中的旧时间戳。配置格式和允许范围见下方宿主控制手册。
ACP 中怎样使用
新会话默认选择产品的 engineering-v1 工作策略,Core/SDK 默认则仍是可选。ACP 的 _meta.asterEngineering.policy 可以选择 engineering-v1 或 none,未知值会拒绝。
显式 /goal <目标> 用于创建并唤醒目标;普通消息不会自行变成长期目标。产品还提供 /goal status、pause、resume 和 clear。取消或完成的目标保留历史,切换到另一项工作时应建立新会话。
实现依据
内部机制
长期任务设计逐项解释 tick 决定、进展版本、停滞和目标完成。 每个源码站点保留本版的准确行号。