Source of truth so far has been c:\Users\smoido\projects\cli on the Windows box, which has no git history of its own. This is that tree copied verbatim over SSH, minus dist/ - the PowerShell build, the POSIX port under linux/, and the presets both share. Recorded as its own commit so that everything after it is a reviewable diff rather than an undifferentiated first drop.
39 lines
1.2 KiB
Bash
39 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Invoked by Claude Code via the `apiKeyHelper` setting. Prints the API key for
|
|
# the active preset to stdout and nothing else.
|
|
#
|
|
# Only presets whose auth mode is "vault" have a secret to emit. In anthropic
|
|
# mode, or for a preset using an inline placeholder token (LM Studio), this exits
|
|
# silently so a token cannot leak into a context that must not have one.
|
|
|
|
set -u
|
|
|
|
CM_ROOT="${CM_ROOT:-$HOME/.claude-mode}"
|
|
# shellcheck source=/dev/null
|
|
. "$CM_ROOT/bin/cm-vault.sh"
|
|
|
|
PY="${CLAUDE_MODE_PYTHON:-python3}"
|
|
JSON="$CM_ROOT/bin/cm-json.py"
|
|
|
|
state="$CM_ROOT/state.json"
|
|
[ -f "$state" ] || exit 0
|
|
|
|
mode="$("$PY" "$JSON" get "$state" mode 2>/dev/null)"
|
|
[ "$mode" = "anthropic" ] && exit 0
|
|
[ -n "$mode" ] || exit 0
|
|
|
|
preset_name="$("$PY" "$JSON" get "$state" preset 2>/dev/null)"
|
|
[ -n "$preset_name" ] || exit 0
|
|
|
|
preset="$CM_ROOT/presets/$preset_name.json"
|
|
[ -f "$preset" ] || exit 1
|
|
|
|
auth_mode="$("$PY" "$JSON" get "$preset" auth.mode 2>/dev/null)"
|
|
[ -z "$auth_mode" ] && auth_mode="vault"
|
|
[ "$auth_mode" = "vault" ] || exit 0 # inline token: nothing for us to emit
|
|
|
|
key_ref="$("$PY" "$JSON" get "$preset" auth.keyRef 2>/dev/null)"
|
|
[ -n "$key_ref" ] || key_ref="openrouter"
|
|
|
|
cm_vault_get "$key_ref" || exit 1
|