@prism-d1/cli 1.2.0 → 1.3.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 (127) hide show
  1. package/dist/assets/github-workflows/prism-eval-gate-kiro.yml +2 -2
  2. package/dist/assets/infra/bin/app.ts +61 -37
  3. package/dist/assets/infra/lib/constructs/security-agent-construct.ts +35 -30
  4. package/dist/assets/infra/lib/metrics-pipeline-stack.ts +2 -110
  5. package/dist/assets/infra/lib/security-agent-resources.ts +136 -0
  6. package/dist/assets/infra/lib/security-agent-stack.ts +69 -0
  7. package/dist/assets/pentest-cdk/bin/app.ts +12 -0
  8. package/dist/assets/pentest-cdk/cdk.json +7 -0
  9. package/dist/assets/pentest-cdk/lib/pentest-target-stack.ts +206 -0
  10. package/dist/assets/pentest-cdk/package.json +18 -0
  11. package/dist/assets/pentest-cdk/tsconfig.json +12 -0
  12. package/dist/src/codewatch/results.d.ts +124 -4
  13. package/dist/src/codewatch/results.d.ts.map +1 -1
  14. package/dist/src/codewatch/results.js +8 -2
  15. package/dist/src/codewatch/results.js.map +1 -1
  16. package/dist/src/commands/_top/version.d.ts +62 -0
  17. package/dist/src/commands/_top/version.d.ts.map +1 -0
  18. package/dist/src/commands/_top/version.js +175 -0
  19. package/dist/src/commands/_top/version.js.map +1 -0
  20. package/dist/src/commands/bootstrapper/setup-otel-sync.d.ts +12 -6
  21. package/dist/src/commands/bootstrapper/setup-otel-sync.d.ts.map +1 -1
  22. package/dist/src/commands/bootstrapper/setup-otel-sync.js +18 -409
  23. package/dist/src/commands/bootstrapper/setup-otel-sync.js.map +1 -1
  24. package/dist/src/commands/enable/codeburn.d.ts +59 -0
  25. package/dist/src/commands/enable/codeburn.d.ts.map +1 -0
  26. package/dist/src/commands/enable/codeburn.js +531 -0
  27. package/dist/src/commands/enable/codeburn.js.map +1 -0
  28. package/dist/src/commands/enable/security.d.ts +41 -0
  29. package/dist/src/commands/enable/security.d.ts.map +1 -0
  30. package/dist/src/commands/enable/security.js +130 -0
  31. package/dist/src/commands/enable/security.js.map +1 -0
  32. package/dist/src/commands/export/otel.d.ts +31 -0
  33. package/dist/src/commands/export/otel.d.ts.map +1 -0
  34. package/dist/src/commands/export/otel.js +52 -0
  35. package/dist/src/commands/export/otel.js.map +1 -0
  36. package/dist/src/commands/security/code-review.d.ts +22 -0
  37. package/dist/src/commands/security/code-review.d.ts.map +1 -0
  38. package/dist/src/commands/security/code-review.js +43 -0
  39. package/dist/src/commands/security/code-review.js.map +1 -0
  40. package/dist/src/commands/security/findings.d.ts +15 -0
  41. package/dist/src/commands/security/findings.d.ts.map +1 -0
  42. package/dist/src/commands/security/findings.js +31 -0
  43. package/dist/src/commands/security/findings.js.map +1 -0
  44. package/dist/src/commands/security/pentest.d.ts +18 -0
  45. package/dist/src/commands/security/pentest.d.ts.map +1 -0
  46. package/dist/src/commands/security/pentest.js +32 -0
  47. package/dist/src/commands/security/pentest.js.map +1 -0
  48. package/dist/src/commands/security/threat-model.d.ts +16 -0
  49. package/dist/src/commands/security/threat-model.d.ts.map +1 -0
  50. package/dist/src/commands/security/threat-model.js +24 -0
  51. package/dist/src/commands/security/threat-model.js.map +1 -0
  52. package/dist/src/commands/security/threats.d.ts +12 -0
  53. package/dist/src/commands/security/threats.d.ts.map +1 -0
  54. package/dist/src/commands/security/threats.js +23 -0
  55. package/dist/src/commands/security/threats.js.map +1 -0
  56. package/dist/src/commands/securityagent/setup.d.ts +19 -5
  57. package/dist/src/commands/securityagent/setup.d.ts.map +1 -1
  58. package/dist/src/commands/securityagent/setup.js +25 -189
  59. package/dist/src/commands/securityagent/setup.js.map +1 -1
  60. package/dist/src/dashboard/codewatch.d.ts.map +1 -1
  61. package/dist/src/dashboard/codewatch.js +2 -1
  62. package/dist/src/dashboard/codewatch.js.map +1 -1
  63. package/dist/src/dashboard/page.d.ts.map +1 -1
  64. package/dist/src/dashboard/page.js +159 -4
  65. package/dist/src/dashboard/page.js.map +1 -1
  66. package/dist/src/dashboard/payload.d.ts +8 -5
  67. package/dist/src/dashboard/payload.d.ts.map +1 -1
  68. package/dist/src/dashboard/payload.js +5 -2
  69. package/dist/src/dashboard/payload.js.map +1 -1
  70. package/dist/src/dashboard/security.d.ts +130 -0
  71. package/dist/src/dashboard/security.d.ts.map +1 -0
  72. package/dist/src/dashboard/security.js +144 -0
  73. package/dist/src/dashboard/security.js.map +1 -0
  74. package/dist/src/dashboard/setup.d.ts +15 -0
  75. package/dist/src/dashboard/setup.d.ts.map +1 -1
  76. package/dist/src/dashboard/setup.js +20 -3
  77. package/dist/src/dashboard/setup.js.map +1 -1
  78. package/dist/src/dashboard/usage.js +1 -1
  79. package/dist/src/dashboard/usage.js.map +1 -1
  80. package/dist/src/index.d.ts.map +1 -1
  81. package/dist/src/index.js +9 -2
  82. package/dist/src/index.js.map +1 -1
  83. package/dist/src/security/cfn-diff.d.ts +57 -0
  84. package/dist/src/security/cfn-diff.d.ts.map +1 -0
  85. package/dist/src/security/cfn-diff.js +112 -0
  86. package/dist/src/security/cfn-diff.js.map +1 -0
  87. package/dist/src/security/errors.d.ts +45 -0
  88. package/dist/src/security/errors.d.ts.map +1 -0
  89. package/dist/src/security/errors.js +116 -0
  90. package/dist/src/security/errors.js.map +1 -0
  91. package/dist/src/security/marker.d.ts +46 -0
  92. package/dist/src/security/marker.d.ts.map +1 -0
  93. package/dist/src/security/marker.js +120 -0
  94. package/dist/src/security/marker.js.map +1 -0
  95. package/dist/src/security/pentest-dockerfile.d.ts +8 -0
  96. package/dist/src/security/pentest-dockerfile.d.ts.map +1 -0
  97. package/dist/src/security/pentest-dockerfile.js +163 -0
  98. package/dist/src/security/pentest-dockerfile.js.map +1 -0
  99. package/dist/src/security/pentest.d.ts +233 -0
  100. package/dist/src/security/pentest.d.ts.map +1 -0
  101. package/dist/src/security/pentest.js +1057 -0
  102. package/dist/src/security/pentest.js.map +1 -0
  103. package/dist/src/security/repo.d.ts +25 -0
  104. package/dist/src/security/repo.d.ts.map +1 -0
  105. package/dist/src/security/repo.js +38 -0
  106. package/dist/src/security/repo.js.map +1 -0
  107. package/dist/src/security/review.d.ts +202 -0
  108. package/dist/src/security/review.d.ts.map +1 -0
  109. package/dist/src/security/review.js +706 -0
  110. package/dist/src/security/review.js.map +1 -0
  111. package/dist/src/security/setup.d.ts +193 -0
  112. package/dist/src/security/setup.d.ts.map +1 -0
  113. package/dist/src/security/setup.js +728 -0
  114. package/dist/src/security/setup.js.map +1 -0
  115. package/dist/src/security/threat-model.d.ts +133 -0
  116. package/dist/src/security/threat-model.d.ts.map +1 -0
  117. package/dist/src/security/threat-model.js +653 -0
  118. package/dist/src/security/threat-model.js.map +1 -0
  119. package/dist/src/utils/exec.d.ts +6 -0
  120. package/dist/src/utils/exec.d.ts.map +1 -1
  121. package/dist/src/utils/exec.js +12 -1
  122. package/dist/src/utils/exec.js.map +1 -1
  123. package/dist/src/utils/otel-sync-schedule.d.ts +19 -0
  124. package/dist/src/utils/otel-sync-schedule.d.ts.map +1 -1
  125. package/dist/src/utils/otel-sync-schedule.js +24 -2
  126. package/dist/src/utils/otel-sync-schedule.js.map +1 -1
  127. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/commands/securityagent/setup.ts"],"names":[],"mappings":";;;;;;;oBAsCkB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;AANrD,wBA+KE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/commands/securityagent/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,UAGvB,CAAC;;;;;;;iCAYinG,CAAC;;IAPlnG,+FAA+F;iBAC5E,eAAe,UAAU,QAAQ;;AAJtD,wBASE"}
@@ -1,193 +1,29 @@
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
- import { getAssetPath } from '../../utils/root.js';
6
- const __dirname = dirname(fileURLToPath(import.meta.url));
7
- const INFRA_DIR = getAssetPath(import.meta.url, 'infra');
8
- function runCapture(cmd) {
9
- try {
10
- return { ok: true, stdout: execSync(cmd, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], env: { ...process.env, AWS_PAGER: '' } }).trim() };
11
- }
12
- catch (err) {
13
- return { ok: false, stdout: (err.stdout || err.stderr || err.message || '').trim() };
14
- }
15
- }
16
- function cleanEnv() {
17
- const env = { ...process.env };
18
- Object.keys(env).filter(k => k.startsWith('npm_')).forEach(k => delete env[k]);
19
- return env;
20
- }
21
- function run(cmd, opts = {}) {
22
- try {
23
- execSync(cmd, { encoding: 'utf8', stdio: 'inherit', cwd: INFRA_DIR, env: cleanEnv(), ...opts });
24
- return true;
25
- }
26
- catch {
27
- return false;
28
- }
29
- }
1
+ import { runEnableSecurity, SECURITY_OPTIONS } from '../enable/security.js';
2
+ /**
3
+ * DEPRECATED alias for `prism-cli enable security`.
4
+ *
5
+ * The old command ran `cdk deploy --all --require-approval never`, always
6
+ * re-attached the application role, and wrote the code review id to an SSM
7
+ * parameter the CI eval gate never read. `enable security` replaces it: it
8
+ * deploys only the Security Agent stack after a diff and a confirmation, is
9
+ * idempotent, and writes the per-repo parameter the gate uses. The command is
10
+ * kept so existing scripts and docs keep working; it takes the same flags as
11
+ * `enable security`, so a script that relied on the old unattended run needs
12
+ * --yes now.
13
+ */
14
+ export const DEPRECATION = [
15
+ '⚠ "prism-cli securityagent setup" is deprecated; use "prism-cli enable security".',
16
+ ' It now shows a diff and asks before deploying (pass --yes to approve without a prompt).',
17
+ ];
30
18
  export default {
31
- description: 'Deploy Security Agent infrastructure and create web console application',
32
- options: [
33
- { flags: '--profile <name>', description: 'AWS CLI profile', default: process.env.AWS_PROFILE || '' },
34
- { flags: '--region <region>', description: 'AWS region', default: 'us-west-2' },
35
- ],
36
- action(options) {
37
- const { profile, region } = options;
38
- const env = `${profile ? `--profile ${profile} ` : ''}--region ${region}`;
39
- // Deploy CDK with security agent enabled
40
- console.log('🚀 Deploying Security Agent infrastructure...');
41
- if (!existsSync(resolve(INFRA_DIR, 'node_modules'))) {
42
- console.log(' Installing CDK dependencies...');
43
- if (!run('npm install')) {
44
- console.error('npm install failed.');
45
- process.exit(1);
46
- }
47
- }
48
- const cdkBin = resolve(INFRA_DIR, 'node_modules/.bin/cdk');
49
- const account = runCapture(`aws sts get-caller-identity ${profile ? `--profile ${profile} ` : ''}--query Account --output text`);
50
- if (!account.ok) {
51
- console.error('Failed to get account ID. Check your AWS credentials.');
52
- process.exit(1);
53
- }
54
- const cdkEnv = {
55
- ...cleanEnv(),
56
- CDK_DEFAULT_ACCOUNT: account.stdout,
57
- CDK_DEFAULT_REGION: region,
58
- AWS_DEFAULT_REGION: region,
59
- };
60
- if (!run(`${cdkBin} deploy --all --require-approval never --context enableSecurityAgent=true`, { env: cdkEnv })) {
61
- console.error('CDK deploy failed.');
62
- process.exit(1);
63
- }
64
- console.log(' ✅ Infrastructure deployed\n');
65
- // Get agent space ID
66
- console.log('🔍 Looking up agent space...');
67
- const spaces = runCapture(`aws securityagent list-agent-spaces ${env} --output json`);
68
- if (!spaces.ok) {
69
- console.error(`Failed to list agent spaces: ${spaces.stdout}`);
70
- process.exit(1);
71
- }
72
- const spaceList = JSON.parse(spaces.stdout).agentSpaceSummaries || [];
73
- if (spaceList.length === 0) {
74
- console.error('No agent spaces found. Run deploy-infra first.');
75
- process.exit(1);
76
- }
77
- const agentSpaceId = spaceList[0].agentSpaceId;
78
- console.log(` Agent Space: ${agentSpaceId}`);
79
- // Check if application already exists
80
- console.log('🔍 Checking for existing application...');
81
- const apps = runCapture(`aws securityagent list-applications ${env} --output json`);
82
- let applicationId;
83
- if (apps.ok && JSON.parse(apps.stdout).applicationSummaries?.length > 0) {
84
- applicationId = JSON.parse(apps.stdout).applicationSummaries[0].applicationId;
85
- console.log(` Application already exists: ${applicationId}`);
86
- }
87
- else {
88
- // Create application
89
- console.log('📦 Creating application...');
90
- const create = runCapture(`aws securityagent create-application ${env} --output json`);
91
- if (!create.ok) {
92
- console.error(`Failed to create application: ${create.stdout}`);
93
- process.exit(1);
94
- }
95
- applicationId = JSON.parse(create.stdout).applicationId;
96
- console.log(` ✅ Created application: ${applicationId}`);
97
- }
98
- // Get service role ARN
99
- const roleArn = `arn:aws:iam::${account.stdout}:role/prism-d1-security-agent-prism-d1-security`;
100
- // Update application with role
101
- console.log('🔧 Configuring application role...');
102
- const update = runCapture(`aws securityagent update-application --application-id ${applicationId} --role-arn ${roleArn} ${env} --output json`);
103
- if (!update.ok) {
104
- console.error(`Failed to update application: ${update.stdout}`);
105
- process.exit(1);
106
- }
107
- console.log(` ✅ Role attached: ${roleArn}`);
108
- console.log('\n✅ Setup complete!');
109
- console.log(` Application: ${applicationId}`);
110
- console.log(` Web console: https://${region}.console.aws.amazon.com/securityagent/home?region=${region}`);
111
- console.log(' Click "Admin access" to open the web app.');
112
- // -------------------------------------------------------
113
- // Create Code Review for CI diff scans
114
- // Requires: repo ZIP uploaded to scan bucket first
115
- // -------------------------------------------------------
116
- console.log('\n📦 Setting up Code Review for CI/CD diff scans...');
117
- // Get scan bucket from SSM (created by CDK)
118
- const bucketParam = runCapture(`aws ssm get-parameter --name /prism/continuum/scan-bucket ${env} --query Parameter.Value --output text`);
119
- if (!bucketParam.ok || !bucketParam.stdout) {
120
- console.log(' ⚠️ Scan bucket SSM param not found. Deploy with --context enableSecurityAgent=true first.');
121
- console.log(' Skipping Code Review creation.');
122
- return;
123
- }
124
- const scanBucket = bucketParam.stdout;
125
- console.log(` Scan bucket: ${scanBucket}`);
126
- // Zip the repo and upload
127
- console.log(' Archiving repo...');
128
- const repoRoot = process.cwd();
129
- const zipResult = runCapture(`cd ${repoRoot} && git archive HEAD --format=zip -o /tmp/prism-repo.zip`);
130
- if (!zipResult.ok) {
131
- console.log(` ⚠️ git archive failed (not a git repo?): ${zipResult.stdout}`);
132
- console.log(' Skipping Code Review creation. Run from a git repo root.');
133
- return;
134
- }
135
- const upload = runCapture(`aws s3 cp /tmp/prism-repo.zip s3://${scanBucket}/repo/latest.zip ${env}`);
136
- if (!upload.ok) {
137
- console.error(` Failed to upload repo ZIP: ${upload.stdout}`);
138
- return;
139
- }
140
- console.log(' ✅ Repo ZIP uploaded');
141
- // Create Code Review (or find existing)
142
- const codeReviewTitle = 'prism-d1-security-ci-diff-scan';
143
- const createCr = runCapture(`aws securityagent create-code-review ` +
144
- `--agent-space-id ${agentSpaceId} ` +
145
- `--title ${codeReviewTitle} ` +
146
- `--service-role ${roleArn} ` +
147
- `--assets '{"sourceCode":[{"s3Location":"s3://${scanBucket}/repo/latest.zip"}]}' ` +
148
- `${env} --output json`);
149
- let codeReviewId;
150
- if (createCr.ok) {
151
- codeReviewId = JSON.parse(createCr.stdout).codeReviewId;
152
- console.log(` ✅ Code Review created: ${codeReviewId}`);
153
- }
154
- else if (createCr.stdout.includes('Conflict') || createCr.stdout.includes('already exists')) {
155
- // Already exists — find it
156
- const listCr = runCapture(`aws securityagent list-code-reviews --agent-space-id ${agentSpaceId} ${env} --output json`);
157
- if (listCr.ok) {
158
- const reviews = JSON.parse(listCr.stdout).codeReviews || [];
159
- const existing = reviews.find((r) => r.title === codeReviewTitle);
160
- if (existing) {
161
- codeReviewId = existing.codeReviewId;
162
- console.log(` ✅ Code Review already exists: ${codeReviewId}`);
163
- }
164
- else {
165
- console.error(' ❌ Could not find existing Code Review');
166
- return;
167
- }
168
- }
169
- else {
170
- console.error(` ❌ Failed to list code reviews: ${listCr.stdout}`);
171
- return;
172
- }
173
- }
174
- else {
175
- console.error(` ❌ Failed to create Code Review: ${createCr.stdout}`);
176
- console.log(' The CI workflow will skip Continuum scanning until this is resolved.');
177
- return;
178
- }
179
- // Write code-review-id to SSM
180
- const ssmWrite = runCapture(`aws ssm put-parameter --name /prism/continuum/code-review-id ` +
181
- `--value "${codeReviewId}" --type String --overwrite ${env}`);
182
- if (ssmWrite.ok) {
183
- console.log(' ✅ Code Review ID written to SSM: /prism/continuum/code-review-id');
184
- }
185
- else {
186
- console.log(` ⚠️ Failed to write SSM param: ${ssmWrite.stdout}`);
187
- console.log(` Manually run: aws ssm put-parameter --name /prism/continuum/code-review-id --value "${codeReviewId}" --type String --overwrite ${env}`);
188
- }
189
- console.log('\n🎉 Continuum CI scanning ready!');
190
- console.log(' The eval gate workflow will now run diff scans on every PR.');
19
+ description: '[deprecated] Alias for "prism-cli enable security"',
20
+ options: SECURITY_OPTIONS,
21
+ /** Errors are handled once, in runEnableSecurity, for this alias too. `hooks` is for tests. */
22
+ async action(opts, hooks) {
23
+ for (const l of DEPRECATION)
24
+ console.warn(l);
25
+ console.warn('');
26
+ await runEnableSecurity(opts, hooks);
191
27
  },
192
28
  };
193
29
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/commands/securityagent/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/commands/securityagent/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAiB,MAAM,uBAAuB,CAAC;AAG3F;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oFAAoF;IACpF,4FAA4F;CAC7F,CAAC;AAEF,eAAe;IACb,WAAW,EAAE,oDAAoD;IACjE,OAAO,EAAE,gBAAgB;IACzB,+FAA+F;IAC/F,KAAK,CAAC,MAAM,CAAC,IAAqB,EAAE,KAAgB;QAClD,KAAK,MAAM,CAAC,IAAI,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codewatch.d.ts","sourceRoot":"","sources":["../../../src/dashboard/codewatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codewatch.d.ts","sourceRoot":"","sources":["../../../src/dashboard/codewatch.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,8 @@ function isBlock(r) {
61
61
  }
62
62
  const byTime = (a, b) => String(a.started_at).localeCompare(String(b.started_at));
63
63
  export function collectCodewatch(repoRoot, trendRuns = DEFAULT_TREND_RUNS, gitleaksAvailable = true) {
64
- const entries = readResultEntries(repoRoot).filter((e) => e.result && typeof e.result.started_at === 'string');
64
+ // Security Agent reviews have their own panel; the codewatch panel is the git-hook gate only.
65
+ const entries = readResultEntries(repoRoot).filter((e) => e.result && typeof e.result.started_at === 'string' && e.result.kind !== 'security-review' && e.result.kind !== 'security-threat-model');
65
66
  const idOf = new Map(entries.map((e) => [e.result, e.id]));
66
67
  const all = entries.map((e) => e.result).sort(byTime);
67
68
  const latest = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"codewatch.js","sourceRoot":"","sources":["../../../src/dashboard/codewatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codewatch.js","sourceRoot":"","sources":["../../../src/dashboard/codewatch.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAqD,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AA6EhC,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAe5B,MAAM,aAAa,GAAG,CAAC,CAAc,EAAE,EAAE,CACvC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,uBAAuB,CAAC;AAEpH,6DAA6D;AAC7D,MAAM,WAAW,GAAG,CAAC,CAAc,EAAE,EAAE,CACrC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAErK,kEAAkE;AAClE,SAAS,GAAG,CAAC,GAAW;IACtB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,iBAA0B,EAAE,KAAa,EAAE,KAAoB;IACjF,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,KAAK;QACV,CAAC,CAAC,sDAAsD,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,KAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,eAAe;QACjK,CAAC,CAAC,uFAAuF,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,iBAA0B,EAAE,IAAI,GAAG,mBAAmB,EAAE;IAC5G,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AACvK,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAyB,EAAE,iBAA0B,EAAE,IAAI,GAAG,mBAAmB,EAAE;IACvH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACrG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;AACvJ,CAAC;AAED,SAAS,SAAS,CAAC,CAAc;IAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI;QAC5G,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;KACzH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAc;IAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAc,EAAE,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAE5G,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,SAAS,GAAG,kBAAkB,EAAE,iBAAiB,GAAG,IAAI;IACzG,8FAA8F;IAC9F,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC;IACnM,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAC/G,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACxI,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAW,CAAC;IACtD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhI,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IAAC,CAAC;IAEjF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC;QAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QAC7D,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACtE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QAC9D,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtD,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAW,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QACzN,CAAC,CAAC;QACF,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrF,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;QACzC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,GAAG,YAAY;QACjD,UAAU;QACV,UAAU;QACV,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QAC5D,+FAA+F;QAC/F,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QACxH,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;QACjF,cAAc,EAAE,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACtD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;KACtL,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6SH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwcH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD"}
@@ -19,6 +19,8 @@ button { font:inherit; padding:4px 10px; border:1px solid var(--line); border-ra
19
19
  main { padding:16px 20px; display:grid; gap:16px; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); }
20
20
  section.card { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:14px 16px; min-width:0; }
21
21
  section.wide { grid-column: 1 / -1; }
22
+ .sec-repo { border-top:1px solid var(--line); padding:10px 0; } .sec-repo:first-of-type { border-top:none; padding-top:0; } .sec-head { display:flex; gap:6px; align-items:baseline; flex-wrap:wrap; overflow-wrap:anywhere; }
23
+ .sec-pills { display:flex; gap:6px; flex-wrap:wrap; margin:6px 0; } ul.sec-findings { list-style:none; margin:4px 0 0; padding:0; } ul.sec-findings li { padding:6px 0; border-top:1px dashed var(--line); font-size:13px; overflow-wrap:anywhere; } .sec-title { font-weight:600; } ul.sec-findings code { white-space:normal; overflow-wrap:anywhere; }
22
24
  h2 { font-size:15px; margin:0 0 10px; } h3 { font-size:13px; margin:14px 0 6px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; }
23
25
  .empty { color:var(--muted); padding:8px 0; } code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12px; background:var(--bg); padding:1px 4px; border-radius:4px; }
24
26
  .tablewrap { overflow-x:auto; }
@@ -257,7 +259,7 @@ function setupPanel(data) {
257
259
  const rows = (items) => items.map((i) => [pill(i.status), i.label, el('div', {}, i.detail, i.fix ? el('div', { class: 'fix' }, 'Fix: ' + i.fix) : null)]);
258
260
  s.append(el('h3', {}, 'This machine'), table(['', 'Check', 'Detail'], rows(data.machine.setup)));
259
261
  const repos = data.overview.setup, c = data.overview.counts;
260
- s.append(el('h3', {}, 'Codewatch per repo (' + c.codewatch + ' of ' + c.repos + ' installed)'));
262
+ s.append(el('h3', {}, 'Per repo: codewatch (' + c.codewatch + ' of ' + c.repos + ' installed)'));
261
263
  const label = { ok: 'ok', warn: 'warn', missing: 'missing', 'opted-out': 'opted out' };
262
264
  const pillClass = { ok: 'ok', warn: 'warn', missing: 'missing', 'opted-out': 'skipped' };
263
265
  const rowOf = (r) => [
@@ -265,24 +267,177 @@ function setupPanel(data) {
265
267
  el('div', {}, pill(pillClass[r.status] || 'missing', (label[r.status] || r.status) + (r.status === 'ok' && r.global ? ' (global)' : '')), ' ',
266
268
  r.status === 'ok' ? 'reviewer ' + txt(r.reviewer || 'none') : txt(r.detail),
267
269
  r.fix ? el('div', { class: 'fix' }, 'Fix: ', el('code', {}, r.fix)) : null),
270
+ securityCell(r.security),
268
271
  ];
269
272
  const sg = (data.suggestions || []).find((x) => x.id === 'codewatch-global');
270
273
  if (sg) s.append(suggestionCallout(sg));
271
274
  // Always shown: the current repo (installed or not) and every installed repo.
272
275
  const shown = repos.filter((r) => !r.collapsed);
273
276
  const hidden = repos.filter((r) => r.collapsed);
274
- if (shown.length) s.append(table(['Repo', 'Codewatch'], shown.map(rowOf)));
277
+ if (shown.length) s.append(table(['Repo', 'Codewatch', 'Security Agent'], shown.map(rowOf)));
275
278
  else if (!hidden.length) s.append(el('p', { class: 'empty' }, 'No git repositories found under ' + txt(data.scope.root_display) + '.'));
276
279
  if (hidden.length) {
277
280
  s.append(el('details', { class: 'missing-group' },
278
281
  el('summary', {}, hidden.length + ' repo' + (hidden.length === 1 ? '' : 's') + ' without codewatch'),
279
- table(['Repo', 'Codewatch'], hidden.map(rowOf))));
282
+ table(['Repo', 'Codewatch', 'Security Agent'], hidden.map(rowOf))));
280
283
  }
281
284
  return s;
282
285
  }
283
286
 
287
+ /** Security Agent per repo, from the enable security marker (local evidence; the page makes no AWS calls). */
288
+ function securityCell(sec) {
289
+ if (!sec) return el('span', { class: 'fix' }, '-');
290
+ return el('div', {}, pill(sec.status === 'ok' ? 'ok' : 'missing', sec.status), ' ', sec.status === 'ok' ? txt(sec.detail) : '',
291
+ sec.fix ? el('div', { class: 'fix' }, 'Fix: ', el('code', {}, sec.fix)) : null);
292
+ }
293
+
294
+ /** Cached Security Agent code review results; the page only reads them. */
295
+ const RISKS = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFORMATIONAL', 'UNKNOWN'];
296
+ const RISK_CLASS = { CRITICAL: 'sev-high', HIGH: 'sev-high', MEDIUM: 'sev-medium', LOW: 'sev-low' };
297
+ /** A risk-level pill; colour follows the codewatch severity colours. */
298
+ const riskPill = (level, label) => el('span', { class: 'pill ' + (RISK_CLASS[level] || 'fix') }, label);
299
+
300
+ /** One column wide (fits beside Usage and Setup): a compact block per repo, findings as wrapping rows. */
284
301
  function securityPanel(sec) {
285
- return el('section', { class: 'card' }, el('h2', {}, 'Security findings'), el('p', { class: 'empty' }, sec.status === 'coming-soon' ? ['Coming with ', el('code', {}, 'prism-cli security findings'), '.'] : txt(sec.message)));
302
+ const s = el('section', { class: 'card' }, el('h2', {}, 'Security findings'));
303
+ const rows = (sec && sec.repos) || [];
304
+ const tms = (sec && sec.threat_models) || [];
305
+ const pts = (sec && sec.pentests) || [];
306
+ if (!rows.length && !tms.length && !pts.length) {
307
+ s.append(el('p', { class: 'empty' }, 'No Security Agent code reviews, threat models or penetration tests yet. Run ', el('code', {}, (sec && sec.hint) || 'prism-cli security code-review'), ', ', el('code', {}, 'prism-cli security threat-model'), ' or ', el('code', {}, 'prism-cli security pentest'), ' in a repo set up with ', el('code', {}, 'prism-cli enable security'), '.'));
308
+ return s;
309
+ }
310
+ for (const r of rows) {
311
+ const counts = r.counts || {};
312
+ const b = el('div', { class: 'sec-repo' });
313
+ b.append(el('div', { class: 'sec-head' }, el('b', {}, txt(r.name)), r.current ? el('span', { class: 'tag' }, 'this repo') : null));
314
+ b.append(el('div', { class: 'fix' },
315
+ (r.pending ? 'started ' + when(r.started_at) : when(r.finished_at)) + ' · ' + (r.scope === 'diff' ? 'branch diff' : r.scope === 'full' ? 'whole repo' : 'fetched') + ' · job ' + txt(r.job_id).slice(0, 12)));
316
+ const pills = el('div', { class: 'sec-pills' });
317
+ if (r.pending) {
318
+ // Results are local: the page only knows the job was started, not whether it has finished since.
319
+ pills.append(pill('warn', 'review running'));
320
+ if (r.stale) pills.append(pill('skipped', 'stale?'));
321
+ b.append(pills, el('p', { class: 'note' }, r.stale ? 'Started over 2 h ago and not fetched yet; it has most likely finished. ' : '', 'Fetch the results with ', el('code', {}, (sec && sec.pending_hint) || 'prism-cli security findings'), '.'));
322
+ s.append(b);
323
+ continue;
324
+ }
325
+ if (r.status === 'error') pills.append(pill('error', txt(r.job_status).toLowerCase()));
326
+ else {
327
+ const shown = RISKS.filter((k) => (counts[k] || 0) > 0);
328
+ if (!shown.length) pills.append(pill('ok', 'no findings'));
329
+ for (const k of shown) pills.append(riskPill(k, counts[k] + ' ' + k.toLowerCase()));
330
+ }
331
+ b.append(pills);
332
+ if (r.reason) b.append(el('p', { class: 'note' }, txt(r.reason)));
333
+ if (r.status === 'error' && !r.findings.length) b.append(el('p', { class: 'empty' }, 'The job did not complete.'));
334
+ if (r.findings.length) {
335
+ const list = el('ul', { class: 'sec-findings' });
336
+ for (const f of r.findings) {
337
+ list.append(el('li', {},
338
+ riskPill(f.risk_level, txt(f.risk_level).toLowerCase()), ' ',
339
+ el('span', { class: 'sec-title' }, txt(f.title)),
340
+ el('div', { class: 'fix' }, el('code', {}, f.file ? f.file + (f.line ? ':' + f.line : '') : 'no location'), f.cwe ? ' · ' + txt(f.cwe) : '')));
341
+ }
342
+ b.append(list);
343
+ }
344
+ if (r.truncated) b.append(el('p', { class: 'note' }, 'showing the first ' + r.findings.length + '; run prism-cli security findings for all'));
345
+ s.append(b);
346
+ }
347
+ securityPentestRows(s, sec);
348
+ if (tms.length) {
349
+ s.append(el('h3', {}, 'Threat models'));
350
+ for (const t of tms) s.append(threatModelBlock(t, (sec && sec.threats_hint) || 'prism-cli security threats'));
351
+ }
352
+ return s;
353
+ }
354
+
355
+ const THREAT_LEVELS = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'INFO'];
356
+ /** "INFORMATION_DISCLOSURE" -> "information disclosure". */
357
+ const strideText = (list) => (list || []).map((x) => txt(x).toLowerCase().replace(/_/g, ' ')).join(', ');
358
+
359
+ /** One cached threat model per repo, in the code review blocks' compact style. */
360
+ function threatModelBlock(t, hint) {
361
+ const b = el('div', { class: 'sec-repo' });
362
+ b.append(el('div', { class: 'sec-head' }, el('b', {}, txt(t.name)), t.current ? el('span', { class: 'tag' }, 'this repo') : null));
363
+ const docs = (t.scope_docs || []).length;
364
+ b.append(el('div', { class: 'fix' },
365
+ (t.pending ? 'started ' + when(t.started_at) : when(t.finished_at)) + ' · commit ' + txt(t.commit).slice(0, 12)
366
+ + ' · ' + (docs ? docs + ' scope doc' + (docs === 1 ? '' : 's') : 'source only') + ' · job ' + txt(t.job_id).slice(0, 12)));
367
+ const pills = el('div', { class: 'sec-pills' });
368
+ if (t.pending) {
369
+ // Results are local: the page only knows the job was started, not whether it has finished since.
370
+ pills.append(pill('warn', 'threat model running'));
371
+ if (t.stale) pills.append(pill('skipped', 'stale?'));
372
+ b.append(pills, el('p', { class: 'note' }, t.stale ? 'Started over 2 h ago and not fetched yet; it has most likely finished. ' : '', 'Fetch the threats with ', el('code', {}, hint), '.'));
373
+ return b;
374
+ }
375
+ if (t.status === 'error') pills.append(pill('error', txt(t.job_status).toLowerCase()));
376
+ else {
377
+ const counts = t.counts || {};
378
+ const shown = THREAT_LEVELS.filter((k) => (counts[k] || 0) > 0);
379
+ if (!shown.length) pills.append(pill('ok', 'no threats'));
380
+ for (const k of shown) pills.append(riskPill(k, counts[k] + ' ' + k.toLowerCase()));
381
+ }
382
+ b.append(pills);
383
+ if (t.reason) b.append(el('p', { class: 'note' }, txt(t.reason)));
384
+ if (t.overview) b.append(el('p', { class: 'note' }, txt(t.overview)));
385
+ if ((t.threats || []).length) {
386
+ const list = el('ul', { class: 'sec-findings' });
387
+ for (const x of t.threats) {
388
+ list.append(el('li', {},
389
+ riskPill(x.severity, txt(x.severity).toLowerCase()), ' ',
390
+ el('span', { class: 'sec-title' }, txt(x.title)),
391
+ (x.stride || []).length ? el('div', { class: 'fix' }, strideText(x.stride)) : null));
392
+ }
393
+ b.append(list);
394
+ }
395
+ if (t.more) b.append(el('p', { class: 'note' }, t.more + ' more; run ' + hint + ' for all'));
396
+ return b;
397
+ }
398
+
399
+ /** Penetration-test rows, in the same Security card below the code-review rows. */
400
+ function securityPentestRows(s, sec) {
401
+ const rows = (sec && sec.pentests) || [];
402
+ if (!rows.length) return;
403
+ s.append(el('h3', {}, 'Penetration tests'));
404
+ for (const r of rows) {
405
+ const counts = r.counts || {};
406
+ const b = el('div', { class: 'sec-repo' });
407
+ b.append(el('div', { class: 'sec-head' }, el('b', {}, txt(r.name)), r.current ? el('span', { class: 'tag' }, 'this repo') : null));
408
+ b.append(el('div', { class: 'fix' },
409
+ (r.pending ? 'started ' + when(r.started_at) : when(r.finished_at)) + ' · ' + txt(r.target_host) + ' · job ' + txt(r.job_id).slice(0, 12)));
410
+ const pills = el('div', { class: 'sec-pills' });
411
+ if (r.pending) {
412
+ pills.append(pill('warn', 'pentest running'));
413
+ if (r.stale) pills.append(pill('skipped', 'stale?'));
414
+ b.append(pills, el('p', { class: 'note' }, r.stale ? 'Started over 6 h ago and not refreshed. ' : '', 'Refresh with ', el('code', {}, (sec && sec.pentest_hint) || 'prism-cli security pentest --status'), '.'));
415
+ s.append(b);
416
+ continue;
417
+ }
418
+ if (r.status === 'error') pills.append(pill('error', txt(r.job_status).toLowerCase()));
419
+ else {
420
+ const shown = RISKS.filter((k) => (counts[k] || 0) > 0);
421
+ if (!shown.length) pills.append(pill('ok', 'no findings'));
422
+ for (const k of shown) pills.append(riskPill(k, counts[k] + ' ' + k.toLowerCase()));
423
+ }
424
+ if (r.teardown_failed) pills.append(pill('error', 'teardown failed'));
425
+ b.append(pills);
426
+ if (r.reason) b.append(el('p', { class: 'note' }, txt(r.reason)));
427
+ if (r.teardown_failed) b.append(el('p', { class: 'note' }, 'The environment is still up (' + txt(r.teardown_failed.reason) + '). Retry with ', el('code', {}, 'prism-cli security pentest --cleanup'), '.'));
428
+ if (r.findings.length) {
429
+ const list = el('ul', { class: 'sec-findings' });
430
+ for (const f of r.findings) {
431
+ list.append(el('li', {},
432
+ riskPill(f.risk_level, txt(f.risk_level).toLowerCase()), ' ',
433
+ el('span', { class: 'sec-title' }, txt(f.title)),
434
+ f.confidence ? el('div', { class: 'fix' }, txt(f.confidence).toLowerCase() + ' confidence') : null));
435
+ }
436
+ b.append(list);
437
+ }
438
+ if (r.truncated) b.append(el('p', { class: 'note' }, 'showing the first ' + r.findings.length + '; run prism-cli security findings --pentest for all'));
439
+ s.append(b);
440
+ }
286
441
  }
287
442
 
288
443
  async function load() {
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCb,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiQd,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,wFAAwF;IACxF,OAAO;;8CAEqC,KAAK,KAAK,KAAK;;;iBAG5C,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCb,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Zd,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,wFAAwF;IACxF,OAAO;;8CAEqC,KAAK,KAAK,KAAK;;;iBAG5C,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAC3D,CAAC"}
@@ -5,10 +5,11 @@
5
5
  */
6
6
  import { type CodewatchPanel, type SecretScanning } from './codewatch.js';
7
7
  import { type DiscoverOptions } from './repos.js';
8
- import { type CheckItem, type CodewatchSetup, type MachineDeps } from './setup.js';
8
+ import { type CheckItem, type CodewatchSetup, type MachineDeps, type SecuritySetup } from './setup.js';
9
9
  import { type GlobalStatus } from '../codewatch/globalHooks.js';
10
10
  export declare function tildeHome(p: string, home: string): string;
11
11
  import { type CodeburnExport, type UsagePanel } from './usage.js';
12
+ import { type SecurityPanel } from './security.js';
12
13
  export declare const PAYLOAD_SCHEMA = "prism.dashboard.v2";
13
14
  export interface RepoPayload {
14
15
  name: string;
@@ -17,6 +18,8 @@ export interface RepoPayload {
17
18
  hasPrism: boolean;
18
19
  codewatch: CodewatchPanel;
19
20
  setup: CodewatchSetup;
21
+ /** Security Agent, from the enable security marker. */
22
+ security: SecuritySetup;
20
23
  }
21
24
  /** One row of the setup table. */
22
25
  export interface SetupRow {
@@ -29,6 +32,8 @@ export interface SetupRow {
29
32
  fix: string;
30
33
  /** Global hooks cover this repo. */
31
34
  global: boolean;
35
+ /** Security Agent row for this repo. */
36
+ security: SecuritySetup;
32
37
  /** Shown inside the collapsed "repos without codewatch" group: missing or opted out, and not the current repo. */
33
38
  collapsed: boolean;
34
39
  }
@@ -92,10 +97,8 @@ export interface DashboardPayload {
92
97
  };
93
98
  suggestions: Suggestion[];
94
99
  usage: UsagePanel;
95
- security: {
96
- status: 'coming-soon';
97
- message: string;
98
- };
100
+ /** Cached Security Agent code review results (security-review), per repo. */
101
+ security: SecurityPanel;
99
102
  }
100
103
  export interface PayloadOptions extends DiscoverOptions {
101
104
  trendRuns?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/dashboard/payload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/dashboard/payload.ts"],"names":[],"mappings":"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"}