# Conflicts: # .agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.i18n.yaml # .agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.zh.md # .agents/notes/implemented/architecture/2026-07-29-request-level-llm-config-credentials.i18n.yaml # .agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.i18n.yaml # apps/cli/package.json # apps/cli/src/web.ts # examples/mcp-memory/README.i18n.yaml # packages/cordis/repository-plugin/README.i18n.yaml # packages/credentials/credentials-local/README.i18n.yaml # packages/credentials/credentials-local/README.zh.md # packages/llm/llm-deepseek/README.i18n.yaml # packages/web/web-search-deepseek/README.i18n.yaml
credentials/
English | 中文
The credential capability seam, as three-package shape dictates (interface / implementation / consumers):
| Package | Role |
|---|---|
credentials/ |
Abstract ctx.credentials: branded CredentialRef references, per-operation resolve, UI-safe describe, fail-loud set/unset, the credentials/updated commit event |
credentials-local/ |
File/environment provider: the live process environment (read-only, wins) layered over $DSH_HOME/.credentials.yaml (writable, comment-preserving edits, hot-reloaded) |
Configuration files carry references to secrets (apiKeyEnv: DEEPSEEK_API_KEY), never the secrets: the settings document stays safe to sync and render, and rotating a value touches no configuration. The LLM adapters are the first consumers — they resolve their reference once per model request, which is what makes a key stored moments ago reach the very next request without restarting anything.
The seam shape leaves room for keyring-, helper-command-, and KMS-backed providers.