@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,113 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const INFRA_DIR = resolve(__dirname, '../../../../infra');
7
+ function runCapture(cmd) {
8
+ try {
9
+ return { ok: true, stdout: execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], env: { ...process.env, AWS_PAGER: '' } }).trim() };
10
+ }
11
+ catch (err) {
12
+ return { ok: false, stdout: (err.stdout || err.stderr || err.message || '').trim() };
13
+ }
14
+ }
15
+ function cleanEnv() {
16
+ const env = { ...process.env };
17
+ Object.keys(env).filter(k => k.startsWith('npm_')).forEach(k => delete env[k]);
18
+ return env;
19
+ }
20
+ function run(cmd, opts = {}) {
21
+ try {
22
+ execSync(cmd, { encoding: 'utf8', stdio: 'inherit', cwd: INFRA_DIR, env: cleanEnv(), ...opts });
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ export default {
30
+ description: 'Deploy Security Agent infrastructure and create web console application',
31
+ options: [
32
+ { flags: '--profile <name>', description: 'AWS CLI profile', default: process.env.AWS_PROFILE || '' },
33
+ { flags: '--region <region>', description: 'AWS region', default: 'us-west-2' },
34
+ ],
35
+ action(options) {
36
+ const { profile, region } = options;
37
+ const env = `${profile ? `--profile ${profile} ` : ''}--region ${region}`;
38
+ // Deploy CDK with security agent enabled
39
+ console.log('🚀 Deploying Security Agent infrastructure...');
40
+ if (!existsSync(resolve(INFRA_DIR, 'node_modules'))) {
41
+ console.log(' Installing CDK dependencies...');
42
+ if (!run('npm install')) {
43
+ console.error('npm install failed.');
44
+ process.exit(1);
45
+ }
46
+ }
47
+ const cdkBin = resolve(INFRA_DIR, 'node_modules/.bin/cdk');
48
+ const account = runCapture(`aws sts get-caller-identity ${profile ? `--profile ${profile} ` : ''}--query Account --output text`);
49
+ if (!account.ok) {
50
+ console.error('Failed to get account ID. Check your AWS credentials.');
51
+ process.exit(1);
52
+ }
53
+ const cdkEnv = {
54
+ ...cleanEnv(),
55
+ CDK_DEFAULT_ACCOUNT: account.stdout,
56
+ CDK_DEFAULT_REGION: region,
57
+ AWS_DEFAULT_REGION: region,
58
+ };
59
+ if (!run(`${cdkBin} deploy --all --require-approval never --context enableSecurityAgent=true`, { env: cdkEnv })) {
60
+ console.error('CDK deploy failed.');
61
+ process.exit(1);
62
+ }
63
+ console.log(' ✅ Infrastructure deployed\n');
64
+ // Get agent space ID
65
+ console.log('🔍 Looking up agent space...');
66
+ const spaces = runCapture(`aws securityagent list-agent-spaces ${env} --output json`);
67
+ if (!spaces.ok) {
68
+ console.error(`Failed to list agent spaces: ${spaces.stdout}`);
69
+ process.exit(1);
70
+ }
71
+ const spaceList = JSON.parse(spaces.stdout).agentSpaceSummaries || [];
72
+ if (spaceList.length === 0) {
73
+ console.error('No agent spaces found. Run deploy-infra first.');
74
+ process.exit(1);
75
+ }
76
+ const agentSpaceId = spaceList[0].agentSpaceId;
77
+ console.log(` Agent Space: ${agentSpaceId}`);
78
+ // Check if application already exists
79
+ console.log('🔍 Checking for existing application...');
80
+ const apps = runCapture(`aws securityagent list-applications ${env} --output json`);
81
+ let applicationId;
82
+ if (apps.ok && JSON.parse(apps.stdout).applicationSummaries?.length > 0) {
83
+ applicationId = JSON.parse(apps.stdout).applicationSummaries[0].applicationId;
84
+ console.log(` Application already exists: ${applicationId}`);
85
+ }
86
+ else {
87
+ // Create application
88
+ console.log('📦 Creating application...');
89
+ const create = runCapture(`aws securityagent create-application ${env} --output json`);
90
+ if (!create.ok) {
91
+ console.error(`Failed to create application: ${create.stdout}`);
92
+ process.exit(1);
93
+ }
94
+ applicationId = JSON.parse(create.stdout).applicationId;
95
+ console.log(` ✅ Created application: ${applicationId}`);
96
+ }
97
+ // Get service role ARN
98
+ const roleArn = `arn:aws:iam::${account.stdout}:role/prism-d1-security-agent-prism-d1-security`;
99
+ // Update application with role
100
+ console.log('🔧 Configuring application role...');
101
+ const update = runCapture(`aws securityagent update-application --application-id ${applicationId} --role-arn ${roleArn} ${env} --output json`);
102
+ if (!update.ok) {
103
+ console.error(`Failed to update application: ${update.stdout}`);
104
+ process.exit(1);
105
+ }
106
+ console.log(` ✅ Role attached: ${roleArn}`);
107
+ console.log('\n✅ Setup complete!');
108
+ console.log(` Application: ${applicationId}`);
109
+ console.log(` Web console: https://${region}.console.aws.amazon.com/securityagent/home?region=${region}`);
110
+ console.log(' Click "Admin access" to open the web app.');
111
+ },
112
+ };
113
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/commands/securityagent/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE1D,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACnJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACvF,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,OAA4B,EAAE;IACtD,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,eAAe;IACb,WAAW,EAAE,yEAAyE;IACtF,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE;QACrG,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE;KAChF;IACD,MAAM,CAAC,OAA4C;QACjD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,MAAM,EAAE,CAAC;QAE1E,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;QACrF,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,UAAU,CAAC,+BAA+B,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;QACjI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAG,QAAQ,EAAE;YACb,mBAAmB,EAAE,OAAO,CAAC,MAAM;YACnC,kBAAkB,EAAE,MAAM;YAC1B,kBAAkB,EAAE,MAAM;SAC3B,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,2EAA2E,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAChH,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAE9C,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,uCAAuC,GAAG,gBAAgB,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC;QACtE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;QAE/C,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,UAAU,CAAC,uCAAuC,GAAG,gBAAgB,CAAC,CAAC;QACpF,IAAI,aAAqB,CAAC;QAE1B,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,wCAAwC,GAAG,gBAAgB,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,gBAAgB,OAAO,CAAC,MAAM,iDAAiD,CAAC;QAEhG,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,UAAU,CAAC,yDAAyD,aAAa,eAAe,OAAO,IAAI,GAAG,gBAAgB,CAAC,CAAC;QAC/I,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,qDAAqD,MAAM,EAAE,CAAC,CAAC;QAC5G,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ description: string;
3
+ options: {
4
+ flags: string;
5
+ description: string;
6
+ default: string;
7
+ }[];
8
+ action(options: {
9
+ requireApproval: string;
10
+ }): void;
11
+ };
12
+ export default _default;
13
+ //# sourceMappingURL=deploy-infra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-infra.d.ts","sourceRoot":"","sources":["../../../../src/commands/workshop/deploy-infra.ts"],"names":[],"mappings":";;;;;;;oBA+BkB;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE;;AAL7C,wBAmDE"}
@@ -0,0 +1,73 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const INFRA_DIR = resolve(__dirname, '../../../../infra');
7
+ function run(cmd, opts = {}) {
8
+ try {
9
+ execSync(cmd, { encoding: 'utf8', stdio: 'inherit', cwd: INFRA_DIR, ...opts });
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ function runCapture(cmd) {
17
+ try {
18
+ const stdout = execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], cwd: INFRA_DIR }).trim();
19
+ return { ok: true, stdout };
20
+ }
21
+ catch (err) {
22
+ return { ok: false, stderr: (err.stderr || err.message || '').trim() };
23
+ }
24
+ }
25
+ export default {
26
+ description: 'Deploy workshop infrastructure via CDK (bootstraps if needed)',
27
+ options: [
28
+ { flags: '--require-approval <type>', description: 'CDK approval level (never, broadening, any-change)', default: 'never' },
29
+ ],
30
+ action(options) {
31
+ if (!existsSync(INFRA_DIR)) {
32
+ console.error(`Error: infra directory not found at ${INFRA_DIR}`);
33
+ process.exit(1);
34
+ }
35
+ // Ensure dependencies are installed
36
+ if (!existsSync(resolve(INFRA_DIR, 'node_modules'))) {
37
+ console.log('Installing infra dependencies...');
38
+ if (!run('npm install')) {
39
+ console.error('Failed to install dependencies.');
40
+ process.exit(1);
41
+ }
42
+ }
43
+ // Check if CDK is available
44
+ const cdkBin = existsSync(resolve(INFRA_DIR, 'node_modules/.bin/cdk'))
45
+ ? resolve(INFRA_DIR, 'node_modules/.bin/cdk')
46
+ : 'npx cdk';
47
+ // Check bootstrap status
48
+ console.log('Checking CDK bootstrap status...');
49
+ const bootstrapCheck = runCapture(`${cdkBin} bootstrap --show-template > /dev/null 2>&1 && aws cloudformation describe-stacks --stack-name CDKToolkit --query "Stacks[0].StackStatus" --output text`);
50
+ if (!bootstrapCheck.ok || !bootstrapCheck.stdout) {
51
+ console.log('CDK bootstrap stack not found. Bootstrapping...');
52
+ if (!run(`${cdkBin} bootstrap`)) {
53
+ console.error('CDK bootstrap failed. Check your AWS credentials and permissions.');
54
+ process.exit(1);
55
+ }
56
+ console.log('Bootstrap complete.');
57
+ }
58
+ else {
59
+ console.log(`CDK bootstrap stack found (${bootstrapCheck.stdout}).`);
60
+ }
61
+ // Deploy
62
+ console.log('\nDeploying infrastructure...');
63
+ const success = run(`${cdkBin} deploy --all --require-approval ${options.requireApproval}`);
64
+ if (success) {
65
+ console.log('\nInfrastructure deployed successfully.');
66
+ }
67
+ else {
68
+ console.error('\nCDK deploy failed. Check the output above for details.');
69
+ process.exit(1);
70
+ }
71
+ },
72
+ };
73
+ //# sourceMappingURL=deploy-infra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-infra.js","sourceRoot":"","sources":["../../../../src/commands/workshop/deploy-infra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ declare const _default: {
2
+ description: string;
3
+ options: {
4
+ flags: string;
5
+ description: string;
6
+ default: string;
7
+ }[];
8
+ action(options: {
9
+ region: string;
10
+ bus: string;
11
+ team: string;
12
+ repo: string;
13
+ }): void;
14
+ };
15
+ export default _default;
16
+ //# sourceMappingURL=generate-demo-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-demo-data.d.ts","sourceRoot":"","sources":["../../../../src/commands/workshop/generate-demo-data.ts"],"names":[],"mappings":";;;;;;;oBAoDkB;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;AAR7E,wBA8VE"}
@@ -0,0 +1,362 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { resolve, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const ROOT_DIR = resolve(__dirname, '../../../..');
6
+ function run(cmd) {
7
+ try {
8
+ execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], cwd: ROOT_DIR });
9
+ return true;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ function runCapture(cmd) {
16
+ try {
17
+ return execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], cwd: ROOT_DIR }).trim();
18
+ }
19
+ catch {
20
+ return '';
21
+ }
22
+ }
23
+ function putEvents(region, entries) {
24
+ try {
25
+ execSync(`aws events put-events --region "${region}" --entries '${JSON.stringify(entries)}'`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], cwd: ROOT_DIR });
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ function randomInt(min, max) {
33
+ return Math.floor(Math.random() * (max - min + 1)) + min;
34
+ }
35
+ function formatDate(date) {
36
+ return date.toISOString().split('T')[0];
37
+ }
38
+ export default {
39
+ description: 'Generate sample metrics data for the PRISM dashboard (8 days of events)',
40
+ options: [
41
+ { flags: '--region <region>', description: 'AWS region', default: 'us-west-2' },
42
+ { flags: '--bus <name>', description: 'EventBridge bus name', default: 'prism-d1-metrics' },
43
+ { flags: '--team <id>', description: 'Team identifier', default: 'demo-team' },
44
+ { flags: '--repo <name>', description: 'Repository name', default: 'prism-d1-sample-app' },
45
+ ],
46
+ action(options) {
47
+ const { region, bus, team, repo } = options;
48
+ // Verify AWS CLI and jq are available
49
+ if (!run('command -v aws')) {
50
+ console.error('Error: AWS CLI not found. Install from https://aws.amazon.com/cli/');
51
+ process.exit(1);
52
+ }
53
+ if (!run('command -v jq')) {
54
+ console.error('Error: jq not found. Install with: apt-get install jq');
55
+ process.exit(1);
56
+ }
57
+ console.log('=== PRISM Demo Data Generator ===');
58
+ console.log(`Region: ${region} | Bus: ${bus} | Team: ${team}`);
59
+ console.log('');
60
+ const ORIGINS = ['human', 'ai-assisted', 'ai-generated', 'ai-assisted', 'ai-assisted'];
61
+ const TOOLS = ['n/a', 'claude-code', 'claude-code', 'kiro', 'claude-code'];
62
+ let batch = [];
63
+ let total = 0;
64
+ function flush() {
65
+ if (batch.length > 0) {
66
+ if (putEvents(region, batch)) {
67
+ total += batch.length;
68
+ }
69
+ else {
70
+ console.error(`Warning: Failed to emit batch of ${batch.length} events`);
71
+ }
72
+ batch = [];
73
+ }
74
+ }
75
+ function addEvent(detailType, detail) {
76
+ batch.push({
77
+ Source: 'prism.d1.velocity',
78
+ DetailType: detailType,
79
+ EventBusName: bus,
80
+ Detail: JSON.stringify(detail),
81
+ });
82
+ if (batch.length >= 10) {
83
+ flush();
84
+ process.stdout.write('.');
85
+ }
86
+ }
87
+ for (let day = 7; day >= 0; day--) {
88
+ const date = new Date();
89
+ date.setDate(date.getDate() - day);
90
+ const dateStr = formatDate(date);
91
+ const maxH = day === 0 ? Math.max(0, new Date().getUTCHours() - 1) : 17;
92
+ const minH = Math.min(8, maxH);
93
+ // 8-15 commits per day
94
+ const commits = randomInt(8, 15);
95
+ for (let i = 0; i < commits; i++) {
96
+ const idx = randomInt(0, 4);
97
+ const origin = ORIGINS[idx];
98
+ const tool = TOOLS[idx];
99
+ const h = randomInt(minH, maxH);
100
+ const m = randomInt(0, 59);
101
+ const ts = `${dateStr}T${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:00Z`;
102
+ const lines = randomInt(10, 129);
103
+ addEvent('prism.d1.commit', {
104
+ team_id: team, repo, timestamp: ts, prism_level: 2,
105
+ metric: { name: 'commit', value: 1, unit: 'count' },
106
+ ai_context: { tool, model: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', origin },
107
+ ai_dora: { ai_to_merge_ratio: origin !== 'human' ? 1 : 0 },
108
+ });
109
+ }
110
+ // 2-4 PRs per day
111
+ const prs = randomInt(2, 4);
112
+ for (let i = 0; i < prs; i++) {
113
+ const tc = randomInt(2, 6);
114
+ const ac = randomInt(0, tc);
115
+ const ratio = parseFloat((ac / tc).toFixed(4));
116
+ const lt = 3600 * (day + 1) + randomInt(0, 3599);
117
+ const lth = parseFloat((lt / 3600).toFixed(2));
118
+ const ts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:30:00Z`;
119
+ const pr = 100 + day * 10 + i;
120
+ // Generate realistic token usage for the PR (scales with commit count)
121
+ const inputTokens = ac > 0 ? randomInt(5000, 15000) * tc : 0;
122
+ const outputTokens = ac > 0 ? randomInt(10000, 40000) * tc : 0;
123
+ const costUsd = ac > 0 ? parseFloat(((inputTokens * 0.003 + outputTokens * 0.015) / 100).toFixed(2)) : 0;
124
+ addEvent('prism.d1.pr', {
125
+ team_id: team, repo, timestamp: ts, prism_level: 2,
126
+ metric: { name: 'ai_to_merge_ratio', value: ratio, unit: 'ratio' },
127
+ ai_context: { tool: 'github-actions', model: 'n/a', origin: ac > 0 ? 'ai-assisted' : 'human' },
128
+ dora: { deployment_frequency: 1, lead_time_seconds: lt },
129
+ ai_dora: {
130
+ ai_to_merge_ratio: ratio,
131
+ total_commits: tc,
132
+ ai_commits: ac,
133
+ total_input_tokens: inputTokens,
134
+ total_output_tokens: outputTokens,
135
+ total_cost_usd: costUsd,
136
+ },
137
+ pr: { number: pr, author: 'engineer' },
138
+ });
139
+ // Deploy event
140
+ addEvent('prism.d1.deploy', {
141
+ team_id: team, repo, timestamp: ts, prism_level: 2,
142
+ metric: { name: 'deployment', value: 1, unit: 'count' },
143
+ dora: { deployment_frequency: 1 },
144
+ });
145
+ }
146
+ // Eval results
147
+ for (let i = 0; i < prs; i++) {
148
+ let score = 0.88;
149
+ let res = 'PASS';
150
+ if (day === 4 && randomInt(0, 1) === 0) {
151
+ score = 0.62;
152
+ res = 'FAIL';
153
+ }
154
+ if (randomInt(0, 7) === 0) {
155
+ score = 0.71;
156
+ res = 'FAIL';
157
+ }
158
+ const ts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:45:00Z`;
159
+ addEvent('prism.d1.eval', {
160
+ team_id: team, repo, timestamp: ts, prism_level: 2,
161
+ metric: { name: 'eval_score', value: score, unit: 'score' },
162
+ ai_context: { tool: 'bedrock-eval', model: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', origin: 'ai-generated' },
163
+ ai_dora: { eval_gate_pass_rate: res === 'PASS' ? 1 : 0 },
164
+ eval: { result: res, pr_number: 100 + day * 10 + i },
165
+ });
166
+ }
167
+ // Weekly assessment metrics
168
+ const ts = `${dateStr}T09:00:00Z`;
169
+ const cfr = parseFloat(((randomInt(1, 8)) / 100).toFixed(4));
170
+ const mttrS = randomInt(600, 4199);
171
+ const accept = parseFloat((randomInt(70, 89) / 100).toFixed(4));
172
+ const coverage = parseFloat((randomInt(10, 34) / 100).toFixed(4));
173
+ const specH = parseFloat((randomInt(10, 39) / 10).toFixed(2));
174
+ const defect = parseFloat((randomInt(1, 5) / 100).toFixed(4));
175
+ addEvent('prism.d1.assessment', {
176
+ team_id: team, repo, timestamp: ts, prism_level: 2,
177
+ metric: { name: 'change_failure_rate', value: cfr, unit: 'percent' },
178
+ dora: { change_failure_rate: cfr },
179
+ });
180
+ addEvent('prism.d1.assessment', {
181
+ team_id: team, repo, timestamp: ts, prism_level: 2,
182
+ metric: { name: 'mttr', value: mttrS, unit: 'seconds' },
183
+ dora: { mttr_seconds: mttrS },
184
+ });
185
+ addEvent('prism.d1.assessment', {
186
+ team_id: team, repo, timestamp: ts, prism_level: 2,
187
+ metric: { name: 'ai_acceptance_rate', value: accept, unit: 'percent' },
188
+ ai_dora: { ai_acceptance_rate: accept },
189
+ });
190
+ addEvent('prism.d1.assessment', {
191
+ team_id: team, repo, timestamp: ts, prism_level: 2,
192
+ metric: { name: 'ai_test_coverage_delta', value: coverage, unit: 'percent' },
193
+ ai_dora: { ai_test_coverage_delta: coverage },
194
+ });
195
+ addEvent('prism.d1.assessment', {
196
+ team_id: team, repo, timestamp: ts, prism_level: 2,
197
+ metric: { name: 'spec_to_code_hours', value: specH, unit: 'count' },
198
+ ai_dora: { spec_to_code_hours: specH },
199
+ });
200
+ addEvent('prism.d1.assessment', {
201
+ team_id: team, repo, timestamp: ts, prism_level: 2,
202
+ metric: { name: 'post_merge_defect_rate', value: defect, unit: 'percent' },
203
+ ai_dora: { post_merge_defect_rate: defect },
204
+ });
205
+ // PRISM Level (trending up over the week)
206
+ const level = parseFloat((1.5 + (7 - day) * 0.2).toFixed(1));
207
+ addEvent('prism.d1.assessment', {
208
+ team_id: team, repo, timestamp: ts, prism_level: 2,
209
+ metric: { name: 'PRISMLevel', value: level, unit: 'none' },
210
+ });
211
+ // Agent invocations
212
+ const agentCount = randomInt(3, 10);
213
+ for (let a = 0; a < agentCount; a++) {
214
+ const steps = randomInt(2, 9);
215
+ const dur = randomInt(1000, 5999);
216
+ const tokens = randomInt(2000, 9999);
217
+ const status = randomInt(0, 5) === 0 ? 'failure' : 'success';
218
+ const ats = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
219
+ addEvent('prism.d1.agent', {
220
+ team_id: team, repo, timestamp: ats, prism_level: 3,
221
+ metric: { name: 'agent_invocation', value: 1, unit: 'count' },
222
+ ai_context: { tool: 'strands-agent', model: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', origin: 'ai-generated' },
223
+ agent: {
224
+ agent_name: 'task-assistant', steps_taken: steps, tools_invoked: steps - 1,
225
+ duration_ms: dur, tokens_used: tokens, status, guardrails_triggered: 0,
226
+ },
227
+ });
228
+ }
229
+ // Guardrail triggers (Pillar 4)
230
+ const GUARDRAIL_CATEGORIES = ['CONTENT_FILTER', 'DENIED_TOPIC', 'SENSITIVE_INFO', 'WORD_FILTER'];
231
+ const GUARDRAIL_ACTIONS = ['BLOCK', 'ANONYMIZE', 'WARN'];
232
+ const guardrailCount = randomInt(1, 5);
233
+ for (let g = 0; g < guardrailCount; g++) {
234
+ const gts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
235
+ const category = GUARDRAIL_CATEGORIES[randomInt(0, 3)];
236
+ const action = GUARDRAIL_ACTIONS[randomInt(0, 2)];
237
+ addEvent('prism.d1.guardrail', {
238
+ team_id: team, repo, timestamp: gts, prism_level: 2,
239
+ metric: { name: 'guardrail_trigger', value: 1, unit: 'count' },
240
+ guardrail: {
241
+ guardrail_id: 'gr-demo-001', guardrail_name: 'prism-safety',
242
+ trigger_category: category, trigger_type: 'automated',
243
+ action_taken: action, agent_name: 'task-assistant', invocation_id: `inv-${day}-${g}`,
244
+ },
245
+ });
246
+ }
247
+ // MCP tool calls (Pillar 3)
248
+ const MCP_TOOLS = ['file_read', 'file_write', 'shell_exec', 'web_fetch', 'db_query'];
249
+ const mcpCount = randomInt(5, 15);
250
+ for (let m = 0; m < mcpCount; m++) {
251
+ const mts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
252
+ const authorized = randomInt(0, 19) !== 0; // 5% denied
253
+ addEvent('prism.d1.mcp.tool_call', {
254
+ team_id: team, repo, timestamp: mts, prism_level: 2,
255
+ metric: { name: 'mcp_tool_call', value: 1, unit: 'count' },
256
+ mcp_tool_call: {
257
+ session_id: `sess-${day}-${m}`, client_id: 'claude-code',
258
+ tool_name: MCP_TOOLS[randomInt(0, 4)],
259
+ scopes_used: ['read'], authorized,
260
+ risk_level: authorized ? 'low' : 'high',
261
+ duration_ms: randomInt(50, 2000),
262
+ result_status: authorized ? 'success' : 'denied',
263
+ },
264
+ });
265
+ }
266
+ // Bedrock cost & token efficiency (Pillar 5)
267
+ const dailyCost = parseFloat((randomInt(15, 45) + randomInt(0, 99) / 100).toFixed(2));
268
+ const tokenEff = randomInt(80, 300);
269
+ addEvent('prism.d1.assessment', {
270
+ team_id: team, repo, timestamp: ts, prism_level: 2,
271
+ metric: { name: 'BedrockCostUSD', value: dailyCost, unit: 'none' },
272
+ });
273
+ addEvent('prism.d1.assessment', {
274
+ team_id: team, repo, timestamp: ts, prism_level: 2,
275
+ metric: { name: 'TokenEfficiency', value: tokenEff, unit: 'none' },
276
+ });
277
+ // Quality: AI vs Human defect rates (Pillar 7)
278
+ const aiDefect = parseFloat((randomInt(1, 4) / 100).toFixed(4));
279
+ const humanDefect = parseFloat((randomInt(2, 7) / 100).toFixed(4));
280
+ addEvent('prism.d1.quality', {
281
+ team_id: team, repo, timestamp: ts, prism_level: 2,
282
+ metric: { name: 'quality_comparison', value: 1, unit: 'count' },
283
+ quality: {
284
+ deployment_id: `deploy-${day}`,
285
+ ai_defect_rate: aiDefect, human_defect_rate: humanDefect,
286
+ total_ai_commits: randomInt(5, 12), total_human_commits: randomInt(3, 8),
287
+ },
288
+ });
289
+ // Security Agent findings
290
+ const PHASES = ['design_review', 'code_review', 'pen_test'];
291
+ const SEVERITIES = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
292
+ const findingCount = randomInt(1, 4);
293
+ for (let f = 0; f < findingCount; f++) {
294
+ const fts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
295
+ const severity = SEVERITIES[randomInt(0, 3)];
296
+ const phase = PHASES[randomInt(0, 2)];
297
+ const aiOrigin = randomInt(0, 1) === 0 ? 'ai-assisted' : 'human';
298
+ addEvent('prism.d1.security.code_review', {
299
+ team_id: team, repo, timestamp: fts, prism_level: 2,
300
+ metric: { name: 'security_finding', value: 1, unit: 'count' },
301
+ security_agent_finding: {
302
+ finding_id: `finding-${day}-${f}`, phase, severity,
303
+ cvss_score: severity === 'CRITICAL' ? 9.1 : severity === 'HIGH' ? 7.5 : severity === 'MEDIUM' ? 5.2 : 2.8,
304
+ title: 'Demo finding', category: 'injection',
305
+ cwe_id: 'CWE-79', exploit_validated: phase === 'pen_test',
306
+ compliance_mappings: ['OWASP-A03'], ai_origin: aiOrigin,
307
+ spec_ref: null, found_at: fts, remediated_at: null,
308
+ },
309
+ });
310
+ }
311
+ // Security remediation
312
+ if (day > 0 && randomInt(0, 2) === 0) {
313
+ const rts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
314
+ const remOrigin = randomInt(0, 1) === 0 ? 'ai-assisted' : 'human';
315
+ addEvent('prism.d1.security.remediation', {
316
+ team_id: team, repo, timestamp: rts, prism_level: 2,
317
+ metric: { name: 'security_remediation', value: 1, unit: 'count' },
318
+ security_remediation: {
319
+ finding_id: `finding-${day + 1}-0`,
320
+ severity: SEVERITIES[randomInt(0, 2)],
321
+ remediation_time_hours: randomInt(2, 48),
322
+ remediated_by_origin: remOrigin,
323
+ finding_phase: 'code_review',
324
+ },
325
+ });
326
+ }
327
+ // Exfiltration alert (rare)
328
+ if (randomInt(0, 6) === 0) {
329
+ const ets = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:${String(randomInt(0, 59)).padStart(2, '0')}:00Z`;
330
+ addEvent('prism.d1.security', {
331
+ team_id: team, repo, timestamp: ets, prism_level: 2,
332
+ metric: { name: 'exfiltration_alert', value: 1, unit: 'count' },
333
+ security: {
334
+ alert_type: 'anomalous_read', table_name: 'prism-d1-events',
335
+ principal_arn: 'arn:aws:iam::123456789012:role/demo-role',
336
+ read_count: randomInt(500, 2000),
337
+ window_start: ets, window_end: ets,
338
+ },
339
+ });
340
+ }
341
+ // Eval by rubric (enriches eval data)
342
+ const RUBRICS = ['code-quality', 'api-response-quality', 'agent-quality', 'security-compliance', 'spec-compliance'];
343
+ for (const rubric of RUBRICS) {
344
+ const rScore = parseFloat((randomInt(65, 98) / 100).toFixed(2));
345
+ const rts = `${dateStr}T${String(randomInt(minH, maxH)).padStart(2, '0')}:50:00Z`;
346
+ addEvent('prism.d1.eval', {
347
+ team_id: team, repo, timestamp: rts, prism_level: 2,
348
+ metric: { name: 'eval_score', value: rScore, unit: 'score' },
349
+ ai_context: { tool: 'bedrock-eval', model: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', origin: 'ai-generated' },
350
+ ai_dora: { eval_gate_pass_rate: rScore >= 0.7 ? 1 : 0 },
351
+ eval: { result: rScore >= 0.7 ? 'PASS' : 'FAIL', rubric, score: rScore, pr_number: 100 + day * 10 },
352
+ });
353
+ }
354
+ }
355
+ flush();
356
+ console.log('\n');
357
+ console.log(`=== Done! ${total} events emitted ===`);
358
+ console.log('Open CloudWatch → Dashboards → PRISM-D1-Team-Velocity (us-west-2)');
359
+ console.log("Set time range to 'Last 1 week'");
360
+ },
361
+ };
362
+ //# sourceMappingURL=generate-demo-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-demo-data.js","sourceRoot":"","sources":["../../../../src/commands/workshop/generate-demo-data.ts"],"names":[],"mappings":"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"}