Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ jobs:
test ! -e "$smoke_root/wheel-venv/bin/dyro-bridge"
test ! -e "$smoke_root/wheel-venv/bin/dyro-mcp"
DYRO_LOCAL_AGENT_DISPATCH_HOME="$smoke_root/wheel-dispatch-home" "$smoke_root/wheel-venv/bin/dyro" dispatch doctor >"$smoke_root/dispatch-doctor.json"
"$smoke_root/wheel-venv/bin/python" "$GITHUB_WORKSPACE/tools/verify_bundle_stranger.py" "$smoke_root/wheel-venv/bin/dyro"
uv run python -m venv "$smoke_root/sdist-venv"
sdist_artifact="$(find /tmp/dyro-dist -maxdepth 1 -name 'dyro-*.tar.gz' -print -quit)"
"$smoke_root/sdist-venv/bin/pip" install "${sdist_artifact}"
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/pypi-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ jobs:
raise SystemExit(f"release tag {actual!r} must equal {expected!r}")
PY

- name: Refuse 1.0.0 without delivery-physics gates
- name: Refuse a physics-train release without 0.7.x gates
env:
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.release_tag }}
run: uv run python tools/verify_release_gates.py --release-tag "$RELEASE_TAG"
Expand Down Expand Up @@ -156,6 +156,7 @@ jobs:
test ! -e "$smoke_root/wheel-venv/bin/dyro-mcp"
DYRO_LOCAL_AGENT_DISPATCH_HOME="$smoke_root/wheel-dispatch-home" "$smoke_root/wheel-venv/bin/dyro" dispatch doctor >"$smoke_root/wheel-doctor.json"
uv run python -c "import json; json.load(open('$smoke_root/wheel-doctor.json'))"
"$smoke_root/wheel-venv/bin/python" "$GITHUB_WORKSPACE/tools/verify_bundle_stranger.py" "$smoke_root/wheel-venv/bin/dyro"
uv run python -m venv "$smoke_root/sdist-venv"
"$smoke_root/sdist-venv/bin/pip" install "$GITHUB_WORKSPACE"/dist/dyro-*.tar.gz
"$smoke_root/sdist-venv/bin/python" -c "import experiments.local_agent_dispatch"
Expand Down
89 changes: 89 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,95 @@

## Unreleased

## 0.7.2 - 2026-08-17

- `objective explain` and a ready `next` now lead with a three-line
switch-tool briefing: human matter plus one path-free read command.
A single live Objective makes `next` emit `tick` or `attention`
directly. `next.commands` stays empty. Empty attention stays unread,
not idle. This is not a cross-harness chat resume.
- Console home recommendations now match that follow-up: `tick` when
ready, `attention` when the user must act. Empty attention still
opens the workspace, not `task next`.
- Bare `dyro` / `dyro home` prints the same briefing above the tool
menu so switching harnesses does not start by picking a chat. When
that briefing exists, Enter defaults to "做下一步" and does not
launch an editor. `dyro start` still opens a tool, but prints the
briefing first.
- `objective tick` and `objective attention` text now open with the
same heading and matter, then a closer without another "下一步".
Machine SHA lines stay below. JSON envelopes are unchanged.
- Console workspace detail now projects already-captured lines, tasks, and
objectives from the same summary snapshot. Overview polling stays
count-only. Summary Proof and task integration stay `not_inspected`;
`PROOF_DECAYED` stays on the independent inspect.
- Console overview now rolls up `task_status_counts` from readable
workspaces only. Unreadable workspaces stay unknown and are not counted
as zero.
- Console workspace detail now lists already-captured Objective attention
in Chinese. Empty attention stays "摘要未列出关注项"; an unreadable
workspace stays unknown. Summary still strips `PROOF_DECAYED`.
- Console home now leads with a "现在需要你" list and a human why for
the next command. Workspace cards show the current matter instead of
freshness jargon. Empty tools and empty attention still mean unread,
not "nothing to do".
- Console `GET /api/v1/system` reads the cached update record only.
`tools` stays empty and `tool_inspection=not_inspected`. The shell
fetches it on start and manual refresh, not on the 5s overview poll.
A broken cache is unread and path-free. Empty tools means unprobed,
not "no tools".
- Console meta advertises `proofs`. The shell fetches
`GET /api/v1/workspaces/{alias}/proofs` only when that capability is present.
- Overview summary cards now carry `proof_inspection=not_inspected`. Isolated
inspection rejects an `inspected` summary so the two Proof entries cannot
collapse.
- Independent Proof inspect stays in the exec worker so a hung git is reaped
by the parent's process-group kill. Nested spawn is withdrawn: a successful
worker exit must not leave inspect descendants. Timeout reports unread, not
inspected.
- Console labels Proof kinds and statuses in Chinese. Overview cards no
longer treat unread summary as workspace Proof state. `live` is kind-specific
and is not merge clearance.
- `0.7.x` release gates ignore comment-only markers, refuse `0.8` / `0.9`
feature numbers, and keep a later `1.0.0` identity tag on the same stranger
contract. Wheel smoke now runs the stranger bundle check.
- Production `BudgetUsage` / `BudgetRequest` read `trusted_usage` from the
executor Card. The default is untrusted. Proof still does not feed
no-progress exhaustion.
- `proof list --line` includes `trigger_observation` from Objectives on that
line and stays mutually exclusive with `--task` / `--objective`. `--task`
still excludes triggers.
- Console inspection fails closed on Windows without starting a worker.
- `objective tick` and `objective plan` preview `decide_budget` for the
selected wave. Automatic Objectives pass `automatic=True`; supervised
apply stays `automatic=False`. Untrusted usage hard-stops only when
`workspace.max_provider_usage` is set. Preview never reserves.
- `run_task_bound_dispatch` now requires the Capability plane on write and
refuses a Card without `execute`. No Card remains the 0.6.9 second door.
- Console meta advertises `surfaces` (and keeps `capabilities` as an alias)
so HTTP feature flags are not Capability Cards.
- Agent Bridge S1 contracts live in source as `dyro.bridge`. The default
wheel still omits that package and does not grow `dyro-bridge` /
`dyro-mcp` scripts.
- Agent Bridge S2/S3 source adapters resolve workspaces, emit path-free
observations, and return non-executable Objective plans. Catalog marks
those IDs `implemented_testable`. Authoritative Git observations stay
unavailable. No transport entry point and no default-wheel package.
- Agent Bridge S4 source transport parses one bounded JSON request and
emits one redacted response. Public exposure stays empty: hello and
plans are `implemented_testable` only. No `dyro-bridge` script.
- Agent Bridge S5 source catalog promotes the seven Mandatory operations
to `public_available` only on Linux. macOS/Windows public exposure
stays empty. In-process zero-effect traps cover hello. Still no
console script, wheel package, or CI gate.
- Agent Bridge S6 adds a source-only Skill and `python -m dyro.bridge`
public process. The Skill is not an integration asset and is not
installable. Default wheel and `dyro-bridge` / `dyro-mcp` scripts stay
absent.
- Agent Bridge S7 / `dyro-mcp` stays out. Design status lines now match
the `0.6.3` removal: published artifacts remain CLI + Skill, not Bridge
or MCP.

## 0.7.1 - 2026-08-16

- Console opens an independent Proof inspect at
Expand Down
8 changes: 4 additions & 4 deletions docs/adr/0006-delivery-physics-and-capability-plane.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

1. Dyro 的产品身份锁定为 **本地优先的多仓交付物理引擎**,不是 agent、不是舰队、不是 skill 超市。
2. 抽出 **Proof Object** 作为已验证事实的统一投影。它不取代 `task.toml`、receipt、review 绑定或 Continuation journal。
3. 每个 Proof 带 **衰减函数**。substrate 变化后事实死亡;不确定不得写成通过。`decay(review_verdict)` 全量等于 `_valid_review_acceptance`;`decay(signoff)` 全量等于 `_valid_external_signoff`。`SchedulerSnapshot` 只把 merge 相关的 `live` Proof 投影进已有进展字段,不计入 trigger;journal 不把 proofs 当 PASS。生产 `BudgetUsage` 在 `0.7` 不因 Proof 新开 no-progress 耗尽。
3. 每个 Proof 带 **衰减函数**。substrate 变化后事实死亡;不确定不得写成通过。`decay(review_verdict)` 全量等于 `_valid_review_acceptance`;`decay(signoff)` 全量等于 `_valid_external_signoff`。`SchedulerSnapshot` 只把 merge 相关的 `live` Proof 投影进已有进展字段,不计入 trigger;journal 不把 proofs 当 PASS。生产 `BudgetUsage` 不因 Proof 新开 no-progress 耗尽。`provider_usage_trusted` 只来自 Capability Card,默认 `false`
4. 用 **Capability Card** 统一 agent / gate / reviewer / trigger / tool。`0.7.0` 解析 `[[capabilities]]` 并升级 `[adapters.*]`,缺省 `cannot_prove` 至少包含 `done` 与 `merge`。
5. 增加 **Host Compiler**:把定律与本机可用 Card 编译为宿主投影(`SKILL.md` 与可选拦截文件)。编译器只收缩权威,不扩大权威。
6. 所有 mutation 落入操作格 `observe | execute | review | sign | integrate | publish`。有效权威仍是策略 ∩ 合约 ∩ 租约 ∩ 任务权限 ∩ 图约束。
Expand All @@ -35,7 +35,7 @@
9. **`0.7` 衰减锁定为 A1**:对 merge / 下游释放的接受与拒绝,必须与 `0.6.0` 现有绑定检查同真值。Proof 只提供投影与 `PROOF_DECAYED` reason code,不是第二套门。`merge_task` / `check_dispatchable` 不读 Proof store。下游只投影 `_assert_dependency_integrated`;decayed review 不加严 ready set。任务仓 dirty:`0.6` 已拒绝,`0.7` 保持拒绝,不放松、不叠门。开发线 dirty / 错分支保持 `_prepare_merge` 现有错,不得标成 `PROOF_DECAYED`。不把 `git revert` 当成祖先断裂。
10. **可携带核验锁定为 B1**:`verify-bundle` 核验完整性,不核验身份,也不承诺与当前工作区 `proof verify` / `task merge` 同一套 `live` / `decayed`。输入是 Proof Bundle + 调用方提供的 git 对象。捆内不塞 git 对象库。缺 procedure、缺 substrate、缺 git 对象、或缺已声明的签名密钥 → `inconclusive`,不得写成 `live`。无 `--current-heads` 时不得报与 merge 相同的衰减结论。该能力在 `0.7.x` 发布,不另开 `1.0.0` 功能号。
11. **写路径两扇门**:有 Card 时,argv adapter、`run_task_bound_dispatch` 与 Peer Wave 写绑定必须同受 `execute` 门。无 Card 的 dispatch 就绪是 0.6.9 已存在的第二扇门(显式允许),不是已审计 Card。PATH / 发现不是 Card。不得同时声称「PATH 发现不能执行」与「dispatch 就绪即可写」。
12. **版本列车收口为 `0.7.x`**:交付物理功能全部在 `0.7.x` 发布。取消 `0.8.0` / `0.9.0` 功能列车。`1.0.0` 只是身份冻结,未显式要求不得打
12. **版本号停在 `0.7.x`,功能列车继续**:后续功能和发版继续往前,号写成 `0.7.2`、`0.7.3`……。不另开 `0.8.0` / `0.9.0` / `1.0.0` 作为功能号。`1.0.0` 只是以后的身份冻结,不是下一列功能车

## 否决项

Expand Down Expand Up @@ -63,8 +63,8 @@
## 后果

- 产品叙事从「启动 agent」转为「核验完成」。
- `0.7.0` 落地 Proof、Capability Card、Host Compiler 与 `verify-bundle`。`trusted_usage` 只解析、默认 `false`,不接入生产 `BudgetUsage`。Console summary 保持 `proof_inspection=not_inspected`,不探 Git / Proof;`dyro objective attention` 走完整快照,可报 `PROOF_DECAYED`。两套入口不得写成同一套 Proof 展示。
- 剩余功能(Console 独立 inspect、`trigger_observation`、陌生人核验与叙事锁)继续走 `0.7.x`,不另开 `0.8.0` / `0.9.0` / `1.0.0`。
- `0.7.0` 落地 Proof、Capability Card、Host Compiler 与 `verify-bundle`。`trusted_usage` 默认 `false`;生产 `BudgetUsage` / `BudgetRequest` 从 Card 读取该字段。`objective tick` 对 automatic Objective 做预算预览(`automatic=True`),受监督 apply 仍 `automatic=False`。未信任用量只在存在 `workspace.max_provider_usage` 时硬停。Proof 仍不接入 `no_progress`。Console summary 保持 `proof_inspection=not_inspected`,不探 Git / Proof;`dyro objective attention` 走完整快照,可报 `PROOF_DECAYED`。两套入口不得写成同一套 Proof 展示。
- Console 独立 inspect、`trigger_observation`、陌生人核验与叙事锁已在 `0.7.1` 落地。`0.7.2` 收口换工具 briefing 与 Console「现在需要你」。后续功能与产品面收口继续开发和上线,版本号保持 `0.7.x`。
- 可携带核验的对外承诺仍是:陌生人拿着 Proof Bundle 和自己提供的 git 对象,能得到与源机**相同的完整性结论**(字节仍在、钉死 SHA 可解析)。这不是身份证明,也不是「现在工作区还能 merge」。`schema_version = 1` 的合同在 `0.7.x` 锁住语义;冻结成 `1.0.0` 身份号须另做产品决定。
- 实施成本是新的投影层与兼容层,而不是第二套调度器。

Expand Down
6 changes: 5 additions & 1 deletion docs/adr/0007-agent-bridge-phase-0.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

## Status

Proposed
Proposed. Source contracts through S6 live under `src/dyro/bridge/`. This
`0.7.x` Core tree keeps the published surface bridge-free: `dyro.bridge` is
not in `packages =`, and `dyro-bridge` / `dyro-mcp` are not console scripts.
Decision 10's "ship in the Dyro Python distribution" clause is the later
extra, not the current wheel. S7 MCP/Plugin is not started.

## Context

Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,6 @@ Dyro 的交付拓扑与之**实质相近**:TaskGraph(`depends_on` / conflict

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

`0.7.0` 把已有证据物理学抽成可复验的 Proof,并把 argv adapter 升级为 Capability Card,再把定律编译为只收缩权威的宿主投影。衰减与现有 merge / 下游检查同真值;`proof verify` 看当前工作区,`verify-bundle` 只核完整性,两套结论不得混称。Console summary 与 `dyro objective attention` 不是同一套 Proof 展示。剩余交付物理功能(Console 独立 inspect、可携带核验门禁)继续在 `0.7.x` 发布,不另开 `0.8.0` / `0.9.0` / `1.0.0` 功能号。可携带核验是 Proof Bundle 加调用方提供的 git 对象,核验完整性而不是身份,也不承诺与当前 merge 同一套 `live`。这不另造 TaskGraph 或完成状态机;见 [`交付物理学`](designs/delivery-physics.md) 与 [`ADR-0006`](adr/0006-delivery-physics-and-capability-plane.md)。
`0.7.0` 把已有证据物理学抽成可复验的 Proof,并把 argv adapter 升级为 Capability Card,再把定律编译为只收缩权威的宿主投影。衰减与现有 merge / 下游检查同真值;`proof verify` 看当前工作区,`verify-bundle` 只核完整性,两套结论不得混称。Console summary 与 `dyro objective attention` 不是同一套 Proof 展示。Console 独立 inspect、`trigger_observation` 与可携带核验门禁已在 `0.7.1` 落地。`0.7.2` 把换工具后的开场白收成事项加一条只读下一步,不另开会话层。后续功能继续在 `0.7.x` 开发和上线,不另开 `0.8.0` / `0.9.0` / `1.0.0` 功能号。可携带核验是 Proof Bundle 加调用方提供的 git 对象,核验完整性而不是身份,也不承诺与当前 merge 同一套 `live`。这不另造 TaskGraph 或完成状态机;见 [`交付物理学`](designs/delivery-physics.md) 与 [`ADR-0006`](adr/0006-delivery-physics-and-capability-plane.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)。
20 changes: 12 additions & 8 deletions docs/designs/agent-bridge-operation-inventory.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Dyro Agent Bridge Operation Inventory

Status: Linux Ubuntu 24.04 Mandatory Core Surface promoted at S5
Status: `0.7.x` source catalog may mark the seven Mandatory IDs
`public_available` on Linux only. Published wheel/sdist do not include
`dyro.bridge` or `dyro-bridge`, so that promotion is not an installed
product surface.

Decision source: [ADR 0007](../adr/0007-agent-bridge-phase-0.md)

Expand Down Expand Up @@ -68,16 +71,17 @@ unavailable rather than being interpreted with incomplete config.
Declared status is not implementation approval. Each row must acquire a source
call graph and pass the acceptance matrix before it becomes public-available.

S5 promotes exactly the seven Mandatory Core Surface operations on Linux Ubuntu
24.04. The other five implemented services and all six declared services remain
unavailable through the installed transport. macOS 15 remains declared and
Windows unavailable, so neither host receives an implicit availability
override from this promotion.
S5 source catalogs may promote exactly the seven Mandatory Core Surface
operations on Linux. That is a source-tree availability bit, not an installed
`dyro-bridge` process. The other implemented services stay
`implemented_testable`. macOS and Windows keep an empty public surface.
The published `0.7.x` wheel does not ship this catalog.

### Mandatory Core Surface

Phase 0 cannot pass with an empty available catalog. The following non-empty
surface is mandatory in the source-tree, wheel, and sdist protocol corpus:
Phase 0 cannot later pass with an empty available catalog. The following
non-empty surface is the Mandatory Core set. In `0.7.x` it is a source
catalog on Linux only; wheel and sdist must not expose it:

- `bridge.hello`;
- `bridge.capabilities.compact`;
Expand Down
5 changes: 4 additions & 1 deletion docs/designs/agent-bridge-phase-0-acceptance.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Dyro Agent Bridge Phase 0 Acceptance Matrix

Status: Enforced Linux source/wheel/sdist release gate
Status: Source-tree contracts only in `0.7.x`. The published wheel/sdist
gate is the opposite of a Bridge promotion: `dyro.bridge` must stay absent,
and `dyro-bridge` / `dyro-mcp` must not exist. Linux artifact/public-process
gates are not enforced on this train.

Authority: [ADR 0007](../adr/0007-agent-bridge-phase-0.md)

Expand Down
7 changes: 6 additions & 1 deletion docs/designs/agent-bridge-protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ changing a field, copying a digest, adding `--yes`, or claiming an actor.

## 2. Process contract

The packaged console entry point is:
The long-term packaged console entry point is `dyro-bridge`. In this `0.7.x`
train that script is **not shipped**. Source-tree callers may use
`python -m dyro.bridge`; an installed `dyro` wheel must not provide
`dyro-bridge` or `dyro-mcp`.

The packaged name, when a later extra exists, remains:

```text
dyro-bridge
Expand Down
Loading