ce3d1a73b9
Add COMMAND_ARITY dictionary (160+ entries: git, npm, yarn, pnpm, cargo, docker, kubectl, go, pip, gh, rustup, deno, bun) and classify_command() so auto_allow = ["git status"] matches git status -s / --porcelain but not git push. Wire classify_command() into approval_cache command_prefix key construction. 50 colocated unit tests including an explicit auto_allow semantics test. Document prefix semantics in config.example.toml. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
193 lines
13 KiB
TOML
193 lines
13 KiB
TOML
# ╔══════════════════════════════════════════════════════════════════════════════╗
|
|
# ║ DeepSeek TUI Configuration ║
|
|
# ║ ║
|
|
# ║ Unofficial CLI for DeepSeek Platform - Not affiliated with DeepSeek Inc. ║
|
|
# ╚══════════════════════════════════════════════════════════════════════════════╝
|
|
|
|
# See `docs/CONFIGURATION.md` for how config is loaded (profiles, env overrides, etc.).
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Active provider + DeepSeek defaults
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Choose which provider to use by default. Per-provider credentials live in the
|
|
# `[providers.deepseek]` and `[providers.nvidia_nim]` sections near the bottom of
|
|
# this file — keeping both stored at once means `/provider deepseek` and
|
|
# `/provider nvidia-nim` (or `--provider nvidia-nim`) toggle without having to
|
|
# re-enter keys. Top-level `api_key` / `base_url` are still read as DeepSeek
|
|
# defaults when `[providers.deepseek]` is absent (backward compatibility).
|
|
provider = "deepseek" # deepseek | nvidia-nim
|
|
api_key = "YOUR_DEEPSEEK_API_KEY" # must be non-empty
|
|
base_url = "https://api.deepseek.com"
|
|
# base_url = "https://api.deepseeki.com" # China users
|
|
# base_url = "https://api.deepseek.com/beta" # DeepSeek beta features such as strict tool mode
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Default Models
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# DeepSeek V4 family:
|
|
# deepseek-v4-pro — flagship reasoning model on DeepSeek Platform
|
|
# deepseek-v4-flash — fast, cost-efficient (legacy aliases: deepseek-chat, deepseek-reasoner)
|
|
# deepseek-ai/deepseek-v4-pro — NVIDIA NIM-hosted Pro model ID
|
|
# deepseek-ai/deepseek-v4-flash — NVIDIA NIM-hosted Flash model ID
|
|
default_text_model = "deepseek-v4-pro"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Thinking Mode (DeepSeek V4 reasoning effort)
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# "off" — disables chain-of-thought (thinking.type = disabled)
|
|
# "low" — compat-maps to "high" server-side
|
|
# "medium" — compat-maps to "high" server-side
|
|
# "high" — reasoning_effort = high (DeepSeek default)
|
|
# "max" — reasoning_effort = max (deepest reasoning)
|
|
#
|
|
# Shift+Tab in the TUI cycles between off / high / max. The header shows the
|
|
# current tier as a ⚡ chip.
|
|
reasoning_effort = "max"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Paths
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
skills_dir = "~/.deepseek/skills"
|
|
mcp_config_path = "~/.deepseek/mcp.json"
|
|
notes_path = "~/.deepseek/notes.txt"
|
|
|
|
memory_path = "~/.deepseek/memory.md"
|
|
|
|
# Parsed but currently unused (reserved for future versions):
|
|
# tools_file = "./tools.json"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Security
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
allow_shell = true
|
|
approval_policy = "on-request" # on-request | untrusted | never
|
|
sandbox_mode = "workspace-write" # read-only | workspace-write | danger-full-access | external-sandbox
|
|
|
|
# auto_allow entries match by command prefix, not raw string.
|
|
# See command_safety.rs for the prefix dictionary.
|
|
#
|
|
# Examples:
|
|
# auto_allow = ["git status"] # auto-approves: git status, git status -s, git status --porcelain
|
|
# # does NOT auto-approve: git push, git checkout
|
|
# auto_allow = ["cargo check", "npm run"]
|
|
#
|
|
# auto_allow = []
|
|
max_subagents = 5 # optional (1-20)
|
|
|
|
# Optional managed policy paths (defaults to /etc/deepseek/*.toml on unix):
|
|
# managed_config_path = "/etc/deepseek/managed_config.toml"
|
|
# requirements_path = "/etc/deepseek/requirements.toml"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Per-provider credentials (peer providers — NIM is first-class, not a flag)
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Both providers can be stored at once; `provider = "..."` (top of file) or
|
|
# `/provider deepseek` / `/provider nvidia-nim` switches between them without
|
|
# having to re-enter keys. Env vars override anything set here:
|
|
# DeepSeek: DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL, DEEPSEEK_MODEL
|
|
# NIM: NVIDIA_API_KEY (or NVIDIA_NIM_API_KEY), NIM_BASE_URL
|
|
# (or NVIDIA_NIM_BASE_URL / NVIDIA_BASE_URL), NVIDIA_NIM_MODEL
|
|
|
|
# DeepSeek Platform (https://platform.deepseek.com)
|
|
[providers.deepseek]
|
|
# api_key = "YOUR_DEEPSEEK_API_KEY"
|
|
# base_url = "https://api.deepseek.com"
|
|
# model = "deepseek-v4-pro"
|
|
|
|
# NVIDIA NIM-hosted DeepSeek V4 (https://build.nvidia.com)
|
|
[providers.nvidia_nim]
|
|
# api_key = "YOUR_NVIDIA_API_KEY"
|
|
# base_url = "https://integrate.api.nvidia.com/v1"
|
|
# model = "deepseek-ai/deepseek-v4-pro" # or deepseek-ai/deepseek-v4-flash
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# TUI
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
[tui]
|
|
alternate_screen = "auto" # auto | always | never
|
|
mouse_capture = true # true keeps wheel scrolling inside the TUI; false allows terminal-native drag selection/copy
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Feature Flags
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
[features]
|
|
shell_tool = true
|
|
subagents = true
|
|
web_search = true # enables canonical web.run plus the compatibility web_search alias
|
|
apply_patch = true
|
|
mcp = true
|
|
exec_policy = true
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Retry Configuration
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
[retry]
|
|
enabled = true
|
|
max_retries = 3
|
|
initial_delay = 1.0
|
|
max_delay = 60.0
|
|
exponential_base = 2.0
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Context Compaction
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Auto-compaction is a saved UI setting edited with `/config` (`auto_compact`).
|
|
# There is no config-file `[compaction]` table yet; detailed thresholds are
|
|
# chosen by the TUI from the active model/context budget.
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Capacity Controller (runtime pressure guardrails)
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
[capacity]
|
|
enabled = true
|
|
low_risk_max = 0.34
|
|
medium_risk_max = 0.62
|
|
severe_min_slack = -0.25
|
|
severe_violation_ratio = 0.40
|
|
refresh_cooldown_turns = 2
|
|
replan_cooldown_turns = 5
|
|
max_replay_per_turn = 1
|
|
min_turns_before_guardrail = 2
|
|
profile_window = 8
|
|
deepseek_v3_2_chat_prior = 3.9
|
|
deepseek_v3_2_reasoner_prior = 4.1
|
|
fallback_default_prior = 3.8
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Profile Example (for multiple environments)
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Select a profile with `deepseek --profile <name>` or `DEEPSEEK_PROFILE=<name>`.
|
|
[profiles.work]
|
|
api_key = "WORK_DEEPSEEK_API_KEY"
|
|
base_url = "https://api.deepseek.com"
|
|
|
|
[profiles.dev]
|
|
api_key = "DEV_DEEPSEEK_API_KEY"
|
|
allow_shell = true
|
|
|
|
[profiles.nvidia-nim]
|
|
provider = "nvidia-nim"
|
|
api_key = "YOUR_NVIDIA_API_KEY"
|
|
base_url = "https://integrate.api.nvidia.com/v1"
|
|
default_text_model = "deepseek-ai/deepseek-v4-pro"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Hooks (optional)
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Hooks run shell commands on lifecycle events (session start/end, tool calls, etc.).
|
|
# Configure as `[[hooks.hooks]]` under a `[hooks]` table.
|
|
#
|
|
# [hooks]
|
|
# enabled = true
|
|
# default_timeout_secs = 30
|
|
#
|
|
# [[hooks.hooks]]
|
|
# event = "session_start"
|
|
# command = "echo 'DeepSeek TUI session started'"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# Requirements (admin constraints) example file
|
|
# ─────────────────────────────────────────────────────────────────────────────────
|
|
# allowed_approval_policies = ["on-request", "untrusted", "never"]
|
|
# allowed_sandbox_modes = ["read-only", "workspace-write"]
|