@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.
@@ -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: 'home_dir';
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. The user's home is
57
- * the critical one — `~/.claude/CLAUDE.md` is loaded into every Claude
58
- * Code session across every project, so tenant data leaking there would
59
- * contaminate every unrelated workflow on the machine.
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 $HOME or $HOME/.claude/. Otherwise
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,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;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;AAEzC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAqBnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAoBtF"}
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"}
@@ -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
- * Hard-coded refusal set: directories that must NEVER receive tenant
60
- * writes even if a manifest somehow ended up there. The user's home is
61
- * the critical one — `~/.claude/CLAUDE.md` is loaded into every Claude
62
- * Code session across every project, so tenant data leaking there would
63
- * contaminate every unrelated workflow on the machine.
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 isProtectedRoot(baseDir) {
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 true;
70
- const claudeUnderHome = path.join(home, '.claude');
71
- if (resolved === claudeUnderHome)
72
- return true;
73
- return false;
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 $HOME or $HOME/.claude/. Otherwise
123
+ * and exits 1 if `baseDir` resolves to any protected root. Otherwise
79
124
  * returns silently.
80
125
  */
81
126
  function refuseProtectedRoot(baseDir) {
82
- if (!isProtectedRoot(baseDir))
127
+ const refusal = protectedRootReason(baseDir);
128
+ if (!refusal)
83
129
  return;
84
- console.error(chalk_1.default.red('Refusing to write tenant data to your home directory.'));
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
- if (isProtectedRoot(baseDir)) {
96
- return { ok: false, failure: { kind: 'home_dir', resolved: path.resolve(baseDir) } };
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 === 'home_dir') {
126
- console.error(chalk_1.default.red('Refusing to write tenant data to your home directory.'));
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":"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"}
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.1",
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": {