nikou-cli 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 +59 -5
- package/dist/ai-hook.js +1 -1
- package/dist/{chunk-F3EPGM5N.js → chunk-OQQEIFQV.js} +1 -1
- package/dist/index.js +648 -236
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -154,10 +154,13 @@ nikou-cli mcp remove apifox --tools codex,claude
|
|
|
154
154
|
|
|
155
155
|
## AI Hook 主从节点
|
|
156
156
|
|
|
157
|
-
Hook
|
|
157
|
+
Hook 支持三种启动模式:
|
|
158
158
|
|
|
159
|
-
-
|
|
160
|
-
-
|
|
159
|
+
- 本机一体:一条命令同时启动主节点和本地从节点,适合单机使用。
|
|
160
|
+
- 单独从节点:只启动 Worker,连接已有主节点。
|
|
161
|
+
- 一主多从:单独启动一个主节点,再让多台机器的从节点接入。
|
|
162
|
+
|
|
163
|
+
主节点负责连接聊天平台、接收消息、维护 Worker 列表并分发任务。从节点负责连接主节点,收到任务后调用 Codex、Claude 或 Gemini 执行。
|
|
161
164
|
|
|
162
165
|
### 初始化配置
|
|
163
166
|
|
|
@@ -169,10 +172,12 @@ nikou-cli hook init
|
|
|
169
172
|
|
|
170
173
|
```bash
|
|
171
174
|
ai-hook init
|
|
172
|
-
ai-hook
|
|
175
|
+
ai-hook local
|
|
173
176
|
```
|
|
174
177
|
|
|
175
|
-
|
|
178
|
+
初始化时会提示部署方式和主节点地址。没有远端主节点配置时默认选择本机一体,并使用 `127.0.0.1`;如果旧配置里已有非本机主节点地址,默认选择从节点并沿用该地址。
|
|
179
|
+
|
|
180
|
+
`ai-hook` 裸命令为兼容旧习惯,仍默认等价于 `nikou-cli hook worker codex`;如需只启动 Claude Worker:
|
|
176
181
|
|
|
177
182
|
```bash
|
|
178
183
|
ai-hook claude --model opus
|
|
@@ -204,6 +209,14 @@ ai-hook claude --model opus
|
|
|
204
209
|
"auth": {
|
|
205
210
|
"api_url": "https://your-platform.example.com/api/v1",
|
|
206
211
|
"cli_auth_secret": "CHANGE_ME"
|
|
212
|
+
},
|
|
213
|
+
"nacos_skill_sync": {
|
|
214
|
+
"enabled": true,
|
|
215
|
+
"profile": "nikou-block",
|
|
216
|
+
"label": "latest",
|
|
217
|
+
"interval": "30s",
|
|
218
|
+
"plan_poll_interval_ms": 60000,
|
|
219
|
+
"auto_upload": false
|
|
207
220
|
}
|
|
208
221
|
}
|
|
209
222
|
```
|
|
@@ -214,6 +227,47 @@ ai-hook claude --model opus
|
|
|
214
227
|
- `shared_secret` 用于主从节点握手,生产环境不要复用机器人密钥。
|
|
215
228
|
- `knowledge_base_ip` 和 `knowledge_base_dir` 请按自己的机器和目录配置,默认值只是本机占位。
|
|
216
229
|
|
|
230
|
+
### Skill 订阅自动同步
|
|
231
|
+
|
|
232
|
+
Worker 启动后会使用 `auth.api_url` 和 `auth.cli_auth_secret` 向平台拉取 Nacos Skill Sync 计划。只要平台开启 Nacos,用户在页面订阅的 Skill 会自动加入本机 `nacos-cli skill-sync`:
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
nacos-cli profile set nikou-block ...
|
|
236
|
+
nacos-cli skill-sync mode nacos --profile nikou-block
|
|
237
|
+
nacos-cli skill-sync add <skill> --non-interactive --profile nikou-block
|
|
238
|
+
nacos-cli skill-sync start --foreground --non-interactive --profile nikou-block --label latest
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
默认不需要手动配置 Nacos profile;平台会下发可访问的 Nacos 地址、namespace、profile 和 label。`auto_upload` 默认关闭,遇到本地冲突时不会覆盖本地文件,只会上报同步状态。
|
|
242
|
+
|
|
243
|
+
### 本机一体启动
|
|
244
|
+
|
|
245
|
+
默认 Codex:
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
ai-hook local
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Claude:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
ai-hook local claude --model sonnet
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Gemini:
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
ai-hook local gemini
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
完整入口也可以写成:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
nikou-cli hook local codex
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
如果主节点监听 `0.0.0.0`,本机内嵌从节点会自动连接 `127.0.0.1`。
|
|
270
|
+
|
|
217
271
|
### 启动主节点
|
|
218
272
|
|
|
219
273
|
```bash
|
package/dist/ai-hook.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/cli-entry.ts
|
|
2
2
|
import path from "path";
|
|
3
3
|
var AI_HOOK_COMMAND_NAMES = /* @__PURE__ */ new Set(["ai-hook", "ai-hook.cmd", "ai-hook.exe"]);
|
|
4
|
-
var HOOK_SUBCOMMANDS = /* @__PURE__ */ new Set(["master", "init", "worker", "log", "help"]);
|
|
4
|
+
var HOOK_SUBCOMMANDS = /* @__PURE__ */ new Set(["master", "init", "worker", "local", "log", "help"]);
|
|
5
5
|
function normalizeCliArgs(commandPath, args) {
|
|
6
6
|
const commandName = path.basename(commandPath || "");
|
|
7
7
|
if (!AI_HOOK_COMMAND_NAMES.has(commandName)) {
|