claude-crap 0.3.3 → 0.3.5
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/CHANGELOG.md +36 -0
- package/README.md +116 -472
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +116 -3
- package/dist/dashboard/server.js.map +1 -1
- package/dist/sarif/sarif-store.d.ts.map +1 -1
- package/dist/sarif/sarif-store.js +1 -1
- package/dist/sarif/sarif-store.js.map +1 -1
- package/package.json +6 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +2 -3
- package/plugin/bundle/launcher.mjs +112 -0
- package/plugin/bundle/mcp-server.mjs +120 -49
- package/plugin/bundle/mcp-server.mjs.map +3 -3
- package/plugin/eslint.config.mjs +27 -0
- package/plugin/hooks/lib/hook-io.mjs +1 -1
- package/plugin/hooks/pre-tool-use.mjs +1 -1
- package/plugin/launcher.mjs +112 -0
- package/plugin/package-lock.json +2714 -0
- package/plugin/package.json +5 -1
- package/scripts/bundle-plugin.mjs +30 -0
- package/scripts/doctor.mjs +2 -2
- package/src/dashboard/server.ts +144 -3
- package/src/sarif/sarif-store.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACxD,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACxD,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqE7F"}
|
package/dist/dashboard/server.js
CHANGED
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
*
|
|
24
24
|
* @module dashboard/server
|
|
25
25
|
*/
|
|
26
|
-
import { promises as fs } from "node:fs";
|
|
27
|
-
import { dirname, resolve } from "node:path";
|
|
26
|
+
import { promises as fs, existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
|
|
27
|
+
import { dirname, join, resolve } from "node:path";
|
|
28
28
|
import { fileURLToPath } from "node:url";
|
|
29
29
|
import Fastify from "fastify";
|
|
30
30
|
import fastifyStatic from "@fastify/static";
|
|
@@ -54,7 +54,7 @@ export async function startDashboard(options) {
|
|
|
54
54
|
// ------------------------------------------------------------------
|
|
55
55
|
// /api/health — liveness probe
|
|
56
56
|
// ------------------------------------------------------------------
|
|
57
|
-
fastify.get("/api/health", async () => ({ status: "ok", server: "claude-crap", version: "0.3.
|
|
57
|
+
fastify.get("/api/health", async () => ({ status: "ok", server: "claude-crap", version: "0.3.5" }));
|
|
58
58
|
// ------------------------------------------------------------------
|
|
59
59
|
// /api/score — live project score
|
|
60
60
|
// ------------------------------------------------------------------
|
|
@@ -76,12 +76,20 @@ export async function startDashboard(options) {
|
|
|
76
76
|
fastify.get("/", async (_request, reply) => {
|
|
77
77
|
return reply.sendFile("index.html");
|
|
78
78
|
});
|
|
79
|
+
// Kill any stale dashboard from a previous session so we always
|
|
80
|
+
// bind to the configured port. This mirrors claude-mem's PID file
|
|
81
|
+
// pattern: write a PID file when alive, check + kill on next boot.
|
|
82
|
+
const pidFilePath = resolvePidFilePath(config);
|
|
83
|
+
await killStaleDashboard(pidFilePath, config.dashboardPort, logger);
|
|
79
84
|
await fastify.listen({ port: config.dashboardPort, host: "127.0.0.1" });
|
|
80
85
|
const url = `http://127.0.0.1:${config.dashboardPort}`;
|
|
81
86
|
logger.info({ url, publicRoot }, "claude-crap dashboard listening");
|
|
87
|
+
// Write PID file so the next session can find and kill us.
|
|
88
|
+
writePidFile(pidFilePath, config.dashboardPort);
|
|
82
89
|
return {
|
|
83
90
|
url,
|
|
84
91
|
async close() {
|
|
92
|
+
removePidFile(pidFilePath);
|
|
85
93
|
await fastify.close();
|
|
86
94
|
},
|
|
87
95
|
};
|
|
@@ -134,6 +142,111 @@ function urlOf(fastify, config) {
|
|
|
134
142
|
}
|
|
135
143
|
return `http://127.0.0.1:${config.dashboardPort}`;
|
|
136
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Resolve the path to the PID file. Stored under
|
|
147
|
+
* `.claude-crap/dashboard.pid` in the workspace so it survives
|
|
148
|
+
* across sessions but is gitignored with the rest of `.claude-crap/`.
|
|
149
|
+
*/
|
|
150
|
+
function resolvePidFilePath(config) {
|
|
151
|
+
return join(config.pluginRoot, ".claude-crap", "dashboard.pid");
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Write the PID file atomically after the dashboard has started.
|
|
155
|
+
*/
|
|
156
|
+
function writePidFile(path, port) {
|
|
157
|
+
const data = {
|
|
158
|
+
pid: process.pid,
|
|
159
|
+
port,
|
|
160
|
+
startedAt: new Date().toISOString(),
|
|
161
|
+
};
|
|
162
|
+
try {
|
|
163
|
+
writeFileSync(path, JSON.stringify(data, null, 2) + "\n");
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
/* best effort — dashboard still works without a PID file */
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Remove the PID file during graceful shutdown.
|
|
171
|
+
*/
|
|
172
|
+
function removePidFile(path) {
|
|
173
|
+
try {
|
|
174
|
+
unlinkSync(path);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
/* already gone or never written */
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check whether a process is alive using the signal-0 probe.
|
|
182
|
+
* Returns `true` when the process exists and is reachable.
|
|
183
|
+
*/
|
|
184
|
+
function isPidAlive(pid) {
|
|
185
|
+
try {
|
|
186
|
+
process.kill(pid, 0);
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Read the PID file, kill any stale dashboard process, and free the
|
|
195
|
+
* port so the current session can bind to it. This is the key
|
|
196
|
+
* difference from the port-fallback approach: instead of drifting to
|
|
197
|
+
* 5118, 5119, etc., we reclaim the configured port every time.
|
|
198
|
+
*
|
|
199
|
+
* @param pidFilePath Absolute path to `dashboard.pid`.
|
|
200
|
+
* @param port The configured dashboard port.
|
|
201
|
+
* @param logger Pino logger for diagnostics.
|
|
202
|
+
*/
|
|
203
|
+
async function killStaleDashboard(pidFilePath, port, logger) {
|
|
204
|
+
if (!existsSync(pidFilePath))
|
|
205
|
+
return;
|
|
206
|
+
let stale;
|
|
207
|
+
try {
|
|
208
|
+
stale = JSON.parse(readFileSync(pidFilePath, "utf8"));
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Corrupted PID file — remove it and move on.
|
|
212
|
+
removePidFile(pidFilePath);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (!isPidAlive(stale.pid)) {
|
|
216
|
+
logger.info({ stalePid: stale.pid }, "stale dashboard PID file found (process dead), removing");
|
|
217
|
+
removePidFile(pidFilePath);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Process is alive — kill it so we can reclaim the port.
|
|
221
|
+
logger.info({ stalePid: stale.pid, port: stale.port, startedAt: stale.startedAt }, "killing stale dashboard process from previous session");
|
|
222
|
+
try {
|
|
223
|
+
process.kill(stale.pid, "SIGTERM");
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Permission denied or already gone — remove PID file either way.
|
|
227
|
+
removePidFile(pidFilePath);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Wait up to 3 seconds for the process to exit.
|
|
231
|
+
for (let i = 0; i < 30; i++) {
|
|
232
|
+
if (!isPidAlive(stale.pid))
|
|
233
|
+
break;
|
|
234
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
235
|
+
}
|
|
236
|
+
// If still alive after 3s, escalate to SIGKILL.
|
|
237
|
+
if (isPidAlive(stale.pid)) {
|
|
238
|
+
try {
|
|
239
|
+
process.kill(stale.pid, "SIGKILL");
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
/* best effort */
|
|
243
|
+
}
|
|
244
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
245
|
+
}
|
|
246
|
+
removePidFile(pidFilePath);
|
|
247
|
+
// Give the OS a moment to release the TCP port after the process dies.
|
|
248
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
249
|
+
}
|
|
137
250
|
/**
|
|
138
251
|
* Wrap {@link computeProjectScore} so the dashboard endpoint can call
|
|
139
252
|
* it with the live store and provide consistent location metadata.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sarif-store.d.ts","sourceRoot":"","sources":["../../src/sarif/sarif-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CACxC;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE;YACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;YACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;SACzC,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC9C;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/C;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,QAAQ,CAAC,MAAM,CAAC,EAAE;YAChB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,gEAAgE;IAChE,OAAO,CAAC,eAAe,CAAK;gBAEhB,OAAO,EAAE,iBAAiB;IAOtC;;OAEG;IACH,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED;;;;;;;;;;;;;OAaG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sarif-store.d.ts","sourceRoot":"","sources":["../../src/sarif/sarif-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,7 +105,7 @@ export class SarifStore {
|
|
|
105
105
|
this.findings.clear();
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
|
-
throw new Error(`[sarif-store] Failed to load consolidated report at ${this.filePath}: ${error.message}
|
|
108
|
+
throw new Error(`[sarif-store] Failed to load consolidated report at ${this.filePath}: ${error.message}`, { cause: err });
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sarif-store.js","sourceRoot":"","sources":["../../src/sarif/sarif-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sarif-store.js","sourceRoot":"","sources":["../../src/sarif/sarif-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-crap",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "Deterministic QA plugin for Claude Code — CRAP index, Technical Debt Ratio, tree-sitter AST, SARIF 2.1.0, hooks, and a local Vue dashboard.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -128,10 +128,14 @@
|
|
|
128
128
|
"web-tree-sitter": "^0.24.4"
|
|
129
129
|
},
|
|
130
130
|
"devDependencies": {
|
|
131
|
+
"@eslint/js": "^10.0.1",
|
|
131
132
|
"@types/node": "^22.10.2",
|
|
132
133
|
"esbuild": "^0.28.0",
|
|
134
|
+
"eslint": "^10.2.0",
|
|
135
|
+
"globals": "^17.5.0",
|
|
133
136
|
"np": "^11.0.2",
|
|
134
137
|
"tsx": "^4.19.2",
|
|
135
|
-
"typescript": "^5.7.2"
|
|
138
|
+
"typescript": "^5.7.2",
|
|
139
|
+
"typescript-eslint": "^8.58.1"
|
|
136
140
|
}
|
|
137
141
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://code.claude.com/schemas/plugin.json",
|
|
3
3
|
"name": "claude-crap",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.5",
|
|
5
5
|
"description": "Deterministic Quality Assurance plugin for Claude Code. Wraps every Write / Edit / Bash tool call with a PreToolUse gatekeeper, a PostToolUse verifier, and a Stop quality gate backed by CRAP index, Technical Debt Ratio, tree-sitter AST metrics, and SARIF 2.1.0 reports. Forbids the agent from writing functional code before a test safety net exists.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Alan Hernandez",
|
package/plugin/.mcp.json
CHANGED
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
"type": "stdio",
|
|
6
6
|
"command": "node",
|
|
7
7
|
"args": [
|
|
8
|
-
"${CLAUDE_PLUGIN_ROOT}/bundle/
|
|
8
|
+
"${CLAUDE_PLUGIN_ROOT}/bundle/launcher.mjs",
|
|
9
9
|
"--transport",
|
|
10
10
|
"stdio"
|
|
11
11
|
],
|
|
12
12
|
"env": {
|
|
13
|
-
"NODE_ENV": "production"
|
|
14
|
-
"CLAUDE_CRAP_PLUGIN_ROOT": "${CLAUDE_PLUGIN_ROOT}"
|
|
13
|
+
"NODE_ENV": "production"
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-check
|
|
3
|
+
/**
|
|
4
|
+
* claude-crap :: MCP server launcher — zero-dependency bootstrap wrapper.
|
|
5
|
+
*
|
|
6
|
+
* This file is the actual entry point declared in `.mcp.json`. It
|
|
7
|
+
* ensures the MCP server's runtime dependencies (fastify, pino,
|
|
8
|
+
* tree-sitter, etc.) are installed before the server's static ESM
|
|
9
|
+
* `import` statements fire. Without this guard, a clean install from
|
|
10
|
+
* git would fail with ERR_MODULE_NOT_FOUND because `node_modules/`
|
|
11
|
+
* is not committed to the repository.
|
|
12
|
+
*
|
|
13
|
+
* Design constraints:
|
|
14
|
+
*
|
|
15
|
+
* - ZERO external dependencies — only Node.js builtins.
|
|
16
|
+
* - Synchronous check + install so the control flow is linear.
|
|
17
|
+
* - All output goes to stderr (fd 2) to preserve the MCP JSON-RPC
|
|
18
|
+
* channel on stdout.
|
|
19
|
+
* - Must work on macOS, Linux, and Windows.
|
|
20
|
+
*
|
|
21
|
+
* After dependencies are guaranteed to exist, this module dynamically
|
|
22
|
+
* imports `./mcp-server.mjs` which handles the rest of the startup.
|
|
23
|
+
*
|
|
24
|
+
* @module launcher
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
28
|
+
import { execFileSync } from "node:child_process";
|
|
29
|
+
import { dirname, join, resolve } from "node:path";
|
|
30
|
+
import { fileURLToPath } from "node:url";
|
|
31
|
+
|
|
32
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The plugin root is one level above `bundle/`. This is where
|
|
36
|
+
* `package.json` lives and where `npm install` must run.
|
|
37
|
+
*
|
|
38
|
+
* In the deployed layout:
|
|
39
|
+
* ~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/
|
|
40
|
+
* ├── package.json ← PLUGIN_ROOT
|
|
41
|
+
* ├── node_modules/ ← created by ensureDependencies()
|
|
42
|
+
* └── bundle/
|
|
43
|
+
* ├── launcher.mjs ← this file
|
|
44
|
+
* └── mcp-server.mjs ← the real entry point
|
|
45
|
+
*/
|
|
46
|
+
const PLUGIN_ROOT = resolve(__dirname, "..");
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Check whether all runtime dependencies are installed. When they are
|
|
50
|
+
* not, run `npm install --omit=dev` synchronously and verify success.
|
|
51
|
+
*
|
|
52
|
+
* The check is deliberately simple: if the `node_modules/` directory
|
|
53
|
+
* exists we assume all packages are present. A more thorough check
|
|
54
|
+
* would resolve every external, but the cost of a false-positive skip
|
|
55
|
+
* is a cryptic ERR_MODULE_NOT_FOUND — vs. a ~5s npm install on first
|
|
56
|
+
* run. Speed wins.
|
|
57
|
+
*/
|
|
58
|
+
function ensureDependencies() {
|
|
59
|
+
const nodeModulesPath = join(PLUGIN_ROOT, "node_modules");
|
|
60
|
+
if (existsSync(nodeModulesPath)) return; // fast path — already installed
|
|
61
|
+
|
|
62
|
+
// ── Report what we're about to install ────────────────────────────
|
|
63
|
+
let depsSummary = "(unable to read package.json)";
|
|
64
|
+
try {
|
|
65
|
+
const pkgPath = join(PLUGIN_ROOT, "package.json");
|
|
66
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
67
|
+
const deps = Object.entries(pkg.dependencies || {});
|
|
68
|
+
depsSummary = deps.map(([n, v]) => `${n}@${v}`).join(", ");
|
|
69
|
+
} catch {
|
|
70
|
+
/* proceed anyway — the install itself will surface any real error */
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
process.stderr.write(
|
|
74
|
+
`[claude-crap] node_modules/ not found — installing runtime dependencies...\n` +
|
|
75
|
+
`[claude-crap] deps: ${depsSummary}\n`,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// ── Run npm install synchronously ─────────────────────────────────
|
|
79
|
+
try {
|
|
80
|
+
execFileSync("npm", [
|
|
81
|
+
"install",
|
|
82
|
+
"--omit=dev",
|
|
83
|
+
"--no-audit",
|
|
84
|
+
"--no-fund",
|
|
85
|
+
"--no-progress",
|
|
86
|
+
"--loglevel=error",
|
|
87
|
+
], {
|
|
88
|
+
cwd: PLUGIN_ROOT,
|
|
89
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
90
|
+
timeout: 120_000, // 2 minutes — generous for slow networks
|
|
91
|
+
env: { ...process.env, NODE_ENV: "production" },
|
|
92
|
+
});
|
|
93
|
+
process.stderr.write("[claude-crap] dependencies installed successfully.\n");
|
|
94
|
+
} catch (err) {
|
|
95
|
+
const stderr = /** @type {any} */ (err).stderr?.toString?.() ?? "";
|
|
96
|
+
const lastLines = stderr.split("\n").filter(Boolean).slice(-20).join("\n");
|
|
97
|
+
process.stderr.write(
|
|
98
|
+
`[claude-crap] FATAL: npm install failed (exit ${/** @type {any} */ (err).status ?? "unknown"}).\n` +
|
|
99
|
+
(lastLines ? `${lastLines}\n` : "") +
|
|
100
|
+
`[claude-crap] Try manually: cd "${PLUGIN_ROOT}" && npm install --omit=dev\n`,
|
|
101
|
+
);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ── Bootstrap ─────────────────────────────────────────────────────────
|
|
107
|
+
ensureDependencies();
|
|
108
|
+
|
|
109
|
+
// Now that node_modules/ exists, the static ESM imports inside
|
|
110
|
+
// mcp-server.mjs can resolve. Dynamic import avoids top-level
|
|
111
|
+
// resolution failures.
|
|
112
|
+
await import("./mcp-server.mjs");
|