makecindy / makecindy/cindy

Orca 支持按主题覆盖旧指令,并允许 Lead 安全打断后原子替换当前任务

Open
#2,604 1 comment 0 reactions 0 assignees View on GitHub
feature
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

**提交人**: liuheng
**客户端版本**: 0.1.44

---

## 使用场景

Lead 给 Orca Worker 处理与外部对象版本绑定的任务,例如某个 PR 的 exact head、构建 generation 或文档 candidate。对象连续更新时,Lead 会先后发送多条新指令。

目前尚未消费的旧消息会继续排队;已经开始执行的旧指令也无法由 Lead 安全替换。Worker 因此可能依次处理多个已过期版本,并把“版本不匹配”反复报告为 BLOCKED。

## 当前痛点

- 新指令不能自动撤销同主题的旧队列消息。
- Lead 需要手动查看并撤销每条 queued message,容易漏掉。
- 消息一旦开始消费,Lead 缺少“安全停止当前任务并换成最新版”的原子操作。
- 直接强杀 Worker 又可能打断文件写入、commit、push 等关键操作,破坏现场。
- Worker 与 Lead 可能分别认为旧任务仍在继续或已经被替换,状态不一致。

## 诉求

为 Orca 消息增加稳定主题和版本语义,并提供分级取消/打断能力:

1. `topic_key`:标识同一逻辑任务,例如某个 PR lifecycle。
2. `generation`:标识该主题当前版本,例如 exact head SHA。
3. `supersede`:发送新消息时,自动撤销同 `topic_key` 下尚未消费的旧版本,只保留最新版。
4. `interrupt_and_replace`:旧任务已经执行时,在安全边界停止当前协程,并原子投递合并后的最新指令。
5. `force_stop`:仅在 Worker 卡死或任务彻底作废时强制终止,需显式确认。

## 建议行为

示意接口:

```text
send_to_worker(
topic_key="pr-lifecycle",
generation="",
mode="queue | supersede | interrupt_replace"
)
```

- `queue`:普通增量消息,保持现有行为。
- `supersede`:撤销同主题未消费的旧消息,再排入最新版。
- `interrupt_replace`:向正在运行的旧 generation 发取消信号,在下一个安全检查点停止,并启动最新版。
- Worker 开始执行和重要外部写操作前,再确认自己的 generation 仍为当前版本;过期则停止。
- 外部 watcher 发现版本变化时,可按 topic 自动 supersede,而不需要 Lead 手工清队列。

## 安全边界

- 默认不在文件写入、commit、push、合并或其他不可安全中断的操作中间强杀。
- Worker 应在工具调用边界或显式 checkpoint 响应取消。
- 打断结果返回:停止步骤、是否有未提交修改、最后已知 commit/version、替代消息是否成功投递。
- 替换操作应是原子的:不能出现旧任务已停但新任务未送达,或新旧任务同时继续。
- 保留审计记录:谁在何时取消了哪个 topic/generation,由哪个版本替代。
- 若无法安全打断,应返回明确状态,让 Lead 选择等待安全点或显式 force stop。

## 期望收益

- 避免 Worker 依次消费过期版本并制造假 BLOCKED。
- 降低 Lead 手工查看、撤销和合并队列消息的成本。
- 减少无效模型调用、上下文噪音和 Token 消耗。
- 在保留 Worker 工作现场的同时,让 Lead 对已失效任务拥有可靠的纠偏能力。

## 建议范围

优先实现 `topic_key + generation + supersede`,再增加 checkpoint 式 `interrupt_and_replace`;`force_stop` 作为最后兜底。无需改变普通排队消息的默认行为。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.26200)
**界面语言**: zh-CN

Contributor guide

Open the contributing guide

Research direction

The issue names no files, tests, or concrete entry points. Start by locating Orca's Lead-to-Worker message queue and cancellation paths, then trace how queued and running tasks report state. Done should cover the prioritized topic_key/generation and supersede behavior first, with defined safety and audit outcomes for later interruption work.

Written by the indexing model from the issue text.

Assessment

Tech stack
ai-infra-agents, typescript
Domain
ai-infra-agents, backend, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.