@cosmicstack/mercury-agent 1.1.9 → 1.1.12
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 +101 -1
- package/README.zh-CN.md +265 -140
- package/dist/index.js +4473 -1842
- package/dist/index.js.map +1 -1
- package/dist/web/ui/assets/{Chat-DCFkzIwn.js → Chat-DXSn2dY8.js} +2 -2
- package/dist/web/ui/assets/{Chat-DCFkzIwn.js.map → Chat-DXSn2dY8.js.map} +1 -1
- package/dist/web/ui/assets/{Dashboard-B81ollv8.js → Dashboard-1rlAqQ-Y.js} +2 -2
- package/dist/web/ui/assets/{Dashboard-B81ollv8.js.map → Dashboard-1rlAqQ-Y.js.map} +1 -1
- package/dist/web/ui/assets/{Goals-D0cR8yIP.js → Goals-CgSUAXLH.js} +2 -2
- package/dist/web/ui/assets/{Goals-D0cR8yIP.js.map → Goals-CgSUAXLH.js.map} +1 -1
- package/dist/web/ui/assets/{Graph-C3eHp3_J.js → Graph-DnlOWkay.js} +2 -2
- package/dist/web/ui/assets/{Graph-C3eHp3_J.js.map → Graph-DnlOWkay.js.map} +1 -1
- package/dist/web/ui/assets/{Kanban-DrkTRyni.js → Kanban-DRlNiNRF.js} +2 -2
- package/dist/web/ui/assets/{Kanban-DrkTRyni.js.map → Kanban-DRlNiNRF.js.map} +1 -1
- package/dist/web/ui/assets/{Login-GRQ-LjgN.js → Login-BP5524pC.js} +2 -2
- package/dist/web/ui/assets/{Login-GRQ-LjgN.js.map → Login-BP5524pC.js.map} +1 -1
- package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js → MarkdownRenderer-B9KGVD0X.js} +2 -2
- package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js.map → MarkdownRenderer-B9KGVD0X.js.map} +1 -1
- package/dist/web/ui/assets/{Memory-dAZsKmWz.js → Memory-BOQEY0H8.js} +2 -2
- package/dist/web/ui/assets/{Memory-dAZsKmWz.js.map → Memory-BOQEY0H8.js.map} +1 -1
- package/dist/web/ui/assets/{Permissions-DCiyUUfI.js → Permissions-jbFH-toa.js} +2 -2
- package/dist/web/ui/assets/{Permissions-DCiyUUfI.js.map → Permissions-jbFH-toa.js.map} +1 -1
- package/dist/web/ui/assets/{PersonDetail-iZgApJog.js → PersonDetail-Ca8B9io8.js} +2 -2
- package/dist/web/ui/assets/{PersonDetail-iZgApJog.js.map → PersonDetail-Ca8B9io8.js.map} +1 -1
- package/dist/web/ui/assets/{Persons-Bs_HhYjC.js → Persons-epdmUeBM.js} +2 -2
- package/dist/web/ui/assets/{Persons-Bs_HhYjC.js.map → Persons-epdmUeBM.js.map} +1 -1
- package/dist/web/ui/assets/{Providers-CL6wMWni.js → Providers-Bm8sZNZo.js} +2 -2
- package/dist/web/ui/assets/{Providers-CL6wMWni.js.map → Providers-Bm8sZNZo.js.map} +1 -1
- package/dist/web/ui/assets/{Schedules-BQwE1hP5.js → Schedules-BZKhm9R7.js} +2 -2
- package/dist/web/ui/assets/{Schedules-BQwE1hP5.js.map → Schedules-BZKhm9R7.js.map} +1 -1
- package/dist/web/ui/assets/{Settings-26SF-okR.js → Settings-Hii-5oku.js} +2 -2
- package/dist/web/ui/assets/{Settings-26SF-okR.js.map → Settings-Hii-5oku.js.map} +1 -1
- package/dist/web/ui/assets/Skills-BHJp2CgD.js +17 -0
- package/dist/web/ui/assets/Skills-BHJp2CgD.js.map +1 -0
- package/dist/web/ui/assets/{Tasks-DbwRozzx.js → Tasks-D36pqkro.js} +2 -2
- package/dist/web/ui/assets/{Tasks-DbwRozzx.js.map → Tasks-D36pqkro.js.map} +1 -1
- package/dist/web/ui/assets/{Usage-i_q6Ri4s.js → Usage-CmjaYrsT.js} +2 -2
- package/dist/web/ui/assets/{Usage-i_q6Ri4s.js.map → Usage-CmjaYrsT.js.map} +1 -1
- package/dist/web/ui/assets/{Workspace-ZR5syf-9.js → Workspace-BYLf-wTJ.js} +2 -2
- package/dist/web/ui/assets/{Workspace-ZR5syf-9.js.map → Workspace-BYLf-wTJ.js.map} +1 -1
- package/dist/web/ui/assets/{activity-CIP1IzSg.js → activity-MOTqH8zM.js} +2 -2
- package/dist/web/ui/assets/{activity-CIP1IzSg.js.map → activity-MOTqH8zM.js.map} +1 -1
- package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js → alert-dialog-MbYSbZx5.js} +2 -2
- package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js.map → alert-dialog-MbYSbZx5.js.map} +1 -1
- package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js → arrow-left-CtqQsBC6.js} +2 -2
- package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js.map → arrow-left-CtqQsBC6.js.map} +1 -1
- package/dist/web/ui/assets/{avatar-BLsf3GhK.js → avatar-BIYaY7pR.js} +2 -2
- package/dist/web/ui/assets/{avatar-BLsf3GhK.js.map → avatar-BIYaY7pR.js.map} +1 -1
- package/dist/web/ui/assets/{badge-DfDJNUtd.js → badge-CUJiWF1y.js} +2 -2
- package/dist/web/ui/assets/{badge-DfDJNUtd.js.map → badge-CUJiWF1y.js.map} +1 -1
- package/dist/web/ui/assets/{button-TaFPR-zy.js → button-CNasMlFE.js} +2 -2
- package/dist/web/ui/assets/{button-TaFPR-zy.js.map → button-CNasMlFE.js.map} +1 -1
- package/dist/web/ui/assets/{card-DAYo4Zl5.js → card-BdsEOP7t.js} +2 -2
- package/dist/web/ui/assets/{card-DAYo4Zl5.js.map → card-BdsEOP7t.js.map} +1 -1
- package/dist/web/ui/assets/{chevron-down-CQi0yuay.js → chevron-down-CB9J_vvZ.js} +2 -2
- package/dist/web/ui/assets/{chevron-down-CQi0yuay.js.map → chevron-down-CB9J_vvZ.js.map} +1 -1
- package/dist/web/ui/assets/{circle-check-DweDcOkA.js → circle-check-DvGSe1uZ.js} +2 -2
- package/dist/web/ui/assets/{circle-check-DweDcOkA.js.map → circle-check-DvGSe1uZ.js.map} +1 -1
- package/dist/web/ui/assets/{circle-x-BmL20etA.js → circle-x-CyaGJ_BM.js} +2 -2
- package/dist/web/ui/assets/{circle-x-BmL20etA.js.map → circle-x-CyaGJ_BM.js.map} +1 -1
- package/dist/web/ui/assets/{dialog-DovgkMhT.js → dialog-Bd1rELXb.js} +2 -2
- package/dist/web/ui/assets/{dialog-DovgkMhT.js.map → dialog-Bd1rELXb.js.map} +1 -1
- package/dist/web/ui/assets/{download-_QBatDio.js → download-C8RvlFqO.js} +2 -2
- package/dist/web/ui/assets/{download-_QBatDio.js.map → download-C8RvlFqO.js.map} +1 -1
- package/dist/web/ui/assets/{eye-Wpgtfmgw.js → eye-BJ0NucMz.js} +2 -2
- package/dist/web/ui/assets/{eye-Wpgtfmgw.js.map → eye-BJ0NucMz.js.map} +1 -1
- package/dist/web/ui/assets/{file-text-2EGFNyc1.js → file-text-BWWBuD_N.js} +2 -2
- package/dist/web/ui/assets/{file-text-2EGFNyc1.js.map → file-text-BWWBuD_N.js.map} +1 -1
- package/dist/web/ui/assets/{folder-open-C-OiZn9P.js → folder-open-BwjemFy7.js} +2 -2
- package/dist/web/ui/assets/{folder-open-C-OiZn9P.js.map → folder-open-BwjemFy7.js.map} +1 -1
- package/dist/web/ui/assets/{git-branch-BT9gCKgG.js → git-branch-D9JVASpC.js} +2 -2
- package/dist/web/ui/assets/{git-branch-BT9gCKgG.js.map → git-branch-D9JVASpC.js.map} +1 -1
- package/dist/web/ui/assets/{index-BhxU0YlT.js → index-C3YiF4qv.js} +6 -6
- package/dist/web/ui/assets/index-C3YiF4qv.js.map +1 -0
- package/dist/web/ui/assets/{index-CUT6Fr2C.js → index-CaqLZNof.js} +2 -2
- package/dist/web/ui/assets/{index-CUT6Fr2C.js.map → index-CaqLZNof.js.map} +1 -1
- package/dist/web/ui/assets/index-CuhiuVab.css +1 -0
- package/dist/web/ui/assets/{input-L1uz5xAQ.js → input-CH3dmo9r.js} +2 -2
- package/dist/web/ui/assets/{input-L1uz5xAQ.js.map → input-CH3dmo9r.js.map} +1 -1
- package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js → loader-circle-DbYKk0_Q.js} +2 -2
- package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js.map → loader-circle-DbYKk0_Q.js.map} +1 -1
- package/dist/web/ui/assets/{pencil-uxK07iYy.js → pencil-gNDEMhav.js} +2 -2
- package/dist/web/ui/assets/{pencil-uxK07iYy.js.map → pencil-gNDEMhav.js.map} +1 -1
- package/dist/web/ui/assets/{plus-DcWFYr4m.js → plus-7rbHkByr.js} +2 -2
- package/dist/web/ui/assets/{plus-DcWFYr4m.js.map → plus-7rbHkByr.js.map} +1 -1
- package/dist/web/ui/assets/{power-DVIqVIMj.js → power-BS7gCDWs.js} +2 -2
- package/dist/web/ui/assets/{power-DVIqVIMj.js.map → power-BS7gCDWs.js.map} +1 -1
- package/dist/web/ui/assets/{progress-DMwOdxli.js → progress-ZzhsBV2v.js} +2 -2
- package/dist/web/ui/assets/{progress-DMwOdxli.js.map → progress-ZzhsBV2v.js.map} +1 -1
- package/dist/web/ui/assets/{search-D1OOxb1X.js → search-BZsbhO0B.js} +2 -2
- package/dist/web/ui/assets/{search-D1OOxb1X.js.map → search-BZsbhO0B.js.map} +1 -1
- package/dist/web/ui/assets/{select-Dnx_bUgy.js → select-vRSgBrHz.js} +2 -2
- package/dist/web/ui/assets/{select-Dnx_bUgy.js.map → select-vRSgBrHz.js.map} +1 -1
- package/dist/web/ui/assets/{send-D4uxqmyH.js → send-BkyTIUtJ.js} +2 -2
- package/dist/web/ui/assets/{send-D4uxqmyH.js.map → send-BkyTIUtJ.js.map} +1 -1
- package/dist/web/ui/assets/{sparkles-DLSJA4xU.js → sparkles-DcP24GEL.js} +2 -2
- package/dist/web/ui/assets/{sparkles-DLSJA4xU.js.map → sparkles-DcP24GEL.js.map} +1 -1
- package/dist/web/ui/assets/{switch-CvDDbCUA.js → switch-LRN9wWy2.js} +2 -2
- package/dist/web/ui/assets/{switch-CvDDbCUA.js.map → switch-LRN9wWy2.js.map} +1 -1
- package/dist/web/ui/assets/{terminal-DI3J3W_z.js → terminal-CWG62zdD.js} +2 -2
- package/dist/web/ui/assets/{terminal-DI3J3W_z.js.map → terminal-CWG62zdD.js.map} +1 -1
- package/dist/web/ui/assets/{textarea-CXLsr8tf.js → textarea-CXh3tmJ1.js} +2 -2
- package/dist/web/ui/assets/{textarea-CXLsr8tf.js.map → textarea-CXh3tmJ1.js.map} +1 -1
- package/dist/web/ui/assets/{zap-C-0oH5gt.js → zap-BEfqVtvZ.js} +2 -2
- package/dist/web/ui/assets/{zap-C-0oH5gt.js.map → zap-BEfqVtvZ.js.map} +1 -1
- package/dist/web/ui/index.html +2 -2
- package/package.json +9 -4
- package/dist/web/ui/assets/Skills-DANyYK_d.js +0 -7
- package/dist/web/ui/assets/Skills-DANyYK_d.js.map +0 -1
- package/dist/web/ui/assets/index-BhxU0YlT.js.map +0 -1
- package/dist/web/ui/assets/index-DOw1nKre.css +0 -1
- package/dist/web/ui/sw.js.map +0 -1
- package/dist/web/ui/workbox-0bb07689.js +0 -3
- package/dist/web/ui/workbox-0bb07689.js.map +0 -1
package/README.md
CHANGED
|
@@ -32,11 +32,25 @@
|
|
|
32
32
|
|
|
33
33
|
## Quick Start
|
|
34
34
|
|
|
35
|
+
**One-liner install (no Node.js required)** — downloads the latest standalone binary for your OS:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# macOS / Linux
|
|
39
|
+
curl -fsSL https://mercuryagent.sh/install.sh | sh
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
# Windows
|
|
44
|
+
irm https://mercuryagent.sh/install.ps1 | iex
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or via npm if you already have Node.js 20+:
|
|
48
|
+
|
|
35
49
|
```bash
|
|
36
50
|
npx @cosmicstack/mercury-agent
|
|
37
51
|
```
|
|
38
52
|
|
|
39
|
-
Or install globally:
|
|
53
|
+
Or install the npm package globally:
|
|
40
54
|
|
|
41
55
|
```bash
|
|
42
56
|
npm i -g @cosmicstack/mercury-agent
|
|
@@ -179,6 +193,41 @@ Type these during a conversation — they don't consume API tokens. Work on both
|
|
|
179
193
|
| **Scheduler** | `schedule_task`, `list_scheduled_tasks`, `cancel_scheduled_task` |
|
|
180
194
|
| **System** | `budget_status` |
|
|
181
195
|
|
|
196
|
+
## Installing Skills
|
|
197
|
+
|
|
198
|
+
Mercury can pull community-contributed skills from the registry at
|
|
199
|
+
**[skills.mercuryagent.sh](https://skills.mercuryagent.sh)** (126+ skills, no auth required).
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
mercury skills search prompt # search the registry
|
|
203
|
+
mercury skills browse ai-ml # browse by category
|
|
204
|
+
mercury skills view ai-ml/prompt-engineering # render SKILL.md in the terminal
|
|
205
|
+
mercury skills view ai-ml/prompt-engineering --web # open the registry page
|
|
206
|
+
mercury skills install ai-ml/prompt-engineering # install to ~/.mercury/skills/
|
|
207
|
+
mercury skills list # show installed skills
|
|
208
|
+
mercury skills update # refresh all installed skills
|
|
209
|
+
mercury skills remove ai-ml/prompt-engineering
|
|
210
|
+
mercury skills doctor # check install root + registry
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Installed skills land at `~/.mercury/skills/<category>/<slug>/SKILL.md` and are
|
|
214
|
+
picked up by the agent on the next boot — they're treated identically to
|
|
215
|
+
built-in skills.
|
|
216
|
+
|
|
217
|
+
> **Review before you ship.** Skills are community-contributed and unaudited.
|
|
218
|
+
> Run `mercury skills view <id>` before installing.
|
|
219
|
+
|
|
220
|
+
Overrides: `--registry <url>` (or `MERCURY_SKILLS_REGISTRY`) for self-hosted
|
|
221
|
+
registries, `MERCURY_SKILLS_INSTALL_ROOT` for an alternate install path,
|
|
222
|
+
`--json` for machine-readable output.
|
|
223
|
+
|
|
224
|
+
**Also installable from:**
|
|
225
|
+
|
|
226
|
+
- **Web dashboard** — `http://127.0.0.1:6174/skills` has a registry installer (paste `category/slug`) and a URL installer side by side.
|
|
227
|
+
- **Telegram** — `/skills`, `/skills search <q>`, `/skills view <id>`, `/skills install <id>` (admin-only). Every result includes the registry URL so you can review before installing.
|
|
228
|
+
|
|
229
|
+
See the [Skills reference](https://mercuryagent.sh/docs/reference/skills) for the full command surface, frontmatter spec, and API endpoints.
|
|
230
|
+
|
|
182
231
|
## Web Dashboard
|
|
183
232
|
|
|
184
233
|
Mercury includes a built-in web UI at `http://127.0.0.1:6174`:
|
|
@@ -316,6 +365,57 @@ When a provider fails, Mercury automatically tries the next one. It remembers th
|
|
|
316
365
|
- **Daemon manager** — Background spawn + PID file + watchdog crash recovery
|
|
317
366
|
- **System services** — macOS LaunchAgent, Linux systemd, Windows Task Scheduler
|
|
318
367
|
|
|
368
|
+
## Build From Source
|
|
369
|
+
|
|
370
|
+
You can build Mercury yourself from source — either the standard Node bundle (for `npm link` / local development) or a **standalone executable** that bundles the entire runtime, so end-users don't need Node.js installed at all.
|
|
371
|
+
|
|
372
|
+
### Prerequisites
|
|
373
|
+
|
|
374
|
+
- **Node.js ≥ 20** (for the build toolchain)
|
|
375
|
+
- **[Bun](https://bun.sh) ≥ 1.3** (only required for standalone binaries; install with `curl -fsSL https://bun.sh/install | bash`)
|
|
376
|
+
|
|
377
|
+
### Standard build (ESM bundle)
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
git clone https://github.com/cosmicstack-labs/mercury-agent.git
|
|
381
|
+
cd mercury-agent
|
|
382
|
+
npm install
|
|
383
|
+
npm run build # builds dist/ via tsup + post-build (UI, static assets)
|
|
384
|
+
npm start # node dist/index.js
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Standalone executable (no Node.js required for end users)
|
|
388
|
+
|
|
389
|
+
Mercury can be compiled into a single self-contained binary using `bun build --compile`. The resulting file embeds the Bun runtime and the full Mercury bundle.
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
npm run build:bin # host platform only
|
|
393
|
+
npm run build:bin:all # all 5 targets (macOS arm64/x64, Linux x64/arm64, Windows x64)
|
|
394
|
+
npm run build:bin:force # rebuild (overwrite existing binary for the same version)
|
|
395
|
+
npm run build:bin:all:force # rebuild all targets
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Output is **versioned** so older builds are never overwritten:
|
|
399
|
+
|
|
400
|
+
```
|
|
401
|
+
release/
|
|
402
|
+
├── latest → symlink to most-recent version
|
|
403
|
+
├── v1.1.9/
|
|
404
|
+
│ ├── mercury-macos-arm64
|
|
405
|
+
│ ├── mercury-macos-x64
|
|
406
|
+
│ ├── mercury-linux-x64
|
|
407
|
+
│ ├── mercury-linux-arm64
|
|
408
|
+
│ ├── mercury-win-x64.exe
|
|
409
|
+
│ └── checksums.txt (SHA-256 for every binary)
|
|
410
|
+
└── v1.2.0/ …
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
The version is read from `package.json` — bump it before building to produce a fresh folder. Re-running for the same version skips already-built targets unless `--force` is passed.
|
|
414
|
+
|
|
415
|
+
**Cross-compilation**: Bun produces binaries for every target from a single host. Native modules (`better-sqlite3`) can't cross-compile, but Mercury gracefully falls back to `sql.js` (pure JS + wasm) so the cross-compiled binaries still work end-to-end.
|
|
416
|
+
|
|
417
|
+
**macOS Gatekeeper**: unsigned binaries trigger a warning on first launch. For distribution, sign with `codesign --sign "Developer ID" release/v<version>/mercury-macos-arm64` and notarize.
|
|
418
|
+
|
|
319
419
|
## License
|
|
320
420
|
|
|
321
421
|
MIT © [Cosmic Stack](https://github.com/cosmicstack-labs)
|
package/README.zh-CN.md
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
|
-
# Mercury Agent
|
|
1
|
+
# Mercury — 以灵魂驱动的 AI Agent
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/img/card-dark.png">
|
|
6
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/img/card-light.png">
|
|
7
|
+
<img alt="Mercury — Soul-Driven AI Agent" src="docs/img/card-light.png" width="600">
|
|
8
|
+
</picture>
|
|
9
|
+
</p>
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
<strong>以灵魂驱动、内置权限加固工具、Token 预算和多渠道访问的 AI Agent。</strong>
|
|
13
|
+
</p>
|
|
6
14
|
|
|
7
|
-
|
|
15
|
+
<p align="center">
|
|
16
|
+
记住重要信息。行动前先请求确认。通过 CLI 或 Telegram 全天候运行。31 个内置工具、可扩展的 Skills、基于 SQLite 的第二大脑记忆。
|
|
17
|
+
</p>
|
|
8
18
|
|
|
9
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://www.npmjs.com/package/@cosmicstack/mercury-agent"><img src="https://img.shields.io/npm/v/@cosmicstack/mercury-agent" alt="npm"></a>
|
|
21
|
+
<a href="https://github.com/cosmicstack-labs/mercury-agent"><img src="https://img.shields.io/github/license/cosmicstack-labs/mercury-agent" alt="license"></a>
|
|
22
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/node/v/@cosmicstack/mercury-agent" alt="node"></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<strong>🔖 当前稳定版:v1.1.6</strong>
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="README.md">English</a> | 简体中文
|
|
31
|
+
</p>
|
|
10
32
|
|
|
11
|
-
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 快速开始
|
|
12
36
|
|
|
13
37
|
```bash
|
|
14
38
|
npx @cosmicstack/mercury-agent
|
|
@@ -21,223 +45,324 @@ npm i -g @cosmicstack/mercury-agent
|
|
|
21
45
|
mercury
|
|
22
46
|
```
|
|
23
47
|
|
|
24
|
-
|
|
48
|
+
首次运行会触发设置向导(姓名、Provider、可选 Telegram)。设置完成后,Mercury 打开 Ink TUI 启动画面,并在聊天开始前请求权限模式(`Ask Me` 或 `Allow All`)。
|
|
49
|
+
|
|
50
|
+
之后重新配置(更改 key、名称、设置):
|
|
25
51
|
|
|
26
52
|
```bash
|
|
27
53
|
mercury doctor
|
|
54
|
+
mercury doctor --platform
|
|
28
55
|
```
|
|
29
56
|
|
|
30
|
-
## 为什么选择 Mercury
|
|
57
|
+
## 为什么选择 Mercury?
|
|
58
|
+
|
|
59
|
+
每个 AI Agent 都能读写文件、运行命令和获取 URL。大多数默默做这些事。**Mercury 先询问 — 并且记住重要的事。**
|
|
60
|
+
|
|
61
|
+
- **权限加固** — Shell 黑名单(`sudo`、`rm -rf /` 等永不执行)。目录级读/写作用域。待批准流程。会话级"问我"或"全部允许"。无意外。
|
|
62
|
+
- **第二大脑** — 基于 SQLite + FTS5 全文搜索的持久化结构化记忆。10 种记忆类型、自动提取、冲突解决、自动整合。Mercury 无需手动输入即可学习你的偏好、目标和习惯。
|
|
63
|
+
- **灵魂驱动** — 人格由你拥有的 Markdown 文件定义(`soul.md`、`persona.md`、`taste.md`、`heartbeat.md`)。无企业包装。
|
|
64
|
+
- **Token 感知** — 每日预算强制执行。超过 70% 时自动简洁。`/budget` 命令查看、重置或覆盖。
|
|
65
|
+
- **实时流式输出** — CLI 实时 Token 流式输出,带光标保存/恢复和 markdown 重渲染。Telegram 流式输出配合可编辑状态消息。
|
|
66
|
+
- **全天候运行** — 在任何操作系统上作为后台守护进程运行。崩溃后自动重启。开机自启。Crontab 调度、心跳监控和主动通知。
|
|
67
|
+
- **可扩展** — 一条命令安装社区 Skills。将 Skills 调度为循环任务。基于 [Agent Skills](https://agentskills.io) 规范。
|
|
31
68
|
|
|
32
|
-
-
|
|
33
|
-
- **Second Brain 记忆**:基于 SQLite 和 FTS5 的结构化持久记忆,支持自动提取、相关召回、冲突处理和自动整理。
|
|
34
|
-
- **灵魂驱动**:人格由你拥有的 Markdown 文件定义,包括 `soul.md`、`persona.md`、`taste.md` 和 `heartbeat.md`。
|
|
35
|
-
- **Token 感知**:内置每日 Token 预算,超过阈值后自动简洁回复,并支持 `/budget` 查看、重置或临时覆盖。
|
|
36
|
-
- **实时流式输出**:CLI 支持实时 Token 流和 Markdown 重渲染,Telegram 支持可编辑状态消息。
|
|
37
|
-
- **持续运行**:可作为后台守护进程运行,崩溃后自动重启,并支持开机自启、定时任务和主动通知。
|
|
38
|
-
- **可扩展**:支持安装社区 Skill、调度 Skill 定时运行,并兼容 [Agent Skills](https://agentskills.io) 规范。
|
|
69
|
+
Mercury 现在在首次运行时在 `~/.mercury/skills/web-search/SKILL.md` 中植入默认 `web-search` Skill。
|
|
39
70
|
|
|
40
71
|
## 守护进程模式
|
|
41
72
|
|
|
42
|
-
|
|
73
|
+
**一条命令让 Mercury 持久化:**
|
|
43
74
|
|
|
44
75
|
```bash
|
|
45
76
|
mercury up
|
|
46
77
|
```
|
|
47
78
|
|
|
48
|
-
|
|
79
|
+
这会安装系统服务(如果未安装)、启动后台守护进程,并确保 Mercury 正在运行。将此作为你的常用命令。
|
|
49
80
|
|
|
50
|
-
|
|
81
|
+
如果 Mercury 已在运行,`mercury up` 仅确认状态并显示 PID。
|
|
82
|
+
|
|
83
|
+
### 其他守护进程命令
|
|
51
84
|
|
|
52
85
|
```bash
|
|
53
86
|
mercury restart # 重启后台进程
|
|
54
87
|
mercury stop # 停止后台进程
|
|
55
|
-
mercury start -d #
|
|
88
|
+
mercury start -d # 后台启动(不安装服务)
|
|
56
89
|
mercury logs # 查看近期守护进程日志
|
|
57
|
-
mercury status #
|
|
90
|
+
mercury status # 显示守护进程是否运行
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
守护进程模式内置崩溃恢复 — 如果进程崩溃,它会自动重启并使用指数退避(最高每分钟 10 次重启)。
|
|
94
|
+
|
|
95
|
+
### 系统服务(开机自启)
|
|
96
|
+
|
|
97
|
+
`mercury up` 自动安装此服务。你也可以直接管理它:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
mercury service install
|
|
58
101
|
```
|
|
59
102
|
|
|
60
|
-
|
|
103
|
+
| 平台 | 方式 | 需要管理员 |
|
|
104
|
+
|------|------|-----------|
|
|
105
|
+
| **macOS** | LaunchAgent (`~/Library/LaunchAgents/`) | 否 |
|
|
106
|
+
| **Linux** | systemd user unit (`~/.config/systemd/user/`) | 否(开机自启可能需要 linger) |
|
|
107
|
+
| **Windows** | Task Scheduler (`schtasks`) | 否 |
|
|
61
108
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
109
|
+
```bash
|
|
110
|
+
mercury service status # 检查服务是否运行
|
|
111
|
+
mercury service uninstall # 移除系统服务
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
在守护进程模式下,Telegram 成为主要渠道 — CLI 是纯日志,因为没有终端输入。
|
|
67
115
|
|
|
68
116
|
## CLI 命令
|
|
69
117
|
|
|
70
|
-
| 命令 |
|
|
118
|
+
| 命令 | 描述 |
|
|
71
119
|
|------|------|
|
|
72
|
-
| `mercury up` |
|
|
73
|
-
| `mercury` | 启动 Agent
|
|
120
|
+
| `mercury up` | **推荐。** 安装服务 + 启动守护进程 + 确保运行 |
|
|
121
|
+
| `mercury` | 启动 Agent(等同于 `mercury start`) |
|
|
74
122
|
| `mercury start` | 前台启动 |
|
|
75
|
-
| `mercury start -d` |
|
|
123
|
+
| `mercury start -d` | 后台启动(守护进程模式) |
|
|
76
124
|
| `mercury restart` | 重启后台进程 |
|
|
77
125
|
| `mercury stop` | 停止后台进程 |
|
|
78
|
-
| `mercury logs` |
|
|
79
|
-
| `mercury doctor` |
|
|
80
|
-
| `mercury
|
|
81
|
-
| `mercury
|
|
82
|
-
| `mercury
|
|
126
|
+
| `mercury logs` | 查看近期守护进程日志 |
|
|
127
|
+
| `mercury doctor` | 重新配置(姓名、Provider、渠道、权限默认项) |
|
|
128
|
+
| `mercury doctor --platform` | 显示跨平台终端/守护进程兼容性诊断 |
|
|
129
|
+
| `mercury setup` | 重新运行设置向导 |
|
|
130
|
+
| `mercury status` | 显示配置和守护进程状态 |
|
|
131
|
+
| `mercury help` | 显示完整手册 |
|
|
83
132
|
| `mercury upgrade` | 升级到最新版本 |
|
|
84
|
-
| `mercury telegram list` |
|
|
133
|
+
| `mercury telegram list` | 列出已批准和待处理的 Telegram 用户 |
|
|
85
134
|
| `mercury telegram approve <code\|id>` | 批准配对码或待处理请求 |
|
|
86
|
-
| `mercury telegram reject <id>` |
|
|
87
|
-
| `mercury telegram remove <id>` |
|
|
88
|
-
| `mercury telegram promote <id>` | 将 Telegram
|
|
135
|
+
| `mercury telegram reject <id>` | 拒绝待处理的 Telegram 访问请求 |
|
|
136
|
+
| `mercury telegram remove <id>` | 移除已批准的 Telegram 用户 |
|
|
137
|
+
| `mercury telegram promote <id>` | 将 Telegram 成员晋升为管理员 |
|
|
89
138
|
| `mercury telegram demote <id>` | 将 Telegram 管理员降级为成员 |
|
|
90
|
-
| `mercury telegram reset` |
|
|
91
|
-
| `mercury service install` |
|
|
139
|
+
| `mercury telegram reset` | 清除所有 Telegram 访问并重新开始 |
|
|
140
|
+
| `mercury service install` | 安装为系统服务(开机自启) |
|
|
92
141
|
| `mercury service uninstall` | 卸载系统服务 |
|
|
93
|
-
| `mercury service status` |
|
|
142
|
+
| `mercury service status` | 显示系统服务状态 |
|
|
94
143
|
| `mercury --verbose` | 使用调试日志启动 |
|
|
95
144
|
|
|
96
145
|
## 对话内命令
|
|
97
146
|
|
|
98
|
-
|
|
147
|
+
在对话中输入这些 — 它们不消耗 API Token。CLI 和 Telegram 都适用。
|
|
99
148
|
|
|
100
|
-
| 命令 |
|
|
149
|
+
| 命令 | 描述 |
|
|
101
150
|
|------|------|
|
|
102
|
-
| `/help` |
|
|
103
|
-
| `/status` |
|
|
104
|
-
| `/tools` |
|
|
105
|
-
| `/skills` |
|
|
151
|
+
| `/help` | 显示完整手册 |
|
|
152
|
+
| `/status` | 显示 Agent 配置、预算和用量 |
|
|
153
|
+
| `/tools` | 列出所有已加载的工具 |
|
|
154
|
+
| `/skills` | 列出已安装的 Skills |
|
|
106
155
|
| `/stream` | 切换 Telegram 文本流式输出 |
|
|
107
|
-
| `/stream off` |
|
|
108
|
-
| `/budget` |
|
|
109
|
-
| `/budget override` |
|
|
156
|
+
| `/stream off` | 禁用流式输出(单条消息) |
|
|
157
|
+
| `/budget` | 显示 Token 预算状态 |
|
|
158
|
+
| `/budget override` | 单次请求覆盖预算 |
|
|
110
159
|
| `/budget reset` | 将用量重置为零 |
|
|
111
|
-
| `/budget set <n>` |
|
|
112
|
-
| `/permissions` |
|
|
113
|
-
| `/view` |
|
|
114
|
-
| `/view balanced` |
|
|
115
|
-
| `/view detailed` |
|
|
116
|
-
| `/
|
|
117
|
-
| `/
|
|
160
|
+
| `/budget set <n>` | 更改每日 Token 预算 |
|
|
161
|
+
| `/permissions` | 更改权限模式(问我 / 全部允许) |
|
|
162
|
+
| `/view` | 切换进度视图(平衡 / 详细) |
|
|
163
|
+
| `/view balanced` | 设置精简进度视图 |
|
|
164
|
+
| `/view detailed` | 设置完整进度视图 |
|
|
165
|
+
| `/code agent <task>` | 将编码任务委托给后台子 Agent |
|
|
166
|
+
| `/ws exit` | 退出工作区 IDE 模式回到常规聊天 |
|
|
167
|
+
| `/tasks` | 列出调度任务 |
|
|
168
|
+
| `/memory` | 查看和管理第二大脑记忆 |
|
|
118
169
|
| `/unpair` | Telegram:重置所有访问 |
|
|
119
170
|
|
|
120
171
|
## 内置工具
|
|
121
172
|
|
|
122
173
|
| 分类 | 工具 |
|
|
123
174
|
|------|------|
|
|
124
|
-
|
|
|
125
|
-
| Shell | `run_command
|
|
126
|
-
|
|
|
127
|
-
| Git | `git_status
|
|
128
|
-
| Web | `fetch_url` |
|
|
129
|
-
| Skills | `install_skill
|
|
130
|
-
|
|
|
131
|
-
|
|
|
175
|
+
| **文件系统** | `read_file`、`write_file`、`create_file`、`edit_file`、`list_dir`、`delete_file`、`send_file`、`approve_scope` |
|
|
176
|
+
| **Shell** | `run_command`、`cd`、`approve_command` |
|
|
177
|
+
| **消息** | `send_message` |
|
|
178
|
+
| **Git** | `git_status`、`git_diff`、`git_log`、`git_add`、`git_commit`、`git_push` |
|
|
179
|
+
| **Web** | `fetch_url` |
|
|
180
|
+
| **Skills** | `install_skill`、`list_skills`、`use_skill` |
|
|
181
|
+
| **调度器** | `schedule_task`、`list_scheduled_tasks`、`cancel_scheduled_task` |
|
|
182
|
+
| **系统** | `budget_status` |
|
|
132
183
|
|
|
133
184
|
## 渠道
|
|
134
185
|
|
|
135
|
-
| 渠道 |
|
|
186
|
+
| 渠道 | 特性 |
|
|
136
187
|
|------|------|
|
|
137
|
-
| CLI | Ink TUI
|
|
138
|
-
| Telegram | HTML
|
|
188
|
+
| **CLI** | Ink TUI、启动权限模式选择器、交互式权限提示(方向键 + Enter;Y/N/A 快捷键)、进度视图(平衡/详细)、实时流式输出 |
|
|
189
|
+
| **Telegram** | HTML 格式化、可编辑流式消息、文件上传、输入状态指示器、多用户访问与管理员/成员角色 |
|
|
190
|
+
|
|
191
|
+
### 工作区/编码快捷键(CLI)
|
|
192
|
+
|
|
193
|
+
- `Ctrl+P` → 切换到计划模式
|
|
194
|
+
- `Ctrl+X` → 切换到执行模式
|
|
195
|
+
- `Esc` 或 `Ctrl+Q` → 退出工作区回到常规聊天
|
|
196
|
+
- `Ctrl+V` → 切换进度视图(当终端拦截 Ctrl+V 时 `/view` 作为后备)
|
|
139
197
|
|
|
140
|
-
###
|
|
198
|
+
### Spotify UI 注意事项(CLI)
|
|
141
199
|
|
|
142
|
-
|
|
200
|
+
- Spotify 面板支持键盘快捷键:`N` 下一曲、`P` 上一曲、`+/-` 音量、`Z` 正在播放。
|
|
201
|
+
- 内联专辑封面是可选的且安全屏蔽:
|
|
202
|
+
- 用 `MERCURY_SPOTIFY_ART=1` 启用
|
|
203
|
+
- 目前仅在本地 iTerm 会话中渲染
|
|
204
|
+
- 在 SSH/移动端/轻量终端中自动回退到纯文本 UI
|
|
143
205
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
-
|
|
206
|
+
### Telegram 访问
|
|
207
|
+
|
|
208
|
+
Mercury 使用**组织访问模型**,包含管理员和成员。
|
|
209
|
+
|
|
210
|
+
- **首次设置:** 向你的 Bot 发送 `/start`,收到配对码,然后在 CLI 中输入 `mercury telegram approve <code>`。你成为首位管理员。
|
|
211
|
+
- **其他用户:** 发送 `/start` 请求访问。管理员从 CLI 批准或拒绝。
|
|
212
|
+
- **角色:** 管理员可以批准/拒绝请求、晋升/降级用户和重置访问。成员可以与 Mercury 聊天。
|
|
213
|
+
- **重置:** 管理员可以在 Telegram 发送 `/unpair`,或在 CLI 中运行 `mercury telegram reset` 清除所有访问并重新开始。
|
|
214
|
+
- 仅限私聊 — 群组消息始终被忽略。
|
|
215
|
+
|
|
216
|
+
CLI 命令:`mercury telegram list|approve|reject|remove|promote|demote|reset`
|
|
149
217
|
|
|
150
218
|
## 调度器
|
|
151
219
|
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
220
|
+
- **循环**:使用 cron 表达式的 `schedule_task`(`0 9 * * *` 每天 9 点)
|
|
221
|
+
- **一次性**:使用 `delay_seconds` 的 `schedule_task`(例如 15 秒)
|
|
222
|
+
- 任务持久化到 `~/.mercury/schedules.yaml`,重启后恢复
|
|
223
|
+
- 响应路由回创建任务的渠道
|
|
156
224
|
|
|
157
|
-
##
|
|
225
|
+
## 第二大脑
|
|
158
226
|
|
|
159
|
-
Mercury
|
|
227
|
+
Mercury 构建一个结构化、持久化的记忆,随每次对话增长。默认启用,自动提取、存储和召回关于你的事实。
|
|
160
228
|
|
|
161
|
-
- 10
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
229
|
+
- **10 种记忆类型** — identity、preference、goal、project、habit、decision、constraint、relationship、episode、reflection
|
|
230
|
+
- **自动提取** — 每轮对话后,Mercury 提取 0–3 条带置信度、重要性和持久性分数的事实
|
|
231
|
+
- **相关召回** — 每次消息前,将最匹配的 5 条记忆(900 字符预算)注入上下文
|
|
232
|
+
- **自动整合** — 每 60 分钟,Mercury 构建个人资料摘要、活跃状态摘要,并从模式生成反思
|
|
233
|
+
- **冲突解决** — 对立记忆按置信度(更高者胜出)或新旧(更新者胜出)解决
|
|
234
|
+
- **自动修剪** — 活跃作用域记忆 21 天后过期;推断记忆会衰减;低置信度持久记忆 120 天后清除
|
|
235
|
+
- **用户控制** — `/memory` 用于概览、搜索、暂停、恢复和清除
|
|
236
|
+
- **禁用** — `SECOND_BRAIN_ENABLED=false` 环境变量或配置中的 `memory.secondBrain.enabled: false`
|
|
169
237
|
|
|
170
|
-
|
|
238
|
+
所有数据保留在你机器的 `~/.mercury/memory/second-brain/second-brain.db`(SQLite + FTS5)。不上云。
|
|
171
239
|
|
|
172
|
-
##
|
|
240
|
+
## 配置
|
|
173
241
|
|
|
174
|
-
|
|
242
|
+
所有运行时数据位于 `~/.mercury/` — 不在你的项目目录中。
|
|
175
243
|
|
|
176
244
|
| 路径 | 用途 |
|
|
177
245
|
|------|------|
|
|
178
|
-
| `~/.mercury/mercury.yaml` |
|
|
179
|
-
| `~/.mercury/.env` | API
|
|
180
|
-
| `~/.mercury/soul/*.md` | Agent
|
|
246
|
+
| `~/.mercury/mercury.yaml` | 主配置(Provider、渠道、预算) |
|
|
247
|
+
| `~/.mercury/.env` | API key 和 Token(与项目 .env 一起加载) |
|
|
248
|
+
| `~/.mercury/soul/*.md` | Agent 人格(soul、persona、taste、heartbeat) |
|
|
181
249
|
| `~/.mercury/permissions.yaml` | 能力和审批规则 |
|
|
182
|
-
| `~/.mercury/skills/` |
|
|
183
|
-
| `~/.mercury/schedules.yaml` |
|
|
184
|
-
| `~/.mercury/token-usage.json` | 每日 Token
|
|
185
|
-
| `~/.mercury/memory/short-term/` |
|
|
186
|
-
| `~/.mercury/memory/long-term/` |
|
|
187
|
-
| `~/.mercury/memory/episodic/` |
|
|
188
|
-
| `~/.mercury/memory/second-brain/` |
|
|
250
|
+
| `~/.mercury/skills/` | 已安装的 Skills |
|
|
251
|
+
| `~/.mercury/schedules.yaml` | 调度任务 |
|
|
252
|
+
| `~/.mercury/token-usage.json` | 每日 Token 用量跟踪 |
|
|
253
|
+
| `~/.mercury/memory/short-term/` | 每段对话的 JSON 文件 |
|
|
254
|
+
| `~/.mercury/memory/long-term/` | 自动提取的事实(JSONL) |
|
|
255
|
+
| `~/.mercury/memory/episodic/` | 带时间戳的事件日志(JSONL) |
|
|
256
|
+
| `~/.mercury/memory/second-brain/` | 结构化记忆数据库(SQLite + FTS5) |
|
|
189
257
|
| `~/.mercury/daemon.pid` | 后台进程 PID |
|
|
190
|
-
| `~/.mercury/daemon.log` |
|
|
258
|
+
| `~/.mercury/daemon.log` | 守护进程模式日志 |
|
|
259
|
+
|
|
260
|
+
## Provider 兜底
|
|
261
|
+
|
|
262
|
+
配置多个 LLM Provider。Mercury 按顺序尝试并自动兜底:
|
|
191
263
|
|
|
192
|
-
|
|
264
|
+
| Provider | 默认模型 | API Key | 备注 |
|
|
265
|
+
|----------|----------|---------|------|
|
|
266
|
+
| **DeepSeek** | deepseek-chat | `DEEPSEEK_API_KEY` | 默认,成本效益高 |
|
|
267
|
+
| **OpenAI** | gpt-4o-mini | `OPENAI_API_KEY` | GPT-4o、o3 等 |
|
|
268
|
+
| **Anthropic** | claude-sonnet-4 | `ANTHROPIC_API_KEY` | Claude Sonnet、Haiku、Opus |
|
|
269
|
+
| **Grok (xAI)** | grok-4 | `GROK_API_KEY` | OpenAI 兼容端点 |
|
|
270
|
+
| **Ollama Cloud** | gpt-oss:120b | `OLLAMA_CLOUD_API_KEY` | 通过 API 的远程 Ollama |
|
|
271
|
+
| **Ollama Local** | gpt-oss:20b | 无需 Key | 本地 Ollama 实例 |
|
|
193
272
|
|
|
194
|
-
Mercury
|
|
273
|
+
当 Provider 失败时,Mercury 自动尝试下一个。它记住最后一个成功的 Provider,并在下次请求时从那里开始。
|
|
195
274
|
|
|
196
|
-
|
|
197
|
-
|--------|----------|---------|------|
|
|
198
|
-
| DeepSeek | `deepseek-chat` | `DEEPSEEK_API_KEY` | 默认、成本较低 |
|
|
199
|
-
| OpenAI | `gpt-4o-mini` | `OPENAI_API_KEY` | 支持 GPT-4o、o3 等 |
|
|
200
|
-
| Anthropic | `claude-sonnet-4` | `ANTHROPIC_API_KEY` | Claude Sonnet、Haiku、Opus |
|
|
201
|
-
| Grok (xAI) | `grok-4` | `GROK_API_KEY` | OpenAI 兼容接口 |
|
|
202
|
-
| Ollama Cloud | `gpt-oss:120b` | `OLLAMA_CLOUD_API_KEY` | 远程 Ollama API |
|
|
203
|
-
| Ollama Local | `gpt-oss:20b` | 无需 Key | 本地 Ollama 实例 |
|
|
275
|
+
> **更多 Provider 即将到来** — Google Gemini、Mistral 等已在路线图上。Mercury 的 OpenAI 兼容架构也支持通过 base URL 配置自定义端点。
|
|
204
276
|
|
|
205
277
|
## 架构
|
|
206
278
|
|
|
207
|
-
- TypeScript + Node.js
|
|
208
|
-
- Vercel AI SDK v4
|
|
209
|
-
- grammY Telegram Bot
|
|
210
|
-
- SQLite + FTS5
|
|
211
|
-
- JSONL
|
|
212
|
-
-
|
|
213
|
-
- macOS、Linux、Windows
|
|
279
|
+
- **TypeScript + Node.js 18+** — ESM,tsup 构建
|
|
280
|
+
- **Vercel AI SDK v4** — `generateText` + `streamText`,10 步 Agent 循环,Provider 兜底
|
|
281
|
+
- **grammY** — Telegram Bot,带输入指示器、可编辑流式输出和文件上传
|
|
282
|
+
- **SQLite + FTS5** — 第二大脑,带全文搜索、冲突解决、自动整合
|
|
283
|
+
- **JSONL** — 短期、长期和情景对话记忆
|
|
284
|
+
- **守护进程管理器** — 后台生成 + PID 文件 + 看门狗崩溃恢复
|
|
285
|
+
- **系统服务** — macOS LaunchAgent、Linux systemd、Windows Task Scheduler
|
|
214
286
|
|
|
215
|
-
##
|
|
287
|
+
## 许可证
|
|
216
288
|
|
|
217
|
-
|
|
289
|
+
MIT © [Cosmic Stack](https://github.com/cosmicstack-labs)
|
|
218
290
|
|
|
219
|
-
|
|
220
|
-
npm install
|
|
221
|
-
npm run build
|
|
222
|
-
```
|
|
291
|
+
---
|
|
223
292
|
|
|
224
|
-
|
|
293
|
+
## 免责声明
|
|
225
294
|
|
|
226
|
-
|
|
227
|
-
- 面向 Agent 循环设计,尽量保持幂等。
|
|
228
|
-
- 避免冗长输出和过度日志,Token 预算是核心约束。
|
|
229
|
-
- CLI 和 Telegram 行为应尽量一致。
|
|
230
|
-
- 新增依赖、破坏性变更和 soul/persona 系统调整应先讨论。
|
|
295
|
+
**这是 AI 软件 — 有时可能会出问题,请自行评估风险后使用。**
|
|
231
296
|
|
|
232
|
-
|
|
297
|
+
---
|
|
233
298
|
|
|
234
|
-
|
|
299
|
+
## 参与贡献
|
|
235
300
|
|
|
236
|
-
|
|
301
|
+
我们欢迎贡献!Mercury 是为演进而构建的,我们欢迎社区的帮助。无论是修复 bug、添加工具、改善记忆还是改进 soul — 所有高质量的贡献都受欢迎。
|
|
237
302
|
|
|
238
|
-
|
|
239
|
-
- 邮箱:[mercury@cosmicstack.org](mailto:mercury@cosmicstack.org)
|
|
303
|
+
### 🎯 Agent 专业知识 — 贡献者必读
|
|
240
304
|
|
|
241
|
-
|
|
305
|
+
Mercury 不只是一个开源项目 — 它是一个**以灵魂驱动的 Agent**,全天候运行,管理权限,记住上下文,并在多个渠道间交互。如果你正在贡献,你必须像 Agent 构建者一样思考,而不只是库贡献者。这些是每个贡献者都应该内化的不可协商的原则:
|
|
306
|
+
|
|
307
|
+
| 原则 | 含义 |
|
|
308
|
+
|------|------|
|
|
309
|
+
| 🧠 **以循环思维** | Mercury 在 10 步 Agent 循环中运行。你的工具或功能每轮对话会被调用多次。尽可能保持幂等。 |
|
|
310
|
+
| 🔐 **权限优先** | 每个触碰外部世界的行为(文件、shell、网络、git)必须经过权限系统。永远不要假设批准。 |
|
|
311
|
+
| 💾 **记忆感知** | 如果你的功能生成关于用户的事实,考虑接入第二大脑。如果它读取用户数据,先检查记忆。 |
|
|
312
|
+
| 📏 **Token 意识** | Mercury 有每日 Token 预算。日志、冗长输出和大上下文转储会快速消耗 Token。保持精简。 |
|
|
313
|
+
| 🔌 **渠道无关** | 工具应该在 CLI 和 Telegram 上表现一致。不要假设终端、键盘,甚至另一端是人。 |
|
|
314
|
+
| 🔁 **优雅降级** | 如果 Provider 失败、工具出错或文件不存在 — Mercury 应该恢复,而不是崩溃。始终处理边缘情况。 |
|
|
315
|
+
| 📋 **自文档化** | 你的工具的名称和描述是 Mercury 决定何时使用它的依据。让它们清晰、具体和面向行动。 |
|
|
316
|
+
| 🧪 **测试循环,不只是函数** | 在隔离中工作的工具在 Agent 循环中可能失败(例如,返回太多数据,阻塞下一步)。端到端测试。 |
|
|
317
|
+
|
|
318
|
+
### 代码质量 — 做
|
|
319
|
+
|
|
320
|
+
| 做 | 为什么 |
|
|
321
|
+
|---|--------|
|
|
322
|
+
| ✅ 写干净的、可读的带显式类型的 TypeScript | Mercury's codebase 是类型安全的 — 保持这样 |
|
|
323
|
+
| ✅ 在公共函数和工具上添加 JSDoc 注释 | 帮助其他贡献者和 Agent 理解意图 |
|
|
324
|
+
| ✅ 保持函数小而单一职责 | 更易于测试、审查和推理 |
|
|
325
|
+
| ✅ 使用 async/await 而不是原始 Promise | 一致的错误处理和可读性 |
|
|
326
|
+
| ✅ 为新工具和记忆功能写测试 | 对 24/7 Agent 来说可靠性很重要 |
|
|
327
|
+
| ✅ 遵循现有项目结构(`src/tools/`、`src/memory/`、`src/channels/`) | 保持代码库可导航 |
|
|
328
|
+
| ✅ 使用 Agent Skills 规范用于新的基于 skill 的功能 | 确保与 skills 生态系统的兼容性 |
|
|
329
|
+
| ✅ 在 PR 描述中记录破坏性变更 | 帮助维护者正确版本管理 |
|
|
330
|
+
|
|
331
|
+
### 代码质量 — 不做
|
|
332
|
+
|
|
333
|
+
| 不做 | 为什么 |
|
|
334
|
+
|------|--------|
|
|
335
|
+
| ❌ 未经讨论不添加依赖 | Mercury 很精简 — 每个依赖增加表面积 |
|
|
336
|
+
| ❌ 不硬编码 API key、Token 或路径 | 像代码库其他部分一样使用 config/env 变量 |
|
|
337
|
+
| ❌ 不绕过权限系统 | 工具必须先请求再行动 — 这是 Mercury 的核心承诺 |
|
|
338
|
+
| ❌ 不在热路径中引入同步/阻塞 I/O | Mercury 是异步优先的,有原因 |
|
|
339
|
+
| ❌ 不提交大二进制文件或 secrets | 使用 `.gitignore` 和 env 文件 |
|
|
340
|
+
| ❌ 未经讨论不更改 soul/persona 系统 | 它是 Mercury 的核心 — 更改需要谨慎 |
|
|
341
|
+
| ❌ 不提交未测试的 Telegram 或守护进程更改 | 这些在合并后很难调试 |
|
|
342
|
+
| ❌ 不忽略 Token 预算系统 | 每个工具都应该注意 Token 消耗 |
|
|
343
|
+
|
|
344
|
+
### 开始
|
|
345
|
+
|
|
346
|
+
1. Fork 仓库
|
|
347
|
+
2. 运行 `npm install`
|
|
348
|
+
3. 进行更改
|
|
349
|
+
4. 运行 `npm run build` 验证编译
|
|
350
|
+
5. 本地使用 `mercury` 测试
|
|
351
|
+
6. 打开 PR,清晰描述你更改了什么和为什么
|
|
352
|
+
|
|
353
|
+
### PR 指南
|
|
354
|
+
|
|
355
|
+
- 保持 PR 聚焦 — 每个 PR 一个功能/修复
|
|
356
|
+
- 在描述中包含前/后行为
|
|
357
|
+
- 适当时标记相关 issues
|
|
358
|
+
- 对审查反馈响应迅速
|
|
359
|
+
|
|
360
|
+
### 需要帮助?
|
|
361
|
+
|
|
362
|
+
打开 issue 或联系 [mercury@cosmicstack.org](mailto:mercury@cosmicstack.org)。我们很友好。
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 社区
|
|
242
367
|
|
|
243
|
-
|
|
368
|
+
1. **Discord** — [加入 Mercury Agent Discord](https://discord.gg/5emMpMJy5J) 获取实时聊天、支持和小社区讨论。
|