@graphit/cli 0.1.107 → 0.2.18

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.
@@ -0,0 +1,19 @@
1
+ // Pure timeout resolution for `graphit query`, split out of query.ts so it can
2
+ // be unit-tested without pulling in the API client or Commander.
3
+ //
4
+ // `graphit query` can run long analytical scans (40-70M-row sources) that exceed
5
+ // the 30s global client default in api/client.ts. The query path gets its own
6
+ // 120s default plus a --timeout override (mirroring the per-call overrides ds.ts
7
+ // already uses for refresh/scan). Cloud Run caps the backend request at 900s, so
8
+ // larger --timeout values are capped server-side.
9
+ export const QUERY_TIMEOUT_MS = 120_000;
10
+ export function resolveQueryTimeoutMs(rawTimeout) {
11
+ if (rawTimeout === undefined)
12
+ return QUERY_TIMEOUT_MS;
13
+ const seconds = parseInt(rawTimeout, 10);
14
+ if (isNaN(seconds) || seconds <= 0) {
15
+ throw new Error(`Invalid --timeout value: "${rawTimeout}". Must be a positive number of seconds.`);
16
+ }
17
+ return seconds * 1000;
18
+ }
19
+ //# sourceMappingURL=query-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-timeout.js","sourceRoot":"","sources":["../../src/commands/query-timeout.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,iEAAiE;AACjE,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,iFAAiF;AACjF,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,UAAU,qBAAqB,CAAC,UAA8B;IAClE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,6BAA6B,UAAU,0CAA0C,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,GAAG,IAAI,CAAC;AACxB,CAAC"}
@@ -2,6 +2,7 @@ import { apiClient } from "../api/client.js";
2
2
  import { output, errorOutput, getOutputFormat, note } from "../output/format.js";
3
3
  import { styledIntro, styledOutro, styledSuccess, styledNote, styledMessage, styledWarn, styledTable, styledConfirm, formatBold, formatDim, formatGreen, formatSeparator, } from "../output/styled.js";
4
4
  import chalk from "chalk";
5
+ import { resolveQueryTimeoutMs } from "./query-timeout.js";
5
6
  function adhocGateDetail(err) {
6
7
  const e = err;
7
8
  const detail = e?.detail;
@@ -45,10 +46,19 @@ export function registerQueryCommands(program) {
45
46
  .option("--override-rules <names...>", "Governance rule names to override")
46
47
  .option("--verbose", "Show expanded SQL after macro resolution")
47
48
  .option("--approve-adhoc", "Approve running an ad-hoc measure query on a governed source")
49
+ .option("--timeout <seconds>", "Request timeout in seconds (default 120; backend caps at 900)")
48
50
  .action(async function (sql) {
49
51
  const cmd = this;
50
52
  const opts = cmd.opts();
51
53
  const fmt = getOutputFormat(cmd);
54
+ let timeoutMs;
55
+ try {
56
+ timeoutMs = resolveQueryTimeoutMs(opts.timeout);
57
+ }
58
+ catch (err) {
59
+ errorOutput(err);
60
+ return;
61
+ }
52
62
  const makeBody = (approveAdhoc) => ({
53
63
  sql,
54
64
  data_source_id: opts.ds || null,
@@ -129,7 +139,7 @@ export function registerQueryCommands(program) {
129
139
  }
130
140
  };
131
141
  try {
132
- const resp = await apiClient.post("/api/v1/cli/query", makeBody(!!opts.approveAdhoc));
142
+ const resp = await apiClient.post("/api/v1/cli/query", makeBody(!!opts.approveAdhoc), { timeoutMs });
133
143
  renderResult(resp);
134
144
  }
135
145
  catch (err) {
@@ -146,7 +156,7 @@ export function registerQueryCommands(program) {
146
156
  return;
147
157
  }
148
158
  try {
149
- const resp = await apiClient.post("/api/v1/cli/query", makeBody(true));
159
+ const resp = await apiClient.post("/api/v1/cli/query", makeBody(true), { timeoutMs });
150
160
  renderResult(resp);
151
161
  }
152
162
  catch (err2) {
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import { registerSetupCommand } from "./commands/setup.js";
10
10
  import { registerGovernanceCommands } from "./commands/governance.js";
11
11
  import { registerTeamCommands } from "./commands/team.js";
12
12
  import { registerPluginCommands } from "./commands/plugin.js";
13
- import { getCurrentVersion, printUpdateBanner, printMigrationNoticeIfGlobal, fireBackgroundCheck, } from "./update-check.js";
13
+ import { getCurrentVersion, printUpdateBanner, printMigrationNoticeIfGlobal, printPluginHealthPreflight, fireBackgroundCheck, } from "./update-check.js";
14
14
  const program = new Command();
15
15
  const args = process.argv.slice(2);
16
16
  const pluginArgIndex = args.indexOf("plugin");
@@ -34,6 +34,7 @@ registerSetupCommand(program);
34
34
  if (!isPluginStatusCommand) {
35
35
  printMigrationNoticeIfGlobal();
36
36
  printUpdateBanner();
37
+ printPluginHealthPreflight();
37
38
  }
38
39
  program.parse();
39
40
  fireBackgroundCheck();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,qBAAqB,GAAG,cAAc,IAAI,CAAC,IAAI,cAAc,KAAK,cAAc,GAAG,CAAC,CAAC;AAE3F,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,EAAE,MAAM,CAAC,CAAC;AAE1F,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC3B,4BAA4B,EAAE,CAAC;IAC/B,iBAAiB,EAAE,CAAC;AACtB,CAAC;AACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,qBAAqB,GAAG,cAAc,IAAI,CAAC,IAAI,cAAc,KAAK,cAAc,GAAG,CAAC,CAAC;AAE3F,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,EAAE,MAAM,CAAC,CAAC;AAE1F,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC3B,4BAA4B,EAAE,CAAC;IAC/B,iBAAiB,EAAE,CAAC;IACpB,0BAA0B,EAAE,CAAC;AAC/B,CAAC;AACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,mBAAmB,EAAE,CAAC"}
@@ -10,6 +10,7 @@ type InstallContext = "npx" | "global" | "local";
10
10
  export declare function classifyInstallContext(selfPath: string, cwd: string): InstallContext;
11
11
  export declare function getCurrentVersion(): string;
12
12
  export declare function printUpdateBanner(): void;
13
+ export declare function printPluginHealthPreflight(): void;
13
14
  /**
14
15
  * Project #246 self-announcing shim: when the user runs a stale GLOBAL `@graphit/cli`
15
16
  * directly (the plugin's PATH wrapper never shadows their interactive shell), tell
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "fs";
2
+ import { spawnSync } from "child_process";
2
3
  import { homedir } from "os";
3
- import { join, sep } from "path";
4
+ import { dirname, join, sep } from "path";
4
5
  import { fileURLToPath } from "url";
5
6
  import { createRequire } from "module";
6
7
  import { findOutdatedSkillInstalls, formatSkillStalenessBanner, } from "./skill-version.js";
@@ -131,6 +132,22 @@ export function printUpdateBanner() {
131
132
  process.stderr.write(skillBanner);
132
133
  }
133
134
  }
135
+ export function printPluginHealthPreflight() {
136
+ if (process.env.GRAPHIT_SKIP_PLUGIN_PREFLIGHT === "1")
137
+ return;
138
+ const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
139
+ const script = join(packageRoot, "scripts", "plugin-status.mjs");
140
+ if (!existsSync(script))
141
+ return;
142
+ const result = spawnSync(process.execPath, [script, "--preflight", "--repair", "--quiet", "--skip-network"], {
143
+ encoding: "utf-8",
144
+ timeout: 5000,
145
+ env: process.env,
146
+ });
147
+ if (result.stdout) {
148
+ process.stderr.write(result.stdout.endsWith("\n") ? result.stdout : `${result.stdout}\n`);
149
+ }
150
+ }
134
151
  /**
135
152
  * Project #246 self-announcing shim: when the user runs a stale GLOBAL `@graphit/cli`
136
153
  * directly (the plugin's PATH wrapper never shadows their interactive shell), tell
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphit/cli",
3
- "version": "0.1.107",
3
+ "version": "0.2.18",
4
4
  "description": "Graphit CLI - Build custom dashboards from any AI coding assistant",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,8 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import {
4
+ chmodSync,
5
+ cpSync,
6
+ existsSync,
7
+ mkdirSync,
8
+ readFileSync,
9
+ realpathSync,
10
+ renameSync,
11
+ rmSync,
12
+ writeFileSync,
13
+ } from "node:fs";
4
14
  import { homedir } from "node:os";
5
- import { delimiter, dirname, join } from "node:path";
15
+ import { delimiter, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
6
16
  import { fileURLToPath } from "node:url";
7
17
 
8
18
  // Project #246: GRAPHIT_REGISTRY_URL lets tests point at a local server and
@@ -10,6 +20,19 @@ import { fileURLToPath } from "node:url";
10
20
  const REGISTRY_URL =
11
21
  process.env.GRAPHIT_REGISTRY_URL ?? "https://registry.npmjs.org/@graphit/cli/latest";
12
22
  const PACKAGE_NAME = "@graphit/cli";
23
+ const PLUGIN_ID = "graphit@graphit-plugin";
24
+ const CLAUDE_MARKETPLACE_NAME = "graphit-plugin";
25
+ const CLAUDE_PLUGIN_NAME = "graphit";
26
+ const REPAIRABLE_BUNDLE_ENTRIES = [
27
+ ".claude-plugin",
28
+ ".codex-plugin",
29
+ "skills",
30
+ "hooks",
31
+ "scripts",
32
+ "bin",
33
+ "README.md",
34
+ "package.json",
35
+ ];
13
36
  // Project #246: ~4h TTL (was 24h) so a single-source bump reaches returning
14
37
  // sessions within one window (ARCH-2, PERF-2).
15
38
  const TTL_MS = 4 * 60 * 60 * 1000;
@@ -19,6 +42,8 @@ const CACHE_SCHEMA_VERSION = 1;
19
42
  // Strict semver. The wrapper enforces the same shape (SEC-6); keep them in sync.
20
43
  const SEMVER_RE = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
21
44
  const args = new Set(process.argv.slice(2));
45
+ const shouldRepair = args.has("--repair") || args.has("--auto-repair");
46
+ const isPreflight = args.has("--preflight");
22
47
  const hookIndex = process.argv.indexOf("--hook");
23
48
  const hookEvent = hookIndex >= 0 ? process.argv[hookIndex + 1] : null;
24
49
  const pluginRoot =
@@ -55,6 +80,28 @@ function readFrontmatterVersion(path) {
55
80
  }
56
81
  }
57
82
 
83
+ function readBundleInfo(root) {
84
+ const packageJson = tryReadJson(join(root, "package.json"));
85
+ const versionJson = tryReadJson(join(root, "skills", "graphit", "VERSION.json"));
86
+ const claudePlugin = tryReadJson(join(root, ".claude-plugin", "plugin.json"));
87
+ const marketplace = tryReadJson(join(root, ".claude-plugin", "marketplace.json"));
88
+ const marketplacePlugin = marketplace?.plugins?.find((plugin) => plugin.name === CLAUDE_PLUGIN_NAME);
89
+ return {
90
+ packageName: packageJson?.name ?? versionJson?.package ?? PACKAGE_NAME,
91
+ currentVersion:
92
+ packageJson?.version ??
93
+ versionJson?.version ??
94
+ claudePlugin?.version ??
95
+ marketplacePlugin?.version ??
96
+ marketplace?.metadata?.version ??
97
+ readFrontmatterVersion(join(root, "skills", "graphit", "SKILL.md")) ??
98
+ null,
99
+ claudePlugin: claudePlugin ?? null,
100
+ marketplace: marketplace ?? null,
101
+ marketplacePlugin: marketplacePlugin ?? null,
102
+ };
103
+ }
104
+
58
105
  function compareVersions(left, right) {
59
106
  const leftParts = left.split(".").map(Number);
60
107
  const rightParts = right.split(".").map(Number);
@@ -69,6 +116,23 @@ function compareVersions(left, right) {
69
116
  return 0;
70
117
  }
71
118
 
119
+ function versionIsBehind(version, currentVersion) {
120
+ if (!isStrictSemver(currentVersion)) return false;
121
+ if (!version || !isStrictSemver(version)) return true;
122
+ return compareVersions(version, currentVersion) < 0;
123
+ }
124
+
125
+ function sanitizePathPart(value) {
126
+ return value.replace(/[^a-zA-Z0-9\-_.]/g, "-");
127
+ }
128
+
129
+ function isWithinDirectory(child, parent) {
130
+ const parentResolved = resolve(parent);
131
+ const childResolved = resolve(child);
132
+ const rel = relative(parentResolved, childResolved);
133
+ return rel === "" || (!!rel && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel));
134
+ }
135
+
72
136
  function copiedSkillTargets(home = homedir(), cwd = process.cwd()) {
73
137
  return [
74
138
  { kind: "claude-code", label: "Claude Code global", scope: "global", path: join(home, ".claude", "skills", "graphit", "SKILL.md") },
@@ -136,6 +200,201 @@ function atomicWriteJson(path, obj) {
136
200
  }
137
201
  }
138
202
 
203
+ function claudePluginsRoot() {
204
+ return process.env.CLAUDE_PLUGINS_ROOT ?? join(homedir(), ".claude", "plugins");
205
+ }
206
+
207
+ function claudeInstalledPluginsPath(root = claudePluginsRoot()) {
208
+ return join(root, "installed_plugins.json");
209
+ }
210
+
211
+ function claudeVersionedCachePath(version, root = claudePluginsRoot()) {
212
+ return join(
213
+ root,
214
+ "cache",
215
+ CLAUDE_MARKETPLACE_NAME,
216
+ CLAUDE_PLUGIN_NAME,
217
+ sanitizePathPart(version),
218
+ );
219
+ }
220
+
221
+ function readClaudeInstalledFile(root = claudePluginsRoot()) {
222
+ const path = claudeInstalledPluginsPath(root);
223
+ const data = tryReadJson(path);
224
+ if (!data || typeof data !== "object") return null;
225
+ return { path, data };
226
+ }
227
+
228
+ function graphitInstallEntries(installedData) {
229
+ const plugins = installedData.plugins && typeof installedData.plugins === "object"
230
+ ? installedData.plugins
231
+ : installedData;
232
+ const raw = plugins?.[PLUGIN_ID];
233
+ if (!raw) return [];
234
+ if (Array.isArray(raw)) {
235
+ return raw
236
+ .filter((entry) => entry && typeof entry === "object")
237
+ .map((entry) => ({ entry }));
238
+ }
239
+ if (typeof raw === "object") {
240
+ return [{ entry: raw }];
241
+ }
242
+ return [];
243
+ }
244
+
245
+ function pluginEntryVersion(entry) {
246
+ if (!entry || typeof entry !== "object") return null;
247
+ const installPath = typeof entry.installPath === "string" ? entry.installPath : null;
248
+ const skillVersion = installPath
249
+ ? readFrontmatterVersion(join(installPath, "skills", "graphit", "SKILL.md"))
250
+ : null;
251
+ const versionJson = installPath
252
+ ? tryReadJson(join(installPath, "skills", "graphit", "VERSION.json"))?.version
253
+ : null;
254
+ return {
255
+ installPath,
256
+ entryVersion: typeof entry.version === "string" ? entry.version : null,
257
+ skillVersion,
258
+ versionJson: versionJson ?? null,
259
+ effectiveVersion: skillVersion ?? versionJson ?? (typeof entry.version === "string" ? entry.version : null),
260
+ };
261
+ }
262
+
263
+ function repairSourceLooksCurrent(sourceRoot, currentVersion) {
264
+ if (!isStrictSemver(currentVersion)) return false;
265
+ const skillVersion = readFrontmatterVersion(join(sourceRoot, "skills", "graphit", "SKILL.md"));
266
+ const versionJson = tryReadJson(join(sourceRoot, "skills", "graphit", "VERSION.json"))?.version;
267
+ const claudePlugin = tryReadJson(join(sourceRoot, ".claude-plugin", "plugin.json"))?.version;
268
+ return skillVersion === currentVersion && versionJson === currentVersion && claudePlugin === currentVersion;
269
+ }
270
+
271
+ function copyRepairableBundle(sourceRoot, targetRoot) {
272
+ if (!isWithinDirectory(targetRoot, claudePluginsRoot())) {
273
+ throw new Error(`Refusing to repair outside Claude plugins directory: ${targetRoot}`);
274
+ }
275
+
276
+ const tmpRoot = `${targetRoot}.tmp-${process.pid}-${Date.now()}`;
277
+ rmSync(tmpRoot, { recursive: true, force: true });
278
+ mkdirSync(tmpRoot, { recursive: true });
279
+ try {
280
+ for (const entry of REPAIRABLE_BUNDLE_ENTRIES) {
281
+ const source = join(sourceRoot, entry);
282
+ if (!existsSync(source)) continue;
283
+ cpSync(source, join(tmpRoot, entry), {
284
+ recursive: true,
285
+ force: true,
286
+ verbatimSymlinks: true,
287
+ });
288
+ }
289
+ try {
290
+ chmodSync(join(tmpRoot, "bin", "graphit"), 0o755);
291
+ } catch {
292
+ // Windows or missing wrapper; integrity checks catch real packaging drift.
293
+ }
294
+ mkdirSync(dirname(targetRoot), { recursive: true });
295
+ rmSync(targetRoot, { recursive: true, force: true });
296
+ renameSync(tmpRoot, targetRoot);
297
+ } catch (error) {
298
+ rmSync(tmpRoot, { recursive: true, force: true });
299
+ throw error;
300
+ }
301
+ }
302
+
303
+ function updateClaudeInstalledEntriesOnDisk(installedFile, staleRecords, targetPath, currentVersion) {
304
+ const now = new Date().toISOString();
305
+ for (const record of staleRecords) {
306
+ record.entry.installPath = targetPath;
307
+ record.entry.version = currentVersion;
308
+ record.entry.lastUpdated = now;
309
+ if (typeof record.entry.installedAt !== "string") {
310
+ record.entry.installedAt = now;
311
+ }
312
+ }
313
+ atomicWriteJson(installedFile.path, installedFile.data);
314
+ }
315
+
316
+ function inspectClaudeInstalledPlugin(currentVersion, repair) {
317
+ const installedFile = readClaudeInstalledFile();
318
+ if (!installedFile) return { findings: [], metadata: [] };
319
+
320
+ const metadata = [];
321
+ const entries = graphitInstallEntries(installedFile.data);
322
+ if (entries.length === 0) return { findings: [], metadata };
323
+
324
+ const staleRecords = [];
325
+ for (const record of entries) {
326
+ const versionInfo = pluginEntryVersion(record.entry);
327
+ metadata.push({
328
+ label: `Claude Code installed ${PLUGIN_ID}`,
329
+ version: versionInfo.effectiveVersion,
330
+ installPath: versionInfo.installPath,
331
+ entryVersion: versionInfo.entryVersion,
332
+ skillVersion: versionInfo.skillVersion,
333
+ scope: record.entry.scope ?? "user",
334
+ projectPath: record.entry.projectPath ?? null,
335
+ });
336
+
337
+ if (
338
+ versionIsBehind(versionInfo.effectiveVersion, currentVersion) ||
339
+ versionIsBehind(versionInfo.entryVersion, currentVersion)
340
+ ) {
341
+ staleRecords.push({ ...record, versionInfo });
342
+ }
343
+ }
344
+
345
+ if (staleRecords.length === 0) return { findings: [], metadata };
346
+
347
+ const staleVersions = [...new Set(staleRecords.map((record) => record.versionInfo.effectiveVersion ?? "unknown"))].join(", ");
348
+ const targetPath = claudeVersionedCachePath(currentVersion);
349
+
350
+ if (!repair) {
351
+ return {
352
+ metadata,
353
+ findings: [
354
+ {
355
+ type: "claude-installed-plugin-stale",
356
+ message: `Claude Code installed Graphit plugin is stale (${staleVersions}), expected ${currentVersion}`,
357
+ remediation: "Run `graphit plugin status --repair`, then restart/reload Claude Code. If you prefer the native plugin manager, run `/plugin marketplace update graphit-plugin`, then `/plugin update graphit@graphit-plugin`, then restart/reload.",
358
+ },
359
+ ],
360
+ };
361
+ }
362
+
363
+ try {
364
+ if (!repairSourceLooksCurrent(pluginRoot, currentVersion)) {
365
+ throw new Error(`current npm/plugin bundle at ${pluginRoot} is missing synced ${currentVersion} plugin files`);
366
+ }
367
+ const targetSkillVersion = readFrontmatterVersion(join(targetPath, "skills", "graphit", "SKILL.md"));
368
+ if (targetSkillVersion !== currentVersion) {
369
+ copyRepairableBundle(pluginRoot, targetPath);
370
+ }
371
+ updateClaudeInstalledEntriesOnDisk(installedFile, staleRecords, targetPath, currentVersion);
372
+ return {
373
+ metadata,
374
+ findings: [
375
+ {
376
+ type: "claude-installed-plugin-repaired",
377
+ message: `Claude Code installed Graphit plugin was stale (${staleVersions}); repaired disk cache to ${currentVersion}`,
378
+ remediation: `Restart/reload Claude Code so it loads the repaired plugin cache at ${targetPath}. The already-running session may still have the old SKILL.md in memory until then.`,
379
+ repaired: true,
380
+ installPath: targetPath,
381
+ },
382
+ ],
383
+ };
384
+ } catch (error) {
385
+ return {
386
+ metadata,
387
+ findings: [
388
+ {
389
+ type: "claude-installed-plugin-stale",
390
+ message: `Claude Code installed Graphit plugin is stale (${staleVersions}), expected ${currentVersion}; auto-repair failed: ${error instanceof Error ? error.message : String(error)}`,
391
+ remediation: "Run `/plugin marketplace update graphit-plugin`, then `/plugin update graphit@graphit-plugin`, then restart/reload Claude Code. `graphit plugin status --repair` can repair from the npm bundle once the local files are writable.",
392
+ },
393
+ ],
394
+ };
395
+ }
396
+ }
397
+
139
398
  function writeCache(path, latestVersion) {
140
399
  atomicWriteJson(path, {
141
400
  schemaVersion: CACHE_SCHEMA_VERSION,
@@ -255,14 +514,31 @@ function tryParseJson(value) {
255
514
  }
256
515
 
257
516
  async function collectStatus() {
258
- const packageJson = readJson(join(pluginRoot, "package.json"));
259
- const currentVersion = packageJson.version;
517
+ const bundleInfo = readBundleInfo(pluginRoot);
518
+ const packageName = bundleInfo.packageName;
519
+ const currentVersion = bundleInfo.currentVersion;
520
+ if (!currentVersion) {
521
+ return {
522
+ packageName,
523
+ sourceOfTruth: "plugin-bundle",
524
+ currentVersion: null,
525
+ latestVersion: null,
526
+ metadata: [],
527
+ findings: [
528
+ {
529
+ type: "metadata-drift",
530
+ message: `Could not determine Graphit plugin version from ${pluginRoot}`,
531
+ remediation: "Reinstall the Graphit plugin from the marketplace, then rerun `graphit plugin status`.",
532
+ },
533
+ ],
534
+ };
535
+ }
260
536
  const findings = [];
261
537
  const metadata = [];
262
- const claudePlugin = tryReadJson(join(pluginRoot, ".claude-plugin", "plugin.json"));
538
+ const claudePlugin = bundleInfo.claudePlugin;
263
539
  const codexPlugin = tryReadJson(join(pluginRoot, ".codex-plugin", "plugin.json"));
264
- const marketplace = tryReadJson(join(pluginRoot, ".claude-plugin", "marketplace.json"));
265
- const marketplacePlugin = marketplace?.plugins?.find((plugin) => plugin.name === "graphit");
540
+ const marketplace = bundleInfo.marketplace;
541
+ const marketplacePlugin = bundleInfo.marketplacePlugin;
266
542
 
267
543
  const versionChecks = [
268
544
  [".claude-plugin/plugin.json", claudePlugin?.version],
@@ -277,7 +553,7 @@ async function collectStatus() {
277
553
  ];
278
554
 
279
555
  for (const [label, version] of versionChecks) {
280
- if (version !== currentVersion) {
556
+ if (!isPreflight && version !== currentVersion) {
281
557
  findings.push({
282
558
  type: "metadata-drift",
283
559
  message: `${label} is ${version ?? "missing"}, expected ${currentVersion}`,
@@ -290,25 +566,25 @@ async function collectStatus() {
290
566
  const marketplaceSource = marketplacePlugin?.source;
291
567
  const sourceMatches =
292
568
  marketplaceSource?.source === "npm" &&
293
- marketplaceSource.package === packageJson.name &&
569
+ marketplaceSource.package === packageName &&
294
570
  marketplaceSource.version === currentVersion;
295
571
  metadata.push({
296
572
  label: ".claude-plugin/marketplace.json source",
297
573
  version: marketplaceSource?.version ?? null,
298
574
  source: marketplaceSource ?? null,
299
575
  });
300
- if (!sourceMatches) {
576
+ if (!isPreflight && !sourceMatches) {
301
577
  findings.push({
302
578
  type: "metadata-drift",
303
579
  message: `.claude-plugin/marketplace.json source is ${
304
580
  marketplaceSource ? JSON.stringify(marketplaceSource) : "missing"
305
- }, expected npm source ${packageJson.name}@${currentVersion}`,
581
+ }, expected npm source ${packageName}@${currentVersion}`,
306
582
  remediation: "Run `npm run sync:version` before publishing @graphit/cli.",
307
583
  });
308
584
  }
309
585
 
310
586
  const latestVersion = await getLatestVersion(currentVersion);
311
- if (latestVersion && compareVersions(latestVersion, currentVersion) > 0) {
587
+ if (!isPreflight && latestVersion && compareVersions(latestVersion, currentVersion) > 0) {
312
588
  findings.push({
313
589
  type: "package-update",
314
590
  message: `@graphit/cli update available: ${currentVersion} -> ${latestVersion}`,
@@ -316,6 +592,10 @@ async function collectStatus() {
316
592
  });
317
593
  }
318
594
 
595
+ const claudeInstall = inspectClaudeInstalledPlugin(currentVersion, shouldRepair);
596
+ metadata.push(...claudeInstall.metadata);
597
+ findings.push(...claudeInstall.findings);
598
+
319
599
  for (const target of copiedSkillTargets()) {
320
600
  const { label, path } = target;
321
601
  if (!existsSync(path)) continue;
@@ -339,7 +619,7 @@ async function collectStatus() {
339
619
  }
340
620
 
341
621
  return {
342
- packageName: packageJson.name,
622
+ packageName,
343
623
  sourceOfTruth: "plugin-bundle",
344
624
  currentVersion,
345
625
  latestVersion,