Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
8f22f7a
fix(agent): unify live model retry budget
bobleer Aug 11, 2026
e0576c1
test(cli): cover unified stream retry budget
bobleer Aug 11, 2026
002c0f5
docs(agents): add upgrade compatibility guardrails
bobleer Aug 11, 2026
3c75a57
fix(peer): refuse controller-owned commands on the peer host
bobleer Aug 11, 2026
fb16e44
fix(peer): restore session history after a peer surface switch
bobleer Aug 11, 2026
201ad29
fix(cli): reject zombie dispatch leaders
bobleer Aug 11, 2026
3911dc7
Merge pull request #2211 from bobleer/bob/unify-live-agent-error-retries
bobleer Aug 11, 2026
9f8b560
fix(control-hub): make browser.wait actually wait
bobleer Aug 11, 2026
91f80e2
fix(appearance): drop undefined radiusBase/spacing4 from prompt snaps…
Aug 11, 2026
960d2a6
feat(tools): add DeepReview tool - background CodeReview dispatch fro…
Aug 11, 2026
f8c5402
fix(agents): give every ControlHub mode the Cron tool
bobleer Aug 11, 2026
3d8ee4b
perf(build): narrow SDK dependencies and external-source test targets
limityan Aug 11, 2026
23571fd
fix(cron): tell the agent scheduling is a handoff
bobleer Aug 11, 2026
a51753d
feat: Session与Worktree双向联动(create/delete/rename)
Aug 11, 2026
529763b
Merge remote-tracking branch 'upstream/main' (20260811-03: cron hand…
Aug 11, 2026
f9cb5e6
fix: 补 SessionControlInput.worktree 测试构造点(base_input 漏 worktree: None…
Aug 11, 2026
7345619
perf(build): prune dead dependencies and consolidate contract tests
limityan Aug 11, 2026
2d25c15
Merge remote-tracking branch 'upstream/main' (20260811-04: prune dea…
Aug 11, 2026
9d3f12f
chore: 固化本地 CI 全量复刻脚本 local-replica.ps1(本地预演对齐远程 CI)
Aug 11, 2026
e00f4d0
fix(clippy): 工具链升级 1.97.1 硬 error 全量修复
Aug 11, 2026
c9bd981
fix(deps): 升级 ratatui 0.30 修复 Cargo Deny RUSTSEC-2026-0253(lru 0.12.5…
Aug 11, 2026
e60d21b
fix: Windows 本地测试欠账修复搬移 taiji
Aug 11, 2026
763680a
fix(computer-use): restore text-only observation and unblock the Ente…
bobleer Aug 11, 2026
7fee50a
fix(computer-use): fill new OpenAppResult fields on Windows and Linux
bobleer Aug 11, 2026
60cd458
test(computer-use): compile-check AppleScript templates with escaped …
bobleer Aug 11, 2026
fcde2fc
docs(computer-use): tell the subagent an empty AX tree is an answer
bobleer Aug 11, 2026
6f2bc2b
fix(computer-use): let describe_screen see deep enough to act on Elec…
bobleer Aug 11, 2026
ffe2aab
fix(computer-use): clip the AX tree on a char boundary, not a raw byt…
bobleer Aug 11, 2026
e207d62
Merge remote-tracking branch 'upstream/main' (20260811-05: computer-…
Aug 11, 2026
56cfb34
fix: CLI TUI 测试适配 ratatui 0.30
Aug 11, 2026
2aa7bff
fix(computer-use): bound AX payloads, report true image dimensions, c…
bobleer Aug 11, 2026
f4eb603
feat: 群聊功能实现(Wave 1-7 契约/存储/工具/路由/API/前端 + 修复轮 + 审查闭环)
Aug 11, 2026
cb92cd5
fix: CI 治理门禁修复(i18n key + appearance 注册 + CJK 清理)
Aug 11, 2026
5610fea
chore: 全仓 rustfmt 格式化轮(历史 688 文件清理)
Aug 11, 2026
ad25af5
feat: 遗留三项任务 A/B — 群聊完整 ChatInput 复用 + workspace_path 集中持有
Aug 11, 2026
b7be1d7
fix: 群聊 P0x3 大修复轮(command 薄封装 + 回执闭环 + MainNav 接线 + 错误码贯通)
Aug 11, 2026
70241a9
fix: worktree 会话接入左侧工作区列表(AB 双修)
Aug 11, 2026
05ec262
merge: 遗留三项 A/B — 群聊完整 ChatInput 复用 + workspace_path 集中持有(ad25af59f)
Aug 12, 2026
821c74a
merge: 群聊 P0x3 大修复轮 — command 薄封装 + 回执闭环 + MainNav 接线 + 错误码贯通(b7be1d7f0)
Aug 12, 2026
a358668
Merge remote-tracking branch 'origin/main' into task/wt-bugfix
Aug 12, 2026
8094cc0
fix: 主题 color-audit 合约修复(GroupChatPane 未注册 danger-500 token + NavPane…
Aug 12, 2026
c4ddc28
Merge remote-tracking branch 'upstream/main' (20260812-01: computer-…
Aug 12, 2026
46332e0
fix: 群聊 12 命令声明 remote workspace policy(CI 修复)
Aug 12, 2026
a4e06ca
perf(build)!: narrow Core and ACP feature assembly
limityan Aug 11, 2026
16709d8
Merge remote-tracking branch 'upstream/main' (20260812-02: perf(buil…
Aug 12, 2026
9510fb9
fix: 统一修复轮 A+B(appearance 注册补齐 3 项 + SettingsScene 测试时序鲁棒性)
Aug 12, 2026
c352763
fix(core): gate RBAC integration tests behind agent-runtime feature
Aug 12, 2026
aa98261
style(core/desktop): rustfmt group-chat and remote-policy files
Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 19 additions & 0 deletions AGENTS-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,25 @@ BitFun 不是只在本地运行的桌面应用:工作区、执行这一轮的

改动说明中要写清楚在哪些远程场景下验证过。只跑本地测试不能作为远程行为的证据。

### 升级兼容性

用户是原地升级的,而上述远程场景经常让两个不同版本的 BitFun 连在同一条链路上。
任何改动都必须保证已有安装在升级后无需手工修复即可继续工作。

- **落盘结构会被新旧两侧代码同时读取。** 配置、设置、会话、连接配置、worktree 和
dispatch 记录:新增字段要带默认值,反序列化要保持容错,绝不重新定义或收窄已经落盘
字段的语义。旧数据给不出的字段,不能变成必填。
- **不要用删除或重置用户数据的方式来“恢复”解析不了的内容。** 应保留记录、降级功能并
给出明确状态。凭证缺失、配置读不出、超时或主机离线,都不构成丢弃会话、工作区或连接
的理由;销毁性删除只能是用户的显式操作。
- **跨版本边界要协商,不能假设。** Peer HostInvoke、dispatch 协议、relay 与 mobile web、
IM Bot,对面都是你控制不了的构建版本。要先声明 capability 再使用——包版本相同不等于
行为相同——并且要让旧版本一侧留在可用路径上,而不是直接判失败。
- **改名就是一次迁移。** 在所有受支持的对端都不可能再发送旧名称、旧 id 或旧结构之前,
必须继续兼容读取;被改名对象所引用的数据(vault 条目、工作区指针)要一并迁移。
- **用测试证明。** 要覆盖旧数据反序列化和旧载荷往返,而不只是新结构。只验证当前代码
自己写出的数据,不算升级兼容性覆盖。

### Agent loop 行为

- 不要把硬编码限制或模式判断作为处理 agent loop 循环问题的第一反应,例如仅按字符串或次数阻止重复工具调用。
Expand Down
28 changes: 28 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,34 @@ Per-scenario obligations:
State which remote scenarios a change was exercised in. Local-only tests are not
evidence of remote behavior.

### Upgrade compatibility

Users upgrade in place, and the remote scenarios above routinely put two
different BitFun versions on the same connection. Every change must keep
existing installs working without manual repair.

- **Persisted shapes are read by older and newer code.** Config, settings,
sessions, connection profiles, worktree and dispatch records: add fields with
defaults, keep deserialization tolerant, and never repurpose or narrow the
meaning of a field that is already on disk. A field old data cannot supply
must not become required.
- **Never delete or reset user data to recover from something you cannot
parse.** Keep the record, degrade the feature, and surface a clear state.
Missing credentials, an unreadable profile, a timeout, or an offline host are
not reasons to drop a session, workspace, or connection. Destructive removal
stays an explicit user action.
- **Cross-version boundaries negotiate; they do not assume.** Peer HostInvoke,
the dispatch protocol, relay and mobile web, and IM bots all talk to a build
you do not control. Advertise a capability and check it before using it —
package version equality is not evidence of behavior — and keep the older
side on a working path instead of failing it.
- **A rename is a migration.** Keep reading the old name, id, or record shape
until no supported peer can still send it, and migrate referenced data
(vault entries, workspace pointers) together with the thing being renamed.
- **Prove it with tests.** Cover legacy deserialization and an old-payload
round trip, not just the new shape. A test that only exercises data written
by the current code is not upgrade coverage.

### Agent loop behavior

- Do not add hard-coded limits or pattern checks to the agent loop as a first response to looping behavior, such as blocking repeated tool calls by string or count alone.
Expand Down
Loading