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
2 changes: 1 addition & 1 deletion docs/design/Architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ sequenceDiagram

```python
class IAgent(Protocol):
async def run(self, task: "str | Task", deps: Any | None = None) -> "RunResult": ...
async def __call__(self, task: "str | Message", deps: Any | None = None) -> "RunResult": ...

class IContext(Protocol):
def stm_add(self, message: "Message") -> None: ...
Expand Down
38 changes: 32 additions & 6 deletions docs/design/Interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,22 @@ dare_framework/<domain>/
### 1.1 上下文契约(context/types.py)

- `Message`
- `role: str`
- `content: str`
- framework 内部唯一 canonical message
- `id: str | None`
- `role: MessageRole`
- `kind: MessageKind`
- `text: str | None`
- `attachments: list[AttachmentRef]`
- `data: dict[str, Any] | None`
- `name: str | None`
- `metadata: dict[str, Any]`
- `mark: MessageMark`
- `AttachmentRef`
- `kind: AttachmentKind`(首版 `IMAGE`)
- `uri: str`
- `mime_type: str | None`
- `filename: str | None`
- `metadata: dict[str, Any]`
- `Budget`
- limits: `max_tokens/max_cost/max_time_seconds/max_tool_calls`
- usage: `used_tokens/used_cost/used_time_seconds/used_tool_calls`
Expand All @@ -49,6 +61,8 @@ dare_framework/<domain>/
### 1.2 计划与运行结果契约(plan/types.py)

- `Task`: `description/task_id/milestones/metadata/previous_session_summary`
- `input_message: Message | None`
- `description` 作为编排输入保留,不再视为真实消息载体
- `Milestone`: `milestone_id/description/user_input/success_criteria`
- `ProposedPlan` vs `ValidatedPlan`
- `Envelope`: `allowed_capability_ids/budget/done_predicate/risk_level`
Expand All @@ -71,7 +85,17 @@ dare_framework/<domain>/
- `TransportEnvelope`
- `id/reply_to/kind/payload/meta/stream_id/seq`
- `EnvelopeKind`
- `MESSAGE/ACTION/CONTROL`
- `MESSAGE/SELECT/ACTION/CONTROL`
- `EnvelopePayload`
- 公共字段:`id/metadata`
- `MessagePayload`
- `id/metadata/role(MessageRole)/message_kind(MessageKind)/text/attachments/data`
- `SelectPayload`
- `id/metadata/select_kind(SelectKind)/select_domain(SelectDomain)/prompt/options/selected`
- `ActionPayload`
- `id/metadata/resource_action/params`
- `ControlPayload`
- `id/metadata/control_id/params`

---

Expand All @@ -83,7 +107,7 @@ dare_framework/<domain>/
class IAgent(ABC):
async def __call__(
self,
message: str | Task,
message: str | Message,
deps: Any | None = None,
*,
transport: AgentChannel | None = None,
Expand All @@ -104,7 +128,7 @@ class IAgent(ABC):
class IAgentOrchestration(ABC):
async def execute(
self,
task: str | Task,
task: Message,
*,
transport: AgentChannel | None = None,
) -> RunResult: ...
Expand All @@ -113,7 +137,8 @@ class IAgentOrchestration(ABC):
### 2.3 关键说明

- 统一入口是 `__call__`,而非历史文档中的 `run(...)`。
- `Task` 与 `str` 并存:支持 simple/react/five-layer 统一调用面。
- `Message` 是首选直接输入;`Task` 仅用于编排。
- Public agent input is `Message` (or plain `str` normalized into `Message`); `Task.input_message` 保存 canonical 首轮用户消息,`Task.description` 仅保留给内部规划/里程碑描述。

---

Expand Down Expand Up @@ -158,6 +183,7 @@ class IContext(ABC):
def list_tools(self) -> list[CapabilityDescriptor]: ...
def assemble(self) -> AssembledContext: ...
def compress(self, **options: Any) -> None: ...

```

---
Expand Down
3 changes: 2 additions & 1 deletion docs/design/modules/agent/DareAgent_Detailed.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@

输入:

- `str | Task`
- `str | Message`
- Public input 先归一为 canonical `Message`;`Task.input_message` 保存内部会话首轮用户消息
- `Task.task_id` 缺失时在执行入口补齐

输出:
Expand Down
8 changes: 5 additions & 3 deletions docs/design/modules/agent/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@

## 4. 对外接口(Public Contract)

- 统一入口:`IAgent.__call__(task, transport=None)`
- 编排入口:`IAgentOrchestration.execute(task, transport)`
- 统一入口:`IAgent.__call__(message, transport=None)`,其中 public input 支持 `str | Message`
- 编排入口:`IAgentOrchestration.execute(message, transport)`,内部统一接收 canonical `Message`
- 结果契约:统一输出 `RunResult`(含 `output_text`),其中 `RunResult.output` 使用 envelope 结构:
- `content: str`
- `metadata: dict`
Expand All @@ -44,7 +44,9 @@

## 5. 核心字段(Core Fields)

- 统一任务输入:`Task`(`description/task_id/milestones/metadata`)
- 统一顶层输入:`str | Message`
- `Message`:首选直接用户输入
- `Task`:内部编排对象(`description/task_id/milestones/metadata/input_message`),不再作为 public agent input
- 统一运行输出:`RunResult`(`success/output/output_text/errors/metadata`)
- `output.content`:统一可展示文本
- `output_text`:与 `output.content` 对齐,供展示与兼容链路消费
Expand Down
3 changes: 2 additions & 1 deletion docs/design/modules/agent/ReactAgent_Detailed.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@

输入:

- `str | Task`
- `str | Message`
- `Message` 是首选直接输入;`Task` 仅作为编排对象

输出:

Expand Down
5 changes: 3 additions & 2 deletions docs/design/modules/agent/SimpleChatAgent_Detailed.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@

输入:

- `str | Task`
- `str` 在入口处转换为 `Task.description`
- `str | Message`
- `Message` 是首选直接输入;`str` 会升级为 canonical `Message`
- `Task` 仅用于编排,真实首轮用户消息来自 `Task.input_message`(若为空则退化为 `description`)

输出:

Expand Down
Loading
Loading