# 9. 附录

## 9.1 完整配置项列表

以下是 `~/.jarvis/config.yaml` 中所有可配置的参数及其说明。

| 变量名称     | 默认值 | 说明                                                                                                                                                                                                                                                                     |
| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ENV`        | `{}`   | 环境变量配置，用于存放API Keys等敏感信息，如 `OPENAI_API_KEY`。                                                                                                                                                                                                          |
| `llms`       | `{}`   | 可复用的LLM配置定义，可以在 `llm_groups` 中通过引用名称来使用。每个配置包含 `platform`（平台名称）、`model`（模型名称）、`max_input_token_count`（最大输入token数量）、`llm_config`（LLM特定的配置参数，如 API key 等）。                                                |
| `llm_groups` | `{}`   | 预定义的LLM配置组，使用组名作为 key（对象格式）。每个组必须通过 `normal_llm`、`cheap_llm`、`smart_llm` 引用 `llms` 中定义的配置，不再支持直接定义 `platform`、`model`、`max_input_token_count` 等参数。每个组还可以包含一个可选的 `ENV` 字典用于覆盖当前会话的环境变量。 |
| `llm_group`  | `""`   | 选择要激活的LLM组名称。                                                                                                                                                                                                                                                  |

**注意**：`llm_groups` 中不再支持直接定义 `platform`、`model`、`max_input_token_count` 等参数，必须通过 `normal_llm`、`cheap_llm`、`smart_llm` 引用 `llms` 中定义的配置。

以下是一个使用引用方式的 `llm_groups` 配置示例：

```yaml
llms:
  claude-4-5:
    platform: openai
    model: claude-opus-4-5-20251101
    max_input_token_count: 200000
    llm_config:
      openai_api_key: sk-xxx
      openai_api_base: https://api.openai.com/v1

llm_groups:
  claude:
    normal_llm: claude-4-5
    cheap_llm: claude-4-5

llm_group: claude
```

当设置 `llm_group: claude` 时，Jarvis将使用 `claude-4-5` 作为常规模型，`claude-4-5` 作为廉价模型。

| 变量名称                   | 默认值  | 说明                                                                                                                                      |
| -------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `execute_tool_confirm`     | `false` | 在执行任何工具前是否需要用户手动确认。                                                                                                    |
| `tool_load_dirs`           | `[]`    | 额外的工具加载目录列表。                                                                                                                  |
| `after_tool_call_cb_dirs`  | `[]`    | 工具调用后回调函数实现目录列表（扫描 .py 文件并按约定动态注册回调；支持 ~ 与环境变量展开）。                                              |
| `methodology_dirs`         | `[]`    | 方法论加载目录列表（支持 ~ 与环境变量展开）。                                                                                             |
| `agent_definition_dirs`    | `[]`    | agent 定义加载目录列表（支持 ~ 与环境变量展开）。                                                                                         |
| `multi_agent_dirs`         | `[]`    | multi_agent 加载目录列表（支持 ~ 与环境变量展开）。                                                                                       |
| `roles_dirs`               | `[]`    | roles 加载目录列表（支持 ~ 与环境变量展开）。                                                                                             |
| `central_methodology_repo` | `""`    | 中心方法论仓库路径或Git仓库地址。支持本地目录（含git子路径）：若为本地目录将直接加入方法论加载路径；若为Git URL则会克隆到数据目录后加载。 |
| `central_tool_repo`        | `""`    | 中心工具仓库路径或Git仓库地址。支持本地目录（含git子路径）：若为本地目录将直接加载其中的工具；若为Git URL则会克隆到数据目录并加载。       |
| `central_rules_repo`       | `""`    | 中心规则仓库路径或Git仓库地址。支持本地目录（含git子路径）：若为本地目录将直接加载其中的规则；若为Git URL则会克隆到数据目录并加载。       |
| `rules_load_dirs`          | `[]`    | 额外的规则加载目录列表（支持 ~ 与环境变量展开）。                                                                                         |
| `tool_groups`              | `[]`    | 预定义的工具配置组列表，每个配置组可包含`use`和`dont_use`两个可选数组。                                                                   |
| `tool_group`               | `""`    | 选择要激活的工具配置组名称。                                                                                                              |

| `git_commit_prompt` | `""` | 用于 `jgc` 的自定义git提交信息生成提示模板。 |
| `print_prompt` | `false` | 是否在终端打印发送给LLM的完整提示（Prompt），用于调试。 |
| `build_validation_timeout` | `30` | 构建验证的超时时间（秒）。当构建验证执行时间超过此值时，将终止验证并报告超时。 |
| `replace_map` | `{}` | 自定义快捷指令（命令替换）的映射。 |
| `mcp` | `[]` | MCP (Model Context Protocol) 服务的配置列表。每个配置项必须包含 `type` 字段（`stdio`、`sse` 或 `streamable`）。`stdio` 类型需要 `command` 字段，可选 `args`、`env`；`sse`/`streamable` 类型需要 `base_url` 字段，可选 `auth_token`、`headers`；`streamable` 类型还支持 `endpoint_path`（默认 `"mcp"`）和 `timeout`（默认 `[10, 300]`，单位：秒）。所有类型都支持可选的 `name` 和 `enable` 字段。 |
| `enable_startup_config_selector` | `true` | 在进入默认通用代理前，是否列出可用配置（agent/multi_agent/roles）供选择。 |
| `save_session_history` | `false` | 是否保存会话记录。 |
| `auto_resume_session` | `false` | 是否自动恢复会话。启用后启动时自动恢复最近的会话，无需手动选择。 |
| `skip_predefined_tasks` | `false` | 是否跳过预定义任务加载（不读取 pre-command 列表）。启用后不展示预定义任务选择。 |
| `enable_tmux` | `false` | 是否启用tmux功能。当设置为 `true` 时，系统将启用 tmux 相关功能，包括自动启动tmux会话、任务派发到tmux窗口等。 |
| `submit_keys` | `["c-j", "c-"]]` | 多行输入提交快捷键配置。支持数组格式或字符串格式（逗号分隔），例如 `c-j,c-]`。常用快捷键：`c-j` (Ctrl+J), `c-]` (Ctrl+]), `c-enter` (Ctrl+Enter), `c-d` (Ctrl+D)。 |

| `jarvis_github_url` | `"https://github.com/skyfireitdiy/Jarvis.git"` | Jarvis 的 GitHub 仓库地址。 |
| `jarvis_gitee_url` | `"https://gitee.com/skyfireitdiy/Jarvis.git"` | Jarvis 的 Gitee 仓库地址。 |
| `diff_visualization_mode` | `"default"` | Diff 可视化模式，可选值：`unified`（统一格式）、`syntax`（语法高亮）、`compact`（紧凑格式）、`side_by_side`（并排显示）、`default`（默认模式）。 |
| `diff_show_line_numbers` | `true` | 是否在 diff 输出中显示行号。 |
| `diff_large_file_threshold` | `300` | 大文件阈值（行数）。超过此行数的文件在 diff 中只显示统计信息，不显示完整差异。 |
| `continuous_learning_dir` | `"~/.jarvis/continuous_learning"` | 持续学习数据存储目录路径。 |
| `default_rule_names` | `[]` | 默认规则名称列表。如果配置了此列表，Jarvis 会自动加载这些规则。 |
| `script_execution_timeout` | `180` | 脚本执行的超时时间（秒），默认180秒（3分钟）。 |
| `addon_prompt_threshold` | `10000` | 附加提示触发阈值（字符数）。当消息长度超过此阈值时，会自动添加默认的附加提示。 |
| `conversation_turn_threshold` | `200` | 对话轮次阈值，用于触发总结。当对话轮数超过此值时，会自动进行总结。 |
| `sliding_window_size` | `9` | 滑动窗口大小，用于滑动窗口压缩策略。保留最近的用户/工具消息4条和助手消息5条，共9条（奇数以避免连续的同role消息）。 |
| `importance_score_threshold` | `3.0` | 重要性评分阈值，用于重要性评分压缩策略。低于此阈值的消息将被压缩。 |
| `incremental_summary_chunk_size` | `20` | 增量摘要的 chunk 大小，用于增量摘要压缩策略。每个 chunk 包含的对话轮数，默认20轮。 |
| `pretty_output` | `true` | 是否启用 PrettyOutput（美化输出功能）。 |

## 9.2 许可证信息

Jarvis 项目采用 **MIT 许可证**。

MIT 许可证是一种非常宽松的开源许可证，它授予您广泛的权利，包括：

- **商业使用**: 您可以将 Jarvis 用于商业目的。
- **分发**: 您可以分发 Jarvis 的原始或修改版本。
- **修改**: 您可以修改 Jarvis 的源代码。
- **私用**: 您可以将 Jarvis 用于个人项目。

唯一的限制是，您必须在您的软件副本中包含原始的版权和许可声明。该许可证不提供任何形式的担保。

完整的许可证文本可以在项目根目录的 `LICENSE` 文件中找到。
