mocode-ai 0.1.4 → 0.1.6
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 +196 -188
- package/dist/agent/core.js +309 -0
- package/dist/agent/index.js +62 -249
- package/dist/agent/mode.js +46 -0
- package/dist/agent/spawn.js +123 -0
- package/dist/commands/config.js +8 -26
- package/dist/config/file.js +48 -0
- package/dist/config/index.js +81 -36
- package/dist/context/classifier.js +83 -0
- package/dist/context/encoders/index.js +10 -0
- package/dist/context/encoders/passthrough.js +23 -0
- package/dist/context/index.js +10 -0
- package/dist/context/pipeline.js +84 -0
- package/dist/context/registry.js +30 -0
- package/dist/context/types.js +12 -0
- package/dist/index.js +12 -2
- package/dist/llm/index.js +11 -9
- package/dist/memory/index.js +2 -2
- package/dist/memory/reflect.js +11 -11
- package/dist/memory/store.js +4 -4
- package/dist/repl/index.js +269 -109
- package/dist/sandbox/command.js +41 -0
- package/dist/sandbox/index.js +5 -0
- package/dist/sandbox/jail.js +75 -0
- package/dist/sandbox/policy.js +58 -0
- package/dist/sandbox/root.js +19 -0
- package/dist/session/compact.js +1 -1
- package/dist/skills/index.js +2 -2
- package/dist/tools/builtins/ask-human.js +7 -7
- package/dist/tools/builtins/codegraph.js +113 -0
- package/dist/tools/builtins/edit-file.js +3 -3
- package/dist/tools/builtins/glob.js +10 -5
- package/dist/tools/builtins/grep.js +14 -9
- package/dist/tools/builtins/index.js +7 -1
- package/dist/tools/builtins/memory-forget.js +2 -2
- package/dist/tools/builtins/memory-list.js +2 -2
- package/dist/tools/builtins/memory-save.js +7 -7
- package/dist/tools/builtins/memory-search.js +4 -4
- package/dist/tools/builtins/memory-update.js +6 -6
- package/dist/tools/builtins/read-file.js +5 -4
- package/dist/tools/builtins/run-command.js +47 -8
- package/dist/tools/builtins/switch-mode.js +46 -0
- package/dist/tools/builtins/task.js +62 -0
- package/dist/tools/builtins/use-skill.js +2 -2
- package/dist/tools/builtins/web-fetch.js +16 -3
- package/dist/tools/builtins/web-search.js +6 -6
- package/dist/tools/builtins/write-file.js +3 -3
- package/dist/tools/constants.js +16 -0
- package/dist/tools/registry.js +18 -4
- package/dist/ui/content.js +25 -17
- package/dist/ui/diff.js +28 -26
- package/dist/ui/intervention.js +24 -3
- package/dist/ui/layout.js +295 -81
- package/dist/ui/markdown.js +607 -0
- package/dist/ui/mouse.js +93 -0
- package/dist/ui/prompt.js +259 -5
- package/dist/ui/render.js +1 -1
- package/dist/ui/theme.js +146 -13
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,188 +1,196 @@
|
|
|
1
|
-
<img src="./assets/banner.svg" alt="mocode">
|
|
2
|
-
|
|
3
|
-
# mocode
|
|
4
|
-
|
|
5
|
-
一个终端编码 agent:**LLM + tool-call 循环 + 流式输出 + 思考可见**。
|
|
6
|
-
|
|
7
|
-
接任意 OpenAI 兼容接口(GLM、DeepSeek、Qwen、本地 Ollama / vLLM 等),全屏 TUI 交互式 REPL。agent 自主探索代码、读写文件、执行命令、联网搜索,以「思考 → 调用工具 → 观察结果 → 再思考」的循环完成编程任务。
|
|
8
|
-
|
|
9
|
-
## 特性
|
|
10
|
-
|
|
11
|
-
- **流式输出** — 回复边生成边显示,模型支持 reasoning 时思考过程实时可见,思考段自动折叠(不占屏),`/think N` 按需展开
|
|
12
|
-
- **全屏 TUI** — 备用屏(alt screen)+ 固定底栏状态行 + 滚动回看(PgUp/PgDn),运行中可打字(typeahead),下一轮自动预填
|
|
13
|
-
- **
|
|
14
|
-
- **会话持久化** — 每轮自动落盘,`--resume` / `/resume` 续接历史会话
|
|
15
|
-
- **轮次回滚** — `/rollback` 菜单选轮次,删该轮及之后 + 逐个文件「保留/撤销」(快照恢复,不依赖 git)
|
|
16
|
-
- **上下文工程** — 接近窗口上限时自动三层压缩,`/context` 实时显示 token 用量条,`/compact` 手动压缩(可带焦点)
|
|
17
|
-
- **Skills 系统** — 自动扫描 `~/.mocode/skills/` 等目录,description 注入系统提示,模型按需调 `use_skill` 加载完整指令
|
|
18
|
-
- **斜杠命令** — `/exit` `/clear` `/context` `/skills` `/compact` `/resume` `/think` `/rollback`,输入时下拉过滤
|
|
19
|
-
- **Ctrl+C 中断** — 运行中随时中断当前 agent 轮次(不退进程)
|
|
20
|
-
|
|
21
|
-
## 安装
|
|
22
|
-
|
|
23
|
-
要求 Node.js ≥ 18。
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npm install -g mocode-ai
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
装完即得 `mocode` 命令。不想全局装也可免装直跑:`npx mocode-ai`。
|
|
30
|
-
|
|
31
|
-
> mocode 启动时自动检测新版本,后台 `npm i -g mocode-ai@latest` 自更新——下次启动生效,零启动延迟、断网 / 失败静默。开发态 `npm start`(tsx 跑 `.ts`)不触发。
|
|
32
|
-
|
|
33
|
-
### 从源码运行(开发 / 贡献)
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
git clone https://github.com/wanxunyang/mocode.git
|
|
37
|
-
cd mocode
|
|
38
|
-
npm install
|
|
39
|
-
npm start
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
源码经 tsx 直接跑,无构建步骤。改完代码需重启 `npm start` 生效(tsx 启动时加载模块,不热更新)。依赖:`openai`、`dotenv`、`fast-glob`(运行时);`tsx`、`typescript`、`@types/node`(开发)。
|
|
43
|
-
|
|
44
|
-
## 配置
|
|
45
|
-
|
|
46
|
-
首次使用运行配置向导,交互填三项(API 地址 / key / 模型名),写入 `~/.mocode/config`(全局,任意目录、任意终端生效):
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
mocode config
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
也可手写配置文件。mocode 按以下优先级加载(后者覆盖前者,仅回填未设置的环境变量;shell 里 `export` 的永远最优先):
|
|
53
|
-
|
|
54
|
-
1. `~/.mocode/config` — 全局(`mocode config` 写此文件)
|
|
55
|
-
2. `<cwd>/.mocode/config` — 项目级覆盖
|
|
56
|
-
3. `<cwd>/.env` — 旧用法兼容(源码仓库内有 `.env.example` 可参考)
|
|
57
|
-
|
|
58
|
-
必填三项:
|
|
59
|
-
|
|
60
|
-
```env
|
|
61
|
-
LLM_BASE_URL=https://open.bigmodel.cn/api/v3 # 换成你的后端
|
|
62
|
-
LLM_API_KEY=your-key-here
|
|
63
|
-
LLM_MODEL=glm-4.6 # 换成你的模型名
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
常见后端 `base_url`:
|
|
67
|
-
|
|
68
|
-
| 后端 | base_url |
|
|
69
|
-
|------|----------|
|
|
70
|
-
| GLM(智谱) | `https://open.bigmodel.cn/api/v3` |
|
|
71
|
-
| DeepSeek | `https://api.deepseek.com` |
|
|
72
|
-
| Qwen(阿里) | `https://dashscope.aliyuncs.com/compatible-mode/v1` |
|
|
73
|
-
| 本地 Ollama | `http://localhost:11434/v1` |
|
|
74
|
-
| 本地 vLLM | `http://localhost:8000/v1` |
|
|
75
|
-
|
|
76
|
-
> 模型必须支持 OpenAI 风格的 function calling,否则工具不会触发。
|
|
77
|
-
|
|
78
|
-
### 可选配置
|
|
79
|
-
|
|
80
|
-
| 环境变量 | 说明 | 默认值 |
|
|
81
|
-
|----------|------|--------|
|
|
82
|
-
| `MAX_TOKENS` | 单次回复最大 token | 不限 |
|
|
83
|
-
| `CONTEXT_WINDOW_TOKENS` | 模型上下文窗口,须对齐真实模型 | `128000` |
|
|
84
|
-
| `COMPACT_THRESHOLD` | 自动压缩触发阈值(占窗口比例) | `0.85` |
|
|
85
|
-
| `LLM_STREAM_USAGE` | 流式请求带 `stream_options.include_usage` 拿真实用量 | `true` |
|
|
86
|
-
| `AUTO_COMPACT` | 自动压缩总开关 | `true` |
|
|
87
|
-
| `AUTO_REFLECT` | 后台反思 pass 总开关(定期从会话挖掘记忆) | `true` |
|
|
88
|
-
| `REFLECT_EVERY_N` | 每 N 轮触发一次后台反思(与 agent 并发,不阻塞) | `5` |
|
|
89
|
-
| `ANYSEARCH_API_KEY` | 联网搜索 API key(不配走匿名免费额度) | 无 |
|
|
90
|
-
| `ANYSEARCH_BASE_URL` | 搜索 API 端点 | `https://api.anysearch.com` |
|
|
91
|
-
| `SKILLS_DIRS` | 覆盖默认 skill 扫描目录(平台分隔符) | 三目录自动扫描 |
|
|
92
|
-
|
|
93
|
-
## 运行
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
mocode # 新会话(在目标项目目录里跑)
|
|
97
|
-
mocode --resume # 列出已保存会话
|
|
98
|
-
mocode --resume <id> # 续接指定会话
|
|
99
|
-
mocode config # 改配置
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
从源码跑则用 `npm start`(等价于 `mocode`,但不触发自更新)。
|
|
103
|
-
|
|
104
|
-
进入 REPL 后直接对话。启动即进全屏 TUI,显示横幅(模型 / 后端 / 工作目录 / 工具列表)。回复流式打印,思考段实时可见后折叠。
|
|
105
|
-
|
|
106
|
-
agent 工作在**启动时所在的工作目录**——想让它操作某个项目,就 `cd` 到那个项目再 `mocode`。
|
|
107
|
-
|
|
108
|
-
## 工具
|
|
109
|
-
|
|
110
|
-
| 工具 | 作用 |
|
|
111
|
-
|------|------|
|
|
112
|
-
| `read_file` | 读文件,带行号,支持 `offset` / `limit` |
|
|
113
|
-
| `write_file` | 创建/覆盖文件,自动建父目录 |
|
|
114
|
-
| `edit_file` | 精确字符串替换(`old_string` 须唯一匹配) |
|
|
115
|
-
| `run_command` | 执行 shell 命令,合并 stdout+stderr,默认 120s 超时 |
|
|
116
|
-
| `glob` | 按 glob 模式找文件(排除 node_modules/.git) |
|
|
117
|
-
| `grep` | 内容正则搜索,纯 JS 实现,不依赖 `rg` |
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
|
132
|
-
|
|
133
|
-
| `/
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
├──
|
|
173
|
-
├──
|
|
174
|
-
├──
|
|
175
|
-
├──
|
|
176
|
-
├──
|
|
177
|
-
└──
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
1
|
+
<img src="./assets/banner.svg" alt="mocode">
|
|
2
|
+
|
|
3
|
+
# mocode
|
|
4
|
+
|
|
5
|
+
一个终端编码 agent:**LLM + tool-call 循环 + 流式输出 + 思考可见**。
|
|
6
|
+
|
|
7
|
+
接任意 OpenAI 兼容接口(GLM、DeepSeek、Qwen、本地 Ollama / vLLM 等),全屏 TUI 交互式 REPL。agent 自主探索代码、读写文件、执行命令、联网搜索,以「思考 → 调用工具 → 观察结果 → 再思考」的循环完成编程任务。
|
|
8
|
+
|
|
9
|
+
## 特性
|
|
10
|
+
|
|
11
|
+
- **流式输出** — 回复边生成边显示,模型支持 reasoning 时思考过程实时可见,思考段自动折叠(不占屏),`/think N` 按需展开
|
|
12
|
+
- **全屏 TUI** — 备用屏(alt screen)+ 固定底栏状态行 + 滚动回看(PgUp/PgDn),运行中可打字(typeahead),下一轮自动预填
|
|
13
|
+
- **16 个内置工具** — 读 / 写 / 改文件、执行命令、glob 找路径、grep 搜内容、codegraph 代码索引、联网搜索、抓取网页、加载 skill、询问用户、5 个跨会话记忆工具(存/搜/列/改/遗忘)
|
|
14
|
+
- **会话持久化** — 每轮自动落盘,`--resume` / `/resume` 续接历史会话
|
|
15
|
+
- **轮次回滚** — `/rollback` 菜单选轮次,删该轮及之后 + 逐个文件「保留/撤销」(快照恢复,不依赖 git)
|
|
16
|
+
- **上下文工程** — 接近窗口上限时自动三层压缩,`/context` 实时显示 token 用量条,`/compact` 手动压缩(可带焦点)
|
|
17
|
+
- **Skills 系统** — 自动扫描 `~/.mocode/skills/` 等目录,description 注入系统提示,模型按需调 `use_skill` 加载完整指令
|
|
18
|
+
- **斜杠命令** — `/exit` `/clear` `/context` `/skills` `/compact` `/resume` `/think` `/rollback`,输入时下拉过滤
|
|
19
|
+
- **Ctrl+C 中断** — 运行中随时中断当前 agent 轮次(不退进程)
|
|
20
|
+
|
|
21
|
+
## 安装
|
|
22
|
+
|
|
23
|
+
要求 Node.js ≥ 18。
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g mocode-ai
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
装完即得 `mocode` 命令。不想全局装也可免装直跑:`npx mocode-ai`。
|
|
30
|
+
|
|
31
|
+
> mocode 启动时自动检测新版本,后台 `npm i -g mocode-ai@latest` 自更新——下次启动生效,零启动延迟、断网 / 失败静默。开发态 `npm start`(tsx 跑 `.ts`)不触发。
|
|
32
|
+
|
|
33
|
+
### 从源码运行(开发 / 贡献)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git clone https://github.com/wanxunyang/mocode.git
|
|
37
|
+
cd mocode
|
|
38
|
+
npm install
|
|
39
|
+
npm start
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
源码经 tsx 直接跑,无构建步骤。改完代码需重启 `npm start` 生效(tsx 启动时加载模块,不热更新)。依赖:`openai`、`dotenv`、`fast-glob`(运行时);`tsx`、`typescript`、`@types/node`(开发)。
|
|
43
|
+
|
|
44
|
+
## 配置
|
|
45
|
+
|
|
46
|
+
首次使用运行配置向导,交互填三项(API 地址 / key / 模型名),写入 `~/.mocode/config`(全局,任意目录、任意终端生效):
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
mocode config
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
也可手写配置文件。mocode 按以下优先级加载(后者覆盖前者,仅回填未设置的环境变量;shell 里 `export` 的永远最优先):
|
|
53
|
+
|
|
54
|
+
1. `~/.mocode/config` — 全局(`mocode config` 写此文件)
|
|
55
|
+
2. `<cwd>/.mocode/config` — 项目级覆盖
|
|
56
|
+
3. `<cwd>/.env` — 旧用法兼容(源码仓库内有 `.env.example` 可参考)
|
|
57
|
+
|
|
58
|
+
必填三项:
|
|
59
|
+
|
|
60
|
+
```env
|
|
61
|
+
LLM_BASE_URL=https://open.bigmodel.cn/api/v3 # 换成你的后端
|
|
62
|
+
LLM_API_KEY=your-key-here
|
|
63
|
+
LLM_MODEL=glm-4.6 # 换成你的模型名
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
常见后端 `base_url`:
|
|
67
|
+
|
|
68
|
+
| 后端 | base_url |
|
|
69
|
+
|------|----------|
|
|
70
|
+
| GLM(智谱) | `https://open.bigmodel.cn/api/v3` |
|
|
71
|
+
| DeepSeek | `https://api.deepseek.com` |
|
|
72
|
+
| Qwen(阿里) | `https://dashscope.aliyuncs.com/compatible-mode/v1` |
|
|
73
|
+
| 本地 Ollama | `http://localhost:11434/v1` |
|
|
74
|
+
| 本地 vLLM | `http://localhost:8000/v1` |
|
|
75
|
+
|
|
76
|
+
> 模型必须支持 OpenAI 风格的 function calling,否则工具不会触发。
|
|
77
|
+
|
|
78
|
+
### 可选配置
|
|
79
|
+
|
|
80
|
+
| 环境变量 | 说明 | 默认值 |
|
|
81
|
+
|----------|------|--------|
|
|
82
|
+
| `MAX_TOKENS` | 单次回复最大 token | 不限 |
|
|
83
|
+
| `CONTEXT_WINDOW_TOKENS` | 模型上下文窗口,须对齐真实模型 | `128000` |
|
|
84
|
+
| `COMPACT_THRESHOLD` | 自动压缩触发阈值(占窗口比例) | `0.85` |
|
|
85
|
+
| `LLM_STREAM_USAGE` | 流式请求带 `stream_options.include_usage` 拿真实用量 | `true` |
|
|
86
|
+
| `AUTO_COMPACT` | 自动压缩总开关 | `true` |
|
|
87
|
+
| `AUTO_REFLECT` | 后台反思 pass 总开关(定期从会话挖掘记忆) | `true` |
|
|
88
|
+
| `REFLECT_EVERY_N` | 每 N 轮触发一次后台反思(与 agent 并发,不阻塞) | `5` |
|
|
89
|
+
| `ANYSEARCH_API_KEY` | 联网搜索 API key(不配走匿名免费额度) | 无 |
|
|
90
|
+
| `ANYSEARCH_BASE_URL` | 搜索 API 端点 | `https://api.anysearch.com` |
|
|
91
|
+
| `SKILLS_DIRS` | 覆盖默认 skill 扫描目录(平台分隔符) | 三目录自动扫描 |
|
|
92
|
+
|
|
93
|
+
## 运行
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
mocode # 新会话(在目标项目目录里跑)
|
|
97
|
+
mocode --resume # 列出已保存会话
|
|
98
|
+
mocode --resume <id> # 续接指定会话
|
|
99
|
+
mocode config # 改配置
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
从源码跑则用 `npm start`(等价于 `mocode`,但不触发自更新)。
|
|
103
|
+
|
|
104
|
+
进入 REPL 后直接对话。启动即进全屏 TUI,显示横幅(模型 / 后端 / 工作目录 / 工具列表)。回复流式打印,思考段实时可见后折叠。
|
|
105
|
+
|
|
106
|
+
agent 工作在**启动时所在的工作目录**——想让它操作某个项目,就 `cd` 到那个项目再 `mocode`。
|
|
107
|
+
|
|
108
|
+
## 工具
|
|
109
|
+
|
|
110
|
+
| 工具 | 作用 |
|
|
111
|
+
|------|------|
|
|
112
|
+
| `read_file` | 读文件,带行号,支持 `offset` / `limit` |
|
|
113
|
+
| `write_file` | 创建/覆盖文件,自动建父目录 |
|
|
114
|
+
| `edit_file` | 精确字符串替换(`old_string` 须唯一匹配) |
|
|
115
|
+
| `run_command` | 执行 shell 命令,合并 stdout+stderr,默认 120s 超时 |
|
|
116
|
+
| `glob` | 按 glob 模式找文件(排除 node_modules/.git) |
|
|
117
|
+
| `grep` | 内容正则搜索,纯 JS 实现,不依赖 `rg` |
|
|
118
|
+
| `codegraph` | 已建 `.codegraph/` 索引时,查代码符号源码与调用链(比 read_file/grep 更准更省) |
|
|
119
|
+
| `web_search` | 联网搜索(AnySearch),返回标题/URL/摘要/正文 |
|
|
120
|
+
| `web_fetch` | 抓取指定 URL,HTML 清洗成纯文本 |
|
|
121
|
+
| `use_skill` | 加载某 skill 的完整 SKILL.md 指令 |
|
|
122
|
+
| `ask_human` | 决策点弹终端问答面板,用户选预设项或自由输入(阻塞至回应) |
|
|
123
|
+
| `memory_save` | 存一条跨会话长期记忆(标题进索引,正文按需取) |
|
|
124
|
+
| `memory_search` | 按关键词搜记忆正文,命中即提升召回计数(影响遗忘衰减) |
|
|
125
|
+
| `memory_list` | 列记忆索引(id/标题/摘要,无正文) |
|
|
126
|
+
| `memory_update` | 原地改一条记忆(id 不变;纠正过时事实 / 改摘要 / 改 pin) |
|
|
127
|
+
| `memory_forget` | 遗忘记忆:默认归档(可复活),`mode=delete` 硬删(pinned 拒删) |
|
|
128
|
+
|
|
129
|
+
## 斜杠命令
|
|
130
|
+
|
|
131
|
+
| 命令 | 作用 |
|
|
132
|
+
|------|------|
|
|
133
|
+
| `/exit` `/quit` | 退出 mocode |
|
|
134
|
+
| `/clear` | 清空历史(保留系统提示)+ 清屏 |
|
|
135
|
+
| `/context` | 显示上下文用量条(token / 消息数 / 估算或实测) |
|
|
136
|
+
| `/skills` | 列出已发现的 skill |
|
|
137
|
+
| `/compact` | 压缩历史(可带焦点 `/compact …`) |
|
|
138
|
+
| `/resume` | 续接已保存的会话 |
|
|
139
|
+
| `/think` | 展开折叠思考段(`/think N`) |
|
|
140
|
+
| `/rollback` | 菜单选轮次回滚(↑↓ · Enter) |
|
|
141
|
+
|
|
142
|
+
输入 `/` 触发下拉菜单,继续打字过滤;Esc 取消。
|
|
143
|
+
|
|
144
|
+
## 快速验证(配好 key 后)
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
> 你好,你是谁 # 验证 LLM 连通
|
|
148
|
+
> 读一下 sample.txt # 触发 read_file
|
|
149
|
+
> 把 sample.txt 里的 foo 改成 bar # 触发 read_file + edit_file
|
|
150
|
+
> 列出当前目录所有 .txt 文件 # 触发 glob
|
|
151
|
+
> 搜一下代码里出现 runAgent 的地方 # 触发 grep
|
|
152
|
+
> 跑一下 node -e "console.log(1+1)" # 触发 run_command
|
|
153
|
+
> 搜一下 TypeScript 5.5 有什么新特性 # 触发 web_search
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
每步终端会打印 `● 工具名 + 参数摘要` 与 `↳ 结果预览`,agent 在循环里自己决定下一步;回复流式打印,边生成边显示。
|
|
157
|
+
|
|
158
|
+
## Skills
|
|
159
|
+
|
|
160
|
+
mocode 自动扫描以下目录的 skill(每个 skill 是 `<name>/SKILL.md`,带 frontmatter):
|
|
161
|
+
|
|
162
|
+
- `~/.claude/skills/`
|
|
163
|
+
- `~/.mocode/skills/`
|
|
164
|
+
- `<cwd>/.mocode/skills/`
|
|
165
|
+
|
|
166
|
+
skill 的 `description` 注入系统提示(渐进式披露第①层),模型只在任务相关时调 `use_skill` 加载完整正文(第②层)。用 `/skills` 查看已发现的 skill。
|
|
167
|
+
|
|
168
|
+
## 结构
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
src/
|
|
172
|
+
├── index.ts # 入口:装配 + 启动 REPL + --resume 续接
|
|
173
|
+
├── repl/index.ts # 全屏 TUI、斜杠命令、运行态交互、Ctrl+C 中断
|
|
174
|
+
├── agent/index.ts # tool-call 循环(调 LLM→执行工具→回灌→再调,≤200 步)
|
|
175
|
+
├── llm/index.ts # OpenAI 兼容客户端 + 工具格式转换 + chat() 流式
|
|
176
|
+
├── tools/ # types / constants / registry + builtins/(一工具一文件)
|
|
177
|
+
│ └── builtins/ # read-file write-file edit-file run-command glob grep
|
|
178
|
+
│ # codegraph web-search web-fetch use-skill ask-human memory-*
|
|
179
|
+
├── config/index.ts # 读配置、校验必填项、系统提示词
|
|
180
|
+
├── skills/ # discover(扫描)+ index(缓存/拼系统提示)
|
|
181
|
+
├── session/ # 落盘/续接 + compact(三层压缩)+ token 估算
|
|
182
|
+
├── memory/ # MOCODE.md 加载 + 跨会话记忆存储 + 后台反思
|
|
183
|
+
├── rollback/ # 轮次快照 + /rollback 菜单 + 文件撤销
|
|
184
|
+
├── ui/ # theme(颜色)render(横幅/摘要)layout(全屏布局)spinner prompt
|
|
185
|
+
└── agents/ commands/ mcp/ permissions/ # 未来子系统(agents/mcp/permissions 为空骨架)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 类型检查
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
npm run typecheck # tsc --noEmit
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## 可后续扩展
|
|
195
|
+
|
|
196
|
+
子 agent / 并行任务、MCP 工具集成、权限确认 UI。当前版本是一个流式、思考可见、可回滚的终端编码 agent。
|