fieldnote-ops/keyringseam0

keyringseam

基于 macOS Keychain 的凭据管理插件,无缝替换 DSH 默认凭据提供者,将敏感 API 密钥安全存储于系统钥匙串中。

AI 分析

核心用途是提升 DSH 凭据存储的安全性。适合 macOS 用户,免去在明文配置文件中暴露 API Key 的风险。仅支持 macOS 13 或更高版本。

包名
keyringseam
版本
0.1.2
许可证
MIT
最近更新
2026年8月14日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:fieldnote-ops/keyringseam

KeyringSeam

KeyringSeam is an experimental macOS Keychain-backed implementation of the DeepSeek Harness ctx.credentials seam. Its bundle disables the base credentials row with the exact expected package-name guard, then inserts one KeyringSeam provider row. It keeps a non-empty launch environment value as the read-only highest-priority source and stores managed values as generic-password items in the user's default Keychain.

简体中文

KeyringSeam is an independent, AI-assisted open-source project by FIELD NOTE. It is not affiliated with, sponsored by, or endorsed by DeepSeek or Apple. DeepSeek Harness is named only to describe compatibility; macOS and Keychain are Apple trademarks.

Unit tests cover the provider contract with a fake store. A disposable macOS Keychain write/read/describe/delete lifecycle and a clean-profile DeepSeek Harness 0.1.0-rc.6 replacement boot both passed locally on 2026-08-14. The hosted consumer matrix uses HarnessProof to install locked dependencies in an isolated plugin copy before checking DSH rc.6, latest, and experimental next. The package carries a universal arm64 + x86_64 helper built from the included Swift source, so consumer machines do not need Swift, Xcode, or the Apple command-line developer tools. The exact helper is signed with Developer ID Application, Hardened Runtime, and a secure timestamp; Apple notarization submission 4a707bd7-4d84-4310-acf1-71d37c3dcebb was accepted with no issues and covers both architecture CDHashes. Independent security review, independent-user adoption, and non-macOS backends are not claimed.

Install

dsh plugin --profile web add github:fieldnote-ops/keyringseam

KeyringSeam intentionally replaces the credentials bundle row. Review the generated profile diff before using it with real credentials. The current release supports macOS 13 or newer only.

Security design

  • The secret is never placed in a shell command or process argument. A bundled native helper reads a JSON request from stdin and calls Apple's Security framework directly.
  • The executable path is fixed inside the package, shell is disabled, no arguments are passed, output is capped, and calls time out.
  • The helper targets macOS 13 or newer and contains both Apple Silicon and Intel slices. npm run build:helper reproduces it from src/keychain-helper.swift; release packaging verifies both architectures and the code signature.
  • New managed items are non-synchronizable, device-only, and available only while the user Keychain is unlocked. Requests are capped at 64 KiB; v0.1 credentials are capped at 16 KiB of single-line UTF-8.
  • v0.1 rejects multiline credentials because the prompt transport is line-oriented.
  • resolve holds the returned secret in the host process long enough to return it to the requesting adapter. Same-user processes, the harness host, and other plugins remain inside the trust boundary.
  • Environment values shadow Keychain items and make set/unset fail loud.

No claim of cross-platform support, independent security review, independent-user adoption, purchase validation, or income is made.

Maintainer build

npm ci
npm run build:helper
npm run check

Release signing takes one explicit Developer ID identity and verifies Hardened Runtime immediately:

./scripts/sign-helper.sh "Developer ID Application: Legal Name (TEAMID)"

Notarization uses a locally stored notarytool Keychain profile and produces both the result and full Apple submission log:

./scripts/notarize-helper.sh keyringseam-notary /absolute/output-directory

The verifier matches the Apple ticket's arm64 and x86_64 CDHashes to the exact helper. Apple publishes tickets for standalone binaries online, but currently does not support stapling a ticket directly to a standalone Mach-O; see Customizing the notarization workflow.