Octopus 产品形态分析

基于代码目录结构、入口文件、构建配置和 UI 组件的产品形态全面分析。


1. 产品形态总览

Octopus 提供 6 种产品形态 + 1 个内部成长模块,覆盖从命令行到原生应用的全渠道。

┌─────────────────────────────────────────────────────┐
│                  Octopus 产品矩阵                     │
│                                                     │
│  CLI ──── 开发者 / DevOps 首选                        │
│  TUI ──── 服务器运维人员首选                            │
│  Web ──── 通用 Web 控制台                              │
│  Desktop ─ 日常桌面用户                                │
│  Mobile ── 移动端监控和交互                             │
│  Base ──── Agent 自主成长模块                          │
│  Server ── 所有产品的统一后端                            │
└─────────────────────────────────────────────────────┘

所有产品通过 HTTP REST API 连接到统一的 Octopus Server。


2. CLI 产品 — 命令行界面

定位

面向开发者和运维人员的高效命令行交互工具。

代码位置

  • 入口:products/cli/__main__.py
  • 核心:products/cli/ 目录
  • 测试:products/cli/tests/ — 9 个测试文件

技术栈

  • Python argparse(非 Click)— 轻量无外部依赖
  • httpx 同步客户端
  • 纯 ANSI escape code 渲染(无 rich/colorama 依赖)

功能模块

模块文件核心功能
Chat REPLchat.py交互式对话、SSE 流式输出、历史持久化
服务管理up.pyoctopus up/down/status
学习触发learn.pyoctopus learn <target> 触发能力学习
渲染器renderer.py表头/表格/卡片/图表/差异/时间线/指标
偏好学习preferences.py学习用户首选输出格式
HTTP 客户端client.pyOctopusClient(重试/退避)
认证auth.pyToken 管理
配置config.py~/.octopus/config.yaml
初始化init_wizard.py首次配置向导

交互特性

$ octopus chat
🐙 Octopus Chat (type /help for commands)
> 检查所有服务状态
⠋ 思考中...

┌── 服务状态 ──────────────────────┐
│ ✓ octopus-http    running  :8000 │
│ ✓ redis           running  :6379 │
│ ⚠ octopus-worker  degraded       │
└──────────────────────────────────┘

特殊命令: /help, /roles, /switch, /status, /history, /clear, /prefs, /learn

管道模式: echo "检查磁盘空间" | octopus chat --pipe

数据持久化

数据格式路径
聊天历史JSONL(追加式)~/.octopus/chat_history.jsonl
显示偏好JSON~/.octopus/display_prefs.json
认证 TokenJSON~/.octopus/auth.json
配置YAML~/.octopus/config.yaml

3. TUI 产品 — 终端用户界面

定位

面向服务器运维人员的富终端仪表盘,无需 Web 浏览器即可获得图形化体验。

代码位置

  • 入口:products/tui/__main__.py
  • 核心:products/tui/app.pyOctopusTUI(App)
  • 样式:products/tui/styles/app.tcss

技术栈

  • Textual(Python 终端 UI 框架)
  • httpx.AsyncClient(异步 HTTP)

五屏布局

屏幕快捷键文件功能
DashboardF1screens/dashboard.py健康/队列/SLA/告警/最近工单
ChatF2screens/chat.py对话界面 + slash 命令
TicketsF3screens/tickets.py任务/工单管理
CapabilitiesF4screens/capabilities.py能力注册表(彩色徽章 + 操作按钮)
LogsF5screens/logs.py服务器日志查看

UI 结构

┌─────────────────────────────────────────┐
│  Header (Octopus TUI)                   │
├────────┬────────────────────────────────┤
│Sidebar │                                │
│        │   Content Area                 │
│ ■ Dash │   (Dashboard/Chat/Tickets/     │
│ ■ Chat │    Capabilities/Logs)          │
│ ■ Tick │                                │
│ ■ Caps │                                │
│ ■ Logs │                                │
│        │                                │
├────────┴────────────────────────────────┤
│  Footer (状态栏)                         │
└─────────────────────────────────────────┘

异步客户端

# products/tui/client.py
class AsyncOctopusClient:
    # 使用 httpx.AsyncClient 非阻塞 I/O
    async def server_info(self) -> dict: ...
    async def health(self) -> dict: ...
    async def submit_and_stream(self, text, role) -> AsyncGenerator: ...

4. Web 控制台 — 浏览器端

定位

通用 Web 控制台,适用于任何有浏览器的环境,也是 Desktop 产品的内核。

代码位置

  • 入口:products/web/src/main.tsx
  • 应用:products/web/src/App.tsx
  • 构建:products/web/vite.config.ts

技术栈

  • React 18.3.1 + TypeScript 5.6.2
  • Vite 5.4.10
  • React Router v6
  • Vitest + React Testing Library

9 个页面路由

路由页面功能
/ChatPage默认对话界面
/dashboardDashboardPage系统仪表盘
/organizationOrganizationPage组织视图
/tasksTaskListPage任务列表
/rolesRolesPage角色管理
/roles/:roleIdRoleDetailPage角色详情
/memoryMemoryPage记忆管理
/historyHistoryPage历史回放
/settingsSettingsPage系统设置

富输出渲染器

组件用途
RichOutputRenderer统一输出路由
TableOutput表格渲染
ChartOutput图表渲染
TimelineOutput时间线
DiffOutput差异对比
MetricOutput指标展示
CardOutput卡片布局
MarkdownOutputMarkdown 渲染
StatusCardOutput状态卡片
CapabilityGapOutput能力缺口展示

Hooks

Hook功能
useKeyboardShortcuts全局键盘快捷键(Ctrl+K 聚焦)
useLocalStorage客户端持久状态
useFormatPreferences显示格式偏好学习

Desktop 集成检测

// products/web/src/lib/desktop.ts
export function isDesktop(): boolean {
    return window.__TAURI__ !== undefined;
}
// 在 Tauri 环境中启用窗口状态持久化、About 对话框等

5. Desktop 产品 — 原生桌面应用

定位

将 Web 控制台封装为原生桌面应用,提供 OS 级集成能力。

代码位置

  • 配置:products/desktop/package.json
  • Rust 源码:products/desktop/src-tauri/

技术栈

  • Tauri 2.1.0(Rust 原生壳层)
  • Web 控制台(React/Vite,复用 products/web)

构建方式

# 开发模式:启动 Vite dev + Tauri dev
npm run dev

# 生产构建:构建 Web + 编译 Tauri 二进制
npm run tauri:build

OS 集成能力

能力说明
窗口状态持久化记住窗口大小和位置
系统托盘常驻系统托盘/菜单栏
About 对话框原生”关于”窗口
原生文件对话框文件选择器(规划中)
安全沙盒Tauri 安全策略

产品关系

Desktop = Tauri Shell + Web Console
         (Rust 原生)   (React/TypeScript)

Web 控制台代码完全复用,通过 isDesktop() 检测环境差异

6. Mobile 产品 — 移动应用

定位

iOS/Android 原生应用,支持移动端监控、对话和管理。

代码位置

  • 入口:products/mobile/App.tsx
  • 配置:products/mobile/package.json

技术栈

  • Expo 53.0.0
  • React Native 0.79.2
  • TypeScript
  • Jest + jest-expo

7 个 Tab 屏

Tab图标屏幕功能
Chat🗣️ChatScreen对话界面
Plans📋PlansScreen计划视图
Execution(按 ID 获取)执行仪表盘
Graph📊GraphScreen图形可视化
KPI📈(KPI 仪表盘)关键指标
Learning🎓(学习仪表盘)学习进度
Settings⚙️SettingsScreen设置

响应式布局

手机(< 768px):
┌──────────────────────────────┐
│                              │
│      Content Area            │
│                              │
├──────────────────────────────┤
│  🗣️ │ 📋 │ ⚡ │ 📊 │ 📈 │ 🎓 │ ⚙️ │
└──────────────────────────────┘

平板(≥ 768px):
┌────────┬─────────────────────┐
│Sidebar │                     │
│        │   Content Area      │
│ 🗣️ Chat│                     │
│ 📋 Plans│                     │
│ ⚡ Exec │                     │
│ 📊 Graph│                     │
│ 📈 KPI  │                     │
│ 🎓 Learn│                     │
│ ⚙️ Set  │                     │
└────────┴─────────────────────┘

状态指示

  • ConnectionDot — 状态栏连接指示器
  • LoadingOverlay — 应用初始化加载层
  • ErrorBoundary — 崩溃恢复边界

7. Base 产品 — Agent 自主成长

定位

内部模块,不直接面向用户。负责 Agent 技能的自动发现、学习、代码生成和部署。

代码位置

  • 核心:products/base/agent/growth/

组件

模块文件功能
成长协调器skill_grower.py完整生命周期:discover → pipeline → codegen → deploy → reload
已学存储learned_store.py已学技能持久存储
代码生成handler_codegen.py自动生成 handler 模块 + 验证
加载器learned_loader.py启动时加载已学技能
晋升引擎promotion_engine.py基于成功指标晋升技能
治理growth_governance.py策略执行 + 门禁检查
HTTP 路由routes_learned.pyREST API 暴露

运行模式

模式触发方式说明
手动POST /api/learned/growREST API 触发
定时octopus-grower.timersystemd 定时器,每 6 小时
APICLI octopus learn <target>用户命令触发

治理门禁

# growth_governance.py
# 部署前必须通过的门禁:
# - 风险评估通过
# - 沙盒验证成功
# - 每日部署配额未超限
# - 策略文件允许

配置

# /data/octopus/agent/config/grower_policy.yaml
# 控制自动成长的策略参数

8. Server — 统一后端

定位

所有产品形态的统一 HTTP 后端,承载业务逻辑、路由分发和端口协调。

代码位置

  • 应用工厂:server/shared/shared.py
  • 路由核心:server/shared/adapters/http/routes_core.py
  • 端口实现:server/shared/ports_impl/

连接模式

CLI ──────┐
TUI ──────┤
Web ──────┼──── HTTP REST ────▶ Octopus Server (:8000)
Desktop ──┤                         │
Mobile ───┘                         ▼
                              FastAPI + Uvicorn

                              ┌─────┼─────┐
                              │     │     │
                          Dispatch Router
                          ┌───┤     │     ├───┐
                      SYSTEM  │  INTERNAL │  API
                    (CLI/sh)  │ (Python)  │(httpx)
                              │           │
                         Kernel Worker Loop
                         (12 Mixin × Tick)

认证方式

Authorization: Bearer <token>

  ├── 优先: $OCTOPUS_TOKEN 环境变量
  └── 回退: ~/.octopus/auth.json

SSE 流式输出

POST /api/intent → 202 Accepted + run_id
GET  /api/runs/{run_id} → 轮询结果
                       → SSE 流式事件(可选)

9. 产品间共享模式

显示偏好学习(三端一致)

CLI、Web、Mobile 使用完全相同的置信度模型:

confidence = count / (count + 2)
threshold = 0.6

聊天历史持久化

产品存储方式
CLI~/.octopus/chat_history.jsonl(追加式 JSONL)
WeblocalStorage
MobileAsyncStorage

输出数据格式

所有产品使用统一的输出形状,按平台渲染:

形状CLI 渲染Web 渲染TUI 渲染
tableANSI 表格HTML 表格Textual DataTable
chartASCII 图表React 图表文本图表
card文本卡片CSS 卡片Panel 组件
timeline文本时间线CSS 时间线RichLog
diffANSI 颜色差异HTML 差异RichLog
metric数字指标仪表盘组件Static 面板

Token 管理

所有产品统一的认证流程:

  1. 检查 $OCTOPUS_TOKEN 环境变量
  2. 读取 ~/.octopus/auth.json
  3. 传递 Authorization: Bearer <token>

10. 产品形态关系图

┌──────────────────────────────────────────────────────────────┐
│                    用户接触面                                  │
│                                                              │
│   CLI        TUI        Web       Desktop     Mobile         │
│  (Python)  (Textual)  (React)    (Tauri)    (Expo/RN)        │
│    │          │         │    ┌─────┘             │            │
│    │          │         │    │  复用              │            │
│    │          │         ├────┘                   │            │
│    │          │         │                        │            │
│    └────┬─────┴─────────┴────────────────────────┘            │
│         │                                                     │
│         ▼ HTTP REST + SSE                                     │
│   ┌─────────────────────────┐                                 │
│   │   Octopus Server        │                                 │
│   │   FastAPI :8000         │                                 │
│   │   546 Endpoints         │                                 │
│   └─────────┬───────────────┘                                 │
│             │                                                 │
│             ▼                                                 │
│   ┌─────────────────────────┐    ┌─────────────────┐          │
│   │   Kernel Runtime        │    │   Base/Growth   │          │
│   │   12 Mixin Worker Loop  │◄───│   Agent 自主     │          │
│   │   52 Gates              │    │   成长模块       │          │
│   └─────────────────────────┘    └─────────────────┘          │
│                                                              │
└──────────────────────────────────────────────────────────────┘
OctopusOS
How can we help?