跳转至

Flyto Agent

领域无关的智能体引擎 - 核心库 + 平台服务 + 终端 UI.

文档地图

本仓库 27+ 个 markdown 文档分布在多目录. 下表按目标读者 + 入口形态分组, 内部开发者从此入口查全套. v0.3.3+ 起 always-on 在 hub.flytoex.net.

在线入口 (always-on)

入口 URL 内容 来源
业务 REST API https://hub.flytoex.net/swagger/ 8 endpoint + 12 schema 的 Swagger UI L407 swag 注解 (v0.3.0+)
Go API godoc https://godoc.flytoex.net/ core/ 22 子包 + platform/common exported type 的 pkgsite (子域名因 pkgsite href 绝对路径) v0.3.3+
整合文档站 https://docs.flytoex.net/ mkdocs-material 串 README/CONSUMERS/ADR/CONTRIBUTING/CHANGELOG/providers/教程一站 v0.3.3+
仓库源浏览 https://git.flytoex.net/yuanwei/Flyto-Agent Gitea 直接看 markdown 源, 任何 .md 都通 永久

按目标读者分组的文档清单

Agent / Claude (我自己日常工作)

  • CLAUDE.md — 项目宪法 + 关键记忆 + 最后变更, 5 分钟懂当前状态
  • core/TODO.md — 65 项待办 + 已完成 + 统计 (grep 实查口径)
  • CHANGELOG.md — 版本变更, 8 节结构 (核心新增 / platform 层 / 设计原则 / 已知限制 / 发布事实)
  • ~/.claude/projects/<slug>/memory/MEMORY.md — auto memory 索引 (project-scoped)

消费层开发者 (C# logistics + Web 前端 + 集成方 Agent)

  • docs/CONSUMERS.md一站式入口 端口拓扑 / 必填 env / cmd/common 10 flag / OIDC auth 流程 / curl 例子
  • https://hub.flytoex.net/swagger/ — 业务 REST 8 endpoint 交互式 (L407)
  • platform/common/docs/grpc-api.md — 观测 gRPC HealthService + SafetyChainService 字段表 (protoc-gen-doc 产)

core 引擎贡献者 (Go 端开发)

Provider 贡献者

  • docs/providers/README.md + 7 个 provider 详细文档 (anthropic / openai / minimax / gemini / ollama / lmstudio / openrouter)

部署 / SRE

TUI 用户

  • tui/README.md — 终端 UI dogfood CLI (Flyto SDK 消费者样例)

战略 / 专利 / 业务设计 (PM 视角)

第一次进 repo 推荐打开顺序 (5 分钟入门)

  1. 本 README.md (你正在看的) — 项目结构 + 文档地图
  2. CLAUDE.md — 5 分钟懂当前进度 / 优先级 / 最后变更
  3. docs/CONSUMERS.md — 业务消费视角 (端口 / env / curl 例子)
  4. core/CONTRIBUTING.md — 8 条宪法 (Go 开发第一课)
  5. CHANGELOG.md "## v0.3.0 (2026-04-26)" 段 — 最近周期做了什么

项目结构

├── core/                                  Go 核心库(module: flyto-agent)
│   │
│   ├── pkg/                               公共包(消费者可 import)
│   │   │
│   │   │  ── 公共契约 ──
│   │   ├── flyto/                         核心接口定义
│   │   │   ├── provider.go               ModelProvider 接口 / Request / ModelInfo
│   │   │   ├── events.go                 Event 接口 / TextDelta / ToolUse / Usage 等
│   │   │   ├── message.go               Message / Block / Role / ProviderMetadata
│   │   │   ├── engine.go                Engine 接口 / RunOption
│   │   │   ├── tool.go                  Tool 结构体
│   │   │   ├── observer.go              EventObserver / MetricObserver / TraceObserver
│   │   │   └── errors.go                ErrorCode / EngineError
│   │   │
│   │   │  ── 引擎运行时 ──
│   │   ├── engine/                        引擎核心
│   │   │   ├── engine.go                 New() / Run() / Close() / 主循环
│   │   │   ├── session.go               会话管理 / 权限通道
│   │   │   ├── session_manager.go       多会话管理 / 自动保存
│   │   │   ├── subagent.go              子 Agent(fork 模式)
│   │   │   ├── dream.go                 Dream 引擎(记忆巩固)
│   │   │   ├── team.go                  多 Agent 协调(Leader/Worker)
│   │   │   ├── normalizer.go            消息规范化管道(9 步)
│   │   │   ├── token_budget.go          Token 预算管理
│   │   │   ├── fallback.go              模型降级
│   │   │   ├── backend.go               EngineBackend 接口
│   │   │   └── ...                      plan / skill / activity / file_history
│   │   │
│   │   ├── config/                        配置
│   │   │   ├── config.go                 Settings 文件加载 / 多级合并
│   │   │   └── models.go                ModelConfig(=ModelInfo) / ModelRegistry / ModelRole
│   │   │
│   │   │
│   │   ├── pricing/                       定价(运行时获取模型单价)
│   │   │   ├── loader.go                加载 pricing.json / 注册到 ModelRegistry
│   │   │   └── registry.go             PricingRegistry / GetPrice
│   │   ├── query/                         内部消息类型
│   │   │   └── query.go                  Message / Content / Usage / CacheTokens
│   │   │
│   │   ├── context/                       Prompt + 压缩
│   │   │   ├── bundle.go                 PromptBundle 接口 / BundleRegistry
│   │   │   ├── compact.go               三层压缩降级 / 断路器
│   │   │   ├── policy.go                压缩策略(部分/完整/反应式)
│   │   │   ├── grouping.go              消息分组(按 API 往返)
│   │   │   └── default_bundle.go        默认 Bundle(claude+programming)
│   │   │
│   │   │  ── 扩展机制 ──
│   │   ├── hooks/                         Hook 系统
│   │   │   ├── hooks.go                  Manager / 12 种 HookType
│   │   │   ├── handler.go               ShellHandler / CallbackHandler
│   │   │   └── executor.go              超时保护执行器
│   │   │
│   │   ├── plugin/                        插件系统
│   │   │   ├── loader.go                加载 / 启用 / 禁用
│   │   │   ├── dependency.go            DFS 依赖解析 / 循环检测
│   │   │   └── manifest.go              Manifest 解析 / 验证
│   │   │
│   │   ├── memory/                        记忆系统
│   │   │   ├── memory.go                Store 接口 / fileStore 实现(RWMutex)
│   │   │   ├── relevance.go             相关性评分 / AI 选择器
│   │   │   ├── freshness.go             新鲜度警告 / 类型化阈值
│   │   │   ├── sync.go                  团队同步(Git/HTTP adapter)
│   │   │   └── extractor.go             自动提取代理
│   │   │
│   │   ├── permission/                    权限系统
│   │   │   ├── checker.go               dynClass 驱动检查(无 fallback 硬编码)
│   │   │   ├── bash_security.go         危险命令检测(递归 AST)
│   │   │   ├── classifier.go            白名单 → 规则 → AI 三层级联
│   │   │   └── rules.go                 规则引擎 / 学习 / 持久化
│   │   │
│   │   ├── security/                      安全
│   │   │   ├── audit.go                 AuditSink 接口 / AuditEntry
│   │   │   ├── secret_scanner.go        SecretGuard / 45 条内置规则
│   │   │   └── secret_rule.go           规则定义 / 编译缓存
│   │   │
│   │   ├── evolve/                        自进化 (v0.2+ 接口矩阵 9/9)
│   │   │   ├── interfaces.go              9 接口 + Candidate / Feedback / ReplayEvent / ShadowResult
│   │   │   ├── parameter_store_file.go    FileParameterStore (版本化 + Lock + Watch)
│   │   │   ├── log_source_file.go         FileLogSource (JSONL + UTC 日期分片)
│   │   │   ├── feedback_channel_file.go   FileFeedbackChannel (entity×date 分片)
│   │   │   ├── default_log_replayer.go    DefaultLogReplayer (first-touch per-metric 配对)
│   │   │   ├── generator_llm.go           LLMGenerator (窄 LLMClient + JSON array 解析)
│   │   │   ├── evaluator_impls.go         WeightedEvaluator + FuncEvaluator
│   │   │   ├── parameter_evolver_default.go  DefaultParameterEvolver (Propose/Apply + AuditLogger)
│   │   │   ├── reflector_impls.go         AggregatorReflector + FuncReflector
│   │   │   └── shadow_runner_default.go   DefaultShadowRunner (相对 divergence ∈ [0,1])
│   │   │
│   │   ├── daemon/                        守护进程(CLI 后台模式 + 平台共用)
│   │   │   ├── daemon.go                DaemonManager / Accept 循环
│   │   │   ├── session_pool.go          会话池 / 容量控制
│   │   │   ├── heartbeat.go             心跳服务 / 空闲检测
│   │   │   ├── crash_recovery.go        崩溃恢复(指数退避)
│   │   │   ├── idle_timeout.go          空闲超时(可重置定时器)
│   │   │   └── isolation.go             会话隔离(共享/独立)
│   │   │
│   │   ├── bridge/                        远程桥接(CLI 后台模式 + 平台共用)
│   │   │   ├── bridge.go                BridgeTransport / SessionConn 接口
│   │   │   ├── event_serializer.go      engine.Event → BridgeEvent 序列化
│   │   │   ├── serial_uploader.go       串行批量上传(背压控制)
│   │   │   ├── bounded_uuid_set.go      环形数组消息去重
│   │   │   └── transport/sse.go         SSE Transport(断线重连 / Ping keepalive)
│   │   │
│   │   ├── execenv/                       执行环境(Executor 接口 + 本地实现)
│   │   │   ├── executor.go              Executor 接口
│   │   │   ├── default_executor.go      DefaultExecutor(本地 exec.Cmd)
│   │   │   └── env.go                   环境变量注入
│   │   │
│   │   │  ── 工具 ──
│   │   ├── tools/                         工具框架
│   │   │   ├── tool.go                  Tool 接口 / DryRunnable / Reversible
│   │   │   ├── orchestrator.go          并发执行 / 分批 / panic 恢复
│   │   │   ├── registry.go              工具注册表
│   │   │   └── builtin/                 14 个内置工具
│   │   │       ├── bash.go              Bash(进程管理/输出截断/后台化)
│   │   │       ├── fileedit.go          FileEdit(原子写入/curly quote/diff 预览)
│   │   │       ├── fileread.go          FileRead(图片/PDF/Notebook/EXIF)
│   │   │       ├── filewrite.go         FileWrite(原子写入/secret 扫描)
│   │   │       ├── glob.go              Glob(双引擎/symlink 安全)
│   │   │       ├── grep.go              Grep(双引擎/多行匹配)
│   │   │       ├── webfetch.go          WebFetch(SSRF 防护)
│   │   │       ├── websearch.go         WebSearch
│   │   │       ├── agent.go             Agent(子 Agent 启动)
│   │   │       ├── skill.go             Skill(inline/fork 执行)
│   │   │       ├── task.go              Task(创建/更新/列表)
│   │   │       └── ...                  scratchpad / monitor / exec / toolsearch
│   │   │
│   │   │  ── 通信 ──
│   │   ├── websocket/                     WebSocket 传输
│   │   ├── inbox/                         进程间通信
│   │   │   ├── inbox.go                 Inbox 接口
│   │   │   ├── memory.go               内存 Inbox(同进程)
│   │   │   ├── uds_server.go            UDS Inbox(跨进程)
│   │   │   └── router.go               InboxRouter(agentName → Inbox)
│   │   │
│   │   ├── tasklist/                      共享任务板(Agent Teams)
│   │   │   ├── tasklist.go              TaskList / Store 接口
│   │   │   ├── memory_store.go         内存 Store
│   │   │   └── markdown_store.go        MarkdownStore(Flyto ↔ Claude Code 互操作)
│   │   │
│   │   │  ── Provider ──
│   │   └── providers/                     Provider 实现
│   │       ├── anthropic/                Anthropic Messages API
│   │       │   └── provider.go          Stream / buildRequest / Thinking / Caching
│   │       ├── openai/                   OpenAI Chat Completions
│   │       ├── gemini/                   Google Gemini(AI Studio + Vertex AI)
│   │       ├── minimax/                  MiniMax(Native/OpenAI/Anthropic 三模式)
│   │       ├── ollama/                   Ollama 本地
│   │       ├── lmstudio/                 LM Studio 本地
│   │       ├── openrouter/               OpenRouter 聚合
│   │       └── shared/                   共享工具(MaskAPIKey)
│   │
│   ├── internal/                          内部实现(消费者不可 import)
│   │   ├── transport/                     通用 SSE 流式 HTTP 客户端
│   │   │   ├── client.go                NewClient / ClientOption / Stream
│   │   │   ├── classifier.go            ErrorClassifier 接口 / Default / Anthropic
│   │   │   ├── stream_guard.go          空闲看门狗 / 部分流检测
│   │   │   ├── preconnect.go            TCP+TLS 预热 / DNS 缓存
│   │   │   └── retry/                   重试策略框架
│   │   │       ├── policy.go            RetryPolicy / CompositePolicy
│   │   │       ├── backoff.go           指数退避 + crypto/rand jitter
│   │   │       ├── retryer.go           执行器 / Observer 回调
│   │   │       └── anthropic.go         Anthropic 6 层策略组合
│   │   │
│   │   ├── wire/                          协议序列化
│   │   │   ├── anthropic.go             Anthropic SSE 解析 → flyto.Event
│   │   │   ├── openai.go               OpenAI SSE 解析 → flyto.Event
│   │   │   ├── gemini.go               Gemini SSE 解析 → flyto.Event
│   │   │   ├── schema.go               $ref 展开 / 约束裁剪 / 复杂度校验
│   │   │   └── tools.go                工具数量上限检查
│   │   │
│   │   ├── apierror/                      共享错误类型(打破循环依赖)
│   │   ├── mcp/                           MCP 协议客户端
│   │   │   ├── client.go                JSON-RPC / 工具列表刷新 / Elicitation
│   │   │   ├── manager.go              多服务器管理 / 并发连接 / 重连
│   │   │   ├── stdio_transport.go       子进程传输
│   │   │   ├── sse_transport.go         SSE 传输
│   │   │   └── http_transport.go        HTTP Streamable 传输
│   │   │
│   │   ├── cache/                         缓存
│   │   │   ├── ttl.go                   TTL 缓存 / 后台 GC / 后台刷新
│   │   │   ├── prompt_hash.go           Prompt 内容 hash(cache 失效检测)
│   │   │   └── tool_schema_hash.go      工具 Schema hash(cache_control 排序)
│   │   │
│   │   ├── tokenizer/                     Token 估算(通用 BPE 近似)
│   │   ├── logger/                        日志(secret 脱敏)
│   │   └── syslib/                        系统级库
│   │       ├── bash/                     Bash AST 解析(heredoc/引号/命令替换)
│   │       ├── diff/                     Myers diff 算法 + unified patch
│   │       └── git/                      Git 操作封装(branch/status/worktree)
│   │
│   ├── cmd/                               开发工具(与 core 紧耦合)
│   │   ├── capability-probe/              能力探测(产出 capabilities.json)
│   │   ├── minimax-probe/                 MiniMax 专项探测
│   │   └── schema-probe/                  Schema 兼容性探测
│   ├── examples/                          使用示例
│   ├── docs/                              核心库文档
│   ├── FLYTO.md                           AI Agent 系统指令
│   └── TODO.md                            待办事项
├── platform/                              平台服务(分两层)
│   ├── common/                            通用 platform (Go, module: flyto-platform-common)
│   │   ├── cmd/common/                    平台通用服务入口
│   │   ├── internal/
│   │   │   ├── api/                       gRPC + HTTP 入口(auth/tenant interceptor)
│   │   │   ├── auth/                      JWT + OIDC 验证
│   │   │   ├── tenant/                    多租户 primitive(不透明 ID)
│   │   │   ├── server/                    HTTP API server(REST/SSE,路由/中间件)
│   │   │   └── sandbox/                   沙箱 Executor(E2B cloud backend)
│   │   └── frontend/                      📌 Web 前端
│   └── industry/<name>/                   行业 platforms(C#):logistics / erp / sales / crm / finance / ads / decision
├── tui/                                   终端 UI(module: flyto-tui)
│   ├── cmd/flyto/                         CLI 入口
│   └── internal/                          UI 实现(app / render / commands)
├── docs/                                  项目级文档
│   └── writing-guide.md                   文档防坑清单(API 错误根因 + 检查清单)
├── CLAUDE.md                              开发指令
└── go.work                                Go workspace(use ./core)

📌 = 占位,待实现

快速开始

import (
    "git.flytoex.net/yuanwei/git.flytoex.net/yuanwei/flyto-agent/pkg/engine"
    "git.flytoex.net/yuanwei/git.flytoex.net/yuanwei/flyto-agent/pkg/providers/anthropic"
)

eng, _ := engine.New(&engine.Config{
    Provider: anthropic.New(anthropic.Config{APIKey: "..."}),
    Model:    "claude-sonnet-4-6",
    Cwd:      ".",
})
defer eng.Close()

for event := range eng.Run(ctx, "hello") {
    // 处理事件
}

架构决策

  • Provider + Model 必填 - 引擎不预设任何供应商或模型
  • 库 vs 平台 - core 是纯 Go 库(零 HTTP 服务),platform 是部署服务
  • 零硬编码 - 定价/模型信息由运行时获取,不写死在代码中
  • daemon 共享 - CLI 后台模式和平台服务共用 core/pkg/daemon