跳转至

项目:Flyto Agent

这是 Flyto Agent Engine 的开发仓库.我(Claude Code)是开发工具,不是产品本身.

强制确认协议 ⛔

IMPORTANT: 这是最高优先级规则,违反等于失信.

在执行以下操作前,必须输出确认请求并等待用户回复: - 启动 Agent 子进程 - Write/Edit 任何 .go 文件 - git commit/push

确认请求格式: 「⏸️ 等待确认:<要做什么的一句话描述>」

只有收到用户的明确肯定回复后才能执行. - ❌ 不算确认:"讨论吧","分析一下","看看","你觉得呢" - ✅ 算确认:"确认","开干","可以","同意","go","干吧"

违反此协议的后果:用户的信任不可恢复.

我的工作原则

  1. 反向思维:任何设计决策确认前,先从反面论证
  2. 升华思维:不是翻译,考虑跨行业和未来扩展
  3. 三层防御:模型交互点必须有指令层+参数层+兜底层
  4. 精妙/操蛋/升华注释:CLEVER / LEGACY / ELEVATED
  5. 原方案保留:改动后把原方案作为替代方案写入注释
  6. 零硬编码:模型 ID 用 ModelRegistry,路径用配置
  7. 测试即文档:每个功能有测试
  8. 零外部依赖:只用 Go 标准库
  9. 跨场景:引擎核心不假设任何特定场景
  10. 叠加而非替换:所有可插拔接口支持多实现共存.现实使用永远是交叉的
  11. 文档同步:每次代码改动必须同步更新所有受影响的文档.文档过期 = 技术债
  12. Claude 新写注释用中英双语:Claude 新增或修改 .go 注释 (godoc / 行内 // / 块 /* */) 必须同时含英文 + 中文两段, 先英文后中文, 空行分隔 (行内 struct 字段短注释合并为一行: 字段 类型 // EN. ZH).中文注释内部标点仍须半角 ASCII (见 memory feedback_punctuation).项目术语 / 类型名 / 包名 / FLYTO / ANTHROPIC_API_KEY 等保留原文不翻.存量不回溯 (pkg/flyto 中文注释保持原样, 本会话 core/pkg/evolve/doc.go 等英文注释保持原样; 下次再碰那些文件时顺手补齐).全项目 bulk 翻译方案放弃 (2026-04-18 评估: AST + LLM 翻译工程成本 + 残留瑕疵 vs 收益不成立); 只做 Claude 新写部分, 一次成稿即双语, 无二次翻译.

品牌规则

  • 项目名:Flyto Agent,AI 身份:Flyto
  • 代码/注释/文档中不出现 "Claude Code" 或 "Anthropic"
  • 保留不改的:ANTHROPIC_API_KEY,api.anthropic.com,模型 ID(claude-sonnet-4-6 等)
  • 配置目录:~/.flyto/,指令文件:FLYTO.md
  • 环境变量前缀:FLYTO_*

项目结构

  • core/ - Go 核心库(原 engine/), v0.3.0 于 2026-04-26 发版 (CHANGELOG v0.3.0 (2026-04-26) 段 — platform/common 业务 REST/SSE 通道激活 ADR-0002 + 消费层文档自动化三件套 L407 swag/protoc-gen-doc/CONSUMERS.md + counterfactual/reverse_think/shadowdb 三个子包 + 7 provider Temperature/TopP sampling 接通; ADR-0001 反事实工作流引擎级 enforcement 否决归档 + ADR-0002 REST业务/gRPC观测 bifurcation 立项). 上版 v0.2.0 于 2026-04-24 (安全链 core 侧全就绪, validator/circuitbreaker/reflector/staging 4 子包, evolve 9/9 矩阵, SQL 工具链 × 3). 22 个子包, v0.3 周期 (2026-04-23 → 2026-04-26) (2026-04-23 新增 pkg/validator/ 可插拔审批契约 + pkg/circuitbreaker/ 三态熔断器, 为消费层 L434 ML 验证器 / L435 熔断器提供 core 接口层; platform 层接外部 ML backend 和选 breaker 作用域即可端到端启用. 2026-04-24 新增 pkg/reflector/ umbrella 包, 不引入新接口, 只提供 4 个跨家族 adapter 兑现 "反射器体系" 产品抽象 -- Validator/Evaluator/evolve.Reflector 三同族可插拔, 规则/LLM/ML 后端可互换接入任一调用点. 同日新增 pkg/staging/ 决策包级 staging 表: 7 状态机 + 混合控制 Engine (staging 主动调 Validator 前两段 arc, approved→executed/failed 外部推) + 可插拔 DependencyGuard + InMemoryStore 参考实现, pull-only query API; 消费层 L436 Staging 表管理完成. 2026-04-25 新增 pkg/shadowdb/ session 级 shadow 表 (L437): 方案 C 列标记隔离 session_id VARCHAR(64) NOT NULL + filter, 规避 PG TEMP TABLE 在 pooled *sql.DB 下蒸发 + driver 分裂, PG/MySQL/SQLite 通吃; Opener interface + InMemoryOpener + EnforceSessionFilter quote-aware 三层防御中层 + pull-only Reap. 与 staging 边界: staging 决策级 pre-commit, shadowdb session 级推理中 scratchpad, 单向 shadow → staging → production, shadow 永不 merge)
  • platform/ - SaaS 平台服务.2026-04-18 确定分两层 (详见 memory project_architecture_decisions.md):
  • platform/common/ - 通用 platform (Go, module flyto-platform-common).飞驼内部共享 SaaS 基础设施: auth (OIDC/JWT) / tenant primitive / gRPC 观测通道 (SafetyChain + Health) + admin HTTP 观测面 + 业务 REST/SSE (ADR-0002, 2026-04-26) / sandbox executor.未来加: billing / audit / dashboard framework (rule of two).不对外卖, 给 industry platforms 消费.
    • cmd/common/ - 服务入口, 三 listener (gRPC :9090 观测; 可选 admin HTTP :8081 运维观测, --http-addr 空时不起; 可选业务 REST/SSE :8080 引擎消费, --rest-addr 空时不起). signal handler 三路协调统一关闭. ANTHROPIC_API_KEY 环境变量在 --rest-addr 启用时必需 (装配 anthropic provider + engine)
    • safetychain/ - 公共装配层 (2026-04-24 新增): Assemble() 一行装配 core Validator + CircuitBreaker + ValidatedTool decorator + 3 个 breaker 作用域工厂 (NoOp/DestructiveOnly/PerTool). 无默认显式 opt-in, Go 行业直接 import, C# 走 gRPC (待 C4). cmd/common 不调 Assemble, Tool 装饰是行业 platform 责任 (ADR-0002 § 2.3)
    • internal/api/grpc/ - gRPC 合约 (health.proto + safetychain.proto, ADR-0002 后仅观测面, 业务通道改走 REST). regen 需 protoc-gen-go + protoc-gen-go-grpc 在 $GOPATH/bin
    • internal/admin/ - admin HTTP 面 (/admin/health, /admin/version, /admin/tenant, 可选 /admin/safetychain/verdicts + /breakers 经 WithSafetyChain opt-in). 观测专用, 不是业务通道; dev 模式免鉴权, 生产套 auth.HTTPMiddleware. ADR-0002 § 2.2 论据: admin 已有观测面 REST handler, 不再加 grpc-gateway 镜像
    • internal/auth/ - OIDC discovery + JWT 验签 + HTTP middleware + gRPC unary interceptor. 业务 REST 与 admin HTTP 共用 auth.HTTPMiddleware (Verifier=nil 是 dev 模式语义跨两面一致)
    • internal/tenant/ - 多租户 primitive (不透明 ID + ctx 注入)
    • internal/server/ - 引擎消费层 REST/SSE (跑 pkg/engine, ADR-0002 后由 cmd/common --rest-addr 启用并入主进程, 与 admin HTTP 共用 OIDC verifier 不再两套). API 三件套: New(cfg) 构造无 engine + Attach(eng) 注入外部 engine + HandlePermission 暴露 SSE 桥接 permission.Handler 给 engine.Config.PermissionHandler 用. Serve(ctx, ln) 接收外部 listener 不接管 signal (主 API), ListenAndServe() 是向后兼容 wrapper
    • internal/sandbox/ - 云端 Executor backend (E2B Firecracker)
  • platform/industry/<name>/ - 行业 platforms (C#): logistics (最紧迫) / erp / sales / crm / finance / ads / decision.飞驼 C# 团队交付客户的完整 SaaS 产品
    • platform/industry/logistics/ - FlytoLogistics scaffolding 已就位 (ASP.NET Core net10.0 WebAPI + Grpc.Net.ClientFactory + 引用 common health.proto).HealthController 验证 REST -> gRPC -> common 往返, 业务由 C# 团队接手
  • tui/ - 终端 UI(独立 Go module, 有 cmd + internal, 不再是占位)
  • tools/ - 开发工具(capability-probe 等)
  • deploy/ - Phase 1 部署 (HK-133 lab.flytoex.net, 45.145.229.197): docker-compose.yml 拉 common + logistics + caddy 三 service. Caddyfile 把 hub.flytoex.net 按路径分流: /admin/* → common:8081 (admin HTTP), 其余 → logistics:8080 (业务 REST). common 两个端口 (9090 gRPC / 8081 admin HTTP) 都只 compose 内部. LE 证书自动续, 对外域名 hub.flytoex.net 在 CF 配 A 记录 (灰云)
  • .gitea/workflows/release.yml - push tag v* 触发, 构建并推 git.flytoex.net/yuanwei/flyto-agent-{common,logistics} 两个 image. Phase 2 再加 HK-133 自动部署 SSH step
  • core/FLYTO.md - 产品的宪法(Flyto Agent 读的)
  • CLAUDE.md - 这个文件(我读的)

关键记忆

  • 用户刚入职,赛马制,主管要求保密
  • core/TODO.md 文件内 65 项 (52 已完成 + 13 未完成, grep 精确核验 — grep -cE "^[[:space:]]*- \[x\]" core/TODO.md, 替代 2026-04-14 前的累计 ~828 口径, 详见 core/TODO.md "统计" 块). 分组 (2026-04-26, v0.3.0 已发版 / v0.4-dev 起步):
  • core 引擎内部 3 项: CAP-4 自动化 × 3 (L488/489/490, 低优工具效率). L569 反事实工作流缩水 6 commit 落地 + ADR-0001 归档完整版否决 (见下 "最后变更")
  • provider 扩展 1 项: 模型表自动更新 (L454 P2). L683 LLMCallOpts.Temperature cross-provider contract 2026-04-25 完成
  • platform 消费层 8 项: P1 × 2 (ML 验证 L434 / 熔断 L435; L436 Staging + L437 影子表 + L692 业务 REST 通道 + L407 文档自动化三件套 + L693 SessionStore + Postgres 平台化奠基 2026-04-24/25/26 完成) + P3 × 6 (AuditSink L438 / WMS L439 / L952c 教程 L408 / 微信 L571 / L694 cross-transport request-id 自 L692 / L695 SSE 带宽监控 自 L692) 最后变更: 2026-04-26 L693 SessionStore + Postgres 平台化奠基 (4 commit) — 3-agent 并行 review (调研 LangGraph/Vercel/Temporal/Express/Django 业界 prior art / 质疑 6 道击中 3 道含 permCh 物理不可移动 + YAGNI + dead-field-scanner debt / 设计 3 alternatives 选 typed Alt 2) reconcile 后 PM 三轮决策 (Postgres 肯定用 → 整个 platform psql → 拒绝迁移工具+sqlite 走 plain SQL+testcontainers → C3 staging Postgres 跳过待真消费者). commit 顺序: eec48fe C1 SessionStore 接口 (Create/Get/Delete 三方法不要 Touch/List 投机) + InMemoryStore drop-in 替换 server.sessions map + 4 handler 改造 + TOCTOU race 折叠 (RLock-then-Lock 两段→atomic Create) (319 行 sessionstore + 改 server.go 182 行); beaff60 C2 Postgres 后端 (INSERT ON CONFLICT DO NOTHING + RowsAffected==0 单语句原子不需事务) + internal/db/ 共享池 (中央 schema 权威 platformMigrations + Migrate 启动期 idempotent + Close lifecycle) + cmd/common --postgres-dsn flag + docker-compose pg service + healthcheck pg_isready + persistent volume + release.yml POSTGRES_PASSWORD secret + pgx/v5 (runtime) + testcontainers-go (test-only) + 5 真 pg 测试 (~510 行 + main.go 53 行 + docker-compose 48 行); 96e893a C3 ADR-0003 (387 行 8 节体例对齐 ADR-0001/0002, 三层 pin 物理事实 server.permCh + Session.pendingPermissions + engine.sessionState 后两层在 core 层平台不能解 + sticky routing phase 1 ip_hash + phase 2 X-Session-ID 升级路径 + cache miss 503 fallback + 5 替代方案保留 + 5 触发重新评估条件) + Caddyfile 单副本 vs 多副本部署区别注释; 本 commit C4 TODO + CHANGELOG + CLAUDE.md 同步. 真相: 多副本真阻塞不是 sessions map, 是三层进程内 pin (server.permCh + Session.pendingPermissions + engine.sessionState), 后两层在 core 引擎层平台层不能解, 必须 LB sticky routing; SessionStore 价值降级为"replica 重启不丢元数据 + 滚动部署 drain + Postgres audit". 业界 LangGraph/Vercel/Temporal SessionStore + PermissionBus pub/sub 双件套需要改 core engine API 是 RFC 级别 (ADR-0003 § 5.2 登记). 关键决策: drop Redis 档 (元数据 payload 太薄, 共享 staging pg 池更经济); drop staging Postgres 后端 (PM 接受 YAGNI 跳过, ADR-0003 § 5.5 登记触发条件 = staging 真接入消费者); engine.SnapshotStore 接线 cache miss 自动恢复历史留 follow-up; 不引正式 migration 工具 (1 张表 plain CREATE IF NOT EXISTS 启动自检足够). dev / 单副本零变化: cmd/common 不传 --postgres-dsn 时默认 InMemoryStore 与 v0.3.3 行为完全等价. PM 部署侧必做 (v0.4 release 前): Gitea secrets 配 POSTGRES_PASSWORD (跟 ANTHROPIC_API_KEY 同位). 测试: 6 InMemoryStore + 5 testcontainers Postgres + 2 db pool, 全模块 -race 全绿; baseline 220 不变 (scanner 只扫 core/ 不扫 platform). 上一变更 2026-04-26 v0.3.3 L407 follow-up 三件套 A+B+C (内部开发者文档站) — A README 文档地图 (commit fea0d27, 70 行 markdown 4 入口 7 读者分组 5 步入门) + B godoc.flytoex.net 子域 (pkgsite Go API HTML, 子域因 pkgsite href 绝对路径; deploy/Dockerfile.godoc 多阶段拷整 monorepo 源 + go mod download all + ENTRYPOINT pkgsite -list=false) + C docs.flytoex.net 子域 (mkdocs-material@9.5.31 整合站; deploy/Dockerfile.docs python:3.12-alpine + nginx:alpine 两阶段; mkdocs.yml docs_dir=/work + /config/mkdocs.yml sibling 绕开 mkdocs config 父目录约束; nav 12 分组串 README+CONSUMERS+CONTRIBUTING+FLYTO+ADR-0001/2+CHANGELOG+TODO+7 provider+architecture+writing-guide). DNS 加 2 条 A 记录 (godoc + docs → 45.145.229.197 DNS-only 灰云) 经 PM 给的 CF API token PUT /zones//dns_records 一次 201, 不走 PM web UI. release.yml build-push job 加 godoc + docs 两 step (跟 common + logistics 同 buildx 模式). 本地 docker build 两 image 实测通. cut v0.3.3 push tag 触发 4 image (common + logistics + godoc + docs) build-push + SSH HK-133 deploy + caddy restart 让 godoc.flytoex.net + docs.flytoex.net 立即生效. 上一变更 2026-04-26 v0.3.0/0.3.1/0.3.2 发版 — v0.3.0 周期 5 大变更 cut + v0.3.1 hotfix go.sum tidy (GOWORK=off Dockerfile build missing transitive hash) + v0.3.2 hotfix #2 release.yml deploy script export ANTHROPIC_API_KEY + Gitea API PUT secret 用 yuanwei token 自动配. 上一变更 2026-04-26 L407 消费层文档自动化三件套 (7 commit, 含 1 path bug 顺手修) — queued task 锁定 swag (注解式 OpenAPI 2.0) > huma (code-first 要重写 1263 行 server.go) 路线; SDK 自动生成 (Stainless 模式) 不做 rule of two 等 5+ 语言客户端. commit 顺序: 89c38d3 C0 顺手修部署 path bug /v1/* → /api/v1/* (Caddyfile handle /api/v1/* 不剥前缀致 server.go 注册 /v1/* 经 hub.flytoex.net 全 404, 上一会话 commit 5 没真实经 Caddy 实测, 触发 memory feedback_validate_network_path_before_deploy; server.go 8 mux + server_test.go ~25 处 + main.go 注释 + ADR-0002 + Caddyfile 注释全部对齐 /api/v1/*); 26bc732 C1 server.go 8 handler swag 注解 + 3 named response type (HealthResponse/StatusResponse/ListToolsResponse 替代 ad-hoc map) + swag.go seed (service-level @title/@host=hub.flytoex.net/@BasePath=/api/v1/@securityDefinitions BearerAuth) + docs/{swagger.json 22.5K 12 schema, swagger.yaml 12.3K, docs.go 23.1K Go embed} 首版; bce7670 C2 cmd/common --swagger flag + Swagger UI endpoint (httpSwagger v2 包内嵌, side-effect import docs, authMiddleware/rateLimit allow-list 加 /swagger/, swag dep v1.8.1 → v1.16.6 升级让 docs.go 用的 LeftDelim/RightDelim 字段编译); 22b6388 C3 core/Makefile docs-swag/grpc/consumers/all 4 target + tool install (swag@v1.16.6 + protoc-gen-doc@v1.5.1 pin) + 顶部 export PATH 含 GOPATH/bin + ROOT git rev-parse + grpc-api.md 首版 278 行 + .gitea/release.yml docs drift gate (apt-get protoc + make docs-install + docs-swag/grpc + git diff --exit-code 4 产物); a9b04ab C4 docs/CONSUMERS.md 顶层 wrapper 133 行 (端口拓扑/env/flag/OIDC auth 流程图含 allow-list/业务 REST 一次性+多轮会话 curl 例子/观测 gRPC SafetyChain 指引); bf5af1d C5 Caddyfile handle /swagger/ + docker-compose --swagger (HK-133 lab 默认开); 本 commit C6 TODO/CHANGELOG/CLAUDE.md 同步. CI drift gate 与 dead-field-ratchet 平级, 业界对照 Stripe/Anthropic/OpenAI 都对 OpenAPI spec 跑同等闸. smoke: ANTHROPIC_API_KEY=fake go run ./cmd/common --rest-addr=:18080 --swagger → /api/v1/health 200 + /swagger/index.html 200 + /swagger/doc.json 200 返回 commit 1 嵌入 spec; build + -race 全绿. 不做 (rule of two): SDK 自动生成 (Stainless 模式, 等 5+ 语言客户端); .proto 字段注释完善 (health.proto 部分字段 description 列空, 后续工作). 上一变更 2026-04-26 L692 platform/common 业务 REST/SSE 通道激活 (6 commit) — 3-agent review reconcile (调研 11 LLM API + grpc-gateway / 质疑 6 道含 raw bearer 与 OIDC 不兼容致命 + grpc-gateway 与 admin 重复致命 / 设计 4 备选), PM 拍板方案 A 修正版. commit 顺序: 01f08e7 C1 server.go 拆 buildHandler+Serve(ctx,ln)+ListenAndServe-wrapper 让出 signal handling; 8189d05 C2 Verifier 替代 BearerToken 走 auth.HTTPMiddleware (raw shared-secret + ConstantTimeCompare 删除, dev 模式 Verifier=nil 与 admin 一致, 4 raw bearer TestAuth_ 删除); 694bd07 C3 server.New 不再内嵌 anthropic provider 写死, Config 删 9 字段 (APIKey/BaseURL/BearerAuth/Model/SystemPrompt/AppendPrompt/Tools/MaxTurns/PermissionMode), 加 Attach(eng) + HandlePermission(ctx,req) 两 API; e1db327 C4 cmd/common 加 --rest-addr flag, 装配 anthropic provider + engine + s.Attach + 第三 listener wire (signal handler 三路协调 grpc.GracefulStop / httpSrv.Shutdown / restCancel, errCh capacity 升 3); c35e761 C5 docker-compose expose 8080 + command 加 --rest-addr=:8080 + ANTHROPIC_API_KEY 必填 environment, Caddyfile /api/v1/* → common:8080 (flush_interval -1 + response_header_timeout 0 SSE 透传不被代理缓冲不被 idle 切断, 客户端断线检测靠 server.go 15s 心跳), README topology + curl 例子同步; 本 commit C6 TODO + CHANGELOG + CLAUDE.md + ADR-0002 同步. 核心决策: REST/SSE 是唯一业务消费通道; gRPC 仅观测面 (SafetyChain / Health, 沿 9 天前方向不破坏); 不为 C# 单独加业务 RPC; 不加 grpc-gateway (admin/server.go 已有 verdicts/breakers REST handler, 镜像重复); Tool 级安全链装饰刻意不在 cmd/common 装 (一刀切 AlwaysApprove + DefaultExtractor 锁所有 Tool 同一组合或 fan out 到不匹配 wrap, common 保持纯 transport, verdictStore 接线就绪等行业驱动 logistics 等装饰并写数据). 业界对照: 11 LLM API (Anthropic/OpenAI/Bedrock/Cohere/Mistral/Replicate/Together/Fireworks/Ollama/LM Studio/LangServe) 全 REST/SSE 单通道, 业界共识与 PM 方向对齐; Vertex AI 是 gRPC-first 例外但 Google 内部全栈延伸不仿照. ADR-0002 立项 (core/docs/adr/0002-rest-business-grpc-observation.md 体例对齐 ADR-0001 八节结构): 与 9 天前 memory feedback_architecture_principle_over_rule_of_two.md 的 "gRPC 优 HTTP / C# 走 gRPC" 是 bifurcation 不是 U-turn (观测仍 gRPC 沿用, 业务用 REST 是补另一面). 4 tracked debt 登记: L693 业务 REST 多副本 SessionStore interface (P2, in-memory sessions 单实例假设); L694 gRPC + REST cross-transport request-id / trace 串通 (P3, OpenTelemetry); L695 SSE 1000 单/s 带宽监控 (P3, framing overhead 5-10x); L407 Swagger/OpenAPI 与 ADR-0002 直接关联 (已有 P2). 测试: server_test.go 既有 546 行用 httptest 直接打 handler 不动, 删 4 raw bearer TestAuth_, 加 1 ctx 测试 TestServer_Serve_RespectsCtx. -race 全绿. cmd/common --help 验证 --rest-addr flag 出现. baseline 不变 (commit 仅改 transport 层, 无新 dead 字段). 上一变更 2026-04-25 L569 反事实工作流引擎级 enforcement (缩水 6 commit) — 3-agent review reconcile 否决原方案 A 完整版 (引擎级 8 模块 1500-2500 行), 走 Option 2-Plus 缩水 4 件套 + ADR-0001 归档否决理由. commit 顺序: 248253e C1 core/pkg/counterfactual/ Deliverable schema 五步反向思维标准化 (4 核心字段 hidden_assumptions/failure_scenarios/verdict/verdict_reason 对齐 SKILL.md JSON + 4 元数据 ToolName/Step/DecisionID/OccurredAt, MetadataKey 跨包落点常量); 0385efd C2 core/pkg/skills/reverse_think/ MiniMax Anthropic 兼容端点 Go 化 client (替代 ~/.claude/skills/reverse-think/SKILL.md 软性 markdown 在生产 Agent 不可调的 gap, 不读 env 调用方显式注入 APIKey, max_tokens=8000 thinking+text 共享池, 不 strip code-fence LLM 遵守度 bug 应暴露非兜底); c4b755f C3 tools.Metadata.RequiresReverseThinking opt-in flag (与 RequiresCheckpoint 同源 rule of two, 默认 false, 适用非平凡设计空间不适用纯机械 CRUD); 4618b79 C4 Deliverable.AsReplayEventevolve.LogReplayer 跨包 adapter (counterfactual 单向 import evolve, evolve schema-agnostic 不感知, Payload Clone 防 Reflector 回溯污染 staging.Record, Feedback nil 对齐 evolve.ReplayEvent godoc, MetaKey 4 常量跨包字面匹配; 关上 PM 担忧 "各行业自写 skill 进化结果停在哪里" 循环 — 各行业触发策略可不同 Deliverable schema + AsReplayEvent + evolve 学习池在 core 共享统一); 40aae31 C5 platform/common/safetychain/ReverseThinkingHook reference (走 hooks.PreToolUse 不 wrap Tool 与 Assemble 平行, fail-open advisory LLM 错不阻断业务 ExitCode=0+Error 挂 HookResult.Error 供观测层暴露降级状态, JSONOutput[counterfactual.MetadataKey] 携带 Deliverable 下游不必二次 LLM 调用, DefaultPromptBuilder 合格下限行业按域覆盖); 本 commit C6 TODO+CHANGELOG+ADR-0001+CLAUDE.md 同步. 方案 A 完整版否决理由: 与 hooks/permission/validator/staging/RequiresCheckpoint 5 套现有 gate 概念重叠 + 业界 8 框架 (Claude Agent SDK / OpenAI Assistants / Vertex ADK / LangGraph / AutoGen / CrewAI / Semantic Kernel / Cline) 全部走 prompt-level + tool desc + 开发者自填策略零先例 engine-level 强制 reasoning gate + 范畴错位 (dev review 协议错配 runtime gate) + 吞吐数学不成立 (logistics 1000 单/s × 即使 10% 触发 → MiniMax token plan call 数被打爆) + 9 天前登记 anchor 错估漏掉 RequiresCheckpoint 已实装. 总量: ~2,131 行 (含双语 godoc + 测试), 35 测试 -race 全绿 (counterfactual 13 + reverse_think 12 + tools 1 + safetychain 9). core + platform/common 双 module build 干净. 3-agent 并行 review reconcile 后 PM 拍板 Option 2-Plus (Option 1 不做 + Option 2 缩水之间加进化沉淀件解决 PM 担忧). 上一变更 2026-04-25 L683 Temperature + TopP cross-provider passthroughflyto.Request.{Temperature,TopP} *float64 + flyto.Float() helper, 7 provider (anthropic/openai/minimax/gemini/ollama/lmstudio/openrouter) 全部接通 sampling 旋钮 (此前 7 provider 的 Config 与 Stream 一律不传 — day-1 产品功能缺失而非 wire 问题). 纯 passthrough + 极小特例: 越界一律不在 flyto 层 clamp 由上游 4xx 自然冒泡 (业界共识 — Vercel AI SDK/LangChain/instructor/LlamaIndex 全 passthrough; 仅 litellm 尝试 drop_params 且 bug 频发 issues #8192/16090/5884), 仅 1 个 in-Request 已知冲突预拦 (anthropic + NeedsThinking + Temperature != 1.0 / TopP < 0.95 → silent override 1.0 + parameter_overridden WarningEvent). 加 OpenAI o-prefix 检测 (server 4xx 已清晰, model-prefix 列表长期维护 burden 不值, advisor 反向论证). 0 是合法 deterministic 值, *float64 + omitempty 干净分离 nil/0. evolve 串通: LLMCallOpts.TopP + WithTopP + buildMeta[top_p]; FlytoLLMClient adapter zero=未设 → nil, 非零 → flyto.Float(v). 3-commit 节奏 (acae658 C1 wire + b107180 C2 evolve + 本 commit C3 docs), 23 tests 全绿. baseline 220→219 (LLMCallOpts.Temperature 实际 drain). ADR rule of two: TopK/Seed/penalty 走 follow-up 等真消费者驱动. 3-agent 并行 review (调研 7 provider API + 5+ OSS prior art / 质疑扩 contract 必要性 4 道硬问题 / 设计 4 方案 + 推荐 + 升华 + tracked debt 预测) reconcile 后开干. 上一变更 2026-04-25 L437 影子表 — pkg/shadowdb/ 子包 3-commit 落地 (骨架 2c84209 + InMemoryOpener e140952 + EnforceSessionFilter + 文档同步). 方案 C 列标记隔离 (session_id VARCHAR(64) NOT NULL + filter), 规避 PG TEMP TABLE 在 pooled *sql.DB 下蒸发 + driver 分裂, PG/MySQL/SQLite 通吃. 3 agent 并行 review (调研 Dolt/Replit/Neon 证据链, 质疑 scope creep/cross-driver/AI 写 DB 红线, 设计 3 方案 + 推荐 C) reconcile 后开干. 与 staging 边界清晰: staging 决策级 pre-commit (1 decision = 1 Record), shadowdb session 级推理中 scratchpad, 单向 shadow → staging → production, shadow 永不 merge. 24 tests 含 -race 全绿, CHANGELOG Unreleased (v0.3-dev) 首条, data-safety.md:635 PG TEMP 伪 SQL 回销. 上一变更 2026-04-24 v0.2.0 发版 — CHANGELOG Unreleased (v0.2-dev)v0.2.0 (2026-04-24) 结构化重组对齐 v0.1.0 段格式, 新起 Unreleased (v0.3-dev) 空段. 覆盖 evolve 9/9 + SQL × 3 + validator/circuitbreaker/reflector/staging 4 新子包 + safety chain C1-C4 platform/common 装配+观测+gRPC. Baseline 212→216 (+4 合法 tracked debt). 上一变更 2026-04-23 — 模块 23 SQL 工具链 3 件套完成 (commit 79670c7 + bf31278 + a935604). SQL 只读校验器 (纯字符串 quote-aware 解析, 0 DB 依赖) + SQL CAS 乐观锁 (StagingDB newtype DI + maxRetries=0 fail-fast 默认 + version 非 int 运行时 reject + modernc.org/sqlite test-only dep 落地, core 第一条非图像处理第三方依赖) + SQL Dry-run 三路 (方案 E before+after SELECT + LLM 给 preview_predicate + 100 行 truncate 显式提示 + DryRunResult 3 字段首个 write point 保 pull API 归档不变). TODO.md "消费层不属于引擎层" 分类翻盘: 3 条挪模块 23, 理由 schema-agnostic via DI 所有客户复用 (memory project_db_ai_relationship.md 3 步 "Agent→staging→ML 审批→WMS API 写生产" 流程的 staging 一跳). 三 agent 并行 review (调研 / 质疑 / 设计) 后 reconcile 决定. 上一变更 2026-04-17 — L952a godoc 自动化完成. core/Makefile 三目标 (docs-lint/docs-serve/docs-install) 自举执行 staticcheck@v0.7.0 + pkgsite, 不污染 go.mod. 顺手清债: 141 个 ST1000 (文件头描述注释位置 Go 惯例对齐) + 4 个 ST1020 (method 注释名笔误) 全零, 2 个新 doc.go (inbox/providers/shared).
  • CONTRIBUTING.md 有详细的 8 条宪法
  • 每次改完要更新 TODO.md 打勾