codexmate 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,413 +1,214 @@
1
- # Codex Mate
1
+ <div align="center">
2
2
 
3
- <div align="center">
3
+ # Codex Mate
4
4
 
5
- <img src="res/logo.png" alt="Codex Mate logo" width="110">
5
+ **Codex / Claude Code / OpenClaw 的本地配置与会话管理工具**
6
6
 
7
- [![Build](https://img.shields.io/github/actions/workflow/status/ymkiux/codexmate/release.yml?label=build)](https://github.com/ymkiux/codexmate/actions/workflows/release.yml)
7
+ > 当前版本:`v0.0.15`
8
+
9
+ [![Build](https://img.shields.io/github/actions/workflow/status/SakuraByteCore/codexmate/release.yml?label=build)](https://github.com/SakuraByteCore/codexmate/actions/workflows/release.yml)
8
10
  [![Version](https://img.shields.io/npm/v/codexmate?label=version&registry_uri=https%3A%2F%2Fregistry.npmjs.org)](https://www.npmjs.com/package/codexmate)
9
11
  [![Downloads](https://img.shields.io/npm/dt/codexmate?label=downloads)](https://www.npmjs.com/package/codexmate)
10
- [![Status](https://img.shields.io/badge/status-alpha-orange)](https://github.com/ymkiux/codexmate)
11
- [![Maintain](https://img.shields.io/github/commit-activity/m/ymkiux/codexmate?label=maintain%2Fmonth)](https://github.com/ymkiux/codexmate/commits)
12
12
  [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
13
13
  [![Node](https://img.shields.io/badge/node-%3E%3D14.0.0-green.svg)](https://nodejs.org)
14
14
 
15
- **A lightweight AI configuration assistant: quickly switch Codex providers/models and Claude Code configs, with a unified session browser**
15
+ [快速开始](#快速开始) · [命令速查](#命令速查) · [Web 界面](#web-界面) · [MCP](#mcp) · [English](README.en.md)
16
16
 
17
17
  </div>
18
18
 
19
19
  ---
20
20
 
21
- <p align="center">English · <a href="README.zh-CN.md">中文版</a></p>
22
-
23
- ![Codex Mate Web UI](res/screenshot.png)
24
-
25
- ## Overview
21
+ ## 这是什么?
26
22
 
27
- One tool to switch Codex/Claude Code providers & models and manage/browse local sessions in one click.
23
+ Codex Mate 提供一套本地优先的 CLI + Web UI,用于统一管理:
28
24
 
29
- ## What You Get
25
+ - Codex provider / model 切换与配置写入
26
+ - Claude Code 配置方案(写入 `~/.claude/settings.json`)
27
+ - OpenClaw JSON5 配置与 Workspace `AGENTS.md`
28
+ - Codex / Claude 本地会话浏览、筛选、导出、删除
29
+ - `codexmate qwen` 快捷透传命令
30
30
 
31
- - One-command provider/model switching
32
- - Local config control with backups
33
- - Lightweight Web UI instead of heavy clients
34
- - Unified session browser (view/export/resume when available)
35
- - Session management: list/filter/export/delete local sessions; keyword search supports Codex and Claude
36
- - New in 0.0.10: Claude sessions are searchable by keywords (e.g., `claude code`, `claude-code`, numeric tokens)
31
+ 项目不依赖云端托管,配置写入你的本地文件,便于审计和回滚。
37
32
 
38
- ## Feature Overview
33
+ ## 为什么选择 Codex Mate?
39
34
 
40
- | Module | Problem | Key Capabilities |
35
+ | 维度 | Codex Mate | 手动维护配置 |
41
36
  | --- | --- | --- |
42
- | Codex Config | Switching providers/models is painful | Provider/model switching, model management, CLI + Web entry points, template-confirmed writes |
43
- | Claude Code Config | Multiple profiles and inconsistent write paths | Profile management, default write to `~/.claude/settings.json` |
44
- | OpenClaw Config | OpenClaw configs are scattered | JSON5 profiles, apply to `~/.openclaw/openclaw.json`, AGENTS workspace management |
45
- | Session Browser | Local sessions are hard to track | List/filter sessions, keyword search (Codex + Claude), export to Markdown, copy resume command (when available), delete and batch cleanup |
46
- | Utilities | Compression/extraction requires extra tools | 7-Zip preferred, JS fallback |
47
-
48
- ## Why Codex Mate
49
-
50
- - Focused on three jobs: Codex provider/model switching + Claude Code config apply + OpenClaw config apply
51
- - Local-first: configs and API keys are written to local files, not the cloud
52
- - Lightweight: CLI + Web, no desktop app required
53
- - Reversible: auto-backup before first takeover
54
-
55
- ## Use Cases
56
-
57
- - Frequent provider/model switching, want a one-command flow
58
- - Use both Codex and Claude Code, want a single entry point
59
- - Need to browse/export local Codex + Claude Code sessions and copy resume commands when available
60
- - Use OpenClaw with multiple profiles, want quick switching
61
- - Multi-project or multi-environment setups that need quick config changes
62
- - Want a visual UI without a heavy client
63
-
64
- ## Scope and Boundaries
65
-
66
- - Only configuration management for Codex, Claude Code, and OpenClaw, not a full all-in-one tool suite
67
- - No built-in proxy/relay/billing dashboard/cloud sync (kept lightweight)
68
- - Web UI runs only when you start it (`codexmate run`)
69
-
70
- ## 30-Second Start (No Install)
71
-
72
- ```bash
73
- npx codexmate@latest status
74
- ```
37
+ | 多工具管理 | Codex + Claude Code + OpenClaw 统一入口 | 多文件、多目录分散修改 |
38
+ | 使用方式 | CLI + 本地 Web UI | 纯手改 TOML / JSON / JSON5 |
39
+ | 会话处理 | 支持浏览、导出、批量清理 | 需要手动定位和处理文件 |
40
+ | 可回滚性 | 首次接管前自动备份 | 易误覆盖、回滚成本高 |
41
+ | 自动化接入 | 提供 MCP stdio(默认只读) | 需自行封装脚本 |
42
+
43
+ ## 核心特性
44
+
45
+ **配置管理**
46
+ - provider / model 切换(`switch` / `use`)
47
+ - Codex `config.toml` 模板确认后写入
48
+ - Claude Code 多配置方案管理与一键应用
49
+ - OpenClaw JSON5 配置方案管理
50
+
51
+ **会话管理**
52
+ - 同页查看 Codex Claude 会话
53
+ - 关键词搜索、来源筛选、cwd 路径筛选
54
+ - 会话导出 Markdown
55
+ - 会话与消息级删除(支持批量)
56
+
57
+ **工程能力**
58
+ - MCP stdio 能力(tools/resources/prompts)
59
+ - 内建代理配置与状态控制(`proxy`)
60
+ - 认证档案管理(`auth`)
61
+ - `codexmate qwen` 兼容启动入口(默认透传 `--yolo`)
62
+ - Zip 压缩/解压(优先系统工具,失败回退 JS 库)
63
+
64
+ ## 架构总览
65
+
66
+ ```mermaid
67
+ flowchart LR
68
+ A[CLI: codexmate] --> B[本地配置文件]
69
+ A --> C[本地 Web UI]
70
+ C --> D[内建 HTTP API]
71
+ D --> B
72
+ D --> E[会话索引与导出]
73
+ A --> F[MCP stdio server]
74
+
75
+ subgraph Local Files
76
+ B1[~/.codex/config.toml]
77
+ B2[~/.claude/settings.json]
78
+ B3[~/.openclaw/openclaw.json]
79
+ B4[sessions/*.jsonl]
80
+ end
81
+
82
+ B --> B1
83
+ B --> B2
84
+ B --> B3
85
+ E --> B4
86
+ ```
87
+
88
+ ## 快速开始
89
+
90
+ ### npm 全局安装
75
91
 
76
- ```bash
77
- npx codexmate@latest run
78
- ```
79
-
80
- Then open `http://localhost:3737` in your browser.
81
-
82
- ## Quick Start
83
-
84
- 1. Install (global):
85
92
  ```bash
86
93
  npm install -g codexmate
87
- ```
88
-
89
- Or run once without install:
90
- ```bash
91
- npx codexmate@latest status
92
- ```
93
-
94
- 2. Run the interactive setup:
95
- ```bash
96
94
  codexmate setup
97
- ```
98
-
99
- 3. Check status:
100
- ```bash
101
95
  codexmate status
102
- ```
103
-
104
- 4. Start the Web UI:
105
- ```bash
106
96
  codexmate run
107
97
  ```
108
98
 
109
- Then open `http://localhost:3737` in your browser.
110
-
111
- ## Alternatives
112
-
113
- - cc-switch: https://github.com/farion1231/cc-switch
114
-
115
- ## Install
116
-
117
- ### Global (Recommended)
118
-
119
- ```bash
120
- npm install -g codexmate
121
- ```
122
-
123
- Package name on npm: `codexmate`.
124
-
125
- Want to update to the latest effects features each time? Install from GitHub (re-run to update):
126
-
127
- ```bash
128
- npm install -g ymkiux/codexmate
129
- ```
130
-
131
- ### Run with npx (No Install)
132
-
133
- ```bash
134
- npx codexmate@latest status
135
- ```
136
-
137
- ```bash
138
- npx codexmate@latest run
139
- ```
99
+ 默认监听 `127.0.0.1:3737`,并尝试自动打开浏览器。
140
100
 
141
- ### From Source
101
+ ### 从源码运行
142
102
 
143
103
  ```bash
144
- git clone https://github.com/ymkiux/codexmate.git
104
+ git clone https://github.com/SakuraByteCore/codexmate.git
145
105
  cd codexmate
146
106
  npm install
147
107
  npm link
148
- ```
149
-
150
- ### Requirements
151
-
152
- - Node.js >= 14
153
- - Windows / macOS / Linux
154
-
155
- ## CLI Cheat Sheet
156
-
157
- | Command | Description |
158
- | --- | --- |
159
- | `codexmate` | Show help and available commands |
160
- | `codexmate setup` | Interactive configuration wizard |
161
- | `codexmate status` | Show current status |
162
- | `codexmate list` | List all providers |
163
- | `codexmate switch <provider>` | Switch provider |
164
- | `codexmate use <model>` | Switch model |
165
- | `codexmate add <name> <URL> [API key]` | Add a provider |
166
- | `codexmate delete <provider>` | Delete a provider |
167
- | `codexmate claude <BaseURL> <API key> [model]` | Write Claude Code config to `~/.claude/settings.json` |
168
- | `codexmate models` | List all models |
169
- | `codexmate add-model <model>` | Add a model |
170
- | `codexmate delete-model <model>` | Delete a model |
171
- | `codexmate run` | Start the Web UI |
172
- | `codexmate mcp [serve] [--transport stdio] [--allow-write\|--read-only]` | Start MCP server over stdio (default read-only) |
173
- | `codexmate export-session --source <codex|claude> (--session-id <ID>|--file <PATH>) [--output <PATH>] [--max-messages <N|all|Infinity>]` | Export a session to Markdown |
174
-
175
- ## MCP (stdio)
176
-
177
- - Transport: `stdio` only
178
- - Default mode: read-only tool set
179
- - Write tools: enable by `--allow-write` or `CODEXMATE_MCP_ALLOW_WRITE=1`
180
- - Sensitive fields in `codexmate.claude.settings.get` are returned as masked values
181
-
182
- ```bash
183
- # Read-only (recommended for external agents)
184
- codexmate mcp serve --read-only
185
-
186
- # Enable write tools explicitly
187
- codexmate mcp serve --allow-write
188
- ```
189
-
190
- Provided MCP domains:
191
-
192
- - `tools`: status/provider/model/session/auth/proxy and config operations
193
- - `resources`: status/providers/sessions snapshots
194
- - `prompts`: built-in diagnose/switch/export templates
195
-
196
- ## Web UI
197
-
198
- Start the Web UI (auto opens browser):
199
-
200
- ```bash
201
- codexmate run
202
- ```
203
-
204
- ### Codex Config Mode
205
-
206
- - View current provider and model status
207
- - Quickly switch provider and model
208
- - Manage available model list
209
- - Edit `~/.codex/AGENTS.md` instruction file (same level as `config.toml`)
210
- - Add/delete custom providers
211
- - Supports Codex config management on Linux/Windows
212
-
213
- ### Claude Code Config Mode (Windows / macOS / Linux)
214
-
215
- - Manage multiple Claude Code profiles
216
- - Configure API key, Base URL, and model
217
- - Default write to `env` in `~/.claude/settings.json`: `env.ANTHROPIC_API_KEY` / `env.ANTHROPIC_BASE_URL` / `env.ANTHROPIC_MODEL`
218
- - One-liner apply via CLI:
219
-
220
- ```bash
221
- codexmate claude https://api.example.com/v1 sk-ant-xxx claude-3-7-sonnet
222
- ```
223
-
224
- - In the Web UI, each Claude configuration card now has a "Share Import Command" button that copies a one-click import command (for example: `codexmate claude <BaseURL> <API Key> <Model>`).
225
-
226
- ### OpenClaw Config Mode
227
-
228
- - Manage multiple OpenClaw JSON5 profiles
229
- - Apply to `~/.openclaw/openclaw.json`
230
- - Manage `AGENTS.md` under the OpenClaw Workspace (default: `~/.openclaw/workspace/AGENTS.md`)
231
-
232
- ### Session Browser
233
-
234
- - View local Codex and Claude Code sessions in one page
235
- - Filter by source (Codex / Claude / All)
236
- - Filter by session path (cwd), auto refresh on selection
237
- - Export selected sessions to Markdown
238
- - Copy resume command when available
239
- - Delete single sessions (local jsonl records)
240
- - Batch delete multiple sessions with partial failure summary
241
- - Delete individual records or multi-select within session details (writes back to original jsonl)
242
-
243
- ### Codex Template Confirmation Mode
244
-
245
- - Codex config changes in Web UI go to a `config.toml` template editor first
246
- - Only writes to `config.toml` after you click "Confirm Apply Template"
247
- - Prevents direct one-click overwrites from the UI
248
-
249
- ## Configuration Files
250
-
251
- Config directory: `~/.codex/`
252
-
253
- - `config.toml` - Codex main config
254
- - `auth.json` - API auth info
255
- - `models.json` - Available model list
256
- - `provider-current-models.json` - Per-provider current model config
257
- - `codexmate-init.json` - First-run marker
258
- - `config.toml.codexmate-backup-*.bak` - Backup created on first takeover
259
-
260
- Claude Code config files:
261
-
262
- - `~/.claude/settings.json` - Runtime config (default write target)
263
- - `~/.claude/settings.json.codexmate-backup-*.bak` - Backup before first overwrite
264
-
265
- OpenClaw config files:
266
-
267
- - `~/.openclaw/openclaw.json` - OpenClaw config (JSON5)
268
- - `~/.openclaw/workspace/AGENTS.md` - OpenClaw workspace instructions
269
-
270
- ## First Run Initialization
271
-
272
- When you run `codexmate` for the first time and an existing `~/.codex/config.toml` is detected that is not managed by Codex Mate:
273
-
274
- - The original file is backed up as `config.toml.codexmate-backup-<timestamp>.bak`
275
- - The original `config.toml` is preserved, and a first-run marker is written
276
- - Only when `CODEXMATE_FORCE_RESET_EXISTING_CONFIG=1` is set will the default config be rebuilt
277
- - Subsequent runs will not repeat this process
278
-
279
- ## Examples
280
-
281
- ### Add a Custom API Provider
282
-
283
- ```bash
284
- codexmate add myapi https://api.example.com/v1 sk-your-api-key
285
- codexmate switch myapi
286
- ```
287
-
288
- ### Switch to a Different Model
289
-
290
- ```bash
291
- codexmate use gpt-4-turbo
292
- ```
293
-
294
- ### Export a Session (CLI)
295
-
296
- ```bash
297
- codexmate export-session --source codex --session-id 123456
298
- codexmate export-session --source claude --file "~/.claude/projects/demo/session.jsonl" --max-messages=all
299
- ```
300
-
301
- By default, exports are capped at 1000 messages. Use `--max-messages=all` (or `Infinity`) to export everything.
302
-
303
- ### Configure Claude Code (Cross-Platform)
304
-
305
- 1. Start the Web UI: `codexmate run`
306
- 2. Switch to "Claude Code Config" mode in the browser
307
- 3. Add a profile (example Zhipu GLM): Name=ZhipuGLM, API Key=your API key, Base URL=`https://open.bigmodel.cn/api/anthropic`, Model=`glm-4.7`
308
- 4. Click the card to apply, or use "Save & Apply to Claude Config" in the editor
309
- 5. Default write to `~/.claude/settings.json`
310
- 6. Restart Claude Code to apply
311
-
312
- ### Start the Web UI
313
-
314
- ```bash
315
108
  codexmate run
316
109
  ```
317
110
 
318
- By default it binds to `127.0.0.1`. To expose on LAN, use `--host` or `CODEXMATE_HOST`:
111
+ ### 测试 / CI(只启动服务)
319
112
 
320
113
  ```bash
321
- codexmate run --host 0.0.0.0
114
+ codexmate run --no-browser
322
115
  ```
323
116
 
324
- Then open `http://localhost:3737` (or your chosen host). Note: binding to `0.0.0.0` is unsafe on untrusted networks.
325
-
326
- ## FAQ
117
+ > 约定:自动化测试仅验证服务与 API,不依赖打开页面。
327
118
 
328
- ### Q: Which operating systems are supported?
119
+ ## 命令速查
329
120
 
330
- A: Codex features support Windows and Linux (CLI and Web). Claude Code config applies to Windows / macOS / Linux (writes to `~/.claude/settings.json`).
121
+ | 命令 | 说明 |
122
+ | --- | --- |
123
+ | `codexmate status` | 查看当前配置状态 |
124
+ | `codexmate setup` | 交互式初始化 |
125
+ | `codexmate list` / `codexmate models` | 查看提供商 / 模型 |
126
+ | `codexmate switch <provider>` / `codexmate use <model>` | 切换 provider / model |
127
+ | `codexmate add <name> <URL> [API_KEY]` | 添加提供商 |
128
+ | `codexmate delete <name>` | 删除提供商 |
129
+ | `codexmate claude <BaseURL> <API_KEY> [model]` | 写入 Claude Code 配置 |
130
+ | `codexmate auth <list\|import\|switch\|delete\|status>` | 认证档案管理 |
131
+ | `codexmate proxy <status\|set\|apply\|enable\|start\|stop>` | 内建代理管理 |
132
+ | `codexmate workflow <list\|get\|validate\|run\|runs>` | MCP 工作流管理 |
133
+ | `codexmate qwen [args...]` | Qwen CLI 透传入口 |
134
+ | `codexmate run [--host <HOST>] [--no-browser]` | 启动 Web UI |
135
+ | `codexmate mcp serve [--read-only\|--allow-write]` | 启动 MCP stdio 服务 |
136
+ | `codexmate export-session --source <codex\|claude> ...` | 导出会话为 Markdown |
137
+ | `codexmate zip <path> [--max:0-9]` / `codexmate unzip <zip> [out]` | 压缩 / 解压 |
331
138
 
332
- ### Q: Where are API keys stored?
139
+ ## Web 界面
333
140
 
334
- A: API keys are stored locally in `~/.codex/config.toml` and are not uploaded.
141
+ ### Codex 配置模式
142
+ - provider / model 切换
143
+ - 模型管理
144
+ - `~/.codex/AGENTS.md` 编辑
145
+ - `~/.codex/skills` 管理(筛选、批量删除、跨应用导入)
335
146
 
336
- ### Q: Is the Web UI safe?
337
147
 
338
- A: The Web UI runs locally; all operations happen on your machine. API keys are masked in the UI.
148
+ ### Claude Code 配置模式
149
+ - 多配置方案管理
150
+ - 默认写入 `~/.claude/settings.json`
151
+ - 支持复制分享导入命令
339
152
 
340
- ### Q: How do Claude Code configs take effect?
153
+ ### OpenClaw 配置模式
154
+ - JSON5 多方案管理
155
+ - 应用到 `~/.openclaw/openclaw.json`
156
+ - 管理 `~/.openclaw/workspace/AGENTS.md`
341
157
 
342
- A: After clicking "Apply to Claude Config", it writes to `~/.claude/settings.json`. Restart Claude Code to apply.
158
+ ### 会话模式
159
+ - Codex + Claude 会话统一列表
160
+ - 搜索、筛选、导出、删除、批量清理
343
161
 
344
- ### Q: How to uninstall?
162
+ ## MCP
345
163
 
346
- A: Run `npm uninstall -g codexmate`.
164
+ > 传输:`stdio`
347
165
 
348
- ## Extras: Compression/Extraction
166
+ - 传输:仅 `stdio`
167
+ - 默认:只读工具集
168
+ - 写入开启:`--allow-write` 或 `CODEXMATE_MCP_ALLOW_WRITE=1`
169
+ - 包含域:`tools`、`resources`、`prompts`
349
170
 
350
- Prefer 7-Zip for multithreaded zip/unzip. Fallback to the built-in JS library when unavailable.
171
+ 示例:
351
172
 
352
173
  ```bash
353
- # Compress file or folder (default compression level 5)
354
- codexmate zip <path>
355
-
356
- # Set compression level (0-9, 0=store only, 9=max)
357
- codexmate zip <path> --max:9
358
-
359
- # Unzip a zip file (default to same-level folder)
360
- codexmate unzip <zip path>
361
-
362
- # Unzip to a specific output directory
363
- codexmate unzip <zip path> <output dir>
174
+ codexmate mcp serve --read-only
175
+ codexmate mcp serve --allow-write
364
176
  ```
365
177
 
366
- Examples:
178
+ ## 配置文件
367
179
 
368
- ```bash
369
- # Compress a project folder
370
- codexmate zip ./my-project
371
-
372
- # Max compression
373
- codexmate zip ./my-project --max:9
180
+ - `~/.codex/config.toml`
181
+ - `~/.codex/auth.json`
182
+ - `~/.codex/models.json`
183
+ - `~/.codex/provider-current-models.json`
184
+ - `~/.claude/settings.json`
185
+ - `~/.openclaw/openclaw.json`
186
+ - `~/.openclaw/workspace/AGENTS.md`
374
187
 
375
- # Store only (fast)
376
- codexmate zip ./large-folder --max:0
188
+ ## 环境变量
377
189
 
378
- # Unzip
379
- codexmate unzip ./my-project.zip
380
-
381
- # Unzip to a target location
382
- codexmate unzip ./backup.zip D:/restored
383
- ```
190
+ | 变量 | 默认值 | 说明 |
191
+ | --- | --- | --- |
192
+ | `CODEXMATE_PORT` | `3737` | Web 服务端口 |
193
+ | `CODEXMATE_HOST` | `127.0.0.1` | Web 服务监听地址 |
194
+ | `CODEXMATE_NO_BROWSER` | 未设置 | 设为 `1` 后不自动打开浏览器 |
195
+ | `CODEXMATE_MCP_ALLOW_WRITE` | 未设置 | 设为 `1` 后默认允许 MCP 写工具 |
196
+ | `CODEXMATE_FORCE_RESET_EXISTING_CONFIG` | `0` | 设为 `1` 时首次可强制重建托管配置 |
384
197
 
385
- Note: 7-Zip is optional. If missing, the built-in JS library is used. `--max` only applies to 7-Zip.
198
+ ## 技术栈
386
199
 
387
- ## Tech Stack
200
+ - Node.js
201
+ - Vue.js 3(Web UI)
202
+ - 原生 HTTP Server
203
+ - `@iarna/toml`、`json5`
388
204
 
389
- - **Node.js** - Runtime
390
- - **@iarna/toml** - TOML parser
391
- - **Vue.js 3** - Web UI framework
392
- - **Native HTTP** - Built-in Web server
205
+ ## 参与贡献
393
206
 
394
- ## Release (GitHub Actions)
207
+ 欢迎提交 Issue Pull Request。
395
208
 
396
- Create a tag that matches `package.json` (for example `v0.0.9`). Then run the `release` workflow in GitHub Actions and input that tag. It will create a GitHub Release and attach the `npm pack` `.tgz` artifact.
209
+ - 英文更新日志:`doc/CHANGELOG.md`
210
+ - 中文更新日志:`doc/CHANGELOG.zh-CN.md`
397
211
 
398
212
  ## License
399
213
 
400
- Apache-2.0 © [ymkiux](https://github.com/ymkiux)
401
-
402
- ## Contributing
403
-
404
- Issues and pull requests are welcome.
405
-
406
- ## Changelog
407
-
408
- See [doc/CHANGELOG.md](doc/CHANGELOG.md) for the English version.
409
- See [doc/CHANGELOG.zh-CN.md](doc/CHANGELOG.zh-CN.md) for the Chinese version.
410
-
411
- ---
412
-
413
- Made with [ymkiux](https://github.com/ymkiux)
214
+ Apache-2.0