crosscheck-cli 0.0.25 → 0.0.27

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/mcp.js CHANGED
@@ -25,6 +25,7 @@ import { createRequire } from "node:module";
25
25
  import { CLI_VERSION, ENGINE_FALLBACK_VERSION, ENGINE_PACKAGE, SERVER_URL } from "./config.js";
26
26
  import { getSecret } from "./keychain.js";
27
27
  import { verifyJwt } from "./jwt.js";
28
+ import { runHeartbeat, startScheduler } from "./heartbeat.js";
28
29
  import { notifyIfOutdated } from "./update-check.js";
29
30
  const require = createRequire(import.meta.url);
30
31
  /** Keychain key name -> engine env var name. Mirrors crosscheck-mcp's providers. */
@@ -81,7 +82,25 @@ export async function startMcpServer() {
81
82
  "(If you just installed and this looks wrong, run `crosscheck doctor` to diagnose.)\n");
82
83
  process.exit(1);
83
84
  }
84
- const verified = await verifyJwt(jwt);
85
+ let verified = await verifyJwt(jwt);
86
+ if (!verified.ok && verified.reason === "expired") {
87
+ // The local JWT expired. Rather than lock the user out, try one heartbeat:
88
+ // the server auto-heals an authentic, still-entitled token (activation
89
+ // live + org active, within a grace window) by reissuing a fresh JWT,
90
+ // which runHeartbeat persists. Then re-verify. This is what lets a user
91
+ // who's been away recover on their next session with no re-activation.
92
+ try {
93
+ const hb = await runHeartbeat();
94
+ if (hb.status === "ok") {
95
+ const refreshed = await getSecret("jwt");
96
+ if (refreshed)
97
+ verified = await verifyJwt(refreshed);
98
+ }
99
+ }
100
+ catch {
101
+ // Network error — fall through to the gate below and report expired.
102
+ }
103
+ }
85
104
  if (!verified.ok) {
86
105
  process.stderr.write(`Activation is ${verified.reason}. Re-activate by running \`crosscheck activate\` ` +
87
106
  `(or manage devices at ${SERVER_URL}/account).\n`);
@@ -126,7 +145,14 @@ export async function startMcpServer() {
126
145
  CROSSCHECK_CLI_VERSION: CLI_VERSION,
127
146
  };
128
147
  const child = spawn(command, args, { env, stdio: "inherit" });
148
+ // Keep the activation alive for the life of this serve process: fire a
149
+ // heartbeat now and every 24h. This refreshes the JWT well before its 7-day
150
+ // expiry and updates last-seen server-side (so the admin dashboard isn't
151
+ // stale). Without this, tokens silently ride to expiry and every user gets
152
+ // locked out ~a week after activating.
153
+ const stopHeartbeat = startScheduler();
129
154
  child.on("exit", (code, signal) => {
155
+ stopHeartbeat();
130
156
  if (signal) {
131
157
  process.stderr.write(`crosscheck-mcp exited on ${signal}\n`);
132
158
  process.exit(1);
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.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.25",
3
+ "version": "0.0.27",
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.1.13"
30
+ "crosscheck-mcp": "^0.1.14"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^22.10.0",