@prism-d1/cli 1.0.0

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.
Files changed (85) hide show
  1. package/dist/bin/prism-cli.d.ts +3 -0
  2. package/dist/bin/prism-cli.d.ts.map +1 -0
  3. package/dist/bin/prism-cli.js +10 -0
  4. package/dist/bin/prism-cli.js.map +1 -0
  5. package/dist/src/commands/assessment/deploy-cdk.d.ts +22 -0
  6. package/dist/src/commands/assessment/deploy-cdk.d.ts.map +1 -0
  7. package/dist/src/commands/assessment/deploy-cdk.js +59 -0
  8. package/dist/src/commands/assessment/deploy-cdk.js.map +1 -0
  9. package/dist/src/commands/assessment/interview-agent.d.ts +71 -0
  10. package/dist/src/commands/assessment/interview-agent.d.ts.map +1 -0
  11. package/dist/src/commands/assessment/interview-agent.js +648 -0
  12. package/dist/src/commands/assessment/interview-agent.js.map +1 -0
  13. package/dist/src/commands/assessment/run.d.ts +20 -0
  14. package/dist/src/commands/assessment/run.d.ts.map +1 -0
  15. package/dist/src/commands/assessment/run.js +23 -0
  16. package/dist/src/commands/assessment/run.js.map +1 -0
  17. package/dist/src/commands/assessment/web.d.ts +15 -0
  18. package/dist/src/commands/assessment/web.d.ts.map +1 -0
  19. package/dist/src/commands/assessment/web.js +1393 -0
  20. package/dist/src/commands/assessment/web.js.map +1 -0
  21. package/dist/src/commands/bootstrapper/install-eval-harness.d.ts +15 -0
  22. package/dist/src/commands/bootstrapper/install-eval-harness.d.ts.map +1 -0
  23. package/dist/src/commands/bootstrapper/install-eval-harness.js +99 -0
  24. package/dist/src/commands/bootstrapper/install-eval-harness.js.map +1 -0
  25. package/dist/src/commands/bootstrapper/install-git-hooks.d.ts +15 -0
  26. package/dist/src/commands/bootstrapper/install-git-hooks.d.ts.map +1 -0
  27. package/dist/src/commands/bootstrapper/install-git-hooks.js +141 -0
  28. package/dist/src/commands/bootstrapper/install-git-hooks.js.map +1 -0
  29. package/dist/src/commands/bootstrapper/setup-github-oidc.d.ts +6 -0
  30. package/dist/src/commands/bootstrapper/setup-github-oidc.d.ts.map +1 -0
  31. package/dist/src/commands/bootstrapper/setup-github-oidc.js +157 -0
  32. package/dist/src/commands/bootstrapper/setup-github-oidc.js.map +1 -0
  33. package/dist/src/commands/securityagent/setup.d.ts +14 -0
  34. package/dist/src/commands/securityagent/setup.d.ts.map +1 -0
  35. package/dist/src/commands/securityagent/setup.js +113 -0
  36. package/dist/src/commands/securityagent/setup.js.map +1 -0
  37. package/dist/src/commands/workshop/deploy-infra.d.ts +13 -0
  38. package/dist/src/commands/workshop/deploy-infra.d.ts.map +1 -0
  39. package/dist/src/commands/workshop/deploy-infra.js +73 -0
  40. package/dist/src/commands/workshop/deploy-infra.js.map +1 -0
  41. package/dist/src/commands/workshop/generate-demo-data.d.ts +16 -0
  42. package/dist/src/commands/workshop/generate-demo-data.d.ts.map +1 -0
  43. package/dist/src/commands/workshop/generate-demo-data.js +362 -0
  44. package/dist/src/commands/workshop/generate-demo-data.js.map +1 -0
  45. package/dist/src/commands/workshop/perform-pen-test.d.ts +14 -0
  46. package/dist/src/commands/workshop/perform-pen-test.d.ts.map +1 -0
  47. package/dist/src/commands/workshop/perform-pen-test.js +301 -0
  48. package/dist/src/commands/workshop/perform-pen-test.js.map +1 -0
  49. package/dist/src/commands/workshop/run-agent.d.ts +20 -0
  50. package/dist/src/commands/workshop/run-agent.d.ts.map +1 -0
  51. package/dist/src/commands/workshop/run-agent.js +89 -0
  52. package/dist/src/commands/workshop/run-agent.js.map +1 -0
  53. package/dist/src/commands/workshop/verify-setup.d.ts +14 -0
  54. package/dist/src/commands/workshop/verify-setup.d.ts.map +1 -0
  55. package/dist/src/commands/workshop/verify-setup.js +493 -0
  56. package/dist/src/commands/workshop/verify-setup.js.map +1 -0
  57. package/dist/src/index.d.ts +13 -0
  58. package/dist/src/index.d.ts.map +1 -0
  59. package/dist/src/index.js +44 -0
  60. package/dist/src/index.js.map +1 -0
  61. package/dist/src/scanner/categories.d.ts +8 -0
  62. package/dist/src/scanner/categories.d.ts.map +1 -0
  63. package/dist/src/scanner/categories.js +322 -0
  64. package/dist/src/scanner/categories.js.map +1 -0
  65. package/dist/src/scanner/index.d.ts +16 -0
  66. package/dist/src/scanner/index.d.ts.map +1 -0
  67. package/dist/src/scanner/index.js +59 -0
  68. package/dist/src/scanner/index.js.map +1 -0
  69. package/dist/src/scanner/reporter.d.ts +3 -0
  70. package/dist/src/scanner/reporter.d.ts.map +1 -0
  71. package/dist/src/scanner/reporter.js +102 -0
  72. package/dist/src/scanner/reporter.js.map +1 -0
  73. package/dist/src/scanner/scoring.d.ts +7 -0
  74. package/dist/src/scanner/scoring.d.ts.map +1 -0
  75. package/dist/src/scanner/scoring.js +77 -0
  76. package/dist/src/scanner/scoring.js.map +1 -0
  77. package/dist/src/scanner/types.d.ts +41 -0
  78. package/dist/src/scanner/types.d.ts.map +1 -0
  79. package/dist/src/scanner/types.js +2 -0
  80. package/dist/src/scanner/types.js.map +1 -0
  81. package/dist/src/scanner/utils.d.ts +16 -0
  82. package/dist/src/scanner/utils.d.ts.map +1 -0
  83. package/dist/src/scanner/utils.js +54 -0
  84. package/dist/src/scanner/utils.js.map +1 -0
  85. package/package.json +39 -0
@@ -0,0 +1,493 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync, writeFileSync, unlinkSync } from 'node:fs';
3
+ import { resolve, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { createInterface } from 'node:readline';
6
+ import { platform } from 'node:os';
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ const IS_MAC = platform() === 'darwin';
9
+ // --- Colors ---
10
+ const GREEN = '\x1b[0;32m';
11
+ const RED = '\x1b[0;31m';
12
+ const YELLOW = '\x1b[0;33m';
13
+ const BOLD = '\x1b[1m';
14
+ const NC = '\x1b[0m';
15
+ let PASS = 0;
16
+ let FAIL = 0;
17
+ let WARN = 0;
18
+ function pass(msg) {
19
+ console.log(` ${GREEN}[PASS]${NC} ${msg}`);
20
+ PASS++;
21
+ }
22
+ function fail(msg, fix) {
23
+ console.log(` ${RED}[FAIL]${NC} ${msg}`);
24
+ console.log(` Fix: ${fix}`);
25
+ FAIL++;
26
+ }
27
+ function warn(msg) {
28
+ console.log(` ${YELLOW}[WARN]${NC} ${msg}`);
29
+ WARN++;
30
+ }
31
+ function heading(text) {
32
+ console.log(`\n${BOLD}${text}${NC}`);
33
+ }
34
+ function run(cmd) {
35
+ try {
36
+ const stdout = execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
37
+ return { ok: true, stdout, stderr: '' };
38
+ }
39
+ catch (err) {
40
+ return { ok: false, stdout: '', stderr: (err.stderr || err.message || '').trim() };
41
+ }
42
+ }
43
+ function detectLinuxPkgMgr() {
44
+ if (IS_MAC)
45
+ return null;
46
+ for (const mgr of ['apt-get', 'dnf', 'yum', 'pacman', 'zypper']) {
47
+ if (run(`command -v ${mgr}`).ok)
48
+ return mgr;
49
+ }
50
+ return null;
51
+ }
52
+ const LINUX_PKG_MGR = detectLinuxPkgMgr();
53
+ /**
54
+ * Returns the install command for a package on the current Linux distro.
55
+ * Package names can differ across distros — pass a map of overrides.
56
+ */
57
+ function linuxInstallCmd(pkg, overrides) {
58
+ const name = overrides?.[LINUX_PKG_MGR] ?? pkg;
59
+ switch (LINUX_PKG_MGR) {
60
+ case 'apt-get': return `sudo apt-get update && sudo apt-get install -y ${name}`;
61
+ case 'dnf': return `sudo dnf install -y ${name}`;
62
+ case 'yum': return `sudo yum install -y ${name}`;
63
+ case 'pacman': return `sudo pacman -S --noconfirm ${name}`;
64
+ case 'zypper': return `sudo zypper install -y ${name}`;
65
+ default: return `Install '${pkg}' using your system package manager`;
66
+ }
67
+ }
68
+ /** Returns the platform-appropriate install command for a package. */
69
+ function installCmd(pkg, opts) {
70
+ if (IS_MAC)
71
+ return `brew install ${opts?.brew ?? pkg}`;
72
+ return linuxInstallCmd(pkg, opts?.overrides);
73
+ }
74
+ function runInstall(cmd) {
75
+ try {
76
+ execSync(cmd, { encoding: 'utf8', stdio: 'inherit' });
77
+ return true;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ function commandExists(cmd) {
84
+ return run(`command -v ${cmd}`).ok;
85
+ }
86
+ function prompt(question) {
87
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
88
+ return new Promise((resolve) => {
89
+ rl.question(question, (answer) => {
90
+ rl.close();
91
+ resolve(answer.trim().toLowerCase());
92
+ });
93
+ });
94
+ }
95
+ async function offerInstall(name, installCmd) {
96
+ const answer = await prompt(` Install ${name} now? [Y/n] `);
97
+ if (answer === '' || answer === 'y' || answer === 'yes') {
98
+ console.log(` Running: ${installCmd}`);
99
+ if (runInstall(installCmd)) {
100
+ console.log(` ${GREEN}✓ ${name} installed successfully.${NC}`);
101
+ return true;
102
+ }
103
+ else {
104
+ console.log(` ${RED}✗ Installation failed. Try manually: ${installCmd}${NC}`);
105
+ return false;
106
+ }
107
+ }
108
+ return false;
109
+ }
110
+ // -------------------------------------------------------------------
111
+ // Checks
112
+ // -------------------------------------------------------------------
113
+ async function checkAwsCli(verifyOnly = false) {
114
+ heading('1. AWS CLI & Credentials');
115
+ if (commandExists('aws') || commandExists('/usr/local/bin/aws')) {
116
+ if (!commandExists('aws') && commandExists('/usr/local/bin/aws')) {
117
+ warn('AWS CLI found at /usr/local/bin/aws but not in PATH. Add to your shell profile:');
118
+ console.log(' export PATH="/usr/local/bin:$PATH"');
119
+ }
120
+ const { stdout } = run(`${commandExists('aws') ? 'aws' : '/usr/local/bin/aws'} --version 2>&1`);
121
+ const versionLine = stdout.split('\n')[0];
122
+ const installedVersion = versionLine.match(/aws-cli\/([\d.]+)/)?.[1] ?? '';
123
+ const latestCheck = run('curl -sf https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst | head -5');
124
+ const latestVersion = latestCheck.ok ? (latestCheck.stdout.match(/^(\d+\.\d+\.\d+)/m)?.[1] ?? '') : '';
125
+ if (latestVersion && installedVersion && installedVersion !== latestVersion) {
126
+ warn(`AWS CLI ${installedVersion} installed — latest is ${latestVersion}. Security Agent commands may not work on older versions.`);
127
+ }
128
+ else {
129
+ pass(`AWS CLI installed (${versionLine.split(' ')[0]}${latestVersion ? ' — latest' : ''})`);
130
+ }
131
+ }
132
+ else {
133
+ fail('AWS CLI not found', 'Install from https://aws.amazon.com/cli/');
134
+ if (!verifyOnly) {
135
+ if (IS_MAC) {
136
+ await offerInstall('AWS CLI', 'curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o /tmp/AWSCLIV2.pkg && sudo installer -pkg /tmp/AWSCLIV2.pkg -target /');
137
+ }
138
+ else {
139
+ await offerInstall('AWS CLI', 'curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip && unzip -qo /tmp/awscliv2.zip -d /tmp && sudo /tmp/aws/install --update');
140
+ }
141
+ }
142
+ }
143
+ const sts = run('aws sts get-caller-identity --query Account --output text');
144
+ if (sts.ok) {
145
+ pass(`AWS credentials configured (account: ${sts.stdout})`);
146
+ }
147
+ else {
148
+ fail('AWS credentials not configured or expired', "Run 'aws configure' or set AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY");
149
+ }
150
+ }
151
+ async function checkBedrock() {
152
+ heading('2. Amazon Bedrock Model Access');
153
+ const requiredModels = [
154
+ { id: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0', name: 'Claude Sonnet 4.5 (Claude Code)' },
155
+ { id: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', name: 'Claude Haiku 4.5 (eval gates)' },
156
+ ];
157
+ const bodyFile = '/tmp/prism-bedrock-request.json';
158
+ const body = JSON.stringify({
159
+ anthropic_version: 'bedrock-2023-05-31',
160
+ max_tokens: 10,
161
+ messages: [{ role: 'user', content: 'Say OK' }],
162
+ });
163
+ writeFileSync(bodyFile, body);
164
+ for (const model of requiredModels) {
165
+ const invoke = run(`aws bedrock-runtime invoke-model ` +
166
+ `--model-id "${model.id}" ` +
167
+ `--content-type "application/json" ` +
168
+ `--accept "application/json" ` +
169
+ `--body "fileb://${bodyFile}" ` +
170
+ `/tmp/prism-bedrock-test.json`);
171
+ if (invoke.ok) {
172
+ pass(`${model.name} — invocation works`);
173
+ run('rm -f /tmp/prism-bedrock-test.json');
174
+ }
175
+ else {
176
+ const shortError = invoke.stderr.split('\n')[0] || 'unknown error';
177
+ fail(`${model.name} — cannot invoke (${model.id})`, `Enable model access in AWS Console > Bedrock > Model access. Error: ${shortError}`);
178
+ }
179
+ }
180
+ try {
181
+ unlinkSync(bodyFile);
182
+ }
183
+ catch { /* ignore */ }
184
+ }
185
+ async function checkClaudeCode(verifyOnly = false) {
186
+ heading('3. Claude Code CLI');
187
+ if (commandExists('claude')) {
188
+ const { stdout } = run('claude --version');
189
+ pass(`Claude Code CLI installed (${stdout || 'version unknown'})`);
190
+ }
191
+ else {
192
+ fail('Claude Code CLI not found', 'Run: curl -fsSL https://claude.ai/install.sh | bash');
193
+ if (!verifyOnly) {
194
+ await offerInstall('Claude Code CLI', 'curl -fsSL https://claude.ai/install.sh | bash');
195
+ }
196
+ }
197
+ if (process.env.CLAUDE_CODE_USE_BEDROCK === '1') {
198
+ pass('CLAUDE_CODE_USE_BEDROCK=1 is set');
199
+ }
200
+ else {
201
+ fail('CLAUDE_CODE_USE_BEDROCK not set', 'Run: export CLAUDE_CODE_USE_BEDROCK=1');
202
+ }
203
+ if (process.env.AWS_REGION) {
204
+ pass(`AWS_REGION is set (${process.env.AWS_REGION})`);
205
+ }
206
+ else {
207
+ warn('AWS_REGION not set -- Claude Code will use default region. Set with: export AWS_REGION=us-west-2');
208
+ }
209
+ }
210
+ async function checkKiro() {
211
+ heading('4. Kiro IDE');
212
+ if (commandExists('kiro')) {
213
+ const { stdout } = run('kiro --version');
214
+ pass(`Kiro CLI found (${stdout || 'version unknown'})`);
215
+ }
216
+ else {
217
+ warn('Kiro CLI not found in PATH -- verify Kiro is installed from https://kiro.dev');
218
+ }
219
+ }
220
+ async function checkGit(verifyOnly = false) {
221
+ heading('5. Git');
222
+ if (commandExists('git')) {
223
+ const { stdout } = run('git --version');
224
+ const match = stdout.match(/(\d+)\.(\d+)/);
225
+ if (match) {
226
+ const [, major, minor] = match.map(Number);
227
+ if (major >= 2 && minor >= 34) {
228
+ pass(`${stdout} (>= 2.34 required for trailer support)`);
229
+ }
230
+ else {
231
+ const cmd = installCmd('git');
232
+ fail(`Git version too old (${stdout})`, `Need git >= 2.34. Run: ${cmd}`);
233
+ if (!verifyOnly) {
234
+ await offerInstall('Git (latest)', cmd);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ else {
240
+ const cmd = installCmd('git');
241
+ fail('Git not found', `Run: ${cmd}`);
242
+ if (!verifyOnly) {
243
+ await offerInstall('Git', cmd);
244
+ }
245
+ }
246
+ }
247
+ async function checkNode(verifyOnly = false) {
248
+ heading('6. Node.js & npm');
249
+ if (commandExists('node')) {
250
+ const { stdout } = run('node --version');
251
+ const major = parseInt(stdout.replace('v', ''), 10);
252
+ if (major >= 20) {
253
+ pass(`Node.js ${stdout} (>= 20 required)`);
254
+ }
255
+ else {
256
+ fail(`Node.js too old (${stdout})`, 'Need Node.js >= 20. Use nvm: nvm install 20');
257
+ if (!verifyOnly && commandExists('nvm')) {
258
+ await offerInstall('Node.js 20 via nvm', 'nvm install 20');
259
+ }
260
+ }
261
+ }
262
+ else {
263
+ fail('Node.js not found', 'Install from https://nodejs.org/ or use nvm');
264
+ if (!verifyOnly) {
265
+ if (commandExists('nvm')) {
266
+ await offerInstall('Node.js 20 via nvm', 'nvm install 20');
267
+ }
268
+ else {
269
+ const nvmInstall = 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash';
270
+ console.log(` Tip: Install nvm first, then Node.js:`);
271
+ console.log(` ${nvmInstall}`);
272
+ console.log(` nvm install 20`);
273
+ }
274
+ }
275
+ }
276
+ if (commandExists('npm')) {
277
+ const { stdout } = run('npm --version');
278
+ pass(`npm ${stdout}`);
279
+ }
280
+ else {
281
+ fail('npm not found', 'Should come with Node.js -- reinstall Node');
282
+ }
283
+ }
284
+ async function checkPython(verifyOnly = false) {
285
+ heading('7. Python');
286
+ const python = commandExists('python3') ? 'python3' : commandExists('python3.11') ? 'python3.11' : commandExists('python') ? 'python' : null;
287
+ if (!python) {
288
+ const cmd = installCmd('python3', {
289
+ brew: 'python@3.11',
290
+ overrides: {
291
+ 'apt-get': 'python3.11 python3.11-venv',
292
+ dnf: 'python3.11',
293
+ yum: 'python3.11',
294
+ pacman: 'python',
295
+ zypper: 'python311',
296
+ },
297
+ });
298
+ fail('Python not found', `Install Python >= 3.11: ${cmd}`);
299
+ if (!verifyOnly) {
300
+ await offerInstall('Python 3.11', cmd);
301
+ }
302
+ return;
303
+ }
304
+ const { stdout } = run(`${python} --version`);
305
+ const match = stdout.match(/(\d+)\.(\d+)/);
306
+ if (match) {
307
+ const [, major, minor] = match.map(Number);
308
+ if (major >= 3 && minor >= 11) {
309
+ pass(`${stdout} (>= 3.11 required)`);
310
+ }
311
+ else if (commandExists('python3.11')) {
312
+ const { stdout: v311 } = run('python3.11 --version');
313
+ pass(`${v311} found as python3.11 (default '${python}' is ${stdout})`);
314
+ }
315
+ else {
316
+ const cmd = installCmd('python3', {
317
+ brew: 'python@3.11',
318
+ overrides: {
319
+ 'apt-get': 'python3.11 python3.11-venv',
320
+ dnf: 'python3.11',
321
+ yum: 'python3.11',
322
+ pacman: 'python',
323
+ zypper: 'python311',
324
+ },
325
+ });
326
+ fail(`Python too old (${stdout})`, `Need Python >= 3.11. Run: ${cmd}`);
327
+ if (!verifyOnly) {
328
+ await offerInstall('Python 3.11', cmd);
329
+ }
330
+ }
331
+ }
332
+ else {
333
+ fail(`Could not determine Python version (${stdout})`, 'Ensure python3 --version works');
334
+ }
335
+ const pipBin = commandExists('pip3') ? 'pip3' : commandExists('pip3.11') ? 'pip3.11' : commandExists('pip') ? 'pip' : null;
336
+ if (pipBin) {
337
+ const { stdout: pipVersion } = run(`${pipBin} --version`);
338
+ pass(`pip installed (${pipVersion.split(' ').slice(0, 2).join(' ')})`);
339
+ }
340
+ else {
341
+ fail('pip not found', 'Install pip: python3.11 -m ensurepip --upgrade');
342
+ if (!verifyOnly) {
343
+ await offerInstall('pip', `${python} -m ensurepip --upgrade`);
344
+ }
345
+ }
346
+ }
347
+ async function checkUtilities(verifyOnly = false) {
348
+ heading('8. Utilities');
349
+ if (commandExists('jq')) {
350
+ const { stdout } = run('jq --version');
351
+ pass(`jq installed (${stdout})`);
352
+ }
353
+ else {
354
+ const cmd = installCmd('jq');
355
+ fail('jq not found', `Run: ${cmd}`);
356
+ if (!verifyOnly) {
357
+ await offerInstall('jq', cmd);
358
+ }
359
+ }
360
+ if (commandExists('curl')) {
361
+ pass('curl installed');
362
+ }
363
+ else {
364
+ const cmd = installCmd('curl');
365
+ fail('curl not found', `Run: ${cmd}`);
366
+ if (!verifyOnly) {
367
+ await offerInstall('curl', cmd);
368
+ }
369
+ }
370
+ if (commandExists('bc')) {
371
+ pass('bc installed');
372
+ }
373
+ else {
374
+ const cmd = installCmd('bc');
375
+ fail('bc not found', `Run: ${cmd}`);
376
+ if (!verifyOnly) {
377
+ await offerInstall('bc', cmd);
378
+ }
379
+ }
380
+ if (commandExists('gh')) {
381
+ const { stdout } = run('gh --version');
382
+ const version = stdout.split('\n')[0] || 'version unknown';
383
+ pass(`GitHub CLI installed (${version})`);
384
+ }
385
+ else {
386
+ let cmd;
387
+ if (IS_MAC) {
388
+ cmd = 'brew install gh';
389
+ }
390
+ else if (LINUX_PKG_MGR === 'dnf') {
391
+ cmd = "sudo dnf install 'dnf-command(config-manager)' && sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo && sudo dnf install gh --repo gh-cli";
392
+ }
393
+ else if (LINUX_PKG_MGR === 'yum') {
394
+ cmd = 'sudo yum-config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo && sudo yum install gh --repo gh-cli';
395
+ }
396
+ else {
397
+ cmd = installCmd('gh');
398
+ }
399
+ fail('GitHub CLI (gh) not found', `Run: ${cmd}`);
400
+ if (!verifyOnly) {
401
+ await offerInstall('GitHub CLI', cmd);
402
+ }
403
+ }
404
+ }
405
+ async function checkCodeburn(verifyOnly = false) {
406
+ heading('9. codeburn (AI code attribution tracker)');
407
+ if (commandExists('codeburn')) {
408
+ const { stdout } = run('codeburn --version');
409
+ pass(`codeburn installed (${stdout || 'version unknown'})`);
410
+ }
411
+ else {
412
+ const isMac = process.platform === 'darwin';
413
+ const installCmd = isMac ? 'npm install -g codeburn' : 'npm install -g codeburn';
414
+ fail('codeburn not found', `Run: ${installCmd}`);
415
+ if (!verifyOnly) {
416
+ await offerInstall('codeburn', installCmd);
417
+ }
418
+ }
419
+ }
420
+ async function checkSampleApp(verifyOnly = false) {
421
+ heading('10. Sample App Dependencies');
422
+ const sampleAppDir = resolve(__dirname, '../../../../sample-app');
423
+ if (existsSync(resolve(sampleAppDir, 'node_modules'))) {
424
+ pass('Sample app dependencies installed');
425
+ }
426
+ else {
427
+ warn('Sample app dependencies not installed.');
428
+ if (!verifyOnly) {
429
+ await offerInstall('sample app dependencies', `npm install --prefix ${sampleAppDir}`);
430
+ }
431
+ }
432
+ }
433
+ // -------------------------------------------------------------------
434
+ // Main
435
+ // -------------------------------------------------------------------
436
+ export default {
437
+ description: 'Verify environment prerequisites for the workshop',
438
+ options: [
439
+ { flags: '--skip-aws', description: 'Skip AWS credential and Bedrock checks (for offline prep)' },
440
+ { flags: '--skip-kiro', description: 'Skip Kiro IDE check' },
441
+ { flags: '--verify-only', description: 'Only verify, don\'t install anything' },
442
+ ],
443
+ async action(opts) {
444
+ await verifySetup(opts);
445
+ },
446
+ };
447
+ async function verifySetup(opts = {}) {
448
+ const VERIFY_ONLY = opts.verifyOnly ?? false;
449
+ console.log('');
450
+ console.log(`${BOLD}================================================${NC}`);
451
+ console.log(`${BOLD} PRISM D1 Velocity - Environment Verification ${NC}`);
452
+ console.log(`${BOLD}================================================${NC}`);
453
+ if (VERIFY_ONLY) {
454
+ console.log(` ${YELLOW}(verify-only mode — skipping install prompts)${NC}`);
455
+ }
456
+ if (opts.skipAws) {
457
+ console.log(` ${YELLOW}(skipping AWS / Bedrock checks)${NC}`);
458
+ }
459
+ if (opts.skipKiro) {
460
+ console.log(` ${YELLOW}(skipping Kiro IDE check)${NC}`);
461
+ }
462
+ if (!opts.skipAws) {
463
+ await checkAwsCli(VERIFY_ONLY);
464
+ await checkBedrock();
465
+ }
466
+ await checkClaudeCode(VERIFY_ONLY);
467
+ if (!opts.skipKiro) {
468
+ await checkKiro();
469
+ }
470
+ await checkGit(VERIFY_ONLY);
471
+ await checkNode(VERIFY_ONLY);
472
+ await checkPython(VERIFY_ONLY);
473
+ await checkUtilities(VERIFY_ONLY);
474
+ await checkCodeburn(VERIFY_ONLY);
475
+ await checkSampleApp(VERIFY_ONLY);
476
+ console.log('');
477
+ console.log(`${BOLD}================================================${NC}`);
478
+ console.log(` ${GREEN}PASS: ${PASS}${NC} ${RED}FAIL: ${FAIL}${NC} ${YELLOW}WARN: ${WARN}${NC}`);
479
+ console.log(`${BOLD}================================================${NC}`);
480
+ console.log('');
481
+ if (FAIL > 0) {
482
+ console.log(`${RED}${BOLD}SETUP INCOMPLETE.${NC} Fix the failures above before proceeding.`);
483
+ console.log('Ask your instructor for help if you\'re stuck.');
484
+ process.exit(1);
485
+ }
486
+ else if (WARN > 0) {
487
+ console.log(`${YELLOW}${BOLD}SETUP OK WITH WARNINGS.${NC} Review the warnings above -- some modules may not work.`);
488
+ }
489
+ else {
490
+ console.log(`${GREEN}${BOLD}ALL CHECKS PASSED.${NC} You're ready for the workshop!`);
491
+ }
492
+ }
493
+ //# sourceMappingURL=verify-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-setup.js","sourceRoot":"","sources":["../../../../src/commands/workshop/verify-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auto-discovers and registers commands from the filesystem.
3
+ *
4
+ * Structure:
5
+ * commands/
6
+ * <category>/ → becomes `prism-cli <category>`
7
+ * <command>.js → becomes `prism-cli <category> <command>`
8
+ *
9
+ * Each command file must export a default object:
10
+ * { description: string, options?: [{flags, description, default?}], action: (options) => void }
11
+ */
12
+ export declare function registerCommands(program: any): Promise<void>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,GAAG,iBAgClD"}
@@ -0,0 +1,44 @@
1
+ import { readdirSync, statSync } from 'node:fs';
2
+ import { resolve, dirname, basename } from 'node:path';
3
+ import { fileURLToPath, pathToFileURL } from 'node:url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const commandsDir = resolve(__dirname, 'commands');
6
+ /**
7
+ * Auto-discovers and registers commands from the filesystem.
8
+ *
9
+ * Structure:
10
+ * commands/
11
+ * <category>/ → becomes `prism-cli <category>`
12
+ * <command>.js → becomes `prism-cli <category> <command>`
13
+ *
14
+ * Each command file must export a default object:
15
+ * { description: string, options?: [{flags, description, default?}], action: (options) => void }
16
+ */
17
+ export async function registerCommands(program) {
18
+ const categories = readdirSync(commandsDir).filter((entry) => {
19
+ return statSync(resolve(commandsDir, entry)).isDirectory();
20
+ });
21
+ for (const category of categories) {
22
+ const categoryDir = resolve(commandsDir, category);
23
+ const categoryCmd = program
24
+ .command(category)
25
+ .description(`${category} commands`);
26
+ const files = readdirSync(categoryDir).filter((f) => f.endsWith('.ts'));
27
+ for (const file of files) {
28
+ const commandName = basename(file, '.ts');
29
+ const modulePath = pathToFileURL(resolve(categoryDir, file)).href;
30
+ const mod = await import(modulePath);
31
+ const def = mod.default || mod;
32
+ const sub = categoryCmd
33
+ .command(commandName)
34
+ .description(def.description || commandName);
35
+ if (def.options) {
36
+ for (const opt of def.options) {
37
+ sub.option(opt.flags, opt.description, opt.default);
38
+ }
39
+ }
40
+ sub.action((opts) => def.action(opts));
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAY;IACjD,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO;aACxB,OAAO,CAAC,QAAQ,CAAC;aACjB,WAAW,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;YAE/B,MAAM,GAAG,GAAG,WAAW;iBACpB,OAAO,CAAC,WAAW,CAAC;iBACpB,WAAW,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;YAE/C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CategoryScore, ScanConfig } from './types.js';
2
+ type ScanFn = (repoPath: string, config: ScanConfig) => Promise<CategoryScore>;
3
+ export declare const scanners: {
4
+ name: string;
5
+ scan: ScanFn;
6
+ }[];
7
+ export {};
8
+ //# sourceMappingURL=categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../src/scanner/categories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAY,UAAU,EAAE,MAAM,YAAY,CAAC;AAOtE,KAAK,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AA8V/E,eAAO,MAAM,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAapD,CAAC"}