crosscheck-cli 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/doctor.js +3 -2
- package/dist/doctor.js.map +1 -1
- package/dist/install.js +4 -0
- package/dist/install.js.map +1 -1
- package/dist/keychain.js +164 -81
- package/dist/keychain.js.map +1 -1
- package/dist/keys-setup.js +4 -2
- package/dist/keys-setup.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { activate } from "./activate.js";
|
|
9
9
|
import { runDoctor } from "./doctor.js";
|
|
10
10
|
import { runHeartbeat } from "./heartbeat.js";
|
|
11
|
-
import { deleteSecret, getSecret, listSecrets, setSecret, } from "./keychain.js";
|
|
11
|
+
import { deleteSecret, fileStorePath, getSecret, listSecrets, secretBackend, setSecret, setSecretBackend, } from "./keychain.js";
|
|
12
12
|
import { captureKeyViaBrowser } from "./keys-browser-flow.js";
|
|
13
13
|
import { runKeysSetup } from "./keys-setup.js";
|
|
14
14
|
import { runInstall } from "./install.js";
|
|
@@ -30,6 +30,10 @@ Usage:
|
|
|
30
30
|
back to stdin for CI / headless environments).
|
|
31
31
|
crosscheck keys list List stored upstream-provider key names (not values).
|
|
32
32
|
crosscheck keys remove <provider> Remove an upstream LLM key.
|
|
33
|
+
crosscheck keys store <file|keychain> Choose where secrets live: an encrypted file
|
|
34
|
+
(default — no password) or your OS keychain
|
|
35
|
+
(macOS only; prompts for your login password).
|
|
36
|
+
Migrates existing secrets to the chosen store.
|
|
33
37
|
crosscheck serve Start the MCP server (stdio).
|
|
34
38
|
crosscheck doctor Diagnose a broken install (Node, secret store,
|
|
35
39
|
engine, activation, keys).
|
|
@@ -112,6 +116,33 @@ async function main() {
|
|
|
112
116
|
}
|
|
113
117
|
return;
|
|
114
118
|
}
|
|
119
|
+
if (sub === "store") {
|
|
120
|
+
const target = rest[1];
|
|
121
|
+
if (target !== "file" && target !== "keychain") {
|
|
122
|
+
// eslint-disable-next-line no-console
|
|
123
|
+
console.error(`usage: crosscheck keys store (file|keychain)\n current: ${secretBackend()}`);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
if (target === "keychain") {
|
|
127
|
+
// eslint-disable-next-line no-console
|
|
128
|
+
console.log("⚠ macOS will ask for your login password several times while it saves each\n" +
|
|
129
|
+
" credential. The default encrypted-file store needs no password — you can\n" +
|
|
130
|
+
" switch back any time with `crosscheck keys store file`.\n");
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const { migrated } = await setSecretBackend(target);
|
|
134
|
+
// eslint-disable-next-line no-console
|
|
135
|
+
console.log(target === "file"
|
|
136
|
+
? `✓ Secrets now live in an encrypted file: ${fileStorePath()}\n Migrated ${migrated} credential${migrated === 1 ? "" : "s"}. No more password prompts.`
|
|
137
|
+
: `✓ Secrets now live in your macOS keychain. Migrated ${migrated} credential${migrated === 1 ? "" : "s"}.`);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
// eslint-disable-next-line no-console
|
|
141
|
+
console.error(`✗ ${err instanceof Error ? err.message : String(err)}`);
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
115
146
|
const validProviders = [
|
|
116
147
|
"anthropic",
|
|
117
148
|
"openai",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,SAAS,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { createRequire } from "node:module";
|
|
10
10
|
import { ENGINE_PACKAGE, SERVER_URL } from "./config.js";
|
|
11
|
-
import { deleteSecret, getSecret, listSecrets, secretBackend, setSecret, } from "./keychain.js";
|
|
11
|
+
import { deleteSecret, fileStorePath, getSecret, listSecrets, secretBackend, setSecret, } from "./keychain.js";
|
|
12
12
|
import { verifyJwt } from "./jwt.js";
|
|
13
13
|
const require = createRequire(import.meta.url);
|
|
14
14
|
function line(level, msg) {
|
|
@@ -38,7 +38,8 @@ export async function runDoctor() {
|
|
|
38
38
|
const got = await getSecret(probe);
|
|
39
39
|
await deleteSecret(probe);
|
|
40
40
|
if (got === token) {
|
|
41
|
-
|
|
41
|
+
const where = backend === "file" ? `encrypted file — ${fileStorePath()}` : "macOS keychain";
|
|
42
|
+
line("ok", `Secret store works (${where})`);
|
|
42
43
|
}
|
|
43
44
|
else {
|
|
44
45
|
line("fail", `Secret store read/write mismatch (backend: ${backend})`);
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAI/C,SAAS,IAAI,CAAC,KAAY,EAAE,GAAW;IACrC,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,mBAAmB;IACnB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,EAAE,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,+DAA+D,CAAC,CAAC;QAC3G,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,wEAAwE;IACxE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,sBAAsB,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;QACrC,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/install.js
CHANGED
|
@@ -139,5 +139,9 @@ export async function runInstall() {
|
|
|
139
139
|
log(' • Try it: ask Claude Code to "use crosscheck to confer on <your question>".');
|
|
140
140
|
log(" • Manage seats & machines at https://crosscheckagent.com/account");
|
|
141
141
|
log("");
|
|
142
|
+
log("Your keys are saved in an encrypted file on this machine (no password needed).");
|
|
143
|
+
log("Prefer your OS keychain? Run `crosscheck keys store keychain` (macOS will ask");
|
|
144
|
+
log("for your login password). Run `crosscheck doctor` any time to check your setup.");
|
|
145
|
+
log("");
|
|
142
146
|
}
|
|
143
147
|
//# sourceMappingURL=install.js.map
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/keychain.js
CHANGED
|
@@ -5,23 +5,31 @@
|
|
|
5
5
|
* binary kept corrupting on `npx` installs (truncated `.node` → dlopen
|
|
6
6
|
* failure; npm/cli#4828). The public API is unchanged so call sites don't move.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* - "
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* - "
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
8
|
+
* Two backends:
|
|
9
|
+
* - "file" (DEFAULT, recommended): an encrypted file at <dir>/secrets.enc
|
|
10
|
+
* (AES-256-GCM) keyed by a random 32-byte key at <dir>/secret.key
|
|
11
|
+
* (mode 0400); data file 0600, dir 0700. Pure Node `crypto`, ZERO password
|
|
12
|
+
* prompts. <dir> defaults to ~/.crosscheck — in your home directory, never
|
|
13
|
+
* inside the repo you're working in, never committed to git. Threat model:
|
|
14
|
+
* protects against casual file copying / sync, not a process already
|
|
15
|
+
* running as you (same as gh / aws / .env).
|
|
16
|
+
* - "keychain" (opt-in, macOS only): shells out to `/usr/bin/security`. More
|
|
17
|
+
* OS-integrated, but macOS prompts for your LOGIN PASSWORD on every write —
|
|
18
|
+
* so a fresh setup asks several times. Not the default for that reason.
|
|
19
|
+
* Every spawn is hard-timeout-bounded with captured stdio, so a Keychain
|
|
20
|
+
* GUI prompt can never block a non-interactive `serve` (a timeout is
|
|
21
|
+
* treated as "not found" — we degrade, never hang).
|
|
22
22
|
*
|
|
23
|
-
* Selection:
|
|
24
|
-
*
|
|
23
|
+
* Selection precedence:
|
|
24
|
+
* 1. CROSSCHECK_SECRET_STORE = file | keychain (env override)
|
|
25
|
+
* 2. saved preference in <dir>/store.json (set by `keys store`)
|
|
26
|
+
* 3. "file" (default)
|
|
27
|
+
*
|
|
28
|
+
* Migration: when the file backend is active and no file store exists yet, we
|
|
29
|
+
* transparently import any existing macOS-keychain items once (those reads are
|
|
30
|
+
* prompt-free), so upgrading from a keychain build never strands a user.
|
|
31
|
+
*
|
|
32
|
+
* Keys never leave the machine in either backend.
|
|
25
33
|
*/
|
|
26
34
|
import { spawnSync } from "node:child_process";
|
|
27
35
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
@@ -32,12 +40,11 @@ import { KEYCHAIN_SERVICE } from "./config.js";
|
|
|
32
40
|
// macOS security binary — absolute so a broken PATH can't hide it.
|
|
33
41
|
const SECURITY_BIN = "/usr/bin/security";
|
|
34
42
|
// Hard ceiling on any `security` spawn. A keychain GUI prompt would otherwise
|
|
35
|
-
// block forever in a non-interactive context; we'd rather time out
|
|
36
|
-
// the secret as absent.
|
|
43
|
+
// block forever in a non-interactive context; we'd rather time out.
|
|
37
44
|
const SECURITY_TIMEOUT_MS = 5_000;
|
|
38
|
-
/** Every secret name Crosscheck may store — used
|
|
39
|
-
* without a keychain
|
|
40
|
-
*
|
|
45
|
+
/** Every secret name Crosscheck may store — used to enumerate the keychain
|
|
46
|
+
* backend without a `dump-keychain` (which prompts), and to migrate. Provider
|
|
47
|
+
* list mirrors mcp.ts's KEY_BINDINGS. */
|
|
41
48
|
const PROVIDER_KEYS = [
|
|
42
49
|
"anthropic",
|
|
43
50
|
"openai",
|
|
@@ -55,23 +62,8 @@ const KNOWN_SECRET_NAMES = [
|
|
|
55
62
|
"installUuid",
|
|
56
63
|
...PROVIDER_KEYS.map((p) => `key:${p}`),
|
|
57
64
|
];
|
|
58
|
-
function selectBackend() {
|
|
59
|
-
const forced = (process.env.CROSSCHECK_SECRET_STORE ?? "auto").toLowerCase();
|
|
60
|
-
if (forced === "file" || forced === "keychain")
|
|
61
|
-
return forced;
|
|
62
|
-
// auto
|
|
63
|
-
if (process.platform === "darwin" && existsSync(SECURITY_BIN))
|
|
64
|
-
return "keychain";
|
|
65
|
-
return "file";
|
|
66
|
-
}
|
|
67
|
-
/** Active backend, resolved once. */
|
|
68
|
-
const BACKEND = selectBackend();
|
|
69
|
-
/** Backend label for `crosscheck doctor`. */
|
|
70
|
-
export function secretBackend() {
|
|
71
|
-
return BACKEND;
|
|
72
|
-
}
|
|
73
65
|
// ---------------------------------------------------------------------------
|
|
74
|
-
// Storage directory
|
|
66
|
+
// Storage directory + saved preference.
|
|
75
67
|
// ---------------------------------------------------------------------------
|
|
76
68
|
function dataDir() {
|
|
77
69
|
const base = process.env.CROSSCHECK_DATA_DIR ||
|
|
@@ -85,13 +77,52 @@ function dataDir() {
|
|
|
85
77
|
}
|
|
86
78
|
return base;
|
|
87
79
|
}
|
|
80
|
+
function prefFilePath() {
|
|
81
|
+
return path.join(dataDir(), "store.json");
|
|
82
|
+
}
|
|
83
|
+
function readPref() {
|
|
84
|
+
try {
|
|
85
|
+
const raw = JSON.parse(readFileSync(prefFilePath(), "utf8"));
|
|
86
|
+
if (raw.backend === "file" || raw.backend === "keychain")
|
|
87
|
+
return raw.backend;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* no/invalid pref */
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
function writePref(b) {
|
|
95
|
+
writeFileSync(prefFilePath(), `${JSON.stringify({ backend: b })}\n`, { mode: 0o600 });
|
|
96
|
+
}
|
|
97
|
+
function macKeychainUsable() {
|
|
98
|
+
return process.platform === "darwin" && existsSync(SECURITY_BIN);
|
|
99
|
+
}
|
|
100
|
+
function selectBackend() {
|
|
101
|
+
const forced = (process.env.CROSSCHECK_SECRET_STORE ?? "").toLowerCase();
|
|
102
|
+
if (forced === "file" || forced === "keychain")
|
|
103
|
+
return forced;
|
|
104
|
+
const pref = readPref();
|
|
105
|
+
if (pref)
|
|
106
|
+
return pref;
|
|
107
|
+
return "file"; // recommended default: no password prompts.
|
|
108
|
+
}
|
|
109
|
+
/** Active backend (mutable so `keys store` can switch within a process). */
|
|
110
|
+
let currentBackend = selectBackend();
|
|
111
|
+
/** Backend label for `crosscheck doctor`. */
|
|
112
|
+
export function secretBackend() {
|
|
113
|
+
return currentBackend;
|
|
114
|
+
}
|
|
115
|
+
/** Where the encrypted file store lives (shown by `doctor`). */
|
|
116
|
+
export function fileStorePath() {
|
|
117
|
+
return path.join(dataDir(), "secrets.enc");
|
|
118
|
+
}
|
|
88
119
|
// ---------------------------------------------------------------------------
|
|
89
120
|
// macOS `security` backend.
|
|
90
121
|
// ---------------------------------------------------------------------------
|
|
91
122
|
function securitySet(name, value) {
|
|
92
|
-
// -U
|
|
93
|
-
// (
|
|
94
|
-
//
|
|
123
|
+
// -U updates if present. -A allows later reads without a per-read prompt.
|
|
124
|
+
// (The WRITE itself still prompts for the login password on macOS — which is
|
|
125
|
+
// exactly why the file backend is the default.)
|
|
95
126
|
const r = spawnSync(SECURITY_BIN, ["add-generic-password", "-U", "-s", KEYCHAIN_SERVICE, "-a", name, "-w", value, "-A"], { timeout: SECURITY_TIMEOUT_MS, encoding: "utf8", stdio: ["ignore", "ignore", "pipe"] });
|
|
96
127
|
if (r.status !== 0) {
|
|
97
128
|
throw new Error(`keychain write failed (${r.status ?? r.signal ?? "timeout"}): ${(r.stderr || "").trim() || "unknown"}`);
|
|
@@ -99,33 +130,36 @@ function securitySet(name, value) {
|
|
|
99
130
|
}
|
|
100
131
|
function securityGet(name) {
|
|
101
132
|
const r = spawnSync(SECURITY_BIN, ["find-generic-password", "-s", KEYCHAIN_SERVICE, "-a", name, "-w"], { timeout: SECURITY_TIMEOUT_MS, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] });
|
|
102
|
-
// status 0 → found; 44 → not found; null → timed out (treat as not found).
|
|
103
133
|
if (r.status !== 0)
|
|
104
|
-
return null;
|
|
105
|
-
// `-w` prints the password followed by a newline.
|
|
134
|
+
return null; // 44 = not found; null = timed out.
|
|
106
135
|
return (r.stdout ?? "").replace(/\n$/, "");
|
|
107
136
|
}
|
|
108
137
|
function securityDelete(name) {
|
|
109
138
|
const r = spawnSync(SECURITY_BIN, ["delete-generic-password", "-s", KEYCHAIN_SERVICE, "-a", name], { timeout: SECURITY_TIMEOUT_MS, encoding: "utf8", stdio: ["ignore", "ignore", "pipe"] });
|
|
110
139
|
return r.status === 0;
|
|
111
140
|
}
|
|
141
|
+
function securityList() {
|
|
142
|
+
const out = [];
|
|
143
|
+
for (const name of KNOWN_SECRET_NAMES) {
|
|
144
|
+
const v = securityGet(name);
|
|
145
|
+
if (v !== null)
|
|
146
|
+
out.push({ account: name, password: v });
|
|
147
|
+
}
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
112
150
|
// ---------------------------------------------------------------------------
|
|
113
151
|
// Encrypted-file backend.
|
|
114
152
|
// ---------------------------------------------------------------------------
|
|
115
153
|
function keyFilePath() {
|
|
116
154
|
return path.join(dataDir(), "secret.key");
|
|
117
155
|
}
|
|
118
|
-
function dataFilePath() {
|
|
119
|
-
return path.join(dataDir(), "secrets.enc");
|
|
120
|
-
}
|
|
121
156
|
function loadOrCreateKey() {
|
|
122
157
|
const kp = keyFilePath();
|
|
123
158
|
if (existsSync(kp)) {
|
|
124
159
|
const raw = readFileSync(kp);
|
|
125
160
|
if (raw.length === 32)
|
|
126
161
|
return raw;
|
|
127
|
-
// Corrupt/short key → regenerate (a truncated key can't decrypt the
|
|
128
|
-
// existing data anyway).
|
|
162
|
+
// Corrupt/short key → regenerate (a truncated key can't decrypt the data).
|
|
129
163
|
}
|
|
130
164
|
const key = randomBytes(32);
|
|
131
165
|
writeFileSync(kp, key, { mode: 0o400 });
|
|
@@ -138,7 +172,7 @@ function loadOrCreateKey() {
|
|
|
138
172
|
return key;
|
|
139
173
|
}
|
|
140
174
|
function readFileMap() {
|
|
141
|
-
const fp =
|
|
175
|
+
const fp = fileStorePath();
|
|
142
176
|
if (!existsSync(fp))
|
|
143
177
|
return {};
|
|
144
178
|
try {
|
|
@@ -146,32 +180,25 @@ function readFileMap() {
|
|
|
146
180
|
const key = loadOrCreateKey();
|
|
147
181
|
const decipher = createDecipheriv("aes-256-gcm", key, Buffer.from(blob.iv, "base64"));
|
|
148
182
|
decipher.setAuthTag(Buffer.from(blob.tag, "base64"));
|
|
149
|
-
const out = Buffer.concat([
|
|
150
|
-
decipher.update(Buffer.from(blob.data, "base64")),
|
|
151
|
-
decipher.final(),
|
|
152
|
-
]);
|
|
183
|
+
const out = Buffer.concat([decipher.update(Buffer.from(blob.data, "base64")), decipher.final()]);
|
|
153
184
|
return JSON.parse(out.toString("utf8"));
|
|
154
185
|
}
|
|
155
186
|
catch {
|
|
156
|
-
//
|
|
157
|
-
return {};
|
|
187
|
+
return {}; // unreadable (key rotated / corrupt) → treat as empty.
|
|
158
188
|
}
|
|
159
189
|
}
|
|
160
190
|
function writeFileMap(map) {
|
|
161
191
|
const key = loadOrCreateKey();
|
|
162
192
|
const iv = randomBytes(12);
|
|
163
193
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
164
|
-
const enc = Buffer.concat([
|
|
165
|
-
cipher.update(Buffer.from(JSON.stringify(map), "utf8")),
|
|
166
|
-
cipher.final(),
|
|
167
|
-
]);
|
|
194
|
+
const enc = Buffer.concat([cipher.update(Buffer.from(JSON.stringify(map), "utf8")), cipher.final()]);
|
|
168
195
|
const tag = cipher.getAuthTag();
|
|
169
196
|
const payload = JSON.stringify({
|
|
170
197
|
iv: iv.toString("base64"),
|
|
171
198
|
tag: tag.toString("base64"),
|
|
172
199
|
data: enc.toString("base64"),
|
|
173
200
|
});
|
|
174
|
-
const fp =
|
|
201
|
+
const fp = fileStorePath();
|
|
175
202
|
const tmp = `${fp}.tmp`;
|
|
176
203
|
writeFileSync(tmp, payload, { mode: 0o600 });
|
|
177
204
|
renameSync(tmp, fp);
|
|
@@ -183,33 +210,64 @@ function writeFileMap(map) {
|
|
|
183
210
|
}
|
|
184
211
|
}
|
|
185
212
|
// ---------------------------------------------------------------------------
|
|
213
|
+
// One-time, prompt-free migration: macOS keychain → file.
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
let migrationChecked = false;
|
|
216
|
+
/** When the file backend is active but no file store exists yet, pull any
|
|
217
|
+
* existing macOS-keychain items into the file once. Reads are prompt-free
|
|
218
|
+
* (items were written with -A); a missing keychain just yields nothing. */
|
|
219
|
+
function autoMigrateFromKeychain() {
|
|
220
|
+
if (migrationChecked)
|
|
221
|
+
return;
|
|
222
|
+
migrationChecked = true;
|
|
223
|
+
if (currentBackend !== "file")
|
|
224
|
+
return;
|
|
225
|
+
if (existsSync(fileStorePath()))
|
|
226
|
+
return; // file store already established.
|
|
227
|
+
if (!macKeychainUsable())
|
|
228
|
+
return;
|
|
229
|
+
// Cheap probe: only migrate if there's clearly something there.
|
|
230
|
+
if (securityGet("jwt") === null)
|
|
231
|
+
return;
|
|
232
|
+
const items = securityList();
|
|
233
|
+
if (items.length === 0)
|
|
234
|
+
return;
|
|
235
|
+
const map = {};
|
|
236
|
+
for (const { account, password } of items)
|
|
237
|
+
map[account] = password;
|
|
238
|
+
writeFileMap(map);
|
|
239
|
+
process.stderr.write(`crosscheck: migrated ${items.length} stored credential${items.length === 1 ? "" : "s"} from the macOS keychain to an encrypted file (no more password prompts).\n`);
|
|
240
|
+
}
|
|
241
|
+
// ---------------------------------------------------------------------------
|
|
186
242
|
// Public API (unchanged signatures).
|
|
187
243
|
// ---------------------------------------------------------------------------
|
|
188
244
|
export async function setSecret(name, value) {
|
|
189
|
-
if (
|
|
245
|
+
if (currentBackend === "keychain") {
|
|
190
246
|
securitySet(name, value);
|
|
191
247
|
return;
|
|
192
248
|
}
|
|
249
|
+
autoMigrateFromKeychain();
|
|
193
250
|
const map = readFileMap();
|
|
194
251
|
map[name] = value;
|
|
195
252
|
writeFileMap(map);
|
|
196
253
|
}
|
|
197
254
|
export async function getSecret(name) {
|
|
198
|
-
if (
|
|
255
|
+
if (currentBackend === "keychain")
|
|
199
256
|
return securityGet(name);
|
|
257
|
+
autoMigrateFromKeychain();
|
|
200
258
|
return readFileMap()[name] ?? null;
|
|
201
259
|
}
|
|
202
260
|
export async function deleteSecret(name) {
|
|
203
|
-
if (
|
|
261
|
+
if (currentBackend === "keychain")
|
|
204
262
|
return securityDelete(name);
|
|
263
|
+
autoMigrateFromKeychain();
|
|
205
264
|
const map = readFileMap();
|
|
206
265
|
if (!(name in map))
|
|
207
266
|
return false;
|
|
208
267
|
delete map[name];
|
|
209
268
|
if (Object.keys(map).length === 0) {
|
|
210
|
-
// Nothing left — drop the file entirely.
|
|
211
269
|
try {
|
|
212
|
-
rmSync(
|
|
270
|
+
rmSync(fileStorePath(), { force: true });
|
|
213
271
|
}
|
|
214
272
|
catch {
|
|
215
273
|
/* ignore */
|
|
@@ -223,25 +281,50 @@ export async function deleteSecret(name) {
|
|
|
223
281
|
/**
|
|
224
282
|
* List every Crosscheck-owned credential. Used by `crosscheck keys list` and
|
|
225
283
|
* by deactivation to wipe everything in one pass.
|
|
226
|
-
*
|
|
227
|
-
* The file backend lists its map directly. The keychain backend can't be
|
|
228
|
-
* enumerated without `security dump-keychain` (which prompts), so it probes
|
|
229
|
-
* the known name set instead — which also picks up items written by the old
|
|
230
|
-
* @napi-rs/keyring backend (migration).
|
|
231
284
|
*/
|
|
232
285
|
export async function listSecrets() {
|
|
233
|
-
if (
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
password,
|
|
237
|
-
}));
|
|
286
|
+
if (currentBackend === "file") {
|
|
287
|
+
autoMigrateFromKeychain();
|
|
288
|
+
return Object.entries(readFileMap()).map(([account, password]) => ({ account, password }));
|
|
238
289
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
290
|
+
return securityList();
|
|
291
|
+
}
|
|
292
|
+
// ---------------------------------------------------------------------------
|
|
293
|
+
// Backend switching (used by `crosscheck keys store <file|keychain>`).
|
|
294
|
+
// ---------------------------------------------------------------------------
|
|
295
|
+
/**
|
|
296
|
+
* Switch the secret store backend and migrate existing secrets into it.
|
|
297
|
+
* Persists the choice so all future invocations use it. Returns how many
|
|
298
|
+
* credentials were migrated. NOTE: migrating *to* keychain triggers a macOS
|
|
299
|
+
* login-password prompt per credential — callers should warn first.
|
|
300
|
+
*/
|
|
301
|
+
export async function setSecretBackend(target) {
|
|
302
|
+
if (target === "keychain" && !macKeychainUsable()) {
|
|
303
|
+
throw new Error("The OS keychain backend is only available on macOS.");
|
|
244
304
|
}
|
|
245
|
-
|
|
305
|
+
// Read everything currently stored (under the current backend).
|
|
306
|
+
const existing = await listSecrets();
|
|
307
|
+
// Switch.
|
|
308
|
+
writePref(target);
|
|
309
|
+
const previous = currentBackend;
|
|
310
|
+
currentBackend = target;
|
|
311
|
+
// Write everything into the new backend.
|
|
312
|
+
for (const { account, password } of existing) {
|
|
313
|
+
await setSecret(account, password);
|
|
314
|
+
}
|
|
315
|
+
// Clean up the old location when moving to keychain (file delete is silent).
|
|
316
|
+
// We deliberately do NOT delete old keychain items when moving to file —
|
|
317
|
+
// `security delete` re-triggers the login-password prompt we're escaping.
|
|
318
|
+
// They're harmless (-A, ignored) and get overwritten if you ever switch back.
|
|
319
|
+
if (previous === "file" && target === "keychain") {
|
|
320
|
+
try {
|
|
321
|
+
rmSync(fileStorePath(), { force: true });
|
|
322
|
+
rmSync(keyFilePath(), { force: true });
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
/* ignore */
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return { migrated: existing.length };
|
|
246
329
|
}
|
|
247
330
|
//# sourceMappingURL=keychain.js.map
|
package/dist/keychain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
|
package/dist/keys-setup.js
CHANGED
|
@@ -54,8 +54,10 @@ export async function importEnvKeys() {
|
|
|
54
54
|
/** Standalone `crosscheck keys setup`: env-import, then one browser page for the rest. */
|
|
55
55
|
export async function runKeysSetup() {
|
|
56
56
|
log("");
|
|
57
|
-
log("Setting up provider keys. They're
|
|
58
|
-
log("never sent to Crosscheck — you bring
|
|
57
|
+
log("Setting up provider keys. They're saved in an encrypted file on your");
|
|
58
|
+
log("machine (no password needed) and never sent to Crosscheck — you bring");
|
|
59
|
+
log("your own keys.");
|
|
60
|
+
log("(Prefer your OS keychain instead? Run `crosscheck keys store keychain`.)");
|
|
59
61
|
log("");
|
|
60
62
|
const { configured: base, need } = await importEnvKeys();
|
|
61
63
|
let configured = base;
|
package/dist/keys-setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys-setup.js","sourceRoot":"","sources":["../src/keys-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,uEAAuE;AACvE,MAAM,CAAC,MAAM,SAAS,GAAoB;IACxC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,mBAAmB,EAAE;IAC3E,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE;IAC/D,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,EAAE;IAClE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE;CACzD,CAAC;AAEF,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE;IACjB,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAChD,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,sEAAsE,CAAC,CAAC;IAC5E,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"keys-setup.js","sourceRoot":"","sources":["../src/keys-setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crosscheck-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "Crosscheck — multi-LLM orchestration MCP for the terminal. Single-machine activation, BYO upstream LLM keys, content-free telemetry. Installs into Claude Code in one command.",
|
|
5
5
|
"license": "SEE LICENSE.md",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"crosscheck": "
|
|
8
|
+
"crosscheck": "dist/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|