crosscheck-cli 0.0.48 → 0.0.50
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/activate.js +1 -1
- package/dist/activate.js.map +1 -1
- package/dist/cli-enterprise.js +121 -0
- package/dist/cli-enterprise.js.map +1 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/doctor.js +57 -4
- package/dist/doctor.js.map +1 -1
- package/dist/enterprise/compliance.js +40 -0
- package/dist/enterprise/compliance.js.map +1 -0
- package/dist/enterprise/doctor.js +53 -0
- package/dist/enterprise/doctor.js.map +1 -0
- package/dist/enterprise/install.js +73 -0
- package/dist/enterprise/install.js.map +1 -0
- package/dist/enterprise/keys-setup.js +84 -0
- package/dist/enterprise/keys-setup.js.map +1 -0
- package/dist/enterprise/login.js +15 -0
- package/dist/enterprise/login.js.map +1 -0
- package/dist/enterprise/policy.js +66 -0
- package/dist/enterprise/policy.js.map +1 -0
- package/dist/heartbeat.js +23 -3
- package/dist/heartbeat.js.map +1 -1
- package/dist/keychain.js +82 -3
- package/dist/keychain.js.map +1 -1
- package/dist/mcp-register.js +21 -11
- package/dist/mcp-register.js.map +1 -1
- package/dist/mcp.js +40 -9
- package/dist/mcp.js.map +1 -1
- package/package.json +3 -2
package/dist/mcp.js
CHANGED
|
@@ -29,6 +29,7 @@ import { runHeartbeat, startScheduler } from "./heartbeat.js";
|
|
|
29
29
|
import { notifyIfOutdated } from "./update-check.js";
|
|
30
30
|
import { claimSingleInstance, releaseSingleInstance, sweepOrphanedInstances, } from "./single-instance.js";
|
|
31
31
|
import { resolveEngineVersion } from "./engine-version.js";
|
|
32
|
+
import { fetchProviderPolicy } from "./enterprise/policy.js";
|
|
32
33
|
const require = createRequire(import.meta.url);
|
|
33
34
|
/** Keychain key name -> engine env var name. Mirrors crosscheck-mcp's providers. */
|
|
34
35
|
const KEY_BINDINGS = [
|
|
@@ -42,9 +43,20 @@ const KEY_BINDINGS = [
|
|
|
42
43
|
["key:kimi", "KIMI_API_KEY"],
|
|
43
44
|
["key:qwen", "QWEN_API_KEY"],
|
|
44
45
|
];
|
|
45
|
-
|
|
46
|
+
/**
|
|
47
|
+
* `allowedProviders`, when given, restricts which keys get injected into the
|
|
48
|
+
* spawned engine's env — crosscheck-enterprise only (see startMcpServer's
|
|
49
|
+
* enforceProviderPolicy option). A provider missing from the allowlist is
|
|
50
|
+
* simply never injected, even if a key for it is already stored locally —
|
|
51
|
+
* so an org-admin policy change takes effect on the very next `serve`
|
|
52
|
+
* launch without the user redoing key setup.
|
|
53
|
+
*/
|
|
54
|
+
async function loadUpstreamKeys(allowedProviders) {
|
|
46
55
|
const out = {};
|
|
47
56
|
for (const [name, envVar] of KEY_BINDINGS) {
|
|
57
|
+
const provider = name.slice("key:".length);
|
|
58
|
+
if (allowedProviders && !allowedProviders.has(provider))
|
|
59
|
+
continue;
|
|
48
60
|
const v = await getSecret(name);
|
|
49
61
|
if (v)
|
|
50
62
|
out[envVar] = v;
|
|
@@ -76,7 +88,7 @@ function resolveEngineLauncher() {
|
|
|
76
88
|
return { command: npx, args: ["-y", `${ENGINE_PACKAGE}@${ENGINE_FALLBACK_VERSION}`] };
|
|
77
89
|
}
|
|
78
90
|
}
|
|
79
|
-
export async function startMcpServer() {
|
|
91
|
+
export async function startMcpServer(opts) {
|
|
80
92
|
// Clean up any straggler processes left behind by a host that crashed or
|
|
81
93
|
// was force-killed without signaling its child (or by the pre-fix
|
|
82
94
|
// machine-wide lock race) — regardless of which host they belonged to.
|
|
@@ -121,9 +133,19 @@ export async function startMcpServer() {
|
|
|
121
133
|
process.exit(1);
|
|
122
134
|
}
|
|
123
135
|
// 2. Pull upstream LLM keys from keychain into the child's env.
|
|
136
|
+
// crosscheck-enterprise only: fetch the org's current provider policy
|
|
137
|
+
// and filter to it — this is what makes a policy change take effect on
|
|
138
|
+
// the very next `serve` launch without the user redoing key setup.
|
|
139
|
+
let allowedProviders;
|
|
140
|
+
if (opts?.enforceProviderPolicy) {
|
|
141
|
+
const freshJwt = (await getSecret("jwt")) ?? jwt;
|
|
142
|
+
const policy = await fetchProviderPolicy(freshJwt);
|
|
143
|
+
// No live fetch AND no cache -> fail restrictive (empty set), never open.
|
|
144
|
+
allowedProviders = new Set(policy?.allowedProviders ?? []);
|
|
145
|
+
}
|
|
124
146
|
let keys;
|
|
125
147
|
try {
|
|
126
|
-
keys = await loadUpstreamKeys();
|
|
148
|
+
keys = await loadUpstreamKeys(allowedProviders);
|
|
127
149
|
}
|
|
128
150
|
catch (err) {
|
|
129
151
|
if (err instanceof OnePasswordReadError) {
|
|
@@ -136,11 +158,20 @@ export async function startMcpServer() {
|
|
|
136
158
|
throw err;
|
|
137
159
|
}
|
|
138
160
|
if (Object.keys(keys).length === 0) {
|
|
139
|
-
|
|
140
|
-
"\
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
161
|
+
if (opts?.enforceProviderPolicy) {
|
|
162
|
+
process.stderr.write("\ncrosscheck-enterprise: no allowed provider has a key configured yet.\n" +
|
|
163
|
+
"\nEither your org admin hasn't enabled any providers at /account/enterprise, or you " +
|
|
164
|
+
"haven't added a key for one yet:\n" +
|
|
165
|
+
"\n npx -y crosscheck-enterprise@latest keys setup\n" +
|
|
166
|
+
"\nThen reconnect MCP servers in Claude Code (or restart it).\n\n");
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
process.stderr.write("\ncrosscheck: no provider keys found, so there are no models to orchestrate yet.\n" +
|
|
170
|
+
"\nAdd at least one (Anthropic, OpenAI, Google, or xAI) — one browser page, no typing:\n" +
|
|
171
|
+
"\n npx -y crosscheck-cli@latest keys setup\n" +
|
|
172
|
+
"\nYour keys are stored locally on your machine and never sent to Crosscheck.\n" +
|
|
173
|
+
"Then reconnect MCP servers in Claude Code (or restart it).\n\n");
|
|
174
|
+
}
|
|
144
175
|
process.exit(1);
|
|
145
176
|
}
|
|
146
177
|
// 3. Launch the engine.
|
|
@@ -183,7 +214,7 @@ export async function startMcpServer() {
|
|
|
183
214
|
// expiry and updates last-seen server-side (so the admin dashboard isn't
|
|
184
215
|
// stale). Without this, tokens silently ride to expiry and every user gets
|
|
185
216
|
// locked out ~a week after activating.
|
|
186
|
-
const stopHeartbeat = startScheduler();
|
|
217
|
+
const stopHeartbeat = startScheduler({ checkPolicyCompliance: opts?.enforceProviderPolicy });
|
|
187
218
|
child.on("exit", (code, signal) => {
|
|
188
219
|
stopHeartbeat();
|
|
189
220
|
releaseSingleInstance();
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crosscheck-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.50",
|
|
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": "dist/cli.js"
|
|
8
|
+
"crosscheck": "dist/cli.js",
|
|
9
|
+
"crosscheck-enterprise": "dist/cli-enterprise.js"
|
|
9
10
|
},
|
|
10
11
|
"publishConfig": {
|
|
11
12
|
"access": "public"
|