@saluzi/saluzi-edu 0.6.5 → 0.7.0

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.
@@ -6502,7 +6502,7 @@
6502
6502
  "env"
6503
6503
  ]
6504
6504
  },
6505
- "content": "\n## 主目录位置\n\nSaluzi 把所有用户数据集中放在主目录下的 `~/.saluzi-edu` 文件夹。路径由 `getSaluziConfigHomeDir()` 统一决定:\n\n- **Linux / macOS**:`~/.saluzi-edu`\n- **Windows**:`%USERPROFILE%\\.saluzi-edu`(即 `C:\\Users\\<你>\\.saluzi-edu`)\n\n可通过环境变量 `SALUZI_CONFIG_DIR` 覆盖到任意位置(支持 `~` 展开),适合多套配置切换或放在加密分区。\n\n> 注意:企业受管配置 `managed-settings.json` **不在此目录**,而是放在系统级路径——macOS 为 `/Library/Application Support/SaluziCode`,Windows 为 `C:\\Program Files\\SaluziCode`,Linux 为 `/etc/saluzi-edu`。普通用户一般不需要动它。\n\n## 子目录与文件清单\n\n启动后 `~/.saluzi-edu` 下会按需出现以下条目。各子目录在首次写入时自动 `mkdir -p`,不需要手动创建。\n\n### 配置与凭证\n\n| 路径 | 作用 | 删除影响 |\n|------|------|---------|\n| `settings.json` | 用户全局设置(env、权限、模型、hooks 等)。详见下文 | 重置为默认配置 |\n| `settings.local.json` | 项目级本地设置(gitignored)。仅在 `<cwd>/.saluzi-edu/` 下生效 | 丢失本地覆盖 |\n| `.credentials.json` | OAuth 登录凭证 | 需重新 `/login` |\n| `~/.saluzi-edu.json`(主目录**外**的兄弟文件) | 全局运行配置(主题、安装方式等),不要手编;存在旧版 `.config.json` 时仍兼容读取 | 自动重建 |\n| `keybindings.json` | 自定义快捷键 | 恢复默认按键 |\n| `SALUZI.md` | 用户级记忆(跨项目的个人偏好) | 丢失用户记忆 |\n| `rules/` | 用户级规则文件 | 丢失规则 |\n\n### 项目数据(按 cwd 隔离)\n\n| 路径 | 作用 |\n|------|------|\n| `projects/<sanitized-cwd>/` | 每个工作目录一个子目录,存放该项目专属的会话与记忆 |\n| `projects/<cwd>/memory/` | 自动记忆:`MEMORY.md` + `logs/YYYY/MM/` 日志 |\n| `projects/<cwd>/*.jsonl` | 该项目的会话转录 |\n\n项目子目录名是 cwd 路径的 sanitized 形式(特殊字符替换),所以同时多个项目互不干扰。\n\n### 扩展与自定义\n\n| 路径 | 作用 |\n|------|------|\n| `skills/` | 用户技能(由 `/skill-learning` 自动生成或手写) |\n| `commands/` | 用户自定义 slash 命令 |\n| `agents/` | 用户自定义 agent(Markdown 文件) |\n| `teams/` | 团队配置 |\n| `templates/` | 任务模板 |\n| `plugins/` | 插件安装目录(由 `/plugin` 管理) |\n\n### 运行时状态\n\n| 路径 | 作用 |\n|------|------|\n| `sessions/` | 并发会话状态 |\n| `jobs/` | 后台任务状态 |\n| `tasks/` | 任务数据 |\n| `plans/` | plan 文件 |\n| `daemon/` | daemon 进程状态(`<name>.json`) |\n| `shell-snapshots/` | Shell 环境快照(`!` 命令用) |\n| `history.jsonl` | 全局命令历史 |\n| `stats-cache.json` | 使用统计缓存 |\n| `usage-data/` | `/insights` 用量数据 |\n| `pr-subscriptions.json` | PR 订阅列表 |\n| `file-history/` | 文件修改历史 |\n| `session-env/` | 会话环境变量 |\n| `uploads/<sessionId>/` | 入站附件 |\n\n### 缓存与日志\n\n| 路径 | 作用 |\n|------|------|\n| `cache/model-capabilities.json` | 模型能力缓存 |\n| `backups/` | 配置文件备份 |\n| `debug/<sessionId>.txt` | 调试日志 |\n| `traces/` | Perfetto 性能追踪 |\n| `startup-perf/` | 启动性能分析 |\n| `.update.lock` | 自动更新锁文件 |\n\n### IDE 与集成\n\n| 路径 | 作用 |\n|------|------|\n| `ide/` | IDE 集成数据 |\n| `local/` | 本地安装文件 |\n| `magic-docs/prompt.md` | MagicDocs prompt |\n| `skill-learning/` | 技能学习上下文 |\n| `autonomy/` | 自治运行记录(`runs.json`、`flows.json`) |\n\n所有缓存与运行时状态目录都可安全删除——Saluzi 会按需重建。配置类(`settings.json`、`SALUZI.md`、`keybindings.json`)删除会丢失个人定制,需要重新配置。\n\n## settings.json 配置\n\n`~/.saluzi-edu/settings.json` 是用户全局配置文件,JSON 格式,所有字段均可选。下面按主题分组说明。完整 JSON Schema 发布在 `https://json.schemastore.org/saluzi-edu-settings.json`,编辑器开启 JSON Schema 支持后可自动补全。\n\n### 来源与优先级\n\nSaluzi 合并 5 个来源的配置,后者覆盖前者:\n\n| 优先级 | 来源 | 路径 | 可编辑 |\n|--------|------|------|--------|\n| 1(低) | userSettings | `~/.saluzi-edu/settings.json` | 是 |\n| 2 | projectSettings | `<cwd>/.saluzi-edu/settings.json` | 是(共享,入 git) |\n| 3 | localSettings | `<cwd>/.saluzi-edu/settings.local.json` | 是(gitignored) |\n| 4 | flagSettings | `--settings <path>` CLI 参数 | 否 |\n| 5(高) | policySettings | 系统级 managed-settings.json | 否 |\n\n合并规则:标量高优先级直接覆盖;对象深度合并;数组拼接去重。policySettings 内部还按 remote > MDM (HKLM/plist) > managed-settings.json > HKCU 排序。\n\n### 1. 模型与推理\n\n| 字段 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `modelType` | enum | `anthropic` | API 提供商:`anthropic`/`openai`/`gemini`/`grok` |\n| `model` | string | - | 覆盖默认模型 ID |\n| `availableModels` | string[] | - | 企业模型白名单(通常 managed) |\n| `modelOverrides` | Record<string,string> | - | 模型 ID 映射(如 Bedrock ARN) |\n| `effortLevel` | enum | 未设置时按模型默认(多数模型等效 `high`) | `low`/`medium`/`high`/`xhigh`/`max` |\n| `alwaysThinkingEnabled` | boolean | true | 是否启用 thinking |\n| `fastMode` | boolean | false | 启用 fast 模式 |\n| `fastModePerSessionOptIn` | boolean | false | fast 不跨会话持久化 |\n| `advisorModel` | string | - | 服务端 advisor 工具模型 |\n| `mom` | object | - | Mixture of Model 配置,见 [MOM 章节](./mom-mixed-models) |\n\n### 2. 环境变量\n\n`env` 是 `Record<string, string>`,写入后会注入到会话进程的环境变量。常用于配置 API Key 和端点:\n\n```json\n{\n \"env\": {\n \"ANTHROPIC_API_KEY\": \"sk-ant-...\",\n \"ANTHROPIC_BASE_URL\": \"https://api.anthropic.com\",\n \"SALUZI_EFFORT_LEVEL\": \"high\"\n }\n}\n```\n\n常用键:\n\n| 键 | 作用 |\n|----|------|\n| `ANTHROPIC_API_KEY` | Anthropic API Key(设置后免 `/login`) |\n| `ANTHROPIC_BASE_URL` | Anthropic 端点(自建反代用) |\n| `OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_MODEL` | OpenAI 兼容 |\n| `GEMINI_API_KEY` / `GEMINI_BASE_URL` | Gemini |\n| `GROK_API_KEY` / `GROK_BASE_URL` / `GROK_MODEL` | Grok/xAI |\n| `SALUZI_EFFORT_LEVEL` | 推理深度(覆盖 effortLevel) |\n| `SALUZI_MAX_CONTEXT_TOKENS` | 最大上下文 token |\n| `SALUZI_DISABLE_1M_CONTEXT` | 禁用 1M 上下文 |\n| `SALUZI_CLIENT_CERT` / `SALUZI_CLIENT_KEY` | mTLS 证书 |\n\n### 3. 权限\n\n`permissions` 控制工具调用的授权策略:\n\n```json\n{\n \"permissions\": {\n \"defaultMode\": \"default\",\n \"allow\": [\"Bash(npm test:*)\", \"Read(./src/**)\"],\n \"deny\": [\"Bash(rm -rf:*)\"],\n \"ask\": [\"Write(**)\"],\n \"additionalDirectories\": [\"../other-project\"]\n }\n}\n```\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultMode` | enum | `default`/`acceptEdits`/`bypassPermissions`/`dontAsk`/`plan`/`auto` |\n| `allow` | string[] | 自动放行的工具规则 |\n| `deny` | string[] | 直接拒绝的规则 |\n| `ask` | string[] | 总是弹出确认的规则 |\n| `additionalDirectories` | string[] | 额外允许访问的目录 |\n| `disableBypassPermissionsMode` | `\"disable\"` | 禁用 bypass 模式 |\n\n规则语法如 `Bash(npm test:*)`、`Read(./src/**)`,可用 `*` 通配。\n\n### 4. Hooks\n\n`hooks` 在工具执行前后触发自定义命令。事件类型有 25+ 种,常用的:\n\n| 事件 | 触发时机 |\n|------|---------|\n| `PreToolUse` | 工具调用前 |\n| `PostToolUse` | 工具调用后 |\n| `UserPromptSubmit` | 用户提交输入时 |\n| `SessionStart` / `SessionEnd` | 会话开始/结束 |\n| `Stop` / `StopFailure` | 主循环停止 |\n| `Notification` | 通知发送时 |\n| `PreCompact` / `PostCompact` | 上下文压缩前后 |\n| `PermissionRequest` / `PermissionDenied` | 权限请求/拒绝时 |\n\n每个 hook 是 `{ matcher?: string, hooks: HookCommand[] }`,HookCommand 有四种类型:\n\n```json\n{\n \"hooks\": {\n \"PreToolUse\": [\n {\n \"matcher\": \"Bash\",\n \"hooks\": [\n { \"type\": \"command\", \"command\": \"echo 'running bash'\", \"shell\": \"bash\" },\n { \"type\": \"prompt\", \"prompt\": \"检查这个命令是否安全\" },\n { \"type\": \"http\", \"url\": \"https://audit.example.com/hook\", \"headers\": {} },\n { \"type\": \"agent\", \"prompt\": \"评估风险\", \"model\": \"pro\" }\n ]\n }\n ]\n }\n}\n```\n\n| 字段 | 适用类型 | 说明 |\n|------|---------|------|\n| `command` / `shell` | command | 执行 shell 命令 |\n| `prompt` / `model` | prompt / agent | 让模型评估 |\n| `url` / `headers` / `allowedEnvVars` | http | HTTP 回调 |\n| `statusMessage` / `once` / `if` | 全部 | 通用控制 |\n| `timeout` | command / prompt / http / agent | 超时秒数 |\n| `async` / `asyncRewake` | command | 后台运行(asyncRewake 在退出码 2 时唤醒模型) |\n\n`disableAllHooks: true` 可一键禁用所有 hooks 和 statusLine。\n\n### 5. 沙箱\n\n`sandbox` 控制工具执行的隔离边界:\n\n```json\n{\n \"sandbox\": {\n \"enabled\": true,\n \"failIfUnavailable\": false,\n \"autoAllowBashIfSandboxed\": true,\n \"network\": {\n \"allowedDomains\": [\"api.anthropic.com\", \"registry.npmjs.org\"]\n },\n \"filesystem\": {\n \"allowWrite\": [\"./src\", \"./tests\"],\n \"denyWrite\": [\".env\", \".git\"]\n }\n }\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `enabled` | 启用沙箱 |\n| `failIfUnavailable` | 沙箱不可用时直接失败(通常 managed) |\n| `autoAllowBashIfSandboxed` | 沙箱内自动放行 Bash |\n| `allowUnsandboxedCommands` | 允许未沙箱化的命令 |\n| `network.allowedDomains` | 允许访问的域名 |\n| `network.allowManagedDomainsOnly` | 仅用 managed 域名白名单 |\n| `filesystem.allowWrite` / `denyWrite` | 读写路径规则 |\n| `excludedCommands` | 排除沙箱的命令 |\n\n### 6. UI 与输出\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `outputStyle` | string | 响应输出样式 |\n| `language` | string | 首选语言(如 `chinese`、`japanese`) |\n| `theme` | string | 主题名。主界面主题由 `/theme` 持久化到全局配置文件 `~/.saluzi-edu.json`;settings.json 中该键仅个别场景读取 |\n| `prefersReducedMotion` | boolean | 减少动画 |\n| `syntaxHighlightingDisabled` | boolean | 禁用 diff 语法高亮 |\n| `terminalTitleFromRename` | boolean | `/rename` 同步终端标题 |\n| `spinnerTipsEnabled` | boolean | spinner 显示提示 |\n| `spinnerVerbs` | object | 自定义 spinner 动词 |\n| `spinnerTipsOverride` | object | 覆盖 spinner tips |\n| `statusLine` | object | 自定义状态行(`{ type: \"command\", command, padding? }`) |\n\n### 7. MCP 服务器\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `enableAllProjectMcpServers` | boolean | 自动批准项目所有 MCP 服务器 |\n| `enabledMcpjsonServers` | string[] | 已批准的 .mcp.json 服务器 |\n| `disabledMcpjsonServers` | string[] | 已拒绝的 .mcp.json 服务器 |\n| `allowedMcpServers` | array | 企业 MCP 白名单 |\n| `deniedMcpServers` | array | 企业 MCP 黑名单(优先于白名单) |\n\n### 8. 插件\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `enabledPlugins` | Record<string, string[]\\|boolean> | 已启用插件(plugin-id@marketplace-id) |\n| `extraKnownMarketplaces` | Record<string, object> | 额外插件市场源 |\n| `pluginConfigs` | Record<string, {mcpServers?, options?}> | 每插件配置 |\n| `strictPluginOnlyCustomization` | boolean\\|enum[] | 阻止非插件自定义(surfaces: `skills`/`agents`/`hooks`/`mcp`) |\n\n### 9. 记忆与技能\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `autoMemoryEnabled` | boolean | 项目自动记忆开关 |\n| `autoMemoryDirectory` | string | 自动记忆存储目录(projectSettings 中忽略) |\n| `autoDreamEnabled` | boolean | 后台记忆整合 |\n| `memoryV2Enabled` | boolean | Memory V2 总开关 |\n| `memoryV2` | object | V2 子特性(gatedWrites、hybridStorage、smartRetrieval 等) |\n| `skillSearchEnabled` | boolean | 技能搜索预取 |\n| `skillLearningEnabled` | boolean | 自动技能学习 |\n| `skillImprovementEnabled` | boolean | 自动技能改进 |\n\n### 10. 自动更新与启动\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `autoUpdatesChannel` | enum | 已弃用:仅存在 `latest` 频道,存量值(含 legacy `stable`)被所有读取处忽略 |\n| `minimumVersion` | string | 最低版本(防降级) |\n| `cleanupPeriodDays` | number | 聊天转录保留天数(默认 30,0=禁用持久化) |\n| `includeGitInstructions` | boolean | 系统提示是否含 git 工作流(默认 true) |\n| `respectGitignore` | boolean | 文件选择器是否尊重 .gitignore(默认 true) |\n| `skipWebFetchPreflight` | boolean | 跳过 WebFetch 黑名单检查 |\n\n### 11. 登录与认证\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `forceLoginMethod` | enum | `claudeai`/`console` 强制登录方式 |\n| `forceLoginOrgUUID` | string | OAuth 组织 UUID |\n| `apiKeyHelper` | string | 输出认证值的脚本路径 |\n| `awsCredentialExport` / `awsAuthRefresh` | string | AWS 凭证脚本 |\n| `gcpAuthRefresh` | string | GCP 认证刷新命令 |\n| `otelHeadersHelper` | string | OpenTelemetry headers 脚本 |\n\n### 12. 提交与归属\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `attribution` | object | 提交/PR 归属文本(`{ commit, pr }`) |\n| `includeCoAuthoredBy` | boolean | 已弃用,改用 attribution |\n\n### 13. API Key 绑定\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `keys` | KeyEntry[] | API key 条目(`/keys` 命令) |\n| `keyBindings` | object | 模型 slot→key 索引(`{ default?, max?, pro?, std?, subagent? }`) |\n| `keyModelNames` | Record<string,string> | slot→模型名映射 |\n| `keyContextLimits` | Record<string,number> | slot→上下文长度(token),覆盖全局上下文窗口配置 |\n\n详见 [API Key 绑定章节](./keys-binding)。\n\n### 14. 企业受管字段\n\n以下字段设计上只从 managed-settings.json 读取,普通 settings.json 中写会被忽略:\n\n- `allowManagedHooksOnly` — 仅运行 managed 的 hooks\n- `allowManagedPermissionRulesOnly` — 仅用 managed 的权限规则\n- `allowManagedMcpServersOnly` — 仅从 managed 读 MCP 白名单\n- `strictPluginOnlyCustomization` — 阻止非插件自定义\n- `strictKnownMarketplaces` / `blockedMarketplaces` — 插件市场白/黑名单\n- `pluginTrustMessage` — 插件信任警告附加消息\n- `sandbox.failIfUnavailable` — 沙箱不可用即失败\n- `sandbox.network.allowManagedDomainsOnly` — 仅用 managed 域名\n- `sandbox.filesystem.allowManagedReadPathsOnly` — 仅用 managed 读路径\n\n### 15. 其他\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultShell` | enum | `bash`/`powershell`,`!` 命令默认 shell |\n| `worktree` | object | git worktree 配置(`symlinkDirectories`, `sparsePaths`) |\n| `plansDirectory` | string | plan 文件自定义目录 |\n| `feedbackSurveyRate` | number(0-1) | 会话反馈调查出现概率 |\n| `channelsEnabled` | boolean | 团队/企业频道通知 opt-in |\n| `showClearContextOnPlanAccept` | boolean | plan 批准对话框显示 clear context |\n| `saluziMdExcludes` | string[] | 排除加载 SALUZI.md 的 glob 模式 |\n| `remote.defaultEnvironmentId` | string | 远程会话默认环境 |\n| `sshConfigs` | array | SSH 远程配置(`{ id, name, sshHost, sshPort?, sshIdentityFile?, startDirectory? }`) |\n\n## 编辑建议\n\n- **优先用 userSettings**:`~/.saluzi-edu/settings.json` 放跨项目偏好(模型、env、权限等;主题由 `/theme` 管理,不在此文件)\n- **项目共享配置用 projectSettings**:`<cwd>/.saluzi-edu/settings.json`,入 git 团队共享\n- **个人项目覆盖用 localSettings**:`<cwd>/.saluzi-edu/settings.local.json`,gitignored\n- **不要手编 `~/.saluzi-edu.json` / `.credentials.json`**:用 `/login` 等命令让 Saluzi 自己写\n- **删除前备份**:`settings.json`、`SALUZI.md`、`keybindings.json` 删了不可恢复\n\n## 下一步\n\n- [排障](./troubleshooting) — `/doctor` 全面体检配置\n- [上下文管理](./context-tips) — SALUZI.md 项目记忆机制\n- [API Key 绑定](./keys-binding) — `/keys` 多 Key 调度\n"
6505
+ "content": "\n## 主目录位置\n\nSaluzi 把所有用户数据集中放在主目录下的 `~/.saluzi-edu` 文件夹。路径由 `getSaluziConfigHomeDir()` 统一决定:\n\n- **Linux / macOS**:`~/.saluzi-edu`\n- **Windows**:`%USERPROFILE%\\.saluzi-edu`(即 `C:\\Users\\<你>\\.saluzi-edu`)\n\n可通过环境变量 `SALUZI_CONFIG_DIR` 覆盖到任意位置(支持 `~` 展开),适合多套配置切换或放在加密分区。\n\n> 注意:企业受管配置 `managed-settings.json` **不在此目录**,而是放在系统级路径——macOS 为 `/Library/Application Support/SaluziCode`,Windows 为 `C:\\Program Files\\SaluziCode`,Linux 为 `/etc/saluzi-edu`。普通用户一般不需要动它。\n\n## 子目录与文件清单\n\n启动后 `~/.saluzi-edu` 下会按需出现以下条目。各子目录在首次写入时自动 `mkdir -p`,不需要手动创建。\n\n### 配置与凭证\n\n| 路径 | 作用 | 删除影响 |\n|------|------|---------|\n| `settings.json` | 用户全局设置(env、权限、模型、hooks 等)。详见下文 | 重置为默认配置 |\n| `settings.local.json` | 项目级本地设置(gitignored)。仅在 `<cwd>/.saluzi-edu/` 下生效 | 丢失本地覆盖 |\n| `.credentials.json` | OAuth 登录凭证 | 需重新 `/login` |\n| `~/.saluzi-edu.json`(主目录**外**的兄弟文件) | 全局运行配置(主题、安装方式等),不要手编;存在旧版 `.config.json` 时仍兼容读取 | 自动重建 |\n| `keybindings.json` | 自定义快捷键 | 恢复默认按键 |\n| `SALUZI.md` | 用户级记忆(跨项目的个人偏好) | 丢失用户记忆 |\n| `rules/` | 用户级规则文件 | 丢失规则 |\n\n### 项目数据(按 cwd 隔离)\n\n| 路径 | 作用 |\n|------|------|\n| `projects/<sanitized-cwd>/` | 每个工作目录一个子目录,存放该项目专属的会话与记忆 |\n| `projects/<cwd>/memory/` | 自动记忆:`MEMORY.md` + `logs/YYYY/MM/` 日志 |\n| `projects/<cwd>/*.jsonl` | 该项目的会话转录 |\n\n项目子目录名是 cwd 路径的 sanitized 形式(特殊字符替换),所以同时多个项目互不干扰。\n\n### 扩展与自定义\n\n| 路径 | 作用 |\n|------|------|\n| `skills/` | 用户技能(由 `/skill-learning` 自动生成或手写) |\n| `commands/` | 用户自定义 slash 命令 |\n| `agents/` | 用户自定义 agent(Markdown 文件) |\n| `teams/` | 团队配置 |\n| `templates/` | 任务模板 |\n| `plugins/` | 插件安装目录(由 `/plugin` 管理) |\n\n### 运行时状态\n\n| 路径 | 作用 |\n|------|------|\n| `sessions/` | 并发会话状态 |\n| `jobs/` | 后台任务状态 |\n| `tasks/` | 任务数据 |\n| `plans/` | plan 文件 |\n| `daemon/` | daemon 进程状态(`<name>.json`) |\n| `shell-snapshots/` | Shell 环境快照(`!` 命令用) |\n| `history.jsonl` | 全局命令历史 |\n| `stats-cache.json` | 使用统计缓存 |\n| `usage-data/` | `/insights` 用量数据 |\n| `pr-subscriptions.json` | PR 订阅列表 |\n| `file-history/` | 文件修改历史 |\n| `session-env/` | 会话环境变量 |\n| `uploads/<sessionId>/` | 入站附件 |\n\n### 缓存与日志\n\n| 路径 | 作用 |\n|------|------|\n| `cache/model-capabilities.json` | 模型能力缓存 |\n| `backups/` | 配置文件备份 |\n| `debug/<sessionId>.txt` | 调试日志 |\n| `traces/` | Perfetto 性能追踪 |\n| `startup-perf/` | 启动性能分析 |\n| `.update.lock` | 自动更新锁文件 |\n\n### IDE 与集成\n\n| 路径 | 作用 |\n|------|------|\n| `ide/` | IDE 集成数据 |\n| `local/` | 本地安装文件 |\n| `magic-docs/prompt.md` | MagicDocs prompt |\n| `skill-learning/` | 技能学习上下文 |\n| `autonomy/` | 自治运行记录(`runs.json`、`flows.json`) |\n\n所有缓存与运行时状态目录都可安全删除——Saluzi 会按需重建。配置类(`settings.json`、`SALUZI.md`、`keybindings.json`)删除会丢失个人定制,需要重新配置。\n\n## settings.json 配置\n\n`~/.saluzi-edu/settings.json` 是用户全局配置文件,JSON 格式,所有字段均可选。下面按主题分组说明。完整 JSON Schema 发布在 `https://json.schemastore.org/saluzi-edu-settings.json`,编辑器开启 JSON Schema 支持后可自动补全。\n\n### 来源与优先级\n\nSaluzi 合并 5 个来源的配置,后者覆盖前者:\n\n| 优先级 | 来源 | 路径 | 可编辑 |\n|--------|------|------|--------|\n| 1(低) | userSettings | `~/.saluzi-edu/settings.json` | 是 |\n| 2 | projectSettings | `<cwd>/.saluzi-edu/settings.json` | 是(共享,入 git) |\n| 3 | localSettings | `<cwd>/.saluzi-edu/settings.local.json` | 是(gitignored) |\n| 4 | flagSettings | `--settings <path>` CLI 参数 | 否 |\n| 5(高) | policySettings | 系统级 managed-settings.json | 否 |\n\n合并规则:标量高优先级直接覆盖;对象深度合并;数组拼接去重。policySettings 内部还按 remote > MDM (HKLM/plist) > managed-settings.json > HKCU 排序。\n\n### 1. 模型与推理\n\n| 字段 | 类型 | 默认 | 说明 |\n|------|------|------|------|\n| `modelType` | enum | `anthropic` | API 提供商:`anthropic`/`openai`/`gemini`/`grok` |\n| `model` | string | - | 覆盖默认模型 ID |\n| `availableModels` | string[] | - | 企业模型白名单(通常 managed) |\n| `modelOverrides` | Record<string,string> | - | 模型 ID 映射(如 Bedrock ARN) |\n| `effortLevel` | enum | 未设置时按模型默认(多数模型等效 `high`) | `low`/`medium`/`high`/`xhigh`/`max` |\n| `alwaysThinkingEnabled` | boolean | true | 是否启用 thinking |\n| `fastMode` | boolean | false | 启用 fast 模式 |\n| `fastModePerSessionOptIn` | boolean | false | fast 不跨会话持久化 |\n| `advisorModel` | string | - | 服务端 advisor 工具模型 |\n| `mom` | object | - | Mixture of Model 配置,见 [MOM 章节](./mom-mixed-models) |\n\n### 2. 环境变量\n\n`env` 是 `Record<string, string>`,写入后会注入到会话进程的环境变量。常用于配置 API Key 和端点:\n\n```json\n{\n \"env\": {\n \"ANTHROPIC_API_KEY\": \"sk-ant-...\",\n \"ANTHROPIC_BASE_URL\": \"https://api.anthropic.com\",\n \"SALUZI_EFFORT_LEVEL\": \"high\"\n }\n}\n```\n\n常用键:\n\n| 键 | 作用 |\n|----|------|\n| `ANTHROPIC_API_KEY` | Anthropic API Key(设置后免 `/login`) |\n| `ANTHROPIC_BASE_URL` | Anthropic 端点(自建反代用) |\n| `OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_MODEL` | OpenAI 兼容 |\n| `GEMINI_API_KEY` / `GEMINI_BASE_URL` | Gemini |\n| `GROK_API_KEY` / `GROK_BASE_URL` / `GROK_MODEL` | Grok/xAI |\n| `SALUZI_EFFORT_LEVEL` | 推理深度(覆盖 effortLevel) |\n| `SALUZI_MAX_CONTEXT_TOKENS` | 最大上下文 token |\n| `SALUZI_DISABLE_1M_CONTEXT` | 禁用 1M 上下文 |\n| `SALUZI_CLIENT_CERT` / `SALUZI_CLIENT_KEY` | mTLS 证书 |\n\n### 3. 权限\n\n`permissions` 控制工具调用的授权策略:\n\n```json\n{\n \"permissions\": {\n \"defaultMode\": \"default\",\n \"allow\": [\"Bash(npm test:*)\", \"Read(./src/**)\"],\n \"deny\": [\"Bash(rm -rf:*)\"],\n \"ask\": [\"Write(**)\"],\n \"additionalDirectories\": [\"../other-project\"]\n }\n}\n```\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultMode` | enum | `default`/`acceptEdits`/`bypassPermissions`/`dontAsk`/`plan`/`auto` |\n| `allow` | string[] | 自动放行的工具规则 |\n| `deny` | string[] | 直接拒绝的规则 |\n| `ask` | string[] | 总是弹出确认的规则 |\n| `additionalDirectories` | string[] | 额外允许访问的目录 |\n| `disableBypassPermissionsMode` | `\"disable\"` | 禁用 bypass 模式 |\n\n规则语法如 `Bash(npm test:*)`、`Read(./src/**)`,可用 `*` 通配。\n\n### 4. Hooks\n\n`hooks` 在工具执行前后触发自定义命令。事件类型有 25+ 种,常用的:\n\n| 事件 | 触发时机 |\n|------|---------|\n| `PreToolUse` | 工具调用前 |\n| `PostToolUse` | 工具调用后 |\n| `UserPromptSubmit` | 用户提交输入时 |\n| `SessionStart` / `SessionEnd` | 会话开始/结束 |\n| `Stop` / `StopFailure` | 主循环停止 |\n| `Notification` | 通知发送时 |\n| `PreCompact` / `PostCompact` | 上下文压缩前后 |\n| `PermissionRequest` / `PermissionDenied` | 权限请求/拒绝时 |\n\n每个 hook 是 `{ matcher?: string, hooks: HookCommand[] }`,HookCommand 有四种类型:\n\n```json\n{\n \"hooks\": {\n \"PreToolUse\": [\n {\n \"matcher\": \"Bash\",\n \"hooks\": [\n { \"type\": \"command\", \"command\": \"echo 'running bash'\", \"shell\": \"bash\" },\n { \"type\": \"prompt\", \"prompt\": \"检查这个命令是否安全\" },\n { \"type\": \"http\", \"url\": \"https://audit.example.com/hook\", \"headers\": {} },\n { \"type\": \"agent\", \"prompt\": \"评估风险\", \"model\": \"pro\" }\n ]\n }\n ]\n }\n}\n```\n\n| 字段 | 适用类型 | 说明 |\n|------|---------|------|\n| `command` / `shell` | command | 执行 shell 命令 |\n| `prompt` / `model` | prompt / agent | 让模型评估 |\n| `url` / `headers` / `allowedEnvVars` | http | HTTP 回调 |\n| `statusMessage` / `once` / `if` | 全部 | 通用控制 |\n| `timeout` | command / prompt / http / agent | 超时秒数 |\n| `async` / `asyncRewake` | command | 后台运行(asyncRewake 在退出码 2 时唤醒模型) |\n\n`disableAllHooks: true` 可一键禁用所有 hooks 和 statusLine。\n\n### 5. 沙箱\n\n`sandbox` 控制工具执行的隔离边界:\n\n```json\n{\n \"sandbox\": {\n \"enabled\": true,\n \"failIfUnavailable\": false,\n \"autoAllowBashIfSandboxed\": true,\n \"network\": {\n \"allowedDomains\": [\"api.anthropic.com\", \"registry.npmjs.org\"]\n },\n \"filesystem\": {\n \"allowWrite\": [\"./src\", \"./tests\"],\n \"denyWrite\": [\".env\", \".git\"]\n }\n }\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `enabled` | 启用沙箱 |\n| `failIfUnavailable` | 沙箱不可用时直接失败(通常 managed) |\n| `autoAllowBashIfSandboxed` | 沙箱内自动放行 Bash |\n| `allowUnsandboxedCommands` | 允许未沙箱化的命令 |\n| `network.allowedDomains` | 允许访问的域名 |\n| `network.allowManagedDomainsOnly` | 仅用 managed 域名白名单 |\n| `filesystem.allowWrite` / `denyWrite` | 读写路径规则 |\n| `excludedCommands` | 排除沙箱的命令 |\n\n### 6. UI 与输出\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `outputStyle` | string | 响应输出样式 |\n| `language` | string | 首选语言(如 `chinese`、`japanese`) |\n| `theme` | string | 主题名。主界面主题由 `/theme` 持久化到全局配置文件 `~/.saluzi-edu.json`;settings.json 中该键仅个别场景读取 |\n| `prefersReducedMotion` | boolean | 减少动画 |\n| `syntaxHighlightingDisabled` | boolean | 禁用 diff 语法高亮 |\n| `terminalTitleFromRename` | boolean | `/rename` 同步终端标题 |\n| `spinnerTipsEnabled` | boolean | spinner 显示提示 |\n| `spinnerVerbs` | object | 自定义 spinner 动词 |\n| `spinnerTipsOverride` | object | 覆盖 spinner tips |\n| `statusLine` | object | 自定义状态行(`{ type: \"command\", command, padding? }`) |\n\n### 7. MCP 服务器\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `enableAllProjectMcpServers` | boolean | 自动批准项目所有 MCP 服务器 |\n| `enabledMcpjsonServers` | string[] | 已批准的 .mcp.json 服务器 |\n| `disabledMcpjsonServers` | string[] | 已拒绝的 .mcp.json 服务器 |\n| `allowedMcpServers` | array | 企业 MCP 白名单 |\n| `deniedMcpServers` | array | 企业 MCP 黑名单(优先于白名单) |\n\n### 8. 插件\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `enabledPlugins` | Record<string, string[]\\|boolean> | 已启用插件(plugin-id@marketplace-id) |\n| `extraKnownMarketplaces` | Record<string, object> | 额外插件市场源 |\n| `pluginConfigs` | Record<string, {mcpServers?, options?}> | 每插件配置 |\n| `strictPluginOnlyCustomization` | boolean\\|enum[] | 阻止非插件自定义(surfaces: `skills`/`agents`/`hooks`/`mcp`) |\n\n### 9. 记忆与技能\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `autoMemoryEnabled` | boolean | 记忆系统总开关(含 Memory V2 全部行为) |\n| `autoMemoryDirectory` | string | 自动记忆存储目录(projectSettings 中忽略) |\n| `autoDreamEnabled` | boolean | 后台记忆整合 |\n| `memoryV2` | object | V2 调优参数(offload、embedding、recall、directWrite、governanceConfig、layers);运行时随 `autoMemoryEnabled` |\n| `skillSearchEnabled` | boolean | 技能搜索预取 |\n| `skillLearningEnabled` | boolean | 自动技能学习 |\n| `skillImprovementEnabled` | boolean | 自动技能改进 |\n\n### 10. 自动更新与启动\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `autoUpdatesChannel` | enum | 已弃用:仅存在 `latest` 频道,存量值(含 legacy `stable`)被所有读取处忽略 |\n| `minimumVersion` | string | 最低版本(防降级) |\n| `cleanupPeriodDays` | number | 聊天转录保留天数(默认 30,0=禁用持久化) |\n| `includeGitInstructions` | boolean | 系统提示是否含 git 工作流(默认 true) |\n| `respectGitignore` | boolean | 文件选择器是否尊重 .gitignore(默认 true) |\n| `skipWebFetchPreflight` | boolean | 跳过 WebFetch 黑名单检查 |\n\n### 11. 登录与认证\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `forceLoginMethod` | enum | `claudeai`/`console` 强制登录方式 |\n| `forceLoginOrgUUID` | string | OAuth 组织 UUID |\n| `apiKeyHelper` | string | 输出认证值的脚本路径 |\n| `awsCredentialExport` / `awsAuthRefresh` | string | AWS 凭证脚本 |\n| `gcpAuthRefresh` | string | GCP 认证刷新命令 |\n| `otelHeadersHelper` | string | OpenTelemetry headers 脚本 |\n\n### 12. 提交与归属\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `attribution` | object | 提交/PR 归属文本(`{ commit, pr }`) |\n| `includeCoAuthoredBy` | boolean | 已弃用,改用 attribution |\n\n### 13. API Key 绑定\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `keys` | KeyEntry[] | API key 条目(`/keys` 命令) |\n| `keyBindings` | object | 模型 slot→key 索引(`{ default?, max?, pro?, std?, subagent? }`) |\n| `keyModelNames` | Record<string,string> | slot→模型名映射 |\n| `keyContextLimits` | Record<string,number> | slot→上下文长度(token),覆盖全局上下文窗口配置 |\n\n详见 [API Key 绑定章节](./keys-binding)。\n\n### 14. 企业受管字段\n\n以下字段设计上只从 managed-settings.json 读取,普通 settings.json 中写会被忽略:\n\n- `allowManagedHooksOnly` — 仅运行 managed 的 hooks\n- `allowManagedPermissionRulesOnly` — 仅用 managed 的权限规则\n- `allowManagedMcpServersOnly` — 仅从 managed 读 MCP 白名单\n- `strictPluginOnlyCustomization` — 阻止非插件自定义\n- `strictKnownMarketplaces` / `blockedMarketplaces` — 插件市场白/黑名单\n- `pluginTrustMessage` — 插件信任警告附加消息\n- `sandbox.failIfUnavailable` — 沙箱不可用即失败\n- `sandbox.network.allowManagedDomainsOnly` — 仅用 managed 域名\n- `sandbox.filesystem.allowManagedReadPathsOnly` — 仅用 managed 读路径\n\n### 15. 其他\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultShell` | enum | `bash`/`powershell`,`!` 命令默认 shell |\n| `worktree` | object | git worktree 配置(`symlinkDirectories`, `sparsePaths`) |\n| `plansDirectory` | string | plan 文件自定义目录 |\n| `feedbackSurveyRate` | number(0-1) | 会话反馈调查出现概率 |\n| `channelsEnabled` | boolean | 团队/企业频道通知 opt-in |\n| `showClearContextOnPlanAccept` | boolean | plan 批准对话框显示 clear context |\n| `saluziMdExcludes` | string[] | 排除加载 SALUZI.md 的 glob 模式 |\n| `remote.defaultEnvironmentId` | string | 远程会话默认环境 |\n| `sshConfigs` | array | SSH 远程配置(`{ id, name, sshHost, sshPort?, sshIdentityFile?, startDirectory? }`) |\n\n## 编辑建议\n\n- **优先用 userSettings**:`~/.saluzi-edu/settings.json` 放跨项目偏好(模型、env、权限等;主题由 `/theme` 管理,不在此文件)\n- **项目共享配置用 projectSettings**:`<cwd>/.saluzi-edu/settings.json`,入 git 团队共享\n- **个人项目覆盖用 localSettings**:`<cwd>/.saluzi-edu/settings.local.json`,gitignored\n- **不要手编 `~/.saluzi-edu.json` / `.credentials.json`**:用 `/login` 等命令让 Saluzi 自己写\n- **删除前备份**:`settings.json`、`SALUZI.md`、`keybindings.json` 删了不可恢复\n\n## 下一步\n\n- [排障](./troubleshooting) — `/doctor` 全面体检配置\n- [上下文管理](./context-tips) — SALUZI.md 项目记忆机制\n- [API Key 绑定](./keys-binding) — `/keys` 多 Key 调度\n"
6506
6506
  },
6507
6507
  "docs/guide/build-mcp-server": {
6508
6508
  "frontmatter": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saluzi/saluzi-edu",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "description": "Saluzi CLI - interactive AI coding assistant in the terminal",
5
5
  "license": "MIT",
6
6
  "type": "module",