nikou-cli 0.1.8 → 0.1.9
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 +165 -37
- package/dist/index.js +3794 -1050
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -160,7 +160,7 @@ Hook 支持三种启动模式:
|
|
|
160
160
|
- 单独从节点:只启动 Worker,连接已有主节点。
|
|
161
161
|
- 一主多从:单独启动一个主节点,再让多台机器的从节点接入。
|
|
162
162
|
|
|
163
|
-
主节点负责连接聊天平台、接收消息、维护 Worker 列表并分发任务。从节点负责连接主节点,收到任务后调用 Codex、Claude 或
|
|
163
|
+
主节点负责连接聊天平台、接收消息、维护 Worker 列表并分发任务。从节点负责连接主节点,收到任务后调用 Codex、Claude、Gemini 或 API Agent 执行。
|
|
164
164
|
|
|
165
165
|
群聊发送 `@机器人 绑定: <目录>` 时,主节点会先检查当前用户是否已经绑定该目录;已有绑定会直接返回结果,未绑定则只把路径校验任务发给该用户自己的在线 Worker。一个群可以保留多个用户、多个目录的 Agent 绑定,绑定指令不会广播给其他 Worker 抢占。
|
|
166
166
|
|
|
@@ -170,14 +170,21 @@ Hook 支持三种启动模式:
|
|
|
170
170
|
nikou-cli hook init
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
初始化只需要以上一条命令,不需要预先创建 JSON。命令会提示部署方式、主节点地址和首次安装缺少的飞书信息;所有 Secret 输入均不会回显。本机一体模式会自动随机生成主从共享密钥,从节点模式则安全读取已有主节点的共享密钥。运行凭据写入 npm 包之外的本机私有目录,配置文件和备份权限固定为 `0600`,初始化摘要不会展示任何 Secret。没有远端主节点配置时默认选择本机一体,并使用 `127.0.0.1`;如果旧配置里已有非本机主节点地址,默认选择从节点并沿用该地址。
|
|
174
|
+
|
|
175
|
+
内部批量安装可使用参数完成非交互初始化。推荐由安装系统注入 Secret 环境变量,避免密钥出现在 Shell 历史和进程参数中:
|
|
174
176
|
|
|
175
177
|
```bash
|
|
176
|
-
|
|
177
|
-
|
|
178
|
+
FEISHU_APP_SECRET="$YOUR_FEISHU_APP_SECRET" \
|
|
179
|
+
NIKOU_HOOK_SHARED_SECRET="$YOUR_HOOK_SHARED_SECRET" \
|
|
180
|
+
nikou-cli hook init \
|
|
181
|
+
--app-id cli_xxx \
|
|
182
|
+
--master-ip 203.0.113.10 \
|
|
183
|
+
--deployment slave \
|
|
184
|
+
--yes
|
|
178
185
|
```
|
|
179
186
|
|
|
180
|
-
|
|
187
|
+
也兼容 `--app-secret`、`--shared-secret` 明文参数,但只建议在受控安装环境使用。参数同时支持 `--app_id`、`--app_secret` 和 `--masterip` 别名。
|
|
181
188
|
|
|
182
189
|
单独从节点连接已有主节点时,不要求配置主节点专用的 `hook.bind_allowed_user_ids`。本机一体或单独启动主节点时,仍必须至少配置一个允许绑定的飞书 `user_id`。
|
|
183
190
|
|
|
@@ -194,42 +201,12 @@ ai-hook claude --model opus
|
|
|
194
201
|
~/.nikou-block/worker/config.json
|
|
195
202
|
```
|
|
196
203
|
|
|
197
|
-
配置示例:
|
|
198
|
-
|
|
199
|
-
```json
|
|
200
|
-
{
|
|
201
|
-
"feishu": {
|
|
202
|
-
"app_id": "YOUR_APP_ID",
|
|
203
|
-
"app_secret": "YOUR_APP_SECRET"
|
|
204
|
-
},
|
|
205
|
-
"hook": {
|
|
206
|
-
"master_host": "127.0.0.1",
|
|
207
|
-
"master_port": 19732,
|
|
208
|
-
"shared_secret": "CHANGE_ME",
|
|
209
|
-
"bind_allowed_user_ids": ["YOUR_USER_ID"],
|
|
210
|
-
"knowledge_base_ip": "203.0.113.10",
|
|
211
|
-
"knowledge_base_dir": "/srv/knowledge-base"
|
|
212
|
-
},
|
|
213
|
-
"auth": {
|
|
214
|
-
"api_url": "https://your-platform.example.com/api/v1",
|
|
215
|
-
"cli_auth_secret": "CHANGE_ME"
|
|
216
|
-
},
|
|
217
|
-
"nacos_skill_sync": {
|
|
218
|
-
"enabled": true,
|
|
219
|
-
"profile": "nikou-block",
|
|
220
|
-
"label": "latest",
|
|
221
|
-
"interval": "30s",
|
|
222
|
-
"plan_poll_interval_ms": 60000,
|
|
223
|
-
"auto_upload": false
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
204
|
安全建议:
|
|
229
205
|
|
|
230
|
-
-
|
|
206
|
+
- 不要复制、提交或分享 `~/.nikou-block` 下的配置与备份;它们不会进入 npm 包。
|
|
231
207
|
- `shared_secret` 用于主从节点握手,生产环境不要复用机器人密钥。
|
|
232
208
|
- `knowledge_base_ip` 和 `knowledge_base_dir` 请按自己的机器和目录配置,默认值只是本机占位。
|
|
209
|
+
- API Key 优先通过 `api_key_env` 引用环境变量;也兼容只保存在本机配置中的 `api_key`,但禁止提交该配置。
|
|
233
210
|
|
|
234
211
|
### Skill 订阅自动同步
|
|
235
212
|
|
|
@@ -264,6 +241,12 @@ Gemini:
|
|
|
264
241
|
ai-hook local gemini
|
|
265
242
|
```
|
|
266
243
|
|
|
244
|
+
API Agent:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
ai-hook local api --api kiro
|
|
248
|
+
```
|
|
249
|
+
|
|
267
250
|
完整入口也可以写成:
|
|
268
251
|
|
|
269
252
|
```bash
|
|
@@ -307,6 +290,32 @@ Gemini:
|
|
|
307
290
|
nikou-cli hook worker gemini
|
|
308
291
|
```
|
|
309
292
|
|
|
293
|
+
Kiro 原生(直接使用本机 Kiro CLI 与登录态,不经过 API 反代):
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
nikou-cli hook worker kiro
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
默认不固定模型,继承本机 Kiro 默认配置。也可以显式选择模型、Agent、思考强度和 Agent Engine:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
nikou-cli hook worker kiro \
|
|
303
|
+
--model claude-opus-4.8 \
|
|
304
|
+
--agent YOUR_AGENT \
|
|
305
|
+
--effort high \
|
|
306
|
+
--agent-engine v2
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Kiro Worker 通过 ACP 管理会话并默认信任全部工具,支持正文、思考摘要、工具状态、图片和使用量流式更新。Kiro 不返回精确 input/cache/output Token,卡片改为展示当前实际模型、上下文占用、Credits、耗时和 effort;即使未传 `--model`,也会读取 ACP 会话返回的当前模型。思考内容仅在所选模型实际发送 `agent_thought_chunk` 时出现。
|
|
310
|
+
|
|
311
|
+
飞书流式卡片会完整保留各引擎输出的思考过程:不超过 5 行时直接展开,从第 6 行开始自动折叠,用户可点击“思考过程”面板查看全部内容。后续流式更新不会反复重置用户的展开状态。
|
|
312
|
+
|
|
313
|
+
API Agent:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
nikou-cli hook worker api --api kiro
|
|
317
|
+
```
|
|
318
|
+
|
|
310
319
|
连接远端主节点:
|
|
311
320
|
|
|
312
321
|
```bash
|
|
@@ -331,6 +340,8 @@ nikou-cli hook worker claude \
|
|
|
331
340
|
ai-hook
|
|
332
341
|
ai-hook claude --model sonnet
|
|
333
342
|
ai-hook gemini
|
|
343
|
+
ai-hook kiro
|
|
344
|
+
ai-hook api --api kiro
|
|
334
345
|
```
|
|
335
346
|
|
|
336
347
|
也可以通过 `--` 传递底层工具参数:
|
|
@@ -339,6 +350,123 @@ ai-hook gemini
|
|
|
339
350
|
nikou-cli hook worker claude -- --model sonnet
|
|
340
351
|
```
|
|
341
352
|
|
|
353
|
+
### Kiro 原生与 API Kiro
|
|
354
|
+
|
|
355
|
+
- `ai-hook kiro` / `nikou-cli hook worker kiro`:启动本机 Kiro CLI 的 ACP Agent,使用 `~/.kiro` 中的本机登录态、MCP、Skills 和设置。
|
|
356
|
+
- `ai-hook api --api kiro`:直接调用 `~/.nikou-block/worker/config.json` 中名为 `kiro` 的 API 反代 profile,两者会话与认证互不混用。
|
|
357
|
+
|
|
358
|
+
Kiro 原生会按目录和飞书话题保存 session ID;Worker 重启或模型切换后会继续加载同一会话。Hook 不暴露 Kiro 终端中的 `/rewind`、`/compact`、会话列表和删除界面。
|
|
359
|
+
|
|
360
|
+
### API 模式
|
|
361
|
+
|
|
362
|
+
API 模式不依赖 Codex、Claude 或 Gemini CLI,直接调用模型反代,并在本地完成会话、MCP 和 Skills 工具循环。现支持:
|
|
363
|
+
|
|
364
|
+
- `anthropic`:Anthropic Messages API,适用于 KiroProxy 等 Claude Code 兼容反代。
|
|
365
|
+
- `openai-responses`:OpenAI Responses API,适用于支持 `/v1/responses` 的 NewAPI/Codex 类反代。
|
|
366
|
+
- `openai-chat`:OpenAI Chat Completions API,适用于只支持 `/v1/chat/completions` 的兼容反代。
|
|
367
|
+
|
|
368
|
+
三种协议均使用流式响应:最终回答会增量更新到卡片的“执行结果”,Provider 显式返回的 `thinking`、`reasoning_content` 或 reasoning summary 会增量更新到“思考过程”。这里展示的是面向用户的思路摘要,不是模型隐藏的完整思维链。工具调用参数会在流中完整组装后再执行。若反代忽略流式参数并返回普通 JSON,API 模式会自动回退为整段响应,不影响最终结果。
|
|
369
|
+
|
|
370
|
+
通过 `--api <profile>` 切换配置,不影响现有 `codex`、`claude`、`gemini` 模式:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
ai-hook api --api kiro --model claude-opus-4.5
|
|
374
|
+
ai-hook api --api kiro --model claude-sonnet-4.5
|
|
375
|
+
ai-hook api --api newapi
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
也可以临时覆盖非敏感参数:
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
ai-hook api \
|
|
382
|
+
--api newapi \
|
|
383
|
+
--api-type openai-chat \
|
|
384
|
+
--base-url https://api.example.com/v1 \
|
|
385
|
+
--api-key-env NEWAPI_API_KEY \
|
|
386
|
+
--model YOUR_MODEL \
|
|
387
|
+
--mcp-config ~/.nikou-block/api/mcp.toml \
|
|
388
|
+
--skills-dir ~/.nikou-block/api/skills
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
profile 可以用 `models` 配置多个模型,列表第一个是默认模型,启动时通过 `--model <model-id>` 切换。原有单值 `model` 仍然兼容。
|
|
392
|
+
|
|
393
|
+
同一个反代同时提供多种协议时,可用 `model_types` 为指定模型覆盖 profile 的默认协议。例如 KiroProxy 的 Claude 模型走 `anthropic`,GPT-5.6 Sol/Terra/Luna 走 `openai-responses`,但仍共用同一个 profile、Base URL、Key 和 SQLite 会话。
|
|
394
|
+
|
|
395
|
+
Anthropic 兼容反代需要显式请求思考块时,在 profile 中配置 `thinking_enabled: true`;`thinking_budget_tokens` 控制思考预算,默认 4000。代理返回的标准 `thinking_delta` 会实时渲染到卡片“思考过程”。同一 profile 切换到 OpenAI Responses 模型时,该开关会请求 `reasoning.effort=high` 和 `reasoning.summary=detailed`,兼容代理应返回 `response.reasoning_summary_text.delta`。
|
|
396
|
+
|
|
397
|
+
API 模式会把会话写入 `api.session_db_path` 指定的 SQLite 数据库。数据库包含 thread、binding、turn、item 四层记录;群话题和单聊续聊继续沿用现有 Hook 的 `session_id` 协议。所有 API profile 和模型共用同一会话命名空间,切换 `--model` 后会继续当前群聊/话题对应的上下文。完整历史保留在数据库中,发送给模型的上下文受 `max_history_chars` 限制,单次工具结果受 `max_tool_output_chars` 限制(默认 40000 字符)。
|
|
398
|
+
|
|
399
|
+
API Skills 与 Codex、Claude 和 `.agents/skills` 完全隔离,默认只扫描 `~/.nikou-block/api/skills`。目录下每个 Skill 使用 `<name>/SKILL.md` 结构;模型先看到全部 Skill 名称和预算内的描述,命中后通过 `skill_read` 分段读完 `SKILL.md`。Skill 引用的说明、模板和参考文件通过 `skill_read_resource` 继续读取,目录内 Python、Shell、Node 或可执行脚本通过 `skill_run_script` 直接运行。三类工具均由本地 Worker 自动执行,不弹出授权确认。
|
|
400
|
+
|
|
401
|
+
需要复用现有 Codex 配置时,执行一次独立导入:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
nikou-cli hook api-import-codex
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
该命令只复制 Codex `mcp_servers` 和 `~/.codex/skills`、`~/.agents/skills` 下的 Skills,不创建软链,也不会回写 Codex 配置;同名项默认跳过,需覆盖时增加 `--force`。目标路径仍可通过 `--mcp-config` 和 `--skills-dir` 指定:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
nikou-cli hook api-import-codex \
|
|
411
|
+
--mcp-config ~/.nikou-block/api/mcp.toml \
|
|
412
|
+
--skills-dir ~/.nikou-block/api/skills \
|
|
413
|
+
--force
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
运行 Worker 时仍可用 `--skills-dir <path>` 临时指定其他目录,或在配置中指定:
|
|
417
|
+
|
|
418
|
+
```json
|
|
419
|
+
{
|
|
420
|
+
"skills": {
|
|
421
|
+
"enabled": true,
|
|
422
|
+
"directory": "~/.nikou-block/api/skills",
|
|
423
|
+
"max_metadata_chars": 8000,
|
|
424
|
+
"max_skill_chars": 40000,
|
|
425
|
+
"max_resource_chars": 40000,
|
|
426
|
+
"script_timeout_ms": 120000
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
API MCP 默认开启,使用独立的 `~/.nikou-block/api/mcp.toml`,不读取也不修改 Codex 配置。首次启动时如果默认文件不存在会自动创建空模板。支持 Codex `mcp_servers` TOML 形式的 stdio 和 Streamable HTTP、`tools/list` 分页、`enabled_tools`/`disabled_tools` 过滤和 `required` 启动约束;`servers` 为空表示加载全部启用的 server,也可只启用指定 server:
|
|
432
|
+
|
|
433
|
+
```json
|
|
434
|
+
{
|
|
435
|
+
"mcp": {
|
|
436
|
+
"enabled": true,
|
|
437
|
+
"config_path": "~/.nikou-block/api/mcp.toml",
|
|
438
|
+
"servers": ["example"],
|
|
439
|
+
"startup_timeout_ms": 15000,
|
|
440
|
+
"tool_timeout_ms": 120000
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
独立 MCP TOML 示例:
|
|
446
|
+
|
|
447
|
+
```toml
|
|
448
|
+
[mcp_servers.local]
|
|
449
|
+
command = "npx"
|
|
450
|
+
args = ["-y", "YOUR_MCP_PACKAGE"]
|
|
451
|
+
enabled = true
|
|
452
|
+
|
|
453
|
+
[mcp_servers.remote]
|
|
454
|
+
url = "https://mcp.example.com/mcp"
|
|
455
|
+
bearer_token_env_var = "REMOTE_MCP_TOKEN"
|
|
456
|
+
|
|
457
|
+
[mcp_servers.remote.http_headers]
|
|
458
|
+
X-Client = "nikou-api"
|
|
459
|
+
|
|
460
|
+
[mcp_servers.remote.env_http_headers]
|
|
461
|
+
X-Workspace-Token = "WORKSPACE_TOKEN"
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
可通过 `--mcp-config <path>` 临时指定其他 TOML 文件。API MCP 默认开启,需要临时关闭时使用 `--no-mcp`。
|
|
465
|
+
|
|
466
|
+
API Worker 默认把全部 MCP 与 Skill 工具定义发给模型,不设置数量上限。若某个第三方反代自身限制工具数量,可在对应 profile 中设置 `max_model_tools`;`0` 或不配置表示不限制。超过展示上限时,模型仍可通过内置 `api_tool_search` 和 `api_tool_call` 搜索并调用完整本地工具集。
|
|
467
|
+
|
|
468
|
+
API 模式依赖 Node.js 内置 `node:sqlite`,要求 Node.js 22.5 或更高版本;其他三个模式继续兼容 `package.json` 声明的 Node.js 18+。可用 `--no-mcp` 或 `--no-skills` 临时关闭对应能力。
|
|
469
|
+
|
|
342
470
|
### 查看日志
|
|
343
471
|
|
|
344
472
|
```bash
|