From cc974bf2580f08b1becfc51c62684f9e4cf32ea1 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Wed, 10 Jun 2026 16:38:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20S1-S4=20=E5=BB=BA=E8=AE=AE=E9=A1=B9?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E2=80=94=20=E7=B1=BB=E5=9E=8B=E6=A0=87?= =?UTF-8?q?=E6=B3=A8=E7=B2=BE=E7=A1=AE=E5=8C=96+BaseTaskHandler=E6=A0=87?= =?UTF-8?q?=E6=B3=A8=E5=90=8E=E7=BB=ADPR+token=E9=A2=84=E7=AE=97=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/design/20-task-type-architecture.md | 4 +++- src/daemon/prompt_composer.py | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/design/20-task-type-architecture.md b/docs/design/20-task-type-architecture.md index dfd4688..70be351 100644 --- a/docs/design/20-task-type-architecture.md +++ b/docs/design/20-task-type-architecture.md @@ -351,7 +351,7 @@ for vp in TaskTypeRegistry.virtual_projects(): - 新建 `src/daemon/task_type_registry.py`:`TaskTypeHandler` Protocol + `TaskTypeRegistry` - 新建 `src/daemon/prompt_composer.py`:`PromptSection` Protocol + `PromptContext` + `PromptComposer` -- 新建 `src/daemon/base_task_handler.py`:`BaseTaskHandler` 基类(VerifyResult + post_complete 统一流程 + _rollback_current_agent) +- 新建 `src/daemon/base_task_handler.py`:`BaseTaskHandler` 基类(VerifyResult + post_complete 统一流程 + _rollback_current_agent)[将在 Step 2 PR 实现] - 编写单元测试验证:注册/查询、section 排序/去重/条件过滤、基类 post_complete 流程 - **风险**:极低,纯新增文件,不改动现有代码 @@ -689,6 +689,8 @@ src/daemon/ | L3 | 被动参考层 | Skills 索引注入,Agent 按需 read 全文 | OpenClaw 42 Skills + moziplus SkillRegistry | 按需 | | L4 | 检索层 | Agent 运行时主动检索 | wiki 知识库、NAS 文档、Web 搜索 | 按需 | +> **注**:表中 token 数为估算值。`prompt_composer.py` 中 `TOKEN_BUDGET_WARN=800` 是警告阈值(超出时打日志但不截断),与表中 ~1500 估算值不矛盾——800 对应单个 handler 的典型 L2 注入量,1500 对应最复杂场景(TaskHandler 全量 5 sections)的估算上限。 + **PromptComposer 是 L2 层的拼装机制**。 ## L1-L4 去重规则 diff --git a/src/daemon/prompt_composer.py b/src/daemon/prompt_composer.py index 1940f10..e3694d7 100644 --- a/src/daemon/prompt_composer.py +++ b/src/daemon/prompt_composer.py @@ -81,14 +81,14 @@ class PromptComposer: CHARS_PER_TOKEN = 3.5 # 估算比率 def __init__(self) -> None: - self._sections: List[Any] = [] # List[PromptSection] + self._sections: List[PromptSection] = [] - def add(self, section: Any) -> None: + def add(self, section: PromptSection) -> None: """添加一个 section(同名覆盖)""" self._sections = [s for s in self._sections if s.name != section.name] self._sections.append(section) - def add_many(self, sections: List[Any]) -> None: + def add_many(self, sections: List[PromptSection]) -> None: """批量添加""" for s in sections: self.add(s)