@qxbyte/muse 0.1.1 → 0.1.2

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
@@ -65,30 +65,32 @@ muse --version
65
65
  | OpenAI | https://platform.openai.com | `OPENAI_API_KEY` |
66
66
  | Ollama (本地) | https://ollama.com | 不需要 |
67
67
 
68
- ### 2. 建模型仓库 `~/.muse/models.json`
68
+ ### 2. 建模型仓库 `~/.muse/models.local.json`
69
69
 
70
70
  ```bash
71
71
  mkdir -p ~/.muse
72
- cat > ~/.muse/models.json <<'EOF'
72
+ cat > ~/.muse/models.local.json <<'EOF'
73
73
  {
74
74
  "models": [
75
75
  {
76
76
  "id": "deepseek-chat",
77
77
  "vendor": "DeepSeek",
78
78
  "baseUrl": "https://api.deepseek.com/v1",
79
- "apiKey": "${DEEPSEEK_API_KEY}",
79
+ "apiKey": "sk-...",
80
80
  "supportsToolCall": true
81
81
  }
82
82
  ],
83
83
  "availableModels": ["deepseek-chat"]
84
84
  }
85
85
  EOF
86
+ chmod 600 ~/.muse/models.local.json
86
87
  ```
87
88
 
88
- ### 3. 设环境变量并启动
89
+ > 文件名后缀 `.local.json` 是 muse 的视觉提示——本机本地、从不入 git;明文写 apiKey 是 OK 的。
90
+
91
+ ### 3. 启动
89
92
 
90
93
  ```bash
91
- export DEEPSEEK_API_KEY=sk-... # 写入 ~/.zshrc 或 ~/.bashrc 持久化
92
94
  muse # 进交互模式
93
95
  ```
94
96
 
@@ -98,19 +100,18 @@ muse # 进交互模式
98
100
 
99
101
  ## 配置详解
100
102
 
101
- muse 用**两个文件**分工:
103
+ muse 用三个文件:
102
104
 
103
105
  ```
104
106
  ~/.muse/
105
- ├── models.json # 模型仓库:你能调用的所有模型 + 凭证
106
- ├── models.local.json # 同名兜底,放明文 apiKey(自动 gitignore,优先级更高)
107
+ ├── models.local.json # 模型仓库:你能调用的所有模型 + 凭证(本机本地,从不入 git)
107
108
  ├── settings.json # 运行偏好:当前激活的 model / UI / 权限
108
- ├── settings.local.json # 同名兜底,仅你本机生效
109
+ ├── settings.local.json # settings 的本机兜底覆盖
109
110
  ├── sessions/ # 会话 JSONL 历史
110
111
  └── logs/ # 日志(运行报错排查用)
111
112
  ```
112
113
 
113
- ### 模型仓库:`~/.muse/models.json`
114
+ ### 模型仓库:`~/.muse/models.local.json`
114
115
 
115
116
  完整字段说明:
116
117
 
@@ -120,7 +121,7 @@ muse 用**两个文件**分工:
120
121
  | `name` | string | | 显示名,缺省 = id |
121
122
  | `vendor` | string | | 厂商名,只在 `/models` selector 里分组显示 |
122
123
  | `baseUrl` | string | ✅ | OpenAI 兼容协议**基址**(如 `https://api.deepseek.com/v1`);填全 endpoint `.../v1/chat/completions` 也行,会自动剥后缀;别名字段 `url` 等价 |
123
- | `apiKey` | string | | 凭证;支持 `${ENV_VAR}` 占位符(推荐);本地 Ollama 等可不填 |
124
+ | `apiKey` | string | | 凭证;可直接写明文(推荐,文件本就只在本机),也支持 `${ENV_VAR}` 占位符;本地 Ollama 等可不填 |
124
125
  | `supportsToolCall` | bool | | 是否支持 function calling,默认 `true` |
125
126
  | `supportsImages` | bool | | 是否支持视觉,默认 `false` |
126
127
  | `contextWindow` | number | | 上下文窗口(tokens),用于 `/cost` 估算 |
@@ -225,7 +226,7 @@ muse 用**两个文件**分工:
225
226
 
226
227
  | 字段 | 说明 |
227
228
  |---|---|
228
- | `llm.model` | 当前激活的 model id,必须在 models.json 的 models 数组里能找到 |
229
+ | `llm.model` | 当前激活的 model id,必须在 models.local.json 的 models 数组里能找到 |
229
230
  | `ui.lang` | UI 文案语言,`zh-CN` / `en` |
230
231
  | `ui.showBanner` | 启动是否显示彩虹 banner |
231
232
  | `permissions.allow` | 直接放行的工具名列表(如 `Read`、`Bash(npm:*)`) |
@@ -237,24 +238,25 @@ muse 用**两个文件**分工:
237
238
 
238
239
  ### 凭证安全
239
240
 
240
- 按推荐顺序:
241
+ `~/.muse/models.local.json` 是凭证唯一落脚点。两种写法:
241
242
 
242
- 1. **环境变量 + `${VAR}` 占位符**(最安全)
243
+ 1. **直接写明文**(推荐——文件本就只存在于本机)
244
+ ```json
245
+ { "apiKey": "sk-..." }
246
+ ```
247
+ - 文件名带 `.local.json`,约定**绝不入 git**
248
+ - 建议 `chmod 600 ~/.muse/models.local.json`
249
+ - 警惕同步盘(iCloud / Dropbox):如果 `~/.muse/` 被同步盘覆盖,凭证会扩散
250
+
251
+ 2. **`${VAR}` 占位符 + shell env**(怕同步盘扩散时用)
243
252
  ```bash
244
253
  # ~/.zshrc 或 ~/.bashrc
245
254
  export DEEPSEEK_API_KEY=sk-...
246
- export MOONSHOT_API_KEY=sk-...
247
255
  ```
248
- models.json 里 `"apiKey": "${DEEPSEEK_API_KEY}"`,启动时 muse 展开。
249
-
250
- 2. **`~/.muse/models.local.json`**(明文 key)
251
- - 文件名带 `.local.json`,**所有 `*.local.json` 项目级已 gitignore**
252
- - 推荐 `chmod 600 ~/.muse/models.local.json`
253
- - 同 id 时 `models.local.json` 覆盖 `models.json`,可以只在 local 里放凭证
254
-
255
- 3. **`~/.muse/models.json` 直接写明文**(不推荐)
256
- - 仅当你 100% 确定该机器 + 账号是私有
257
- - 任何同步盘(iCloud、Dropbox)都会让它扩散
256
+ ```json
257
+ { "apiKey": "${DEEPSEEK_API_KEY}" }
258
+ ```
259
+ muse 启动时自动展开。如果 env 没设,会给出指明缺哪个变量的友好报错。
258
260
 
259
261
  muse 自身的安全保证:
260
262
  - 日志里 apiKey **自动脱敏**(前 4 + 后 4,中间打码)
@@ -272,7 +274,7 @@ muse 自身的安全保证:
272
274
  5. 环境变量 `MUSE_PROVIDER` / `MUSE_MODEL`
273
275
  6. CLI flags `-p` / `-m`
274
276
 
275
- `models.json` 同理(仅 `~/.muse/` 层,无项目级)。
277
+ `models.local.json` 只有 `~/.muse/` 层,无项目级(模型仓库本质是 user-level)。
276
278
 
277
279
  ---
278
280
 
@@ -367,22 +369,17 @@ assistant 回复里的 markdown(标题、列表、代码块、表格、链接
367
369
 
368
370
  ### `/models` 显示 "No models registry found"
369
371
 
370
- `~/.muse/models.json` 不存在或解析失败。
372
+ `~/.muse/models.local.json` 不存在或解析失败。
371
373
 
372
- - 路径是否正确?`ls ~/.muse/models.json`
373
- - JSON 格式是否合法?`jq . ~/.muse/models.json`
374
+ - 路径是否正确?`ls ~/.muse/models.local.json`
375
+ - JSON 格式是否合法?`jq . ~/.muse/models.local.json`
374
376
  - 字段错位?看 `~/.muse/logs/<today>.jsonl` 里的 warn
375
377
 
376
- ### `Model "..." has no apiKey in env MUSE_ACTIVE_API_KEY`
378
+ ### `Model "..." needs an API key but none was found`
377
379
 
378
- 启动时 apiKey 没注入到 env。检查:
380
+ 启动时 apiKey 没注入到 env。muse 会直接告诉你根因 + 修复方式(缺哪个 env var、改哪个文件)。看报错头几行即可。
379
381
 
380
- 1. models.json 里 `apiKey` 字段是否填了
381
- 2. 用了 `${ENV_VAR}` 占位符?对应 env 是否在 shell 里 export 过?
382
- ```bash
383
- echo $DEEPSEEK_API_KEY # 应有值
384
- ```
385
- 3. 改完 `~/.zshrc` 后是否 `source ~/.zshrc`?
382
+ 如果用了 `${ENV_VAR}` 占位符且 env 没 export,最快修复是直接把明文 key 填进 `~/.muse/models.local.json`(文件就在本机,明文 OK)。
386
383
 
387
384
  ### 启动时一段 zod warn JSON
388
385