crosscheck-cli 0.0.59 → 0.0.61

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/reconcile.js CHANGED
@@ -17,6 +17,10 @@
17
17
  * reachable ONLY through `crosscheck models sync`, so a model chosen in
18
18
  * the browser reached a machine only if its owner happened to run that
19
19
  * command. The picker saved a choice that nothing collected.
20
+ * 3. Provider key METADATA (presence and last-4 only, never material).
21
+ * Without it the browser knows nothing about any machine except the one
22
+ * it is paired to, so a key that lapsed on another machine is invisible
23
+ * until a panel silently comes back short a provider.
20
24
  *
21
25
  * Everything here is best-effort and fails OPEN. This runs on the critical
22
26
  * path of an MCP connection: a slow or unreachable server must cost a stale
@@ -24,6 +28,8 @@
24
28
  */
25
29
  import { enableOtel, otelEnabled, readSettings, otelEnvFor } from "./otel-setup.js";
26
30
  import { syncModelPreferencesFromServer } from "./model-prefs.js";
31
+ import { reportKeyStatus } from "./key-status.js";
32
+ import { verifyJwt } from "./jwt.js";
27
33
  /** Hard bound on the preference pull. Startup latency is a real cost paid by
28
34
  * every session, so a server that hangs gets abandoned rather than waited on;
29
35
  * the cached preferences from last time are used instead. */
@@ -50,7 +56,7 @@ function otelConfigIsCurrent(serverUrl, jwt) {
50
56
  * the current release expects. Never throws.
51
57
  */
52
58
  export async function reconcileSeat(args) {
53
- const report = { otel: "skipped", prefs: "skipped" };
59
+ const report = { otel: "skipped", prefs: "skipped", keyStatus: "skipped" };
54
60
  if (!args.jwt)
55
61
  return report;
56
62
  // 1. Host telemetry config — local, fast, no network.
@@ -84,8 +90,44 @@ export async function reconcileSeat(args) {
84
90
  catch {
85
91
  report.prefs = "failed";
86
92
  }
93
+ // 3. Provider key metadata — fire-and-forget, unlike prefs.
94
+ // Nothing downstream in this process reads the result: it exists purely
95
+ // so the browser has something to show. Awaiting it would put a network
96
+ // round-trip on every engine start to benefit a page nobody may open.
97
+ try {
98
+ const verified = await verifyJwt(args.jwt);
99
+ if (!verified.ok)
100
+ throw new Error(verified.reason);
101
+ void reportKeyStatus({
102
+ seatId: verified.payload.seatId,
103
+ orgId: verified.payload.orgId,
104
+ jwt: args.jwt,
105
+ serverUrl: args.serverUrl,
106
+ })
107
+ .then((r) => debugLog(`key status report: ${r}`))
108
+ .catch((err) => debugLog(`key status report threw: ${String(err)}`));
109
+ report.keyStatus = "dispatched";
110
+ }
111
+ catch {
112
+ // An unverifiable JWT is a real problem, but not this function's to
113
+ // solve — heartbeat handles expiry and re-activation. Stay silent.
114
+ report.keyStatus = "skipped";
115
+ }
87
116
  return report;
88
117
  }
118
+ /** Diagnostics for work that finishes after reconcile returns. Off unless
119
+ * CROSSCHECK_DEBUG is set — stderr on the MCP path is a shared channel and
120
+ * a line printed every launch is a line nobody reads. */
121
+ function debugLog(msg) {
122
+ if (!process.env.CROSSCHECK_DEBUG)
123
+ return;
124
+ try {
125
+ process.stderr.write(`crosscheck: ${msg}\n`);
126
+ }
127
+ catch {
128
+ /* ignore */
129
+ }
130
+ }
89
131
  /** One line to stderr when something was actually corrected. Silent on the
90
132
  * happy path — a message every single launch trains people to ignore it.
91
133
  * stderr, never stdout: stdout is the MCP JSON-RPC channel. */
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../src/reconcile.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crosscheck-cli",
3
- "version": "0.0.59",
3
+ "version": "0.0.61",
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",
@@ -27,7 +27,7 @@
27
27
  "prepublishOnly": "npm run build"
28
28
  },
29
29
  "dependencies": {
30
- "crosscheck-mcp": "0.2.20"
30
+ "crosscheck-mcp": "0.2.22"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^22.10.0",