mirror of
https://mirror.skon.top/github.com/cft0808/edict
synced 2026-04-20 21:00:16 +08:00
docs: update README (zh/en/ja) for Week 0-4 features
- Tech highlights: EventBus, Outbox Relay, state machine audit, parallel dispatch, DAG orchestrator - Project structure: add edict/backend, auth.py, agent groups, new scripts - Launch: one-click start.sh, systemd production deploy - Roadmap Phase 2: mark 8 items as completed
This commit is contained in:
77
README.md
77
README.md
@@ -311,16 +311,36 @@ chmod +x install.sh && ./install.sh
|
||||
#### 启动
|
||||
|
||||
```bash
|
||||
# 终端 1:数据刷新循环
|
||||
bash scripts/run_loop.sh
|
||||
# 方式 1:一键启动(推荐)
|
||||
chmod +x start.sh && ./start.sh
|
||||
|
||||
# 终端 2:看板服务器
|
||||
python3 dashboard/server.py
|
||||
# 方式 2:分别启动
|
||||
bash scripts/run_loop.sh & # 数据刷新循环
|
||||
python3 dashboard/server.py # 看板服务器
|
||||
|
||||
# 打开浏览器
|
||||
open http://127.0.0.1:7891
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><b>🖥️ 生产环境部署(systemd)</b></summary>
|
||||
|
||||
```bash
|
||||
# 安装 systemd 服务
|
||||
sudo cp edict.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable edict
|
||||
sudo systemctl start edict
|
||||
|
||||
# 或使用管理脚本
|
||||
bash edict.sh start # 启动
|
||||
bash edict.sh status # 查看状态
|
||||
bash edict.sh restart # 重启
|
||||
bash edict.sh stop # 停止
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
> 💡 **看板即开即用**:`server.py` 内嵌 `dashboard/dashboard.html`,Docker 镜像包含预构建的 React 前端
|
||||
|
||||
> 💡 详细教程请看 [Getting Started 指南](docs/getting-started.md)
|
||||
@@ -403,6 +423,9 @@ open http://127.0.0.1:7891
|
||||
|
||||
> ⚡ **状态转换受保护**:`kanban_update.py` 内置 `_VALID_TRANSITIONS` 状态机校验,
|
||||
> 非法跳转(如 Doing→Taizi)会被拒绝并记录日志,确保流程不可绕过。
|
||||
>
|
||||
> 🔄 **异步事件驱动**:服务间通过 Redis Streams EventBus 解耦通信,Outbox Relay 保障事件可靠投递。
|
||||
> 所有状态变更自动写入审计日志(`audit.py`),支持完整追溯。
|
||||
|
||||
---
|
||||
|
||||
@@ -425,12 +448,32 @@ edict/
|
||||
├── dashboard/
|
||||
│ ├── dashboard.html # 军机处看板(单文件 · 零依赖 · ~2500 行)
|
||||
│ ├── dist/ # React 前端构建产物(Docker 镜像内包含,本地可选)
|
||||
│ ├── auth.py # Dashboard 登录鉴权
|
||||
│ ├── court_discuss.py # 朝堂议政(多官员 LLM 讨论引擎)
|
||||
│ └── server.py # API 服务器(Python 标准库 · 零依赖 · ~2300 行)
|
||||
├── edict/backend/ # 异步后端服务(SQLAlchemy + Redis)
|
||||
│ ├── app/models/
|
||||
│ │ ├── task.py # 任务模型 + 状态机
|
||||
│ │ ├── audit.py # 审计日志模型
|
||||
│ │ └── outbox.py # Outbox 消息模型
|
||||
│ ├── app/services/
|
||||
│ │ ├── event_bus.py # Redis Streams EventBus
|
||||
│ │ └── task_service.py # 任务服务层
|
||||
│ └── app/workers/
|
||||
│ ├── dispatch_worker.py # 并行调度 + 重试 + 资源锁
|
||||
│ ├── orchestrator_worker.py # DAG 编排器
|
||||
│ └── outbox_relay.py # 事务性 Outbox Relay
|
||||
├── agents/
|
||||
│ ├── <agent_id>/SOUL.md # 各省部 Agent 人格模板
|
||||
│ ├── GLOBAL.md # 全局 Agent 配置
|
||||
│ └── groups/ # Agent 分组(sansheng / liubu)
|
||||
├── scripts/
|
||||
│ ├── run_loop.sh # 数据刷新循环(每 15 秒)
|
||||
│ ├── kanban_update.py # 看板 CLI(含旨意数据清洗 + 标题校验)
|
||||
│ ├── kanban_update.py # 看板 CLI(含旨意数据清洗 + 标题校验 + 状态机)
|
||||
│ ├── skill_manager.py # Skill 管理工具(远程/本地 Skills 添加、更新、移除)
|
||||
│ ├── agentrec_advisor.py # Agent 模型推荐(功过簿 + 成本优化)
|
||||
│ ├── linucb_router.py # LinUCB 智能路由
|
||||
│ ├── refresh_watcher.py # 数据变更监听
|
||||
│ ├── sync_from_openclaw_runtime.py
|
||||
│ ├── sync_agent_config.py
|
||||
│ ├── sync_officials_stats.py
|
||||
@@ -439,7 +482,8 @@ edict/
|
||||
│ ├── apply_model_changes.py
|
||||
│ └── file_lock.py # 文件锁(防多 Agent 并发写入)
|
||||
├── tests/
|
||||
│ └── test_e2e_kanban.py # 端到端测试(17 个断言)
|
||||
│ ├── test_e2e_kanban.py # 端到端测试(17 个断言)
|
||||
│ └── test_state_machine_consistency.py # 状态机一致性测试
|
||||
├── data/ # 运行时数据(gitignored)
|
||||
├── docs/
|
||||
│ ├── task-dispatch-architecture.md # 📚 详细架构文档:任务分发、流转、调度的完整设计(业务+技术)
|
||||
@@ -447,6 +491,9 @@ edict/
|
||||
│ ├── wechat-article.md # 微信文章
|
||||
│ └── screenshots/ # 功能截图(11 张)
|
||||
├── install.sh # 一键安装脚本
|
||||
├── start.sh # 一键启动(Dashboard + 数据刷新)
|
||||
├── edict.service # systemd 服务配置(生产部署)
|
||||
├── edict.sh # 服务管理脚本(start/stop/restart/status)
|
||||
├── CONTRIBUTING.md # 贡献指南
|
||||
└── LICENSE # MIT License
|
||||
```
|
||||
@@ -560,9 +607,16 @@ curl http://localhost:7891/api/remote-skills-list
|
||||
|------|------|
|
||||
| **React 18 前端** | TypeScript + Vite + Zustand 状态管理,13 个功能组件 |
|
||||
| **纯 stdlib 后端** | `server.py` 基于 `http.server`,零依赖,同时提供 API + 静态文件服务 |
|
||||
| **EventBus 事件总线** | Redis Streams 发布/订阅,服务间解耦通信 |
|
||||
| **Outbox Relay** | 事务性 Outbox 模式,保障事件可靠投递(至少一次语义) |
|
||||
| **状态机审计** | 严格生命周期状态转换 + 完整审计日志(`audit.py`) |
|
||||
| **并行调度引擎** | Dispatch Worker 支持并行执行、指数退避重试、资源锁 |
|
||||
| **DAG 编排器** | Orchestrator 基于 DAG 的任务分解与依赖解析 |
|
||||
| **Agent 思考可视** | 实时展示 Agent 的 thinking 过程、工具调用、返回结果 |
|
||||
| **一键安装** | `install.sh` 自动完成全部配置 |
|
||||
| **一键安装 / 一键启动** | `install.sh` 自动配置,`start.sh` 一条命令启动全部服务 |
|
||||
| **systemd 生产部署** | `edict.service` 支持 systemd 守护进程,开机自启 |
|
||||
| **15 秒同步** | 数据自动刷新,看板倒计时显示 |
|
||||
| **Dashboard 鉴权** | `auth.py` 提供看板登录认证 |
|
||||
| **每日仪式** | 首次打开播放上朝开场动画 |
|
||||
| **远程 Skills 生态** | 从 GitHub/URL 一键导入能力,支持版本管理 + CLI + API + UI |
|
||||
|
||||
@@ -697,7 +751,14 @@ python3 scripts/skill_manager.py import-official-hub --agents zhongshu
|
||||
|
||||
### Phase 2 — 制度深化 🚧
|
||||
- [ ] 御批模式(人工审批 + 一键准奏/封驳)
|
||||
- [ ] 功过簿(Agent 绩效评分体系)
|
||||
- [x] 功过簿(Agent 绩效评分 + 模型推荐 + 成本优化)
|
||||
- [x] EventBus 事件总线(Redis Streams 解耦通信)
|
||||
- [x] Outbox Relay(事务性事件投递)
|
||||
- [x] 状态机审计(严格生命周期 + 审计日志)
|
||||
- [x] 并行调度引擎(指数退避重试 + 资源锁)
|
||||
- [x] DAG 编排器(任务分解 + 依赖解析)
|
||||
- [x] Dashboard 鉴权(登录认证)
|
||||
- [x] 一键启动 / systemd 生产部署
|
||||
- [ ] 急递铺(Agent 间实时消息流可视化)
|
||||
- [ ] 国史馆(知识库检索 + 引用溯源)
|
||||
|
||||
|
||||
79
README_EN.md
79
README_EN.md
@@ -214,16 +214,36 @@ The installer automatically:
|
||||
### Launch
|
||||
|
||||
```bash
|
||||
# Terminal 1: Data sync loop (every 15s)
|
||||
bash scripts/run_loop.sh
|
||||
# Option 1: One-click launch (recommended)
|
||||
chmod +x start.sh && ./start.sh
|
||||
|
||||
# Terminal 2: Dashboard server
|
||||
python3 dashboard/server.py
|
||||
# Option 2: Manual launch
|
||||
bash scripts/run_loop.sh & # Data sync loop
|
||||
python3 dashboard/server.py # Dashboard server
|
||||
|
||||
# Open browser
|
||||
open http://127.0.0.1:7891
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><b>🖥️ Production deployment (systemd)</b></summary>
|
||||
|
||||
```bash
|
||||
# Install systemd service
|
||||
sudo cp edict.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable edict
|
||||
sudo systemctl start edict
|
||||
|
||||
# Or use management script
|
||||
bash edict.sh start # Start
|
||||
bash edict.sh status # Check status
|
||||
bash edict.sh restart # Restart
|
||||
bash edict.sh stop # Stop
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
> 📖 See [Getting Started Guide](docs/getting-started.md) for detailed walkthrough.
|
||||
|
||||
---
|
||||
@@ -318,15 +338,40 @@ edict/
|
||||
├── dashboard/
|
||||
│ ├── dashboard.html # Dashboard (single file, zero deps, works out of the box)
|
||||
│ ├── dist/ # Pre-built React frontend (included in Docker image)
|
||||
│ ├── auth.py # Dashboard login authentication
|
||||
│ ├── court_discuss.py # Court discussion (multi-agent LLM debate engine)
|
||||
│ └── server.py # API server (stdlib, zero deps)
|
||||
├── edict/backend/ # Async backend services (SQLAlchemy + Redis)
|
||||
│ ├── app/models/
|
||||
│ │ ├── task.py # Task model + state machine
|
||||
│ │ ├── audit.py # Audit log model
|
||||
│ │ └── outbox.py # Outbox message model
|
||||
│ ├── app/services/
|
||||
│ │ ├── event_bus.py # Redis Streams EventBus
|
||||
│ │ └── task_service.py # Task service layer
|
||||
│ └── app/workers/
|
||||
│ ├── dispatch_worker.py # Parallel dispatch + retry + resource lock
|
||||
│ ├── orchestrator_worker.py # DAG orchestrator
|
||||
│ └── outbox_relay.py # Transactional Outbox Relay
|
||||
├── agents/
|
||||
│ ├── <agent_id>/SOUL.md # Agent personality templates
|
||||
│ ├── GLOBAL.md # Global agent config
|
||||
│ └── groups/ # Agent groups (sansheng / liubu)
|
||||
├── scripts/ # Data sync & automation scripts
|
||||
│ ├── kanban_update.py # Kanban CLI with data sanitization (~300 lines)
|
||||
│ └── ... # fetch_morning_news, sync, screenshots, etc.
|
||||
├── tests/ # E2E tests
|
||||
│ └── test_e2e_kanban.py # Kanban sanitization tests (17 assertions)
|
||||
│ ├── kanban_update.py # Kanban CLI with data sanitization + state machine
|
||||
│ ├── agentrec_advisor.py # Agent model recommendation (merit + cost optimization)
|
||||
│ ├── linucb_router.py # LinUCB smart routing
|
||||
│ ├── refresh_watcher.py # Data change watcher
|
||||
│ └── ... # fetch_morning_news, sync, etc.
|
||||
├── tests/
|
||||
│ ├── test_e2e_kanban.py # Kanban sanitization tests (17 assertions)
|
||||
│ └── test_state_machine_consistency.py # State machine consistency tests
|
||||
├── data/ # Runtime data (gitignored)
|
||||
├── docs/ # Documentation + screenshots
|
||||
├── install.sh # One-click installer
|
||||
├── start.sh # One-click launch (Dashboard + data sync)
|
||||
├── edict.service # systemd service config (production deploy)
|
||||
├── edict.sh # Service management (start/stop/restart/status)
|
||||
└── LICENSE # MIT
|
||||
```
|
||||
|
||||
@@ -338,9 +383,16 @@ edict/
|
||||
|---|---|
|
||||
| **React 18 Frontend** | TypeScript + Vite + Zustand, 13 components |
|
||||
| **stdlib Backend** | `server.py` on `http.server`, zero dependencies |
|
||||
| **EventBus** | Redis Streams pub/sub for decoupled service communication |
|
||||
| **Outbox Relay** | Transactional outbox pattern for reliable event delivery (at-least-once) |
|
||||
| **State Machine Audit** | Strict lifecycle transitions + full audit logging (`audit.py`) |
|
||||
| **Parallel Dispatch** | Dispatch Worker with parallel execution, exponential backoff retry, resource locking |
|
||||
| **DAG Orchestrator** | Task decomposition and dependency resolution via DAG |
|
||||
| **Agent Thinking Visible** | Real-time display of agent thinking, tool calls, results |
|
||||
| **One-click Install** | Workspace creation to Gateway restart |
|
||||
| **One-click Install / Launch** | `install.sh` auto-configures, `start.sh` launches all services |
|
||||
| **systemd Production Deploy** | `edict.service` for daemon process, auto-restart on boot |
|
||||
| **15s Auto-sync** | Live data refresh with countdown |
|
||||
| **Dashboard Auth** | `auth.py` provides login authentication |
|
||||
| **Daily Ceremony** | Immersive opening animation |
|
||||
|
||||
---
|
||||
@@ -367,7 +419,14 @@ edict/
|
||||
|
||||
### Phase 2 — Institutional Depth 🚧
|
||||
- [ ] Imperial approval mode (human-in-the-loop)
|
||||
- [ ] Merit/demerit ledger (agent scoring)
|
||||
- [x] Merit/demerit ledger (agent scoring + model recommendation + cost optimization)
|
||||
- [x] EventBus (Redis Streams decoupled communication)
|
||||
- [x] Outbox Relay (transactional event delivery)
|
||||
- [x] State machine audit (strict lifecycle + audit logging)
|
||||
- [x] Parallel dispatch engine (exponential backoff retry + resource lock)
|
||||
- [x] DAG orchestrator (task decomposition + dependency resolution)
|
||||
- [x] Dashboard authentication (login auth)
|
||||
- [x] One-click launch / systemd production deploy
|
||||
- [ ] Express courier (inter-agent message visualization)
|
||||
- [ ] Imperial Archives (knowledge base + citation)
|
||||
|
||||
|
||||
78
README_JA.md
78
README_JA.md
@@ -214,16 +214,36 @@ chmod +x install.sh && ./install.sh
|
||||
### 起動
|
||||
|
||||
```bash
|
||||
# ターミナル1:データ同期ループ(15秒間隔)
|
||||
bash scripts/run_loop.sh
|
||||
# 方法1:ワンクリック起動(推奨)
|
||||
chmod +x start.sh && ./start.sh
|
||||
|
||||
# ターミナル2:ダッシュボードサーバー
|
||||
python3 dashboard/server.py
|
||||
# 方法2:手動起動
|
||||
bash scripts/run_loop.sh & # データ同期ループ
|
||||
python3 dashboard/server.py # ダッシュボードサーバー
|
||||
|
||||
# ブラウザを開く
|
||||
open http://127.0.0.1:7891
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><b>🖥️ 本番環境デプロイ(systemd)</b></summary>
|
||||
|
||||
```bash
|
||||
# systemdサービスのインストール
|
||||
sudo cp edict.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable edict
|
||||
sudo systemctl start edict
|
||||
|
||||
# または管理スクリプトを使用
|
||||
bash edict.sh start # 起動
|
||||
bash edict.sh status # ステータス確認
|
||||
bash edict.sh restart # 再起動
|
||||
bash edict.sh stop # 停止
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
> 📖 詳細なウォークスルーは[スタートガイド](docs/getting-started.md)をご覧ください。
|
||||
|
||||
---
|
||||
@@ -318,15 +338,39 @@ edict/
|
||||
├── dashboard/
|
||||
│ ├── dashboard.html # ダッシュボード(単一ファイル、依存関係ゼロ、すぐに使える)
|
||||
│ ├── dist/ # ビルド済みReactフロントエンド(Dockerイメージに含む)
|
||||
│ ├── auth.py # ダッシュボードログイン認証
|
||||
│ ├── court_discuss.py # 朝堂議政(マルチエージェントLLM討論エンジン)
|
||||
│ └── server.py # APIサーバー(stdlib、依存関係ゼロ)
|
||||
├── edict/backend/ # 非同期バックエンドサービス(SQLAlchemy + Redis)
|
||||
│ ├── app/models/
|
||||
│ │ ├── task.py # タスクモデル + ステートマシン
|
||||
│ │ ├── audit.py # 監査ログモデル
|
||||
│ │ └── outbox.py # Outboxメッセージモデル
|
||||
│ ├── app/services/
|
||||
│ │ ├── event_bus.py # Redis Streams EventBus
|
||||
│ │ └── task_service.py # タスクサービス層
|
||||
│ └── app/workers/
|
||||
│ ├── dispatch_worker.py # 並列ディスパッチ + リトライ + リソースロック
|
||||
│ ├── orchestrator_worker.py # DAGオーケストレータ
|
||||
│ └── outbox_relay.py # トランザクショナルOutbox Relay
|
||||
├── agents/
|
||||
│ ├── <agent_id>/SOUL.md # エージェントパーソナリティテンプレート
|
||||
│ ├── GLOBAL.md # グローバルエージェント設定
|
||||
│ └── groups/ # エージェントグループ(sansheng / liubu)
|
||||
├── scripts/ # データ同期&自動化スクリプト
|
||||
│ ├── kanban_update.py # かんばんCLI(データサニタイズ付き、約300行)
|
||||
│ └── ... # fetch_morning_news、sync、screenshotsなど
|
||||
├── tests/ # E2Eテスト
|
||||
│ └── test_e2e_kanban.py # かんばんサニタイズテスト(17アサーション)
|
||||
│ ├── kanban_update.py # かんばんCLI(データサニタイズ + ステートマシン付き)
|
||||
│ ├── agentrec_advisor.py # エージェントモデル推薦(功過簿 + コスト最適化)
|
||||
│ ├── refresh_watcher.py # データ変更ウォッチャー
|
||||
│ └── ... # fetch_morning_news、syncなど
|
||||
├── tests/
|
||||
│ ├── test_e2e_kanban.py # かんばんサニタイズテスト(17アサーション)
|
||||
│ └── test_state_machine_consistency.py # ステートマシン一貫性テスト
|
||||
├── data/ # ランタイムデータ(gitignore対象)
|
||||
├── docs/ # ドキュメント+スクリーンショット
|
||||
├── install.sh # ワンクリックインストーラー
|
||||
├── start.sh # ワンクリック起動(ダッシュボード + データ同期)
|
||||
├── edict.service # systemdサービス設定(本番デプロイ)
|
||||
├── edict.sh # サービス管理スクリプト(start/stop/restart/status)
|
||||
└── LICENSE # MIT
|
||||
```
|
||||
|
||||
@@ -338,9 +382,16 @@ edict/
|
||||
|---|---|
|
||||
| **React 18フロントエンド** | TypeScript + Vite + Zustand、13コンポーネント |
|
||||
| **stdlibバックエンド** | `server.py`(`http.server`ベース、依存関係ゼロ) |
|
||||
| **EventBus** | Redis Streams Pub/Subによるサービス間疑結合通信 |
|
||||
| **Outbox Relay** | トランザクショナルOutboxパターンによる信頼性の高いイベント配信(at-least-once) |
|
||||
| **ステートマシン監査** | 厳格なライフサイクル状態遷移 + 完全な監査ログ(`audit.py`) |
|
||||
| **並列ディスパッチ** | Dispatch Worker:並列実行、指数バックオフリトライ、リソースロック |
|
||||
| **DAGオーケストレータ** | DAGベースのタスク分解と依存関係解決 |
|
||||
| **エージェント思考の可視化** | エージェントの思考、ツール呼び出し、結果をリアルタイム表示 |
|
||||
| **ワンクリックインストール** | ワークスペース作成からGateway再起動まで |
|
||||
| **ワンクリックインストール / 起動** | `install.sh`で自動設定、`start.sh`で全サービス起動 |
|
||||
| **systemd本番デプロイ** | `edict.service`でデーモンプロセス、起動時自動開始 |
|
||||
| **15秒自動同期** | カウントダウン付きライブデータリフレッシュ |
|
||||
| **ダッシュボード認証** | `auth.py`でログイン認証 |
|
||||
| **朝議セレモニー** | 没入型オープニングアニメーション |
|
||||
|
||||
---
|
||||
@@ -367,7 +418,14 @@ edict/
|
||||
|
||||
### フェーズ2 — 制度的深化 🚧
|
||||
- [ ] 御裁可モード(ヒューマン・イン・ザ・ループ)
|
||||
- [ ] 功過簿(エージェントスコアリング)
|
||||
- [x] 功過簿(エージェントスコアリング + モデル推薦 + コスト最適化)
|
||||
- [x] EventBus(Redis Streams疑結合通信)
|
||||
- [x] Outbox Relay(トランザクショナルイベント配信)
|
||||
- [x] ステートマシン監査(厳格なライフサイクル + 監査ログ)
|
||||
- [x] 並列ディスパッチエンジン(指数バックオフリトライ + リソースロック)
|
||||
- [x] DAGオーケストレータ(タスク分解 + 依存関係解決)
|
||||
- [x] ダッシュボード認証(ログイン認証)
|
||||
- [x] ワンクリック起動 / systemd本番デプロイ
|
||||
- [ ] 急使(エージェント間メッセージ可視化)
|
||||
- [ ] 翰林院(ナレッジベース+引用)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user