Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
c46c285
feat: setup 自动登记 Console 工作区
Dandre126 Aug 4, 2026
94b10a2
feat: 优化首页编码工具引导
Dandre126 Aug 4, 2026
b0bbc68
feat: 支持 Codex 与 Claude 桌面版
Dandre126 Aug 4, 2026
f5cd7f2
feat: 优化 Dyro 引导与控制台体验
Dandre126 Aug 4, 2026
d00d5ca
feat: 完善首次设置个人偏好引导
Dandre126 Aug 4, 2026
41a8276
feat: 建立 Agent Bridge 只读基础能力
Dandre126 Aug 6, 2026
f30edb9
feat: 实现 Agent Bridge 确定性计划
Dandre126 Aug 6, 2026
6a9e7ed
fix: 收紧 Agent Bridge Git 配置边界
Dandre126 Aug 6, 2026
2787921
feat: 实现 Agent Bridge 严格传输边界
Dandre126 Aug 6, 2026
e7e1225
feat: 完善 Agent Bridge 外部能力与安全门禁
Dandre126 Aug 7, 2026
7718932
docs: 补充 Dyro 功能介绍视觉资产
Dandre126 Aug 7, 2026
e284c1c
Revert "docs: 补充 Dyro 功能介绍视觉资产"
Dandre126 Aug 7, 2026
5a7f467
fix: 修复 Agent Bridge 零副作用审计运行时路径与 fixture 契约
Dandre126 Aug 11, 2026
0c4cc7a
merge: 合并 main 并解决 cli.py 格式冲突
Dandre126 Aug 11, 2026
eb6111c
fix: 修复 Bridge CI 归档目录与版本元数据漂移
Dandre126 Aug 11, 2026
abca42c
fix: 修复 Bridge CI bind mount 与黑盒强制操作断言
Dandre126 Aug 11, 2026
f9bb14f
docs: 归档 Agent Bridge Phase 0 CI 与 host 验收证据
Dandre126 Aug 11, 2026
cc29fd6
docs: 补充 Agent Bridge F04 上下文预算证据
Dandre126 Aug 11, 2026
de6b783
docs: 记录 Agent Bridge Phase 0 最终质量门 No-Go
Dandre126 Aug 11, 2026
c329ad1
refactor: 卸掉 Ubuntu 门控 Agent Bridge 与 MCP 发布面
Dandre126 Aug 11, 2026
3d8e75f
feat: Skill 改为镜像加分身,支持多宿主安装
Dandre126 Aug 11, 2026
a450938
feat: 自定义选仓支持序号输入
Dandre126 Aug 11, 2026
c0cc8f4
fix: harden Skill legacy bounds and prep 0.6.3 release metadata
Dandre126 Aug 11, 2026
7bb8c64
docs: align Skill install note across localized READMEs
Dandre126 Aug 11, 2026
7be05c0
feat: guide and auto-repair managed Skill across setup and updates
Dandre126 Aug 11, 2026
79d18b5
merge: sync main after Skill lifecycle PR #20
Dandre126 Aug 11, 2026
92e6448
merge: sync main after 0.6.4 release metadata
Dandre126 Aug 12, 2026
98476ab
chore: 移出本地审查与会话资料
Dandre126 Aug 12, 2026
07f4d42
feat: 扩展 Dyro 只读控制面与安全边界
Dandre126 Aug 12, 2026
6d4bbac
fix: 收紧控制面隐私并优化创建确认
Dandre126 Aug 13, 2026
9d749a0
merge: sync main after 0.6.5 release metadata
Dandre126 Aug 13, 2026
b34c470
feat: 启动面支持本机已装编码工具
Dandre126 Aug 13, 2026
5535428
fix: 修正 agent discover 测试对桌面宿主的依赖
Dandre126 Aug 13, 2026
0e02266
merge: sync main after 0.6.6 release metadata
Dandre126 Aug 13, 2026
94dafa7
fix: 让裸 dyro update 确认后安装
Dandre126 Aug 13, 2026
f40d559
feat: 将 DeepSeek Harness 与 Pi 纳入编码工具目录
Dandre126 Aug 14, 2026
83d8c4f
merge: sync main after 0.6.7 release metadata
Dandre126 Aug 14, 2026
c6e06a7
test: 按 HOSTS 隔离 Skill 宿主环境变量
Dandre126 Aug 14, 2026
0bb299f
feat: 落地九路 dispatch、Batch V1 与托管 dyro-dispatch Skill
Dandre126 Aug 14, 2026
bb2bb0d
chore(发布): 准备 0.6.8
Dandre126 Aug 14, 2026
00e87e4
fix: 让 dispatch 在干净 Home 下探测环境而不依赖本机模型配置
Dandre126 Aug 14, 2026
3ee378e
merge: sync main after 0.6.8 release metadata
Dandre126 Aug 15, 2026
74a464c
feat: 以 Peer Wave 并行执行多路 Harness 写任务
Dandre126 Aug 15, 2026
ad849dd
chore(发布): 准备 0.6.9
Dandre126 Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

## Unreleased

## 0.6.9 - 2026-08-15

- Make multi-harness writes a Core peer wave: each task worktree has one
executor, overlapping slices share a `conflict_group`, and wave members are
not live supervisors. Objective budgets now default to `max_parallel = 3`;
when write-capable Providers are ready the effective wave size is
`min(requested, ready_count)`. Empty `conflict_group` values warn in a
parallel wave. `task.executor` can run a ready dispatch adapter inside the
existing task worktree (Cursor edit stays fail-closed); scratch
`dispatch run --mode edit` remains detached and patch-only. `objective tick`
and `task daemon` preview idle-harness bindings and honor per-backend caps.

## 0.6.8 - 2026-08-15

- Fix Console inspection falsely timing out healthy workspaces by budgeting for
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,10 @@ preview with `dyro integration install dispatch --dry-run`, then install with
For two to four different roles, `dyro dispatch batch-plan` produces a
side-effect-free, context-bound plan. Review its digest before
`batch-start --expect-plan-sha256 …`, then recover through `batch-status`,
`batch-result`, or `batch-cancel`. Batch V1 is independent fan-out with at most
one edit writer; it is not a dependency DAG, retry queue, or automatic judge.
`batch-result`, or `batch-cancel`. Batch V1 is advisory independent fan-out with
at most one scratch edit writer; it is not the delivery write plane, a
dependency DAG, retry queue, or automatic judge. Simultaneous writes use Core
peer wave: one executor per task worktree, serialized only by `conflict_group`.
Use explicit synchronous `panel --members all` only for a full-ready-Provider
same-task comparison.

Expand Down
6 changes: 4 additions & 2 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,10 @@ Dyro Skill 的机器不会被后台静默写入。
需要 2–4 个不同角色时,先用 `dyro dispatch batch-plan` 生成不创建状态、绑定
上下文的计划;审阅摘要后再执行 `batch-start --expect-plan-sha256 …`,随后可用
`batch-status`、`batch-result` 或 `batch-cancel` 恢复生命周期。Batch V1 是最多
一个编辑者的独立 fan-out,并非依赖 DAG、重试队列或自动终裁器。只有用户明确要求
全 Harness 同题比较时,才使用同步的 `panel --members all`。
一个 scratch 编辑者的建议面 fan-out,不是交付写路径,也不是依赖 DAG、重试队列
或自动终裁器。要同时改多块,走 Core Peer Wave:每条 task worktree 一个执行位,
只按 `conflict_group` 串行。只有用户明确要求全 Harness 同题比较时,才使用同步
的 `panel --members all`。

交互运行 `dyro`、`dyro home` 或 `dyro start` 时,Dyro 每个本地自然日最多访问一次官方 PyPI;断网、超时或状态目录不可写都不会阻塞进入工作区。默认仍由用户确认更新:

Expand Down
6 changes: 3 additions & 3 deletions docs/agent-orchestration-discipline.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ docs/reviews/YYYY-MM-DD-<topic>-adversarial-board.md

| 规则 | 说明 |
| --- | --- |
| 一仓一 branch 同时仅一个写 agent | 并行写同一 checkout 会导致已验证修复被静默覆盖 |
| 一棵 task worktree / 同一 `conflict_group` 同时仅一个写 agent | 并行写同一 checkout 会覆盖已验证修复;不同 task 树或不同冲突组可以同时写 |
| 改前 `git log -5 -- <path>` | 避免回退到已废弃的 workaround |
| 精确 stage | 禁止盲目 `git add .`;同文件无关 hunk 必须拆分 |
| 「验证后又坏了」 | 先查是否有后续 commit 覆盖,再查运行时 |
Expand Down Expand Up @@ -112,5 +112,5 @@ docs/reviews/YYYY-MM-DD-<topic>-adversarial-board.md
5. 验证者是否被要求「打开真产物并尝试证伪」?
6. 若 resume:substrate 是否变化?
7. 是否声明缩放妥协?
8. 写路径是否保证单写 agent?
9. 结果是否只回收摘要/契约字段,而非完整事件流?
8. 写路径是否保证每棵 task worktree / 每个 conflict_group 只有一个写 agent,且波次成员都是执行位?
9. 结果是否只回收摘要/契约字段,而非完整事件流?
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,4 +234,4 @@ Dyro 的交付拓扑与之**实质相近**:TaskGraph(`depends_on` / conflict

未来的 adapter、通知、签名规则、发布平台与审批系统应使用 Python entry point 或独立 Profile 扩展包接入;不要把某个组织的策略加入 core 默认行为。

开发者侧的可选本地多 Agent 派发(五段式任务契约、注入前机密守卫、locator 核验、隔离 patch)与上述控制面分层并列,随 `dyro` 安装包分发(`dyro dispatch` / `import experiments.local_agent_dispatch`),但**不**替代 gates/合并;见 [`ADR-0002`](adr/0002-optional-local-agent-dispatch.md)、[`多智能体编排纪律`](agent-orchestration-discipline.md) 与 [`可选本地 Agent 派发设计`](designs/optional-local-agent-dispatch.md)。
开发者侧的可选本地多 Agent 派发(五段式任务契约、注入前机密守卫、locator 核验、隔离 patch)与上述控制面分层并列,随 `dyro` 安装包分发(`dyro dispatch` / `import experiments.local_agent_dispatch`),但**不**替代 gates/合并。同时写多块走 Core Peer Wave(task worktree + `conflict_group`),见 [`peer-wave-execution.md`](designs/peer-wave-execution.md)、[`ADR-0002`](adr/0002-optional-local-agent-dispatch.md)、[`多智能体编排纪律`](agent-orchestration-discipline.md) 与 [`可选本地 Agent 派发设计`](designs/optional-local-agent-dispatch.md)。
2 changes: 1 addition & 1 deletion docs/designs/native-continuation-engine.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ max_actions = 20
max_attempts_per_task = 2
max_failures = 3
max_no_progress_cycles = 2
max_parallel = 1
max_parallel = 3
deadline = "2026-10-02T12:00:00Z"
```

Expand Down
3 changes: 2 additions & 1 deletion docs/designs/optional-local-agent-dispatch.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ judge 或多 edit writer。显式 `panel --members all` 仍是同步的全 ready

| 场景 | 用哪条路径 |
| --- | --- |
| 开发者要第二意见 / 大调研 / patch 竞赛 | ADR-0002 本设计 |
| 同时改多块交付代码 | Core Peer Wave:多 task + worktree + `conflict_group`;见 [peer-wave-execution.md](peer-wave-execution.md) |
| 开发者要第二意见 / 大调研 / scratch patch | ADR-0002 本设计 |
| 高风险设计评审 | 本设计 panel + 对抗评审板 |
| 生产 evidence / merge | 仅 Dyro 控制面;派发 harness 不可越权 |

Expand Down
59 changes: 59 additions & 0 deletions docs/designs/peer-wave-execution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Peer Wave:多 Harness 并行执行面

状态:已接受(随 0.6.x 落地)
范围:Dyro Core 写路径;不替代 gates / review / merge
关联:[多智能体编排纪律](../agent-orchestration-discipline.md) · [ADR-0002](../adr/0002-optional-local-agent-dispatch.md) · [可选本地 Agent 派发](optional-local-agent-dispatch.md)

## 1. 产品判断

多 Harness 的默认画面是 **一波 peer 任务同时写**,不是一路改、其余盯梢。

写隔离已经在 Core:

- 一条 Task 同一时刻只有一个 `executor`
- 每个 Task 有自己的 `task/<id>` worktree
- 重叠切片用 `conflict_group` 串行;不重叠的进入同一波

0.6.8 的九路 headless 适配器接到这条写路径上:在 **既有 task worktree** 里跑,不再为交付执行另开 detached patch 树。

## 2. 硬规则

1. 一棵 task worktree 同一时刻只有一个写 harness。不是全工作区只有一个写。
2. 同一 `conflict_group` 同一波只进一个 Task。空 `conflict_group` 在 `max_parallel > 1` 时警告,但不互斥。
3. 波次里每个成员都是执行位。只读意见走 `dyro dispatch panel`;复核是该 Task 的下一阶段,审冻结 HEAD,不看 live 树。
4. `cursor-agent` 不能进入写波次;其 edit 仍 fail-closed。
5. Dispatch 仍然不能 merge / push / signoff。交付证据只走 Core gates。

## 3. 产品路由

| 意图 | 路径 |
| --- | --- |
| 同时改多块 | 拆成 N 条 Task,填 `conflict_group` 与 `executor`,`task daemon --parallel` 或 Objective `max_parallel` |
| 只要第二意见 | `dyro dispatch panel` |
| 还不成 Task 的试改 | `dyro dispatch run`(只读或 detached patch) |
| 禁止默认 | 一个 edit writer + 其余角色陪跑 |

Batch V1 保持建议面:2–4 个独立角色、最多一个 edit。不要在 Batch 里重做 TaskGraph。

## 4. 执行桥

`task.executor` 若是已就绪且支持 edit 的 dispatch Provider,`run_task` 调用该适配器:

- cwd = `_ensure_task_worktrees()` 的根
- 分支 = `task/<id>`
- 使用适配器自己的隔离 Home 与进程监督
- 不创建 `EditWorkspace`,不回写源工作区之外的 detached tree
- 终态仍走 receipt → gates → review → merge

未就绪或非 dispatch 的 executor 回退到 Profile `write` argv,避免没有本机登录时阻断既有工作区。`auto` 只从就绪的可写 Provider 里确定性分配。

## 5. 异构波次

`objective tick` 与 `task daemon` 预览为每个 ready Task 绑定空闲就绪 harness:

- 钉死的 `executor` 优先;达到每后端上限则推迟,不静默换人
- `auto` 按 Provider id 排序领取空闲可写 harness
- 遵守 Objective / daemon 并行容量、`conflict_group`、每后端上限
- Cursor 作为写 executor 被拒绝

Objective 默认 `max_parallel = 3`。本机有就绪可写 Provider 时,有效容量为 `min(requested, ready_write_count)`;没有就绪 Provider 时保持 requested,以便 Profile-only 工作区继续跑。
2 changes: 1 addition & 1 deletion docs/diagrams.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ flowchart TB
Host -->|"explicit dyro commands"| Dyro
```

See `docs/agent-orchestration-discipline.md`. The optional harness under `experiments/local_agent_dispatch/` ships with the installed package but never replaces Core gates or merge.
See `docs/agent-orchestration-discipline.md` and `docs/designs/peer-wave-execution.md`. `dyro dispatch` is advisory; simultaneous writes use Core task worktrees, not Batch supervisors. The optional harness under `experiments/local_agent_dispatch/` ships with the installed package but never replaces Core gates or merge.

---

Expand Down
2 changes: 1 addition & 1 deletion docs/diagrams.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ flowchart TB
Host -->|"显式 dyro 命令"| Dyro
```

见 [`agent-orchestration-discipline.md`](agent-orchestration-discipline.md)。能力:`dyro dispatch` / `experiments.local_agent_dispatch`(随 `dyro` 安装;**不**替代 gates/merge)。
见 [`agent-orchestration-discipline.md`](agent-orchestration-discipline.md) 与 [`peer-wave-execution.md`](designs/peer-wave-execution.md)。`dyro dispatch` 是建议面;同时写多块走 Core task worktree 波次,不在 Batch 里陪跑监工。能力:`dyro dispatch` / `experiments.local_agent_dispatch`(随 `dyro` 安装;**不**替代 gates/merge)。

---

Expand Down
7 changes: 4 additions & 3 deletions experiments/local_agent_dispatch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,10 @@ python3 -m experiments.local_agent_dispatch doctor

State home: `~/.dyro/local-agent-dispatch/` (override with `--home` or `DYRO_LOCAL_AGENT_DISPATCH_HOME`).

Batch V1 accepts two to four independent member contracts, resolves installed
Provider candidates without starting authentication CLIs, and allows at most one
edit writer. `batch-start` actively authenticates every selected Provider before
Batch V1 is the advisory plane: two to four independent member contracts,
installed Provider candidates without starting authentication CLIs, and at most
one scratch edit writer. Simultaneous delivery writes use Core peer wave
(`docs/designs/peer-wave-execution.md`), not a second Batch writer. `batch-start` actively authenticates every selected Provider before
creating state. Its reviewed
plan digest binds the canonical project root, normalized contracts, Provider
choices and non-secret execution profiles, guarded context digests, timeouts, and
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "dyro"
version = "0.6.8"
version = "0.6.9"
description = "DyroEngineeringFlow: local-first automation and delivery control for multi-repository teams"
readme = "README.md"
requires-python = ">=3.11"
Expand Down
45 changes: 40 additions & 5 deletions src/dyro/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
)
from .continuation.engine import (
build_scheduler_tick,
render_scheduler_tick_json,
render_scheduler_tick_text,
scheduler_tick_payload,
)
from .continuation.models import Operation, RequestedMode
from .continuation.planner import (
Expand Down Expand Up @@ -3192,13 +3192,34 @@ def cmd_objective_tick(args: argparse.Namespace) -> None:
)
)
plan = build_continuation_plan(snapshot)
from .peer_wave import (
annotate_objective_tick,
discover_available_write_providers,
recommended_max_parallel,
)

available_write = discover_available_write_providers()
tick = build_scheduler_tick(
snapshot, plan, max_parallel=record.objective.budget.max_parallel
snapshot,
plan,
max_parallel=recommended_max_parallel(
record.objective.budget.max_parallel, len(available_write)
),
)
overlay = annotate_objective_tick(snapshot, plan, tick, available_write)
if args.format == "json":
print(render_scheduler_tick_json(tick))
payload = scheduler_tick_payload(tick)
payload.update(overlay)
print(json.dumps(payload, ensure_ascii=False, sort_keys=True, indent=2))
return
print(render_scheduler_tick_text(tick))
for note in overlay.get("peer_wave", {}).get("warnings", []):
print(f"Warning: {note}")
for binding in overlay.get("peer_wave", {}).get("executor_bindings", []):
print(
f"Harness: {binding['task_id']} -> {binding['executor']} "
f"({binding['source']})"
)


def cmd_objective_attention(args: argparse.Namespace) -> None:
Expand Down Expand Up @@ -3458,7 +3479,20 @@ def cmd_task_daemon(args: argparse.Namespace) -> None:
tasks = list_tasks(config)
assert_legacy_scheduler_allowed(config, (task.id for task in tasks))
queued = _daemon_select_runnable(config, tasks, limit=max(1, args.parallel))
if queued:
from .peer_wave import apply_harness_bindings, discover_available_write_providers
from .tasks import ScheduleWave

available_write = discover_available_write_providers()
bound, decision = apply_harness_bindings(
ScheduleWave(tasks=tuple(queued), deferred=()),
available_write,
)
for note in decision.warnings:
print(f"warning: {note}")
for item in decision.deferred:
print(f"defer {item.task.id}: {item.reason}")
if bound:
overrides = {item.task_id: item.executor for item in decision.bindings}
with ThreadPoolExecutor(
max_workers=max(1, args.parallel), thread_name_prefix="dyro-dispatch"
) as pool:
Expand All @@ -3469,8 +3503,9 @@ def cmd_task_daemon(args: argparse.Namespace) -> None:
task,
dry_run=args.dry_run,
legacy_scheduler=True,
executor_override=overrides.get(task.id),
): task
for task in queued
for task in bound
}
for future in as_completed(futures):
task = futures[future]
Expand Down
2 changes: 1 addition & 1 deletion src/dyro/continuation/contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
max_attempts_per_task=2,
max_failures=3,
max_no_progress_cycles=2,
max_parallel=1,
max_parallel=3,
deadline=None,
)
MAX_TITLE_LENGTH = 240
Expand Down
38 changes: 35 additions & 3 deletions src/dyro/continuation/supervision.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,19 @@ def build_supervised_wave(
raise DyroError("当前 Objective 不是 supervised 模式;拒绝使用受监督 apply")
snapshot = build_scheduler_snapshot(config, objective=record, clock=clock)
plan = build_continuation_plan(snapshot)
tick = build_scheduler_tick(snapshot, plan, max_parallel=record.objective.budget.max_parallel)
from ..peer_wave import (
discover_available_write_providers,
recommended_max_parallel,
)

tick = build_scheduler_tick(
snapshot,
plan,
max_parallel=recommended_max_parallel(
record.objective.budget.max_parallel,
len(discover_available_write_providers()),
),
)
actions = tuple(action for action in tick.wave if action.kind in _SUPPORTED_ACTIONS)
if len(actions) != len(tick.wave):
raise DyroError("当前 wave 含尚未获受监督执行支持的 Action;拒绝部分执行")
Expand Down Expand Up @@ -246,7 +258,19 @@ def _current_action(
raise DyroError("Objective 模式已变化;拒绝执行已确认 Action")
snapshot = build_scheduler_snapshot(config, objective=record, clock=clock)
plan = build_continuation_plan(snapshot)
tick = build_scheduler_tick(snapshot, plan, max_parallel=record.objective.budget.max_parallel)
from ..peer_wave import (
discover_available_write_providers,
recommended_max_parallel,
)

tick = build_scheduler_tick(
snapshot,
plan,
max_parallel=recommended_max_parallel(
record.objective.budget.max_parallel,
len(discover_available_write_providers()),
),
)
actual = next((action for action in tick.wave if action == expected), None)
if actual is None:
raise DyroError("确认后的 Action 已不再位于当前安全 wave;请重新运行 objective apply")
Expand Down Expand Up @@ -356,7 +380,15 @@ def _task_result_status(action: PlannedAction, result: object) -> tuple[ActionSt

def _dispatch(config: Config, action: PlannedAction, task: Task, *, expected_contract_sha256: str) -> object:
if action.kind is ActionKind.EXECUTE_TASK:
return run_task(config, task, expected_contract_sha256=expected_contract_sha256)
from ..peer_wave import bind_wave_executors, discover_available_write_providers

decision = bind_wave_executors((task,), discover_available_write_providers())
return run_task(
config,
task,
expected_contract_sha256=expected_contract_sha256,
executor_override=decision.executor_for(task.id),
)
if action.kind is ActionKind.REVIEW_TASK:
return review_task(config, task, expected_contract_sha256=expected_contract_sha256)
raise DyroError("受监督执行只支持 execute_task 与 review_task")
Expand Down
2 changes: 1 addition & 1 deletion src/dyro/integrations/assets/dyro-control-plane/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ When the request already supplies a workspace alias, skip global discovery and u
- Objective explanation: `dyro --workspace <alias> objective explain <id> --format json`
- Objective blockers or human attention: `dyro --workspace <alias> objective attention <id> --format json`
- Objective dependency graph: `dyro --workspace <alias> objective graph <id> --format json`
- Objective next-wave preview: `dyro --workspace <alias> objective tick <id> --format json`
- Objective next-wave preview: `dyro --workspace <alias> objective tick <id> --format json`. Treat `peer_wave.executor_bindings` as the intended peer executors for that wave, and `peer_wave.warnings` as missing `conflict_group` or harness-capacity notes. A wave member is an executor, not a live supervisor.
- Objective plan: `dyro --workspace <alias> objective plan <id> --format json`

Use only an existing Objective or Change Set ID returned by Dyro or supplied by the user. A non-zero exit, unavailable workspace, pending transaction, failed finding, missing field, or partial observation is unknown or blocked—not ready.
Expand Down
Loading
Loading