feat(loop-engine): 配方执行器 —— project / prune / say,每一笔之前刷读数

三条硬规矩:每一笔之前刷读数(后一笔要数前一笔刚写下的行,不刷新就恒为 0);
值没变的写静默跳过(配方不是模型,原地打转不必被看见);
出错交人不重试不退回模型(配方抛错是包的 bug,退回模型就是让它去凑)。
主键算不出来的那一行先不写 —— 空主键写下去是一行永远对不上的垃圾。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
xcs
2026-08-29 03:41:34 +08:00
co-authored by Claude Opus 5
parent 58ff4f1b90
commit b0a3cc3a55
8 changed files with 375 additions and 1 deletions
@@ -9,6 +9,7 @@ import type { AgentAction, LoopEngineService, TurnOutcome } from '../../contract
import { ForbiddenTerminalError, TURN_ACTION_CAP } from '../../contract.ts';
import type {
AgentPort,
AnalyzeGateway,
CardGateway,
Clock,
ListenerRegistrar,
@@ -53,6 +54,7 @@ export type TurnRunnerDeps = {
readonly skills: SkillGateway;
readonly tasks: TaskContext;
readonly clock: Clock;
readonly analyze: AnalyzeGateway;
};
/**