@solidnumber/cli 1.16.1 → 1.16.2
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/commands/doctor.js +76 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/lib/doctor-env.d.ts +70 -0
- package/dist/lib/doctor-env.d.ts.map +1 -0
- package/dist/lib/doctor-env.js +378 -0
- package/dist/lib/doctor-env.js.map +1 -0
- package/dist/lib/tenant-guard.d.ts +40 -6
- package/dist/lib/tenant-guard.d.ts.map +1 -1
- package/dist/lib/tenant-guard.js +78 -22
- package/dist/lib/tenant-guard.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/doctor.js
CHANGED
|
@@ -312,10 +312,86 @@ exports.doctorCommand
|
|
|
312
312
|
console.log('');
|
|
313
313
|
process.exit(finding.severity === 'fail' ? 1 : 0);
|
|
314
314
|
});
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
// solid doctor env — local environment diagnostic (§ 650.5 automation).
|
|
317
|
+
// "Is my context hook installed, is my JWT fresh, is my manifest bound, when
|
|
318
|
+
// did I last refresh, is the backend reachable?" — all in one command.
|
|
319
|
+
// Gap 8 from CLAUDE-CONTEXT-CANONICAL-TRUTH § 650.
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
const doctor_env_1 = require("../lib/doctor-env");
|
|
322
|
+
exports.doctorCommand
|
|
323
|
+
.command('env')
|
|
324
|
+
.description('Diagnose the local tenant environment (hook / manifest / token / freshness / backend)')
|
|
325
|
+
.option('--json', 'Emit JSON result')
|
|
326
|
+
.action(async (opts) => {
|
|
327
|
+
const deps = (0, doctor_env_1.defaultDoctorEnvDeps)({
|
|
328
|
+
isLoggedIn: () => config_1.config.isLoggedIn(),
|
|
329
|
+
get companyId() { return config_1.config.companyId; },
|
|
330
|
+
get accessToken() { return config_1.config.accessToken; },
|
|
331
|
+
get tokenExpiresAt() { return config_1.config.tokenExpiresAt; },
|
|
332
|
+
}, async (p) => {
|
|
333
|
+
// The project's apiClient.get() throws on 4xx/5xx. For the doctor
|
|
334
|
+
// env backend check we just want the status code — any HTTP
|
|
335
|
+
// response means the server is reachable. Unwrap from the axios
|
|
336
|
+
// error when the status is present; only re-throw true network
|
|
337
|
+
// failures so checkBackend can distinguish "slow/bad server"
|
|
338
|
+
// from "DNS/TLS/network problem".
|
|
339
|
+
try {
|
|
340
|
+
const res = await api_client_1.apiClient.get(p);
|
|
341
|
+
return { status: res.status };
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
const status = err?.status
|
|
345
|
+
?? err?.response?.status;
|
|
346
|
+
if (typeof status === 'number')
|
|
347
|
+
return { status };
|
|
348
|
+
throw err;
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
const report = await (0, doctor_env_1.runDoctorEnv)(deps);
|
|
352
|
+
if ((0, json_output_1.isJsonOutput)(opts)) {
|
|
353
|
+
process.stdout.write(JSON.stringify(report, null, 2) + '\n');
|
|
354
|
+
process.exit(report.ok ? 0 : 1);
|
|
355
|
+
}
|
|
356
|
+
const statusColor = {
|
|
357
|
+
pass: (s) => chalk_1.default.green(s),
|
|
358
|
+
warn: (s) => chalk_1.default.yellow(s),
|
|
359
|
+
fail: (s) => chalk_1.default.red(s),
|
|
360
|
+
skip: (s) => chalk_1.default.dim(s),
|
|
361
|
+
};
|
|
362
|
+
const statusDot = {
|
|
363
|
+
pass: chalk_1.default.green('●'),
|
|
364
|
+
warn: chalk_1.default.yellow('●'),
|
|
365
|
+
fail: chalk_1.default.red('●'),
|
|
366
|
+
skip: chalk_1.default.dim('○'),
|
|
367
|
+
};
|
|
368
|
+
const maxLabel = Math.max(...report.results.map((r) => r.label.length));
|
|
369
|
+
console.log('');
|
|
370
|
+
console.log(chalk_1.default.bold(' Solid# CLI Doctor — environment'));
|
|
371
|
+
console.log(chalk_1.default.dim(' ' + '─'.repeat(maxLabel + 40)));
|
|
372
|
+
for (const r of report.results) {
|
|
373
|
+
const label = r.label.padEnd(maxLabel);
|
|
374
|
+
const status = statusColor[r.status](r.status.toUpperCase().padEnd(4));
|
|
375
|
+
console.log(` ${statusDot[r.status]} ${status} ${label} ${chalk_1.default.dim(r.detail)}`);
|
|
376
|
+
if (r.hint)
|
|
377
|
+
console.log(chalk_1.default.dim(` hint: ${r.hint}`));
|
|
378
|
+
}
|
|
379
|
+
console.log('');
|
|
380
|
+
const { pass, warn, fail, skip } = report.summary;
|
|
381
|
+
const line = [
|
|
382
|
+
fail === 0 ? chalk_1.default.green(` ✓ ${pass} passed`) : chalk_1.default.red(` ✗ ${fail} failed`),
|
|
383
|
+
warn > 0 ? chalk_1.default.yellow(`${warn} warning${warn === 1 ? '' : 's'}`) : '',
|
|
384
|
+
skip > 0 ? chalk_1.default.dim(`${skip} skipped`) : '',
|
|
385
|
+
].filter(Boolean).join(' ');
|
|
386
|
+
console.log(line);
|
|
387
|
+
console.log('');
|
|
388
|
+
process.exit(report.ok ? 0 : 1);
|
|
389
|
+
});
|
|
315
390
|
(0, command_kit_1.appendExamples)(exports.doctorCommand, [
|
|
316
391
|
{ cmd: 'solid doctor', why: 'Core battery — 10 probes, ~1-2s' },
|
|
317
392
|
{ cmd: 'solid doctor --endpoints', why: 'Full battery — includes tier-gated endpoints' },
|
|
318
393
|
{ cmd: 'solid doctor --json', why: 'Machine-readable (CI pipelines)' },
|
|
319
394
|
{ cmd: 'solid doctor scopes', why: 'Check if API key scopes match tenant features (T1.6)' },
|
|
395
|
+
{ cmd: 'solid doctor env', why: 'Local env diagnostic — hook/manifest/token/freshness/backend (§ 650.5)' },
|
|
320
396
|
]);
|
|
321
397
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* solid doctor env — automated § 650.5 environment check.
|
|
3
|
+
*
|
|
4
|
+
* The reverse-lookup in Owners-Manual/03-AI-Systems/CLAUDE-CONTEXT-
|
|
5
|
+
* CANONICAL-TRUTH.md § 650.5 walks an operator through seven manual
|
|
6
|
+
* steps when "my tenant's context looks wrong." This module turns the
|
|
7
|
+
* first five of them into a single command that runs all checks and
|
|
8
|
+
* prints a status table. The sixth (force refresh) and seventh (re-run
|
|
9
|
+
* install) are remediations — the checks tell you which one to run.
|
|
10
|
+
*
|
|
11
|
+
* Checks implemented:
|
|
12
|
+
*
|
|
13
|
+
* 1. auth — logged in? which source (JWT / env var / ...)?
|
|
14
|
+
* 2. token — cached JWT present with expiry? expired yet?
|
|
15
|
+
* 3. manifest — .solid/manifest.json present? matches active
|
|
16
|
+
* company_id?
|
|
17
|
+
* 4. hook — SessionStart hook registered in
|
|
18
|
+
* ~/.claude/settings.json with the current command?
|
|
19
|
+
* 5. context — .claude/CLAUDE.md present in CWD? freshly
|
|
20
|
+
* regenerated (mtime within freshness window)?
|
|
21
|
+
* 6. backend — GET /api/v1/auth/me succeeds within 2s?
|
|
22
|
+
*
|
|
23
|
+
* Pure(-ish) and testable: the main entry point takes a ``DoctorEnv``
|
|
24
|
+
* dependency bundle so tests can pass fakes for cwd / home / config /
|
|
25
|
+
* apiClient. The CLI wrapper fills in the real dependencies.
|
|
26
|
+
*/
|
|
27
|
+
export type CheckStatus = 'pass' | 'fail' | 'warn' | 'skip';
|
|
28
|
+
export interface CheckResult {
|
|
29
|
+
name: string;
|
|
30
|
+
label: string;
|
|
31
|
+
status: CheckStatus;
|
|
32
|
+
detail: string;
|
|
33
|
+
hint?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DoctorEnvDeps {
|
|
36
|
+
cwd: string;
|
|
37
|
+
home: string;
|
|
38
|
+
claudeSettingsPath: string;
|
|
39
|
+
hookCommand: string;
|
|
40
|
+
config: {
|
|
41
|
+
isLoggedIn(): boolean;
|
|
42
|
+
readonly companyId: number | undefined;
|
|
43
|
+
readonly accessToken: string | undefined;
|
|
44
|
+
readonly tokenExpiresAt: Date | undefined;
|
|
45
|
+
};
|
|
46
|
+
apiGet: (p: string) => Promise<{
|
|
47
|
+
status: number;
|
|
48
|
+
}>;
|
|
49
|
+
freshnessWindowMs?: number;
|
|
50
|
+
now?: () => Date;
|
|
51
|
+
}
|
|
52
|
+
export declare function checkAuth(deps: DoctorEnvDeps): CheckResult;
|
|
53
|
+
export declare function checkToken(deps: DoctorEnvDeps): CheckResult;
|
|
54
|
+
export declare function checkManifest(deps: DoctorEnvDeps): CheckResult;
|
|
55
|
+
export declare function checkHook(deps: DoctorEnvDeps): CheckResult;
|
|
56
|
+
export declare function checkContextFreshness(deps: DoctorEnvDeps): CheckResult;
|
|
57
|
+
export declare function checkBackend(deps: DoctorEnvDeps): Promise<CheckResult>;
|
|
58
|
+
export interface DoctorEnvReport {
|
|
59
|
+
ok: boolean;
|
|
60
|
+
results: CheckResult[];
|
|
61
|
+
summary: {
|
|
62
|
+
pass: number;
|
|
63
|
+
warn: number;
|
|
64
|
+
fail: number;
|
|
65
|
+
skip: number;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export declare function runDoctorEnv(deps: DoctorEnvDeps): Promise<DoctorEnvReport>;
|
|
69
|
+
export declare function defaultDoctorEnvDeps(config: DoctorEnvDeps['config'], apiGet: DoctorEnvDeps['apiGet']): DoctorEnvDeps;
|
|
70
|
+
//# sourceMappingURL=doctor-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-env.d.ts","sourceRoot":"","sources":["../../src/lib/doctor-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,UAAU,IAAI,OAAO,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QACzC,QAAQ,CAAC,cAAc,EAAE,IAAI,GAAG,SAAS,CAAC;KAC3C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAuB1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAsD3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CA4D9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAuD1D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CA+BtE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CA+C5E;AAID,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CAa1B;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,aAAa,CAWf"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* solid doctor env — automated § 650.5 environment check.
|
|
4
|
+
*
|
|
5
|
+
* The reverse-lookup in Owners-Manual/03-AI-Systems/CLAUDE-CONTEXT-
|
|
6
|
+
* CANONICAL-TRUTH.md § 650.5 walks an operator through seven manual
|
|
7
|
+
* steps when "my tenant's context looks wrong." This module turns the
|
|
8
|
+
* first five of them into a single command that runs all checks and
|
|
9
|
+
* prints a status table. The sixth (force refresh) and seventh (re-run
|
|
10
|
+
* install) are remediations — the checks tell you which one to run.
|
|
11
|
+
*
|
|
12
|
+
* Checks implemented:
|
|
13
|
+
*
|
|
14
|
+
* 1. auth — logged in? which source (JWT / env var / ...)?
|
|
15
|
+
* 2. token — cached JWT present with expiry? expired yet?
|
|
16
|
+
* 3. manifest — .solid/manifest.json present? matches active
|
|
17
|
+
* company_id?
|
|
18
|
+
* 4. hook — SessionStart hook registered in
|
|
19
|
+
* ~/.claude/settings.json with the current command?
|
|
20
|
+
* 5. context — .claude/CLAUDE.md present in CWD? freshly
|
|
21
|
+
* regenerated (mtime within freshness window)?
|
|
22
|
+
* 6. backend — GET /api/v1/auth/me succeeds within 2s?
|
|
23
|
+
*
|
|
24
|
+
* Pure(-ish) and testable: the main entry point takes a ``DoctorEnv``
|
|
25
|
+
* dependency bundle so tests can pass fakes for cwd / home / config /
|
|
26
|
+
* apiClient. The CLI wrapper fills in the real dependencies.
|
|
27
|
+
*/
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
45
|
+
var ownKeys = function(o) {
|
|
46
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
47
|
+
var ar = [];
|
|
48
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
49
|
+
return ar;
|
|
50
|
+
};
|
|
51
|
+
return ownKeys(o);
|
|
52
|
+
};
|
|
53
|
+
return function (mod) {
|
|
54
|
+
if (mod && mod.__esModule) return mod;
|
|
55
|
+
var result = {};
|
|
56
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
57
|
+
__setModuleDefault(result, mod);
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
})();
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.checkAuth = checkAuth;
|
|
63
|
+
exports.checkToken = checkToken;
|
|
64
|
+
exports.checkManifest = checkManifest;
|
|
65
|
+
exports.checkHook = checkHook;
|
|
66
|
+
exports.checkContextFreshness = checkContextFreshness;
|
|
67
|
+
exports.checkBackend = checkBackend;
|
|
68
|
+
exports.runDoctorEnv = runDoctorEnv;
|
|
69
|
+
exports.defaultDoctorEnvDeps = defaultDoctorEnvDeps;
|
|
70
|
+
const fs = __importStar(require("fs"));
|
|
71
|
+
const os = __importStar(require("os"));
|
|
72
|
+
const path = __importStar(require("path"));
|
|
73
|
+
const DEFAULT_FRESHNESS_MS = 24 * 60 * 60 * 1000;
|
|
74
|
+
function readJsonIfPresent(p) {
|
|
75
|
+
if (!fs.existsSync(p))
|
|
76
|
+
return null;
|
|
77
|
+
try {
|
|
78
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return { __parseError: true };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// -- individual checks -----------------------------------------------------
|
|
85
|
+
function checkAuth(deps) {
|
|
86
|
+
const source = process.env.SOLID_API_KEY ? 'SOLID_API_KEY env' :
|
|
87
|
+
process.env.SOLID_TOKEN ? 'SOLID_TOKEN env' :
|
|
88
|
+
deps.config.accessToken ? 'cached access_token' :
|
|
89
|
+
null;
|
|
90
|
+
if (!deps.config.isLoggedIn() || !source) {
|
|
91
|
+
return {
|
|
92
|
+
name: 'auth',
|
|
93
|
+
label: 'authenticated',
|
|
94
|
+
status: 'fail',
|
|
95
|
+
detail: 'no credentials found (JWT or SOLID_API_KEY/SOLID_TOKEN env)',
|
|
96
|
+
hint: 'run: solid auth login',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const cid = deps.config.companyId;
|
|
100
|
+
return {
|
|
101
|
+
name: 'auth',
|
|
102
|
+
label: 'authenticated',
|
|
103
|
+
status: 'pass',
|
|
104
|
+
detail: `${source}${cid ? `, company_id=${cid}` : ''}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function checkToken(deps) {
|
|
108
|
+
if (process.env.SOLID_API_KEY || process.env.SOLID_TOKEN) {
|
|
109
|
+
return {
|
|
110
|
+
name: 'token',
|
|
111
|
+
label: 'token freshness',
|
|
112
|
+
status: 'skip',
|
|
113
|
+
detail: 'env-var auth — no local expiry to check',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const expiry = deps.config.tokenExpiresAt;
|
|
117
|
+
if (!deps.config.accessToken) {
|
|
118
|
+
return {
|
|
119
|
+
name: 'token',
|
|
120
|
+
label: 'token freshness',
|
|
121
|
+
status: 'skip',
|
|
122
|
+
detail: 'no cached access_token',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (!expiry) {
|
|
126
|
+
return {
|
|
127
|
+
name: 'token',
|
|
128
|
+
label: 'token freshness',
|
|
129
|
+
status: 'warn',
|
|
130
|
+
detail: 'cached token has no expiry record',
|
|
131
|
+
hint: 're-login to refresh: solid auth login',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const now = (deps.now ? deps.now() : new Date()).getTime();
|
|
135
|
+
const ms = expiry.getTime() - now;
|
|
136
|
+
if (ms <= 0) {
|
|
137
|
+
return {
|
|
138
|
+
name: 'token',
|
|
139
|
+
label: 'token freshness',
|
|
140
|
+
status: 'fail',
|
|
141
|
+
detail: `expired ${Math.round(-ms / 60_000)}m ago`,
|
|
142
|
+
hint: 'run: solid auth login',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const mins = Math.round(ms / 60_000);
|
|
146
|
+
if (mins < 30) {
|
|
147
|
+
return {
|
|
148
|
+
name: 'token',
|
|
149
|
+
label: 'token freshness',
|
|
150
|
+
status: 'warn',
|
|
151
|
+
detail: `expires in ${mins}m`,
|
|
152
|
+
hint: 'consider re-logging soon',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
name: 'token',
|
|
157
|
+
label: 'token freshness',
|
|
158
|
+
status: 'pass',
|
|
159
|
+
detail: `expires in ${mins}m`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function checkManifest(deps) {
|
|
163
|
+
const home = path.resolve(deps.home);
|
|
164
|
+
const cwd = path.resolve(deps.cwd);
|
|
165
|
+
if (cwd === home || cwd === path.join(home, '.claude')) {
|
|
166
|
+
return {
|
|
167
|
+
name: 'manifest',
|
|
168
|
+
label: 'tenant manifest',
|
|
169
|
+
status: 'fail',
|
|
170
|
+
detail: 'current directory is a protected root ($HOME / $HOME/.claude)',
|
|
171
|
+
hint: 'cd into a tenant project directory',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const manifestPath = path.join(cwd, '.solid', 'manifest.json');
|
|
175
|
+
if (!fs.existsSync(manifestPath)) {
|
|
176
|
+
return {
|
|
177
|
+
name: 'manifest',
|
|
178
|
+
label: 'tenant manifest',
|
|
179
|
+
status: 'warn',
|
|
180
|
+
detail: 'no .solid/manifest.json in CWD',
|
|
181
|
+
hint: 'run `solid pull` to bind this directory to a tenant',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const raw = readJsonIfPresent(manifestPath);
|
|
185
|
+
if (!raw || raw.__parseError) {
|
|
186
|
+
return {
|
|
187
|
+
name: 'manifest',
|
|
188
|
+
label: 'tenant manifest',
|
|
189
|
+
status: 'fail',
|
|
190
|
+
detail: 'manifest present but not valid JSON',
|
|
191
|
+
hint: `inspect ${manifestPath}`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const manifestId = raw.company_id;
|
|
195
|
+
const activeId = deps.config.companyId;
|
|
196
|
+
if (typeof manifestId !== 'number') {
|
|
197
|
+
return {
|
|
198
|
+
name: 'manifest',
|
|
199
|
+
label: 'tenant manifest',
|
|
200
|
+
status: 'fail',
|
|
201
|
+
detail: 'manifest missing company_id field',
|
|
202
|
+
hint: 'regenerate: rm -rf .solid/ && solid pull',
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (activeId !== undefined && activeId !== manifestId) {
|
|
206
|
+
return {
|
|
207
|
+
name: 'manifest',
|
|
208
|
+
label: 'tenant manifest',
|
|
209
|
+
status: 'fail',
|
|
210
|
+
detail: `manifest binds company_id=${manifestId} (${raw.company_name ?? '?'}) but active login is company_id=${activeId}`,
|
|
211
|
+
hint: `solid switch ${manifestId}`,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
name: 'manifest',
|
|
216
|
+
label: 'tenant manifest',
|
|
217
|
+
status: 'pass',
|
|
218
|
+
detail: `bound to company_id=${manifestId}${raw.company_name ? ` (${raw.company_name})` : ''}`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function checkHook(deps) {
|
|
222
|
+
const settingsPath = deps.claudeSettingsPath;
|
|
223
|
+
if (!fs.existsSync(settingsPath)) {
|
|
224
|
+
return {
|
|
225
|
+
name: 'hook',
|
|
226
|
+
label: 'SessionStart hook',
|
|
227
|
+
status: 'fail',
|
|
228
|
+
detail: `${settingsPath} does not exist`,
|
|
229
|
+
hint: 'run: solid install',
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const settings = readJsonIfPresent(settingsPath);
|
|
233
|
+
if (!settings || settings.__parseError) {
|
|
234
|
+
return {
|
|
235
|
+
name: 'hook',
|
|
236
|
+
label: 'SessionStart hook',
|
|
237
|
+
status: 'fail',
|
|
238
|
+
detail: `${settingsPath} is not valid JSON`,
|
|
239
|
+
hint: 'fix the file manually then re-run: solid install',
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const groups = settings.hooks?.SessionStart;
|
|
243
|
+
const commands = (groups ?? [])
|
|
244
|
+
.flatMap((g) => g.hooks ?? [])
|
|
245
|
+
.map((h) => h.command ?? '');
|
|
246
|
+
if (commands.includes(deps.hookCommand)) {
|
|
247
|
+
return {
|
|
248
|
+
name: 'hook',
|
|
249
|
+
label: 'SessionStart hook',
|
|
250
|
+
status: 'pass',
|
|
251
|
+
detail: `installed (${deps.hookCommand})`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
const looksLegacy = commands.some((c) => c.startsWith('solid context'));
|
|
255
|
+
if (looksLegacy) {
|
|
256
|
+
return {
|
|
257
|
+
name: 'hook',
|
|
258
|
+
label: 'SessionStart hook',
|
|
259
|
+
status: 'warn',
|
|
260
|
+
detail: 'a solid context hook is present but command has drifted',
|
|
261
|
+
hint: 'run: solid install (idempotent — rewrites to current command)',
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
name: 'hook',
|
|
266
|
+
label: 'SessionStart hook',
|
|
267
|
+
status: 'fail',
|
|
268
|
+
detail: 'no solid context SessionStart hook found',
|
|
269
|
+
hint: 'run: solid install',
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function checkContextFreshness(deps) {
|
|
273
|
+
const claudeMd = path.join(deps.cwd, '.claude', 'CLAUDE.md');
|
|
274
|
+
if (!fs.existsSync(claudeMd)) {
|
|
275
|
+
return {
|
|
276
|
+
name: 'context',
|
|
277
|
+
label: 'context freshness',
|
|
278
|
+
status: 'warn',
|
|
279
|
+
detail: '.claude/CLAUDE.md not present in CWD',
|
|
280
|
+
hint: 'run: solid context --claude',
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
const stat = fs.statSync(claudeMd);
|
|
284
|
+
const window = deps.freshnessWindowMs ?? DEFAULT_FRESHNESS_MS;
|
|
285
|
+
const age = (deps.now ? deps.now() : new Date()).getTime() - stat.mtimeMs;
|
|
286
|
+
if (age > window) {
|
|
287
|
+
const hours = Math.round(age / 3_600_000);
|
|
288
|
+
return {
|
|
289
|
+
name: 'context',
|
|
290
|
+
label: 'context freshness',
|
|
291
|
+
status: 'warn',
|
|
292
|
+
detail: `.claude/CLAUDE.md is ${hours}h old`,
|
|
293
|
+
hint: 'run: solid context --claude',
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
const mins = Math.max(1, Math.round(age / 60_000));
|
|
297
|
+
return {
|
|
298
|
+
name: 'context',
|
|
299
|
+
label: 'context freshness',
|
|
300
|
+
status: 'pass',
|
|
301
|
+
detail: `regenerated ${mins}m ago`,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
async function checkBackend(deps) {
|
|
305
|
+
if (!deps.config.isLoggedIn()) {
|
|
306
|
+
return {
|
|
307
|
+
name: 'backend',
|
|
308
|
+
label: 'backend reachable',
|
|
309
|
+
status: 'skip',
|
|
310
|
+
detail: 'not authenticated — auth check failed first',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const t0 = Date.now();
|
|
314
|
+
try {
|
|
315
|
+
const res = await deps.apiGet('/api/v1/auth/me');
|
|
316
|
+
const ms = Date.now() - t0;
|
|
317
|
+
if (res.status >= 500) {
|
|
318
|
+
return {
|
|
319
|
+
name: 'backend',
|
|
320
|
+
label: 'backend reachable',
|
|
321
|
+
status: 'fail',
|
|
322
|
+
detail: `status ${res.status} in ${ms}ms`,
|
|
323
|
+
hint: 'check https://api.solidnumber.com/api/v1/health',
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
if (ms > 2000) {
|
|
327
|
+
return {
|
|
328
|
+
name: 'backend',
|
|
329
|
+
label: 'backend reachable',
|
|
330
|
+
status: 'warn',
|
|
331
|
+
detail: `slow response: status ${res.status} in ${ms}ms`,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
name: 'backend',
|
|
336
|
+
label: 'backend reachable',
|
|
337
|
+
status: 'pass',
|
|
338
|
+
detail: `status ${res.status} in ${ms}ms`,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
const ms = Date.now() - t0;
|
|
343
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
344
|
+
return {
|
|
345
|
+
name: 'backend',
|
|
346
|
+
label: 'backend reachable',
|
|
347
|
+
status: 'fail',
|
|
348
|
+
detail: `request failed after ${ms}ms: ${message}`,
|
|
349
|
+
hint: 'check network / VPN / api.solidnumber.com DNS',
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async function runDoctorEnv(deps) {
|
|
354
|
+
const results = [
|
|
355
|
+
checkAuth(deps),
|
|
356
|
+
checkToken(deps),
|
|
357
|
+
checkManifest(deps),
|
|
358
|
+
checkHook(deps),
|
|
359
|
+
checkContextFreshness(deps),
|
|
360
|
+
];
|
|
361
|
+
results.push(await checkBackend(deps));
|
|
362
|
+
const summary = { pass: 0, warn: 0, fail: 0, skip: 0 };
|
|
363
|
+
for (const r of results)
|
|
364
|
+
summary[r.status]++;
|
|
365
|
+
return { ok: summary.fail === 0, results, summary };
|
|
366
|
+
}
|
|
367
|
+
function defaultDoctorEnvDeps(config, apiGet) {
|
|
368
|
+
return {
|
|
369
|
+
cwd: process.cwd(),
|
|
370
|
+
home: os.homedir(),
|
|
371
|
+
claudeSettingsPath: process.env.SOLID_CLAUDE_SETTINGS_PATH ||
|
|
372
|
+
path.join(os.homedir(), '.claude', 'settings.json'),
|
|
373
|
+
hookCommand: 'solid context --claude --raw',
|
|
374
|
+
config,
|
|
375
|
+
apiGet,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=doctor-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-env.js","sourceRoot":"","sources":["../../src/lib/doctor-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,9 +32,23 @@ export interface PullManifest {
|
|
|
32
32
|
name: string;
|
|
33
33
|
}>;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Why a directory is refused as a tenant-write target.
|
|
37
|
+
*
|
|
38
|
+
* - `home` — $HOME itself. ~/.claude/ is loaded by every
|
|
39
|
+
* Claude Code session across every project.
|
|
40
|
+
* - `home_claude` — $HOME/.claude/. Same reason, one level deeper.
|
|
41
|
+
* - `platform_repo` — anywhere under the Solid# platform monorepo
|
|
42
|
+
* (detected by walking up for docker-compose.base.yml).
|
|
43
|
+
* Role-1 territory; tenant files here contaminate
|
|
44
|
+
* every platform-team Claude Code session.
|
|
45
|
+
*/
|
|
46
|
+
export type ProtectedRootReason = 'home' | 'home_claude' | 'platform_repo';
|
|
35
47
|
export type GuardFailure = {
|
|
36
|
-
kind: '
|
|
48
|
+
kind: 'protected_root';
|
|
49
|
+
reason: ProtectedRootReason;
|
|
37
50
|
resolved: string;
|
|
51
|
+
platformRoot?: string;
|
|
38
52
|
} | {
|
|
39
53
|
kind: 'missing';
|
|
40
54
|
manifestPath: string;
|
|
@@ -51,18 +65,38 @@ export type GuardResult = {
|
|
|
51
65
|
ok: false;
|
|
52
66
|
failure: GuardFailure;
|
|
53
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Returns the reason ``baseDir`` is forbidden as a tenant-write target,
|
|
70
|
+
* or null if it's fine. Use ``isProtectedRoot`` for a bool convenience.
|
|
71
|
+
*/
|
|
72
|
+
export declare function protectedRootReason(baseDir: string): {
|
|
73
|
+
reason: ProtectedRootReason;
|
|
74
|
+
resolved: string;
|
|
75
|
+
platformRoot?: string;
|
|
76
|
+
} | null;
|
|
54
77
|
/**
|
|
55
78
|
* Hard-coded refusal set: directories that must NEVER receive tenant
|
|
56
|
-
* writes even if a manifest somehow ended up there.
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
79
|
+
* writes even if a manifest somehow ended up there. Three locations:
|
|
80
|
+
*
|
|
81
|
+
* 1. $HOME — ``~/.claude/CLAUDE.md`` is loaded into every Claude Code
|
|
82
|
+
* session across every project, so tenant data leaking there would
|
|
83
|
+
* contaminate every unrelated workflow on the machine.
|
|
84
|
+
* 2. $HOME/.claude — same reason, one level deeper.
|
|
85
|
+
* 3. The Solid# platform monorepo (and any submodule/subdir of it) —
|
|
86
|
+
* Role-1 territory. A ``.claude/CLAUDE.md`` here contaminates
|
|
87
|
+
* every platform-team session. This is what happened in the
|
|
88
|
+
* 2026-04-23 audit (§ 700.1).
|
|
89
|
+
*
|
|
90
|
+
* Hardened 2026-04-24 after the ANGL drift incident: before this, only
|
|
91
|
+
* (1) and (2) were protected; tenant writes inside /Desktop/Solid/ were
|
|
92
|
+
* only blocked by the "no manifest here" branch, which fails open if
|
|
93
|
+
* anyone places a manifest file in the platform repo.
|
|
60
94
|
*/
|
|
61
95
|
export declare function isProtectedRoot(baseDir: string): boolean;
|
|
62
96
|
/**
|
|
63
97
|
* Home-dir-only refusal (for commands like `solid pull` that CREATE the
|
|
64
98
|
* manifest and therefore can't require one yet). Prints a friendly error
|
|
65
|
-
* and exits 1 if `baseDir` resolves to
|
|
99
|
+
* and exits 1 if `baseDir` resolves to any protected root. Otherwise
|
|
66
100
|
* returns silently.
|
|
67
101
|
*/
|
|
68
102
|
export declare function refuseProtectedRoot(baseDir: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-guard.d.ts","sourceRoot":"","sources":["../../src/lib/tenant-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"tenant-guard.d.ts","sourceRoot":"","sources":["../../src/lib/tenant-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,aAAa,GAAG,eAAe,CAAC;AAE3E,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1G,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAsBzC;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcjF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzD;AAiBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAsBnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAkBtF"}
|
package/dist/lib/tenant-guard.js
CHANGED
|
@@ -47,6 +47,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47
47
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
48
|
};
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.protectedRootReason = protectedRootReason;
|
|
50
51
|
exports.isProtectedRoot = isProtectedRoot;
|
|
51
52
|
exports.refuseProtectedRoot = refuseProtectedRoot;
|
|
52
53
|
exports.checkTenantManifest = checkTenantManifest;
|
|
@@ -56,44 +57,101 @@ const os = __importStar(require("os"));
|
|
|
56
57
|
const path = __importStar(require("path"));
|
|
57
58
|
const chalk_1 = __importDefault(require("chalk"));
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
60
|
+
* Walk up from ``baseDir`` looking for the platform-monorepo marker file
|
|
61
|
+
* (``docker-compose.base.yml``). Returns the absolute root path if found,
|
|
62
|
+
* else null. Matches the discovery logic in
|
|
63
|
+
* ``solid-backend/scripts/drift_scan/__main__.py::_default_repo_root``
|
|
64
|
+
* so the guard and the drift scanner agree on which tree counts as the
|
|
65
|
+
* platform monorepo.
|
|
64
66
|
*/
|
|
65
|
-
function
|
|
67
|
+
function findPlatformMonorepoRoot(baseDir) {
|
|
68
|
+
let dir = path.resolve(baseDir);
|
|
69
|
+
while (true) {
|
|
70
|
+
if (fs.existsSync(path.join(dir, 'docker-compose.base.yml'))) {
|
|
71
|
+
return dir;
|
|
72
|
+
}
|
|
73
|
+
const parent = path.dirname(dir);
|
|
74
|
+
if (parent === dir)
|
|
75
|
+
return null;
|
|
76
|
+
dir = parent;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns the reason ``baseDir`` is forbidden as a tenant-write target,
|
|
81
|
+
* or null if it's fine. Use ``isProtectedRoot`` for a bool convenience.
|
|
82
|
+
*/
|
|
83
|
+
function protectedRootReason(baseDir) {
|
|
66
84
|
const resolved = path.resolve(baseDir);
|
|
67
85
|
const home = path.resolve(os.homedir());
|
|
68
86
|
if (resolved === home)
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
return { reason: 'home', resolved };
|
|
88
|
+
if (resolved === path.join(home, '.claude'))
|
|
89
|
+
return { reason: 'home_claude', resolved };
|
|
90
|
+
const platformRoot = findPlatformMonorepoRoot(resolved);
|
|
91
|
+
if (platformRoot !== null) {
|
|
92
|
+
// Refuse the monorepo root AND every subdirectory (incl. submodule
|
|
93
|
+
// trees like solid-backend/, solid-cli/). Running a tenant-write
|
|
94
|
+
// inside any of them is the § 700.1 pattern.
|
|
95
|
+
return { reason: 'platform_repo', resolved, platformRoot };
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Hard-coded refusal set: directories that must NEVER receive tenant
|
|
101
|
+
* writes even if a manifest somehow ended up there. Three locations:
|
|
102
|
+
*
|
|
103
|
+
* 1. $HOME — ``~/.claude/CLAUDE.md`` is loaded into every Claude Code
|
|
104
|
+
* session across every project, so tenant data leaking there would
|
|
105
|
+
* contaminate every unrelated workflow on the machine.
|
|
106
|
+
* 2. $HOME/.claude — same reason, one level deeper.
|
|
107
|
+
* 3. The Solid# platform monorepo (and any submodule/subdir of it) —
|
|
108
|
+
* Role-1 territory. A ``.claude/CLAUDE.md`` here contaminates
|
|
109
|
+
* every platform-team session. This is what happened in the
|
|
110
|
+
* 2026-04-23 audit (§ 700.1).
|
|
111
|
+
*
|
|
112
|
+
* Hardened 2026-04-24 after the ANGL drift incident: before this, only
|
|
113
|
+
* (1) and (2) were protected; tenant writes inside /Desktop/Solid/ were
|
|
114
|
+
* only blocked by the "no manifest here" branch, which fails open if
|
|
115
|
+
* anyone places a manifest file in the platform repo.
|
|
116
|
+
*/
|
|
117
|
+
function isProtectedRoot(baseDir) {
|
|
118
|
+
return protectedRootReason(baseDir) !== null;
|
|
74
119
|
}
|
|
75
120
|
/**
|
|
76
121
|
* Home-dir-only refusal (for commands like `solid pull` that CREATE the
|
|
77
122
|
* manifest and therefore can't require one yet). Prints a friendly error
|
|
78
|
-
* and exits 1 if `baseDir` resolves to
|
|
123
|
+
* and exits 1 if `baseDir` resolves to any protected root. Otherwise
|
|
79
124
|
* returns silently.
|
|
80
125
|
*/
|
|
81
126
|
function refuseProtectedRoot(baseDir) {
|
|
82
|
-
|
|
127
|
+
const refusal = protectedRootReason(baseDir);
|
|
128
|
+
if (!refusal)
|
|
83
129
|
return;
|
|
84
|
-
|
|
85
|
-
console.error(chalk_1.default.dim(` ${path.resolve(baseDir)} is global (loaded by every Claude Code session).`));
|
|
86
|
-
console.error(chalk_1.default.dim(' `cd` into a dedicated tenant project directory and try again.'));
|
|
130
|
+
printProtectedRootError(refusal);
|
|
87
131
|
process.exit(1);
|
|
88
132
|
}
|
|
133
|
+
function printProtectedRootError(refusal) {
|
|
134
|
+
if (refusal.reason === 'platform_repo') {
|
|
135
|
+
console.error(chalk_1.default.red('Refusing to write tenant data inside the Solid# platform monorepo.'));
|
|
136
|
+
console.error(chalk_1.default.dim(` ${refusal.resolved} is under ${refusal.platformRoot ?? 'the platform monorepo'} (Role-1 territory).`));
|
|
137
|
+
console.error(chalk_1.default.dim(' Tenant files here contaminate every platform-team Claude Code session.'));
|
|
138
|
+
console.error(chalk_1.default.dim(' `cd` into a dedicated tenant project directory (outside the monorepo) and try again.'));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console.error(chalk_1.default.red('Refusing to write tenant data to your home directory.'));
|
|
142
|
+
console.error(chalk_1.default.dim(` ${refusal.resolved} is global (loaded by every Claude Code session).`));
|
|
143
|
+
console.error(chalk_1.default.dim(' `cd` into a dedicated tenant project directory and try again.'));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
89
146
|
/**
|
|
90
147
|
* Pure check — returns a result, no I/O beyond reading the manifest and
|
|
91
148
|
* no process.exit. Keep this testable in isolation; the CLI wrapper below
|
|
92
149
|
* handles the user-facing error output + exit.
|
|
93
150
|
*/
|
|
94
151
|
function checkTenantManifest(baseDir, companyId) {
|
|
95
|
-
|
|
96
|
-
|
|
152
|
+
const refusal = protectedRootReason(baseDir);
|
|
153
|
+
if (refusal) {
|
|
154
|
+
return { ok: false, failure: { kind: 'protected_root', ...refusal } };
|
|
97
155
|
}
|
|
98
156
|
const manifestPath = path.join(baseDir, '.solid', 'manifest.json');
|
|
99
157
|
if (!fs.existsSync(manifestPath)) {
|
|
@@ -122,10 +180,8 @@ function requireTenantManifest(baseDir, companyId) {
|
|
|
122
180
|
const result = checkTenantManifest(baseDir, companyId);
|
|
123
181
|
if (result.ok)
|
|
124
182
|
return result.manifest;
|
|
125
|
-
if (result.failure.kind === '
|
|
126
|
-
|
|
127
|
-
console.error(chalk_1.default.dim(` ${result.failure.resolved} is global (loaded by every Claude Code session).`));
|
|
128
|
-
console.error(chalk_1.default.dim(' `cd` into a tenant project directory and try again.'));
|
|
183
|
+
if (result.failure.kind === 'protected_root') {
|
|
184
|
+
printProtectedRootError(result.failure);
|
|
129
185
|
}
|
|
130
186
|
else if (result.failure.kind === 'missing') {
|
|
131
187
|
console.error(chalk_1.default.red('Not a Solid# tenant working directory.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-guard.js","sourceRoot":"","sources":["../../src/lib/tenant-guard.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tenant-guard.js","sourceRoot":"","sources":["../../src/lib/tenant-guard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidnumber/cli",
|
|
3
|
-
"version": "1.16.
|
|
3
|
+
"version": "1.16.2",
|
|
4
4
|
"description": "AI business infrastructure from the terminal — CRM, payments, voice AI, 116 agents, 52 industry templates. solid clone plumber → instant business. Also: programmatic TS SDK via @solidnumber/cli/sdk.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|