Skip to content

NeoCode 运行时与能力分层优化计划(修订版) #272

Description

@fennoai

更新时间:2026-04-14

本文是对 #268 的修订版,目标是解决前序评审指出的关键问题:

  • 停止规则无唯一判定与优先级
  • progress 判定易被伪进展欺骗
  • capability / token estimation 缺少一致性与误差治理
  • 阶段 1 过载、验收不可量化
  • 与现有 issue(Gateway / Skills / Todo / TUI)存在排期冲突

0. 关系声明与冲突处置

本计划作为 #268 的修订执行版本,原则上以本 issue 为后续拆分依据。

0.1 与现有 issue 的关系矩阵

  1. #243(runtime 职责重构):merge(并入本计划阶段 1A/1B,作为控制面收敛子任务)。
  2. #247(架构 2.0):merge(保留“分层方向”,但主链路阶段不要求 Gateway 必经)。
  3. #249(Gateway 研讨):defer(保留为远期架构议题,不阻塞当前主链路演进)。
  4. #250(Gateway 进程骨架):keep as experiment(保持实验属性,不作为本计划依赖)。
  5. #255~#260(Skills):keep + reschedule(纳入本计划中后段,明确依赖边界)。
  6. #261/#262(Todo):keep + advance(从原阶段 8 前置到阶段 3,作为 progress 证据输入)。
  7. #266(TUI 简化):merge(与统一执行入口阶段联动,不独立走分叉语义)。
  8. #268superseded-by-this-issue(保留历史记录,不再作为执行主单)。

0.2 顶层拍板(避免双轨)

  1. 当前主链路仍为 TUI -> Runtime -> Provider/ToolManager;Gateway 不是近期必经入口。
  2. Todo 不再后置,前置进入运行时判定链路。
  3. Skills 不再“未定义顺序”,明确安排在 Repository 分层之后。

1. 术语与判定规范(先于阶段实施)

1.1 统一 StopReason(互斥 + 优先级)

运行停止必须产出唯一 StopReason,优先级固定如下(从高到低):

  1. STOP_FATAL_ERROR
  2. STOP_BUDGET_HARD_TURN
  3. STOP_BUDGET_WALL_TIME
  4. STOP_BUDGET_TOOL_CALLS
  5. STOP_BUDGET_ESTIMATED_PROMPT
  6. STOP_BUDGET_OBSERVED_TOKENS
  7. STOP_NO_PROGRESS
  8. STOP_REPEAT_CYCLE
  9. STOP_COMPLETED
  10. STOP_USER_INTERRUPT

约束:

  1. 同一轮只能有一个 StopReason(唯一写入事件与 ledger)。
  2. 预算类与行为类冲突时,按优先级决议,不允许并列。
  3. 事件层与持久化层使用同一枚举,禁止字符串散落。

1.2 Progress 证据模型(Evidence)

progress 不再基于“看起来在动”,而是基于证据计分(可持久化):

  1. EVIDENCE_TASK_STATE_CHANGED:Todo/Task 状态发生合法迁移。
  2. EVIDENCE_WRITE_APPLIED:写工具成功且产生有效文件差异。
  3. EVIDENCE_VERIFY_PASSED:验证命令或验证工具通过。
  4. EVIDENCE_NEW_INFO_NON_DUP:工具结果产生新信息哈希。
  5. EVIDENCE_PHASE_ADVANCED:phase 合法推进。

规则:

  1. EVIDENCE_NEW_INFO_NON_DUP 不能单独抵消 no-progress(防噪声)。
  2. 每轮计算 ProgressScore,低于阈值则 streak +1。
  3. compact 成功仅重置 repeat-cycle,不直接记作业务进展。

1.3 事件协议(Runtime Event Schema)

新增并冻结最小事件集合:

  1. phase_changed
  2. budget_checked
  3. progress_evaluated
  4. compact_applied
  5. stop_reason_decided
  6. permission_requested
  7. permission_resolved
  8. ledger_reconciled

每个事件最小字段:run_id, turn, phase, timestamp, payload_version

2. 目标边界(修订版)

2.1 runtime(控制面)

负责:budget/phase/progress 判定、tool 回灌编排、permission 等待与恢复、事件发射。

不负责:规则解析、repo 检索、tokenizer 细节、Git 语义、审批策略判定。

2.2 provider(协议与计数能力)

负责:模型协议适配、能力基线解析、token 分段估算器、流式解析、usage 原始采集。

不负责:stop 决策、context 选择策略、progress 判定、repo-aware 检索。

关键修订:provider 输出“分段估算值”,runtime 汇总并执行预算判定。

2.3 config(静态配置)

负责:预算档位/profile、provider/model 选择、capability override。

不负责:运行中 streak、动态缓存、reconciled 账本。

2.4 session(持久化)

负责:transcript、run ledger、todo/task state、resume checkpoint。

2.5 context / instructions / repository / tools / tui

  1. instructions:规则发现与合并,输出 InstructionBundle
  2. repository:repo-aware 结构化输入,输出有 token 上限与来源字段。
  3. context:纯 composer,不做规则发现与 repo 检索。
  4. tools:统一可调用能力与参数校验(含 git/review/workspace checkpoint)。
  5. tui:展示与控制,不直接执行工作区操作。

3. 能力基线与估算治理

3.1 Capability 解析一致性协议

解析顺序:config override > catalog cache > builtin table > live discovery > conservative fallback

必须补齐:

  1. cache_ttlstale-while-revalidate
  2. invalidation 触发:model 切换、provider 版本变化、显式刷新。
  3. conflict_resolution:高优先级来源覆盖低优先级来源并记录来源链。
  4. CapabilitySourceCapabilityConfidence 统一枚举。

3.2 Token Estimation 误差治理

provider 输出:

  1. EstimatedPromptTokens
  2. EstimatedInjectedTokens
  3. EstimatedToolSchemaTokens
  4. EstimationConfidence

runtime 维护误差统计:

  1. error_ratio = |observed-estimated| / max(observed,1)
  2. provider+model 维护滑动窗口(如最近 N 轮)。
  3. 超阈处理:降级使用更保守预算系数,并发出 estimation_degraded 事件。

4. 运行模型(修订后)

  1. Capability Baseline(含一致性协议)
  2. Preflight Estimation(分段估算)
  3. Budget + Phase + Evidence Progress
  4. Usage Reconciliation(estimated/observed/reconciled)
  5. Resume Checkpoint(原子性定义)
  6. Context Health(compact + retrieval)
  7. Delivery Surface(git/review/workspace checkpoint)

5. 分阶段实施(重排)

阶段 1A:判定语义最小闭环(runtime + config)

目标:先把“怎么停、怎么判进展、怎么发事件”定死。

完成项:

  1. StopReason 枚举、优先级与互斥规则。
  2. Phase 最小机(plan/execute/verify)与并行 tool call 决议规则。
  3. Progress evidence 与 no-progress/repeat-cycle 计数器。
  4. runtime 事件协议最小集合。

不做:capability/estimation/ledger/checkpoint。

验收(量化):

  1. StopReason 决议一致性测试通过(冲突输入下 100% 唯一结果)。
  2. phase 迁移测试覆盖并行 tool call 场景。
  3. progress 判定误触发回归用例覆盖完成。

阶段 1B:预算与 compact 预算化(runtime + provider + catalog + config)

目标:在 1A 语义稳定后接入预算。

完成项:

  1. capability 一致性协议(TTL/失效/冲突仲裁)。
  2. provider 分段 token estimation 接口。
  3. budget stop 生效(estimated + observed 两条线)。
  4. auto_compact_budgetreactive_compact_budget

验收(量化):

  1. discovery 缺失时能力基线仍可回退且来源可追踪。
  2. estimation 与 observed 误差统计可落库并可查询。
  3. 预算耗尽触发的 stop reason 与事件一致。

阶段 2:Run Ledger 与 Usage 调和(runtime + session + provider)

目标:把预算从“临时判断”升级为“可恢复账本”。

完成项:

  1. session 持久化 estimated / observed / reconciled
  2. 每轮调和策略与异常保留策略。
  3. compact / budget 判定切换到 reconciled ledger。

验收:usage 缺失、usage 异常、usage 正常三类路径均稳定。

阶段 3:Todo 前置接入(session + runtime + context,关联 #261/#262

目标:让 progress 有任务语义证据,不再依赖文本猜测。

完成项:

  1. 结构化 todo/task state 持久化与恢复。
  2. context 暴露 todo 给模型。
  3. runtime 使用 todo 变化参与 progress 判定。

验收:todo 状态迁移与 no-progress 判定一致可测。

阶段 4:Resume Checkpoint(session + runtime)

目标:预算耗尽可断点续跑。

完成项:

  1. ResumeCheckpoint 最小字段集。
  2. checkpoint 写入原子性:transcript/tool_result/ledger/checkpoint 同事务提交。
  3. 恢复冲突策略:checkpoint 版本不匹配时降级为新 run 并保留告警。

验收:中断恢复后 phase、预算、todo、ledger 一致。

阶段 5:Instructions 分层(instructions + context + app)

目标:把规则解析从 context 抽离。

完成项:

  1. 规则发现与合并迁入 internal/instructions
  2. context 仅消费 InstructionBundle 进行 composer。
  3. AGENTS/CLAUDE 等规则加载边界与截断策略测试补齐。

阶段 6:Repository 能力层(repository + context + runtime)

目标:context health 从“只压缩”升级为“压缩+检索”。

完成项:

  1. RepositoryBundle 契约:summary, changed_files, entrypoints, retrieval_hits
  2. 每类输出 token budget 上限与排序规则。
  3. 每条检索结果带来源字段(path/line/hash)。

验收:context 注入在 token 预算内,且来源可追踪。

阶段 7:Skills 与 Tools/Security 边界收敛(关联 #255~#260

目标:把技能能力放入既有执行治理链路,而非旁路。

完成项:

  1. skills activation 与 context 注入链路。
  2. skills 调工具必须经过 ToolManager/PermissionEngine/Sandbox。
  3. 会话可观测字段与 runtime 事件对齐。

阶段 8:Git / Review / Workspace Checkpoint 工具化(tools + security + runtime)

目标:补齐交付面,避免 verify 依赖裸 bash。

完成项:

  1. tools/gittools/reviewtools/workspacecheckpoint
  2. 权限拒绝行为矩阵:retry / degrade / stop 明确。
  3. runtime 仅消费结果,不吸纳 Git 语义。

阶段 9:TUI 收口与文档归真(tui + docs)

目标:统一执行入口,清理语义分叉。

完成项:

  1. 收敛 & <command> 到工具链并提供替代提示。
  2. slash 命令保留控制面职责。
  3. 文档与真实实现对齐(含 gateway 的定位说明)。

6. 失败路径与降级策略(统一)

  1. capability discovery 失败:使用 cache/builtin/fallback,标记低置信度。
  2. usage 缺失:走 estimated + 低置信度,继续运行。
  3. 权限被拒:按工具策略执行 retry/degrade/stop,并发 permission_resolved
  4. compact 失败:不终止 run,递增 retry 计数并保留 stop 判定权。

7. 配置策略(防止过度暴露)

只对外暴露高阶配置:

  1. runtime_profile(safe/balanced/aggressive)
  2. budget 核心上限(turn/time/token/tool_calls)
  3. compact 双预算

细粒度阈值默认留在 runtime policy 常量或 profile 映射,不直接散落在用户配置。

8. 测试映射(阶段 -> 测试类型)

  1. 阶段 1A:判定优先级表驱动测试、phase 迁移测试、事件快照测试。
  2. 阶段 1B:capability 来源仲裁测试、估算误差测试、预算停止测试。
  3. 阶段 2:ledger 调和测试、缺失/异常 usage 回归。
  4. 阶段 3~4:todo 与 checkpoint 一致性测试、恢复回归。
  5. 阶段 5~9:分层边界测试、权限拒绝矩阵测试、TUI 迁移行为测试。

9. 全程禁止事项(保持不变)

  1. 不保留旧新运行模型双轨。
  2. 不让 runtime 吸纳规则解析/repo 检索/Git 语义/tokenizer 细节。
  3. 不让 config 保存动态运行态。
  4. 不做无结构化信号的语义猜测。
  5. 不拆空心模块。
  6. 不混淆 resume checkpointworkspace checkpoint

10. 预期结果

完成后,NeoCode 将具备:

  1. 可判定、可测试、可恢复的运行控制面。
  2. 有一致性协议的能力基线与可治理的 token 估算。
  3. 基于结构化证据的 progress 判定(含 todo 语义)。
  4. 清晰的规则层、仓库输入层、交付工具层边界。
  5. 与现有 issue 体系不冲突的统一实施路径。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions