@prism-d1/cli 1.0.71 → 1.0.73

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.
@@ -0,0 +1,61 @@
1
+ # Code Review Rules
2
+
3
+ > This file configures what Kiro looks for when reviewing PR diffs in CI.
4
+ > Customize these rules for your team's standards and concerns.
5
+ > See: https://kiro.dev/docs/steering/
6
+
7
+ ## Hard Failures (block merge if found)
8
+
9
+ - SQL injection or command injection via string concatenation or template literals with user input
10
+ - Hardcoded secrets, API keys, passwords, or connection strings in source code
11
+ - Missing error handling on async operations (unhandled promise rejections, missing try/catch)
12
+ - Unbounded database queries (no LIMIT, no pagination, no streaming for large result sets)
13
+ - Disabled security controls (authentication bypassed, authorization checks removed)
14
+ - Use of `eval()`, `Function()` constructor, or `child_process.exec()` with user input
15
+
16
+ ## Warnings (comment but don't block)
17
+
18
+ - Functions exceeding 50 lines (suggest decomposition)
19
+ - TypeScript `any` type usage without a justifying comment
20
+ - `console.log` or `print()` in production code paths (use structured logger)
21
+ - Missing input validation on API endpoint parameters
22
+ - Catching errors without logging or re-throwing (`catch(e) {}`)
23
+ - TODO/FIXME/HACK comments introduced in new code
24
+ - Magic numbers without named constants
25
+ - Duplicated logic that could be extracted to a shared function
26
+
27
+ ## What NOT to Flag
28
+
29
+ - Test files (*.test.ts, *.spec.ts, *_test.py, test_*.py)
30
+ - Generated code (files with "generated" or "auto-generated" in header comment)
31
+ - Configuration files (*.json, *.yml, *.toml) unless they contain secrets
32
+ - Lock files (package-lock.json, yarn.lock, poetry.lock)
33
+ - Markdown documentation changes
34
+
35
+ ## Output Format
36
+
37
+ Always respond with ONLY valid JSON (no markdown, no explanation outside the JSON):
38
+
39
+ ```json
40
+ {
41
+ "findings": [
42
+ {
43
+ "file": "relative/path/to/file.ts",
44
+ "line": 42,
45
+ "severity": "high|medium|low",
46
+ "category": "security|correctness|performance|maintainability|reliability",
47
+ "message": "Brief, actionable description of the issue"
48
+ }
49
+ ],
50
+ "score": 0.85,
51
+ "summary": "One-line overall verdict"
52
+ }
53
+ ```
54
+
55
+ ## Scoring Guide
56
+
57
+ - **1.0**: No issues found
58
+ - **0.9-0.99**: Only low-severity style/maintainability suggestions
59
+ - **0.8-0.89**: Medium findings but no blocking issues
60
+ - **0.7-0.79**: Has issues that should be addressed but aren't critical
61
+ - **Below 0.7**: Has high-severity issues that should block merge
@@ -0,0 +1,379 @@
1
+ # prism-eval-gate.yml — AI code quality gate using kiro-cli headless mode.
2
+ #
3
+ # Copy this file to .github/workflows/prism-eval-gate.yml in your repo.
4
+ #
5
+ # Required setup:
6
+ # - Kiro API key stored as repository secret: KIRO_API_KEY
7
+ # - .kiro/steering/code-review.md in your repo (review rules)
8
+ # - (Optional) PRISM_METRICS_ROLE_ARN for EventBridge metrics emission
9
+ # - (Optional) AWS Continuum configured for security scanning
10
+
11
+ name: PRISM Eval Gate
12
+
13
+ on:
14
+ pull_request:
15
+ types: [opened, synchronize, reopened]
16
+ branches: [main, master]
17
+
18
+ permissions:
19
+ id-token: write
20
+ contents: read
21
+ pull-requests: write
22
+
23
+ jobs:
24
+ eval-gate:
25
+ runs-on: ubuntu-latest
26
+ env:
27
+ # Secrets mapped to env so steps can gate on them (secrets context not allowed in `if`)
28
+ METRICS_ROLE_ARN: ${{ secrets.PRISM_METRICS_ROLE_ARN }}
29
+ HAS_KIRO_KEY: ${{ secrets.KIRO_API_KEY != '' && 'true' || 'false' }}
30
+ steps:
31
+ - name: Checkout
32
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
33
+ with:
34
+ fetch-depth: 0
35
+
36
+ - name: Install Kiro CLI
37
+ run: curl -fsSL https://cli.kiro.dev/install | bash
38
+
39
+ - name: Read team ID
40
+ id: prism-config
41
+ run: |
42
+ TEAM_ID=$(jq -r '.team_id // "no_team"' .prism/config.json 2>/dev/null || echo "no_team")
43
+ echo "team_id=${TEAM_ID}" >> "$GITHUB_OUTPUT"
44
+
45
+ - name: Identify AI-generated changes
46
+ id: detect-ai
47
+ env:
48
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
49
+ HEAD_SHA: ${{ github.sha }}
50
+ run: |
51
+ AI_FILES=""
52
+ for SHA in $(git rev-list "${BASE_SHA}..${HEAD_SHA}"); do
53
+ if git log -1 --format='%B' "${SHA}" | grep -q 'AI-Origin: ai-generated\|AI-Origin: ai-assisted'; then
54
+ FILES=$(git diff-tree --no-commit-id --name-only -r "${SHA}" \
55
+ | grep -E '\.(ts|js|py|go|java|rs|tsx|jsx)$' \
56
+ | grep -vE '\.test\.|\.spec\.|__test__|_test\.' || true)
57
+ AI_FILES="${AI_FILES} ${FILES}"
58
+ fi
59
+ done
60
+
61
+ UNIQUE_FILES=$(echo "${AI_FILES}" | tr ' ' '\n' | sort -u | grep -v '^$' | head -30)
62
+ FILE_COUNT=$(echo "${UNIQUE_FILES}" | grep -c . || echo "0")
63
+
64
+ if [ "${FILE_COUNT}" -eq 0 ]; then
65
+ echo "has_ai_changes=false" >> "$GITHUB_OUTPUT"
66
+ else
67
+ echo "has_ai_changes=true" >> "$GITHUB_OUTPUT"
68
+ echo "file_count=${FILE_COUNT}" >> "$GITHUB_OUTPUT"
69
+ echo "${UNIQUE_FILES}" > /tmp/ai-changed-files.txt
70
+ fi
71
+
72
+ - name: Kiro code quality review
73
+ id: review
74
+ if: steps.detect-ai.outputs.has_ai_changes == 'true'
75
+ env:
76
+ KIRO_API_KEY: ${{ secrets.KIRO_API_KEY }}
77
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
78
+ HEAD_SHA: ${{ github.sha }}
79
+ run: |
80
+ # Fork PRs don't receive secrets — report neutral, never silently pass
81
+ if [ "${HAS_KIRO_KEY}" != "true" ]; then
82
+ echo "::warning::KIRO_API_KEY unavailable (fork PR or missing secret) — review skipped"
83
+ echo "result=SKIPPED" >> "$GITHUB_OUTPUT"
84
+ exit 0
85
+ fi
86
+
87
+ FILES=$(cat /tmp/ai-changed-files.txt | tr '\n' ' ')
88
+ DIFF=$(git diff "${BASE_SHA}..${HEAD_SHA}" -- ${FILES})
89
+
90
+ # Find spec reference from commit trailers
91
+ SPEC_REF=$(git log "${BASE_SHA}..${HEAD_SHA}" --format='%(trailers:key=Spec-Ref,valueonly)' | head -1 | tr -d '[:space:]' || true)
92
+ SPEC_CONTEXT=""
93
+ if [ -n "${SPEC_REF}" ] && [ -f "${SPEC_REF}" ]; then
94
+ SPEC_CONTEXT="The spec for this work is at ${SPEC_REF}. Read it and verify the code implements all acceptance criteria."
95
+ fi
96
+
97
+ # Run kiro-cli in headless mode
98
+ REVIEW_OUTPUT=$(echo "${DIFF}" | kiro-cli chat --no-interactive \
99
+ --trust-tools=read,grep \
100
+ --model claude-haiku-4.5 \
101
+ "You are a code reviewer running in CI. Review this PR diff for code quality issues.
102
+
103
+ Changed files: ${FILES}
104
+
105
+ ${SPEC_CONTEXT}
106
+
107
+ Read the actual source files for full context (imports, related functions, tests).
108
+ Follow the review rules in .kiro/steering/code-review.md if it exists.
109
+
110
+ Focus on: correctness bugs, missing error handling, injection risks, performance anti-patterns, type safety violations, and hallucinated imports/APIs that don't exist.
111
+
112
+ Output ONLY valid JSON on a single line (no markdown fencing, no explanation):
113
+ {\"findings\":[{\"file\":\"path\",\"line\":1,\"severity\":\"high|medium|low\",\"category\":\"security|correctness|performance|maintainability|reliability\",\"message\":\"description\"}],\"score\":0.0,\"summary\":\"one line\"}" 2>/dev/null) || true
114
+
115
+ # Strip ANSI escapes, join lines, extract the last JSON object
116
+ CLEANED=$(echo "${REVIEW_OUTPUT}" | sed 's/\x1b\[[0-9;?]*[a-zA-Z]//g' | tr -d '\r')
117
+ REVIEW_JSON=$(echo "${CLEANED}" | tr '\n' ' ' | grep -o '{.*}' || true)
118
+
119
+ if [ -z "${REVIEW_JSON}" ] || ! echo "${REVIEW_JSON}" | jq -e '.score' > /dev/null 2>&1; then
120
+ # FAIL CLOSED: a gate that can't evaluate must not pass
121
+ echo "::error::Could not parse kiro-cli review output — failing closed"
122
+ echo "result=ERROR" >> "$GITHUB_OUTPUT"
123
+ exit 0
124
+ fi
125
+
126
+ SCORE=$(echo "${REVIEW_JSON}" | jq -r '.score')
127
+ FINDINGS=$(echo "${REVIEW_JSON}" | jq '.findings | length')
128
+ HIGH=$(echo "${REVIEW_JSON}" | jq '[.findings[] | select(.severity=="high")] | length')
129
+ MEDIUM=$(echo "${REVIEW_JSON}" | jq '[.findings[] | select(.severity=="medium")] | length')
130
+ # Single line, quotes stripped — safe for GITHUB_OUTPUT and downstream env use
131
+ SUMMARY=$(echo "${REVIEW_JSON}" | jq -r '.summary // "No summary"' | head -1 | tr -d '"`'"'" | cut -c1-200)
132
+
133
+ echo "score=${SCORE}" >> "$GITHUB_OUTPUT"
134
+ echo "findings=${FINDINGS}" >> "$GITHUB_OUTPUT"
135
+ echo "high=${HIGH}" >> "$GITHUB_OUTPUT"
136
+ echo "medium=${MEDIUM}" >> "$GITHUB_OUTPUT"
137
+ echo "summary=${SUMMARY}" >> "$GITHUB_OUTPUT"
138
+ echo "${REVIEW_JSON}" > /tmp/kiro-review.json
139
+
140
+ # Determine pass/fail (awk instead of bc — no extra package needed)
141
+ PASS=$(awk -v s="${SCORE}" 'BEGIN { print (s >= 0.82) ? "true" : "false" }')
142
+ if [ "${HIGH}" -gt 0 ] || [ "${PASS}" != "true" ]; then
143
+ echo "result=FAIL" >> "$GITHUB_OUTPUT"
144
+ else
145
+ echo "result=PASS" >> "$GITHUB_OUTPUT"
146
+ fi
147
+
148
+ - name: Post PR comment
149
+ if: always()
150
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
151
+ env:
152
+ HAS_AI: ${{ steps.detect-ai.outputs.has_ai_changes }}
153
+ REVIEW_SCORE: ${{ steps.review.outputs.score }}
154
+ REVIEW_FINDINGS: ${{ steps.review.outputs.findings }}
155
+ REVIEW_HIGH: ${{ steps.review.outputs.high }}
156
+ REVIEW_MEDIUM: ${{ steps.review.outputs.medium }}
157
+ REVIEW_RESULT: ${{ steps.review.outputs.result }}
158
+ REVIEW_SUMMARY: ${{ steps.review.outputs.summary }}
159
+ with:
160
+ script: |
161
+ const fs = require('fs');
162
+ // All values read from env — never interpolate ${{ }} into script source
163
+ // (LLM-generated text could contain quotes/backticks = script injection)
164
+ const hasAI = process.env.HAS_AI === 'true';
165
+
166
+ let body;
167
+ if (!hasAI) {
168
+ body = '✅ **PRISM Eval Gate** — No AI-generated code detected. Skipped.';
169
+ } else {
170
+ const result = process.env.REVIEW_RESULT || 'ERROR';
171
+ if (result === 'SKIPPED') {
172
+ body = '⚠️ **PRISM Eval Gate** — Review unavailable (no API key on fork PRs). A maintainer must review manually.';
173
+ } else if (result === 'ERROR') {
174
+ body = '❌ **PRISM Eval Gate** — Review output could not be parsed. Failing closed; re-run the workflow or review manually.';
175
+ } else {
176
+ const score = process.env.REVIEW_SCORE || '?';
177
+ const findings = process.env.REVIEW_FINDINGS || '0';
178
+ const high = process.env.REVIEW_HIGH || '0';
179
+ const medium = process.env.REVIEW_MEDIUM || '0';
180
+ // Sanitize LLM text before embedding in markdown
181
+ const summary = (process.env.REVIEW_SUMMARY || 'No summary').replace(/[<>|]/g, ' ');
182
+ const emoji = result === 'PASS' ? '✅' : '❌';
183
+
184
+ let table = '';
185
+ try {
186
+ const review = JSON.parse(fs.readFileSync('/tmp/kiro-review.json', 'utf8'));
187
+ if (review.findings && review.findings.length > 0) {
188
+ const clean = (s) => String(s ?? '-').replace(/[|<>`]/g, ' ').slice(0, 200);
189
+ table = review.findings
190
+ .map(f => `| \`${clean(f.file)}\` | ${Number(f.line) || '-'} | ${clean(f.severity)} | ${clean(f.category)} | ${clean(f.message)} |`)
191
+ .join('\n');
192
+ }
193
+ } catch(e) { /* no detail available */ }
194
+
195
+ body = `## ${emoji} PRISM Eval Gate — ${result}\n\n` +
196
+ `**Score**: ${score} | **Findings**: ${findings} (${high} high, ${medium} medium)\n\n` +
197
+ `**Summary**: ${summary}\n\n`;
198
+
199
+ if (table) {
200
+ body += `| File | Line | Severity | Category | Issue |\n|---|---|---|---|---|\n${table}\n\n`;
201
+ }
202
+
203
+ body += `> Powered by kiro-cli headless • Model: claude-haiku-4.5 • Threshold: 0.82`;
204
+ }
205
+ }
206
+
207
+ const { data: comments } = await github.rest.issues.listComments({
208
+ owner: context.repo.owner, repo: context.repo.repo,
209
+ issue_number: context.issue.number
210
+ });
211
+ const existing = comments.find(c => c.body.includes('PRISM Eval Gate'));
212
+ const params = { owner: context.repo.owner, repo: context.repo.repo, body };
213
+
214
+ if (existing) {
215
+ await github.rest.issues.updateComment({ ...params, comment_id: existing.id });
216
+ } else {
217
+ await github.rest.issues.createComment({ ...params, issue_number: context.issue.number });
218
+ }
219
+
220
+ - name: Configure AWS credentials (OIDC) — for metrics + security scan
221
+ id: aws-creds
222
+ if: steps.detect-ai.outputs.has_ai_changes == 'true' && env.METRICS_ROLE_ARN != ''
223
+ uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
224
+ with:
225
+ role-to-assume: ${{ env.METRICS_ROLE_ARN }}
226
+ aws-region: us-west-2
227
+ continue-on-error: true
228
+
229
+ - name: Emit prism.d1.eval event
230
+ if: steps.detect-ai.outputs.has_ai_changes == 'true' && steps.aws-creds.outcome == 'success'
231
+ env:
232
+ AWS_REGION: us-west-2
233
+ TEAM_ID: ${{ steps.prism-config.outputs.team_id }}
234
+ REPO: ${{ github.repository }}
235
+ REVIEW_SCORE: ${{ steps.review.outputs.score }}
236
+ REVIEW_RESULT: ${{ steps.review.outputs.result }}
237
+ REVIEW_FINDINGS: ${{ steps.review.outputs.findings }}
238
+ REVIEW_HIGH: ${{ steps.review.outputs.high }}
239
+ PR_NUMBER: ${{ github.event.pull_request.number }}
240
+ run: |
241
+ # Only emit when we have a real score (not SKIPPED/ERROR)
242
+ if [ -z "${REVIEW_SCORE}" ]; then
243
+ echo "No score to emit (result: ${REVIEW_RESULT:-none})"
244
+ exit 0
245
+ fi
246
+ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
247
+ DETAIL=$(jq -n -c \
248
+ --arg team_id "${TEAM_ID}" \
249
+ --arg repo "${REPO}" \
250
+ --arg timestamp "${TIMESTAMP}" \
251
+ --arg score "${REVIEW_SCORE}" \
252
+ --arg result "${REVIEW_RESULT}" \
253
+ --arg findings "${REVIEW_FINDINGS:-0}" \
254
+ --arg high "${REVIEW_HIGH:-0}" \
255
+ --arg pr_number "${PR_NUMBER}" \
256
+ '{team_id:$team_id,repo:$repo,timestamp:$timestamp,prism_level:2,
257
+ metric:{name:"eval_score",value:($score|tonumber),unit:"score"},
258
+ ai_context:{tool:"kiro-cli",model:"claude-haiku-4.5",origin:"ai-generated"},
259
+ eval:{score:($score|tonumber),result:$result,rubric:"kiro-headless",
260
+ findings:($findings|tonumber),high_findings:($high|tonumber),
261
+ pr_number:($pr_number|tonumber),method:"kiro-headless"}}')
262
+ aws events put-events --region us-west-2 --entries \
263
+ "[{\"Source\":\"prism.d1.velocity\",\"DetailType\":\"prism.d1.eval\",\"EventBusName\":\"prism-d1-metrics\",\"Detail\":$(echo "${DETAIL}" | jq -Rs '.')}]" || true
264
+
265
+ - name: AWS Continuum security scan (Tier 2 — deterministic)
266
+ id: security-gate
267
+ if: steps.detect-ai.outputs.has_ai_changes == 'true' && steps.aws-creds.outcome == 'success'
268
+ env:
269
+ AWS_REGION: us-west-2
270
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
271
+ HEAD_SHA: ${{ github.sha }}
272
+ REPO: ${{ github.repository }}
273
+ PR_NUMBER: ${{ github.event.pull_request.number }}
274
+ run: |
275
+ # Pre-flight: verify the specific subcommand exists (AWS CLI v2.36+)
276
+ if ! aws securityagent start-code-review-job help > /dev/null 2>&1; then
277
+ echo "::warning::AWS CLI lacks securityagent code review commands (need v2.36+). Skipping scan."
278
+ echo "findings=0" >> "$GITHUB_OUTPUT"
279
+ echo "skipped=true" >> "$GITHUB_OUTPUT"
280
+ exit 0
281
+ fi
282
+
283
+ AGENT_SPACE_ID=$(aws ssm get-parameter --name /prism/continuum/agent-space-id --query Parameter.Value --output text 2>/dev/null || echo "")
284
+ SCAN_BUCKET=$(aws ssm get-parameter --name /prism/continuum/scan-bucket --query Parameter.Value --output text 2>/dev/null || echo "")
285
+
286
+ if [ -z "$AGENT_SPACE_ID" ] || [ -z "$SCAN_BUCKET" ]; then
287
+ echo "AWS Continuum not configured (SSM params missing). Skipping security scan."
288
+ echo "findings=0" >> "$GITHUB_OUTPUT"
289
+ echo "skipped=true" >> "$GITHUB_OUTPUT"
290
+ exit 0
291
+ fi
292
+
293
+ REPO_SLUG=$(echo "${REPO}" | tr '/' '-')
294
+ CODE_REVIEW_ID=$(aws ssm get-parameter --name "/prism/continuum/code-review-id/${REPO_SLUG}" --query Parameter.Value --output text 2>/dev/null || echo "")
295
+ if [ -z "$CODE_REVIEW_ID" ]; then
296
+ echo "::warning::No Code Review resource for ${REPO_SLUG} — run 'prism-cli securityagent setup' first. Skipping."
297
+ echo "findings=0" >> "$GITHUB_OUTPUT"
298
+ echo "skipped=true" >> "$GITHUB_OUTPUT"
299
+ exit 0
300
+ fi
301
+
302
+ # Diff must be uploaded with .patch extension (API requirement)
303
+ git diff "${BASE_SHA}..${HEAD_SHA}" > /tmp/changes.patch
304
+ if [ ! -s /tmp/changes.patch ]; then
305
+ echo "findings=0" >> "$GITHUB_OUTPUT"
306
+ exit 0
307
+ fi
308
+ DIFF_KEY="diffs/${REPO_SLUG}/${PR_NUMBER}/${HEAD_SHA}.patch"
309
+ aws s3 cp /tmp/changes.patch "s3://${SCAN_BUCKET}/${DIFF_KEY}" --quiet
310
+
311
+ JOB_ID=$(aws securityagent start-code-review-job \
312
+ --agent-space-id "${AGENT_SPACE_ID}" \
313
+ --code-review-id "${CODE_REVIEW_ID}" \
314
+ --diff-source "{\"s3Uri\":\"s3://${SCAN_BUCKET}/${DIFF_KEY}\"}" \
315
+ --query 'codeReviewJobId' --output text)
316
+ echo "Continuum job started: ${JOB_ID}"
317
+
318
+ STATUS="UNKNOWN"
319
+ for i in $(seq 1 30); do
320
+ sleep 30
321
+ STATUS=$(aws securityagent batch-get-code-review-jobs \
322
+ --agent-space-id "${AGENT_SPACE_ID}" \
323
+ --code-review-job-ids "${JOB_ID}" \
324
+ --query 'codeReviewJobs[0].status' --output text 2>/dev/null || echo "UNKNOWN")
325
+ echo " Poll ${i}/30: ${STATUS}"
326
+ case "$STATUS" in COMPLETED|FAILED|STOPPED) break ;; esac
327
+ done
328
+
329
+ if [ "$STATUS" != "COMPLETED" ]; then
330
+ echo "::warning::Continuum scan did not complete (status: ${STATUS}) — treating as skipped"
331
+ echo "findings=0" >> "$GITHUB_OUTPUT"
332
+ echo "skipped=true" >> "$GITHUB_OUTPUT"
333
+ exit 0
334
+ fi
335
+
336
+ # NOTE: list-findings takes agent-space-id + code-review-job-id only.
337
+ # Response field is 'findingsSummaries', risk field is 'riskLevel'.
338
+ FINDINGS_JSON=$(aws securityagent list-findings \
339
+ --agent-space-id "${AGENT_SPACE_ID}" \
340
+ --code-review-job-id "${JOB_ID}" \
341
+ --output json 2>/dev/null || echo '{"findingsSummaries":[]}')
342
+
343
+ TOTAL=$(echo "$FINDINGS_JSON" | jq '.findingsSummaries | length')
344
+ CRITICAL=$(echo "$FINDINGS_JSON" | jq '[.findingsSummaries[] | select(.riskLevel == "CRITICAL")] | length')
345
+ HIGH=$(echo "$FINDINGS_JSON" | jq '[.findingsSummaries[] | select(.riskLevel == "HIGH")] | length')
346
+
347
+ echo "Continuum findings: ${TOTAL} total (${CRITICAL} critical, ${HIGH} high)"
348
+ echo "findings=${TOTAL}" >> "$GITHUB_OUTPUT"
349
+ echo "critical=${CRITICAL}" >> "$GITHUB_OUTPUT"
350
+ echo "high=${HIGH}" >> "$GITHUB_OUTPUT"
351
+
352
+ if [ "$TOTAL" -gt 0 ]; then
353
+ echo "$FINDINGS_JSON" | jq -r '.findingsSummaries[] | "::warning::[\(.riskLevel)] \(.name)"'
354
+ fi
355
+
356
+ - name: Fail on eval gate failure
357
+ if: >-
358
+ steps.review.outputs.result == 'FAIL' ||
359
+ steps.review.outputs.result == 'ERROR' ||
360
+ (steps.security-gate.outputs.skipped != 'true' &&
361
+ (steps.security-gate.outputs.critical > 0 || steps.security-gate.outputs.high > 0))
362
+ env:
363
+ REVIEW_RESULT: ${{ steps.review.outputs.result }}
364
+ REVIEW_HIGH: ${{ steps.review.outputs.high }}
365
+ REVIEW_SCORE: ${{ steps.review.outputs.score }}
366
+ REVIEW_SUMMARY: ${{ steps.review.outputs.summary }}
367
+ SEC_CRITICAL: ${{ steps.security-gate.outputs.critical }}
368
+ SEC_HIGH: ${{ steps.security-gate.outputs.high }}
369
+ run: |
370
+ if [ "${REVIEW_RESULT}" = "ERROR" ]; then
371
+ echo "❌ Eval gate failed closed: review output could not be parsed"
372
+ elif [ "${REVIEW_RESULT}" = "FAIL" ]; then
373
+ echo "❌ Kiro found ${REVIEW_HIGH:-?} high-severity issues (score: ${REVIEW_SCORE:-?})"
374
+ echo "Summary: ${REVIEW_SUMMARY}"
375
+ fi
376
+ if [ "${SEC_CRITICAL:-0}" -gt 0 ] || [ "${SEC_HIGH:-0}" -gt 0 ]; then
377
+ echo "❌ Continuum found ${SEC_CRITICAL:-0} critical, ${SEC_HIGH:-0} high security findings"
378
+ fi
379
+ exit 1
@@ -222,14 +222,27 @@ jobs:
222
222
  \"EventBusName\":\"prism-d1-metrics\",
223
223
  \"Detail\":$(echo "${EVAL_EVENT}" | jq -c '.' | jq -Rs '.')}]"
224
224
 
225
+ - name: Upgrade AWS CLI v2 (securityagent code review requires v2.35+)
226
+ run: |
227
+ curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip
228
+ curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip.sha256" -o /tmp/awscliv2.zip.sha256
229
+ cd /tmp && sha256sum -c awscliv2.zip.sha256
230
+ unzip -qo /tmp/awscliv2.zip -d /tmp
231
+ sudo /tmp/aws/install --update --install-dir /usr/local/aws-cli --bin-dir /usr/local/bin 2>/dev/null || \
232
+ sudo /tmp/aws/install --install-dir /usr/local/aws-cli --bin-dir /usr/local/bin 2>/dev/null || true
233
+ rm -rf /tmp/aws /tmp/awscliv2.zip /tmp/awscliv2.zip.sha256
234
+ hash -r
235
+ echo "AWS CLI: $(aws --version)"
236
+ echo "Has create-code-review: $(aws securityagent create-code-review help 2>&1 | head -1)"
237
+
225
238
  - name: AWS Continuum diff scan
226
239
  id: security-gate
227
240
  env:
228
241
  AWS_REGION: us-west-2
229
242
  run: |
230
243
  # Pre-flight: verify AWS CLI has securityagent subcommand
231
- if ! aws securityagent help > /dev/null 2>&1; then
232
- echo "::warning::AWS CLI does not support 'securityagent' commands (upgrade to v2.35+). Skipping scan."
244
+ if ! aws securityagent start-code-review-job help > /dev/null 2>&1; then
245
+ echo "::warning::AWS CLI does not support 'securityagent code review' commands after upgrade. Skipping scan."
233
246
  echo "findings=0" >> "$GITHUB_OUTPUT"
234
247
  echo "skipped=true" >> "$GITHUB_OUTPUT"
235
248
  exit 0
@@ -259,47 +272,52 @@ jobs:
259
272
  # Derive repo slug for per-repo SSM key (org/repo → org-repo)
260
273
  REPO_SLUG=$(echo "${{ github.repository }}" | tr '/' '-')
261
274
 
262
- echo "::group::Resolve or bootstrap Code Review for ${REPO_SLUG}"
275
+ echo "::group::Resolve Code Review for ${REPO_SLUG}"
263
276
  CODE_REVIEW_ID=$(aws ssm get-parameter --name "/prism/continuum/code-review-id/${REPO_SLUG}" --query Parameter.Value --output text 2>/dev/null || echo "")
264
277
 
265
278
  if [[ -z "$CODE_REVIEW_ID" ]]; then
266
- echo " No Code Review found for ${REPO_SLUG} — bootstrapping..."
279
+ echo " No Code Review found for ${REPO_SLUG} -- bootstrapping..."
280
+ echo " CLI version: $(aws --version 2>&1 | head -1)"
281
+ echo " CLI path: $(which aws)"
267
282
 
268
- # Upload repo ZIP as context for the diff scan
283
+ # Upload repo ZIP first (required as source context for the CodeReview)
269
284
  git archive HEAD --format=zip -o /tmp/repo.zip
270
285
  aws s3 cp /tmp/repo.zip "s3://${SCAN_BUCKET}/repo/${REPO_SLUG}/latest.zip" --quiet
271
286
 
272
- # Create Code Review resource
273
- CR_RESPONSE=$(aws securityagent create-code-review \
274
- --agent-space-id "${AGENT_SPACE_ID}" \
287
+ # Create the CodeReview
288
+ CR_OUTPUT=$(aws securityagent create-code-review \
289
+ --agent-space-id "$AGENT_SPACE_ID" \
275
290
  --title "${REPO_SLUG}-ci-diff-scan" \
276
- --service-role "${SERVICE_ROLE}" \
291
+ --service-role "$SERVICE_ROLE" \
277
292
  --assets "{\"sourceCode\":[{\"s3Location\":\"s3://${SCAN_BUCKET}/repo/${REPO_SLUG}/latest.zip\"}]}" \
278
- --output json 2>&1)
279
-
280
- if echo "$CR_RESPONSE" | jq -e '.codeReviewId' > /dev/null 2>&1; then
281
- CODE_REVIEW_ID=$(echo "$CR_RESPONSE" | jq -r '.codeReviewId')
282
- echo " ✅ Code Review created: ${CODE_REVIEW_ID}"
283
-
284
- # Persist for future runs
285
- aws ssm put-parameter \
286
- --name "/prism/continuum/code-review-id/${REPO_SLUG}" \
287
- --value "${CODE_REVIEW_ID}" \
288
- --type String --overwrite 2>/dev/null || true
289
- else
290
- echo " ⚠️ Failed to create Code Review: ${CR_RESPONSE}"
291
- echo " Skipping scan (non-blocking)."
293
+ --output json 2>&1) || true
294
+ CODE_REVIEW_ID=$(echo "$CR_OUTPUT" | jq -r '.codeReviewId // empty' 2>/dev/null)
295
+
296
+ if [[ -z "$CODE_REVIEW_ID" ]]; then
297
+ echo " ⚠️ Bootstrap failed:"
298
+ echo " $CR_OUTPUT"
299
+ echo " Run 'sudo prism-cli securityagent setup' from your DevBox to create manually."
300
+ echo " Skipping security scan (non-blocking)."
292
301
  echo "findings=0" >> "$GITHUB_OUTPUT"
293
302
  echo "skipped=true" >> "$GITHUB_OUTPUT"
294
303
  exit 0
295
304
  fi
296
- else
297
- echo " Using existing Code Review: ${CODE_REVIEW_ID}"
298
305
 
299
- # Re-upload fresh repo ZIP (context for accurate cross-module analysis)
300
- git archive HEAD --format=zip -o /tmp/repo.zip
301
- aws s3 cp /tmp/repo.zip "s3://${SCAN_BUCKET}/repo/${REPO_SLUG}/latest.zip" --quiet
306
+ # Persist for future runs
307
+ aws ssm put-parameter \
308
+ --name "/prism/continuum/code-review-id/${REPO_SLUG}" \
309
+ --value "$CODE_REVIEW_ID" \
310
+ --type String --overwrite > /dev/null
311
+
312
+ echo " [x] Code Review created: ${CODE_REVIEW_ID}"
313
+ echo " [x] Saved to SSM"
302
314
  fi
315
+
316
+ echo " Using Code Review: ${CODE_REVIEW_ID}"
317
+
318
+ # Upload fresh repo ZIP (context for accurate cross-module analysis)
319
+ git archive HEAD --format=zip -o /tmp/repo.zip
320
+ aws s3 cp /tmp/repo.zip "s3://${SCAN_BUCKET}/repo/${REPO_SLUG}/latest.zip" --quiet
303
321
  echo "::endgroup::"
304
322
 
305
323
  echo "::group::Generate and upload diff"
@@ -329,15 +347,15 @@ jobs:
329
347
  echo "Job started: ${JOB_ID}"
330
348
  echo "::endgroup::"
331
349
 
332
- echo "::group::Poll for completion (timeout: 15 min)"
333
- for i in $(seq 1 30); do
350
+ echo "::group::Poll for completion (timeout: 30 min)"
351
+ for i in $(seq 1 60); do
334
352
  sleep 30
335
353
  STATUS=$(aws securityagent batch-get-code-review-jobs \
336
354
  --agent-space-id "${AGENT_SPACE_ID}" \
337
355
  --code-review-job-ids "${JOB_ID}" \
338
356
  --query 'codeReviewJobs[0].status' --output text 2>/dev/null || echo "UNKNOWN")
339
357
 
340
- echo " Poll ${i}/30: ${STATUS}"
358
+ echo " Poll ${i}/60: ${STATUS}"
341
359
  if [[ "$STATUS" == "COMPLETED" || "$STATUS" == "FAILED" || "$STATUS" == "STOPPED" ]]; then
342
360
  break
343
361
  fi
@@ -345,14 +363,16 @@ jobs:
345
363
  echo "::endgroup::"
346
364
 
347
365
  if [[ "$STATUS" == "FAILED" ]]; then
348
- echo "::warning::Continuum scan failed — treating as 0 findings (non-blocking)"
349
- echo "findings=0" >> "$GITHUB_OUTPUT"
366
+ echo "::warning::Continuum scan failed — check Security Agent logs"
367
+ echo "scan_error=true" >> "$GITHUB_OUTPUT"
368
+ echo "findings=-1" >> "$GITHUB_OUTPUT"
350
369
  exit 0
351
370
  fi
352
371
 
353
372
  if [[ "$STATUS" != "COMPLETED" ]]; then
354
- echo "::warning::Continuum scan timed out (status: ${STATUS}) — treating as 0 findings"
355
- echo "findings=0" >> "$GITHUB_OUTPUT"
373
+ echo "::warning::Continuum scan timed out (status: ${STATUS})"
374
+ echo "scan_error=true" >> "$GITHUB_OUTPUT"
375
+ echo "findings=-1" >> "$GITHUB_OUTPUT"
356
376
  exit 0
357
377
  fi
358
378
 
@@ -424,7 +444,10 @@ jobs:
424
444
  if: steps.eval.outputs.overall_result == 'FAIL' || (steps.security-gate.outputs.findings != '0' && steps.security-gate.outputs.skipped != 'true')
425
445
  run: |
426
446
  [[ "${{ steps.eval.outputs.overall_result }}" == "FAIL" ]] && echo "❌ Eval gate failed"
427
- if [[ "${{ steps.security-gate.outputs.findings }}" != "0" && "${{ steps.security-gate.outputs.skipped }}" != "true" ]]; then
447
+ if [[ "${{ steps.security-gate.outputs.scan_error }}" == "true" ]]; then
448
+ echo "⚠️ AWS Continuum scan encountered an error (did not complete successfully)"
449
+ echo " The security gate cannot verify this PR is safe. Re-run the workflow or check Security Agent logs."
450
+ elif [[ "${{ steps.security-gate.outputs.findings }}" != "0" && "${{ steps.security-gate.outputs.skipped }}" != "true" ]]; then
428
451
  echo "❌ AWS Continuum found ${{ steps.security-gate.outputs.findings }} security issues (${{ steps.security-gate.outputs.critical }} critical, ${{ steps.security-gate.outputs.high }} high)"
429
452
  fi
430
453
  exit 1
@@ -486,6 +486,12 @@ export class MetricsPipelineStack extends cdk.Stack {
486
486
  this.securityAgent.scanBucket.arnForObjects('*'),
487
487
  ],
488
488
  }),
489
+ new iam.PolicyStatement({
490
+ sid: 'KMSForScanBucket',
491
+ effect: iam.Effect.ALLOW,
492
+ actions: ['kms:Encrypt', 'kms:Decrypt', 'kms:GenerateDataKey*', 'kms:DescribeKey'],
493
+ resources: [prismKmsKey.keyArn],
494
+ }),
489
495
  new iam.PolicyStatement({
490
496
  sid: 'SSMReadConfig',
491
497
  effect: iam.Effect.ALLOW,
@@ -5,6 +5,7 @@ declare const _default: {
5
5
  description: string;
6
6
  }[];
7
7
  action(opts: {
8
+ mode?: string;
8
9
  withRubrics?: boolean;
9
10
  model?: string;
10
11
  threshold?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"install-eval-harness.d.ts","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-eval-harness.ts"],"names":[],"mappings":";;;;;;iBAwBqB;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;;AARvG,wBAyFE"}
1
+ {"version":3,"file":"install-eval-harness.d.ts","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-eval-harness.ts"],"names":[],"mappings":";;;;;;iBAyBqB;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;;AATtH,wBAmCE"}
@@ -14,10 +14,11 @@ function prompt(question, defaultValue) {
14
14
  export default {
15
15
  description: 'Install eval harness (script + config + optional rubrics)',
16
16
  options: [
17
- { flags: '--with-rubrics', description: 'Include production rubrics (code-quality, api, agent, security, spec)' },
18
- { flags: '--model <id>', description: 'Bedrock model ID for evaluation' },
17
+ { flags: '--mode <mode>', description: 'Eval mode: "kiro" (recommended, headless kiro-cli) or "bedrock" (legacy run-eval.sh)' },
18
+ { flags: '--with-rubrics', description: 'Include production rubrics (bedrock mode only)' },
19
+ { flags: '--model <id>', description: 'Bedrock model ID for evaluation (bedrock mode only)' },
19
20
  { flags: '--threshold <n>', description: 'Pass threshold (0-1)' },
20
- { flags: '--uninstall', description: 'Remove eval-harness directory' },
21
+ { flags: '--uninstall', description: 'Remove eval-harness directory and steering files' },
21
22
  ],
22
23
  async action(opts) {
23
24
  const gitRoot = execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();
@@ -27,74 +28,139 @@ export default {
27
28
  execSync(`rm -rf "${targetDir}"`);
28
29
  console.log('✓ Removed .prism/eval-harness/');
29
30
  }
30
- else {
31
- console.log('No .prism/eval-harness/ found.');
31
+ const steeringFile = resolve(gitRoot, '.kiro/steering/code-review.md');
32
+ if (existsSync(steeringFile)) {
33
+ execSync(`rm -f "${steeringFile}"`);
34
+ console.log('✓ Removed .kiro/steering/code-review.md');
32
35
  }
33
36
  return;
34
37
  }
35
- // --- Config ---
36
- const model = opts.model || await prompt('Eval model ID', 'us.anthropic.claude-haiku-4-5-20251001-v1:0');
37
- const threshold = opts.threshold || await prompt('Pass threshold', '0.82');
38
- const region = await prompt('AWS region', 'us-west-2');
39
- // --- Install script + config ---
40
- mkdirSync(resolve(targetDir, 'rubrics'), { recursive: true });
41
- // Copy run-eval.sh
42
- copyFileSync(resolve(EVAL_SOURCE, 'run-eval.sh'), resolve(targetDir, 'run-eval.sh'));
43
- chmodSync(resolve(targetDir, 'run-eval.sh'), 0o755);
44
- console.log('✓ Installed .prism/eval-harness/run-eval.sh');
45
- // Write eval-config.json
46
- const config = {
47
- pass_threshold: parseFloat(threshold),
48
- eval_model_id: model,
49
- aws_region: region,
50
- event_bus: 'prism-d1-metrics',
51
- emit_to_eventbridge: true,
52
- };
53
- writeFileSync(resolve(targetDir, 'eval-config.json'), JSON.stringify(config, null, 2) + '\n');
54
- console.log('✓ Created .prism/eval-harness/eval-config.json');
55
- // --- Rubrics ---
56
- if (opts.withRubrics) {
57
- const rubricsSrc = resolve(EVAL_SOURCE, 'rubrics');
58
- for (const file of readdirSync(rubricsSrc).filter(f => f.endsWith('.json'))) {
59
- copyFileSync(resolve(rubricsSrc, file), resolve(targetDir, 'rubrics', file));
38
+ // Determine mode
39
+ const mode = opts.mode || await prompt('Eval mode (kiro = recommended, bedrock = legacy)', 'kiro');
40
+ if (mode === 'kiro') {
41
+ await installKiroMode(gitRoot, opts);
42
+ }
43
+ else {
44
+ await installBedrockMode(gitRoot, targetDir, opts);
45
+ }
46
+ },
47
+ };
48
+ async function installKiroMode(gitRoot, opts) {
49
+ // --- Install steering file ---
50
+ const steeringDir = resolve(gitRoot, '.kiro/steering');
51
+ mkdirSync(steeringDir, { recursive: true });
52
+ const steeringSrc = resolve(EVAL_SOURCE, 'steering/code-review.md');
53
+ const steeringDest = resolve(steeringDir, 'code-review.md');
54
+ if (existsSync(steeringDest)) {
55
+ const overwrite = await prompt('Steering file already exists. Overwrite? [y/N]', 'n');
56
+ if (overwrite.toLowerCase() !== 'y') {
57
+ console.log(' Kept existing .kiro/steering/code-review.md');
58
+ }
59
+ else {
60
+ copyFileSync(steeringSrc, steeringDest);
61
+ console.log('✓ Updated .kiro/steering/code-review.md');
62
+ }
63
+ }
64
+ else {
65
+ copyFileSync(steeringSrc, steeringDest);
66
+ console.log('✓ Installed .kiro/steering/code-review.md');
67
+ }
68
+ // --- Install workflow ---
69
+ const workflowsDir = resolve(gitRoot, '.github/workflows');
70
+ const workflowSrc = getAssetPath(import.meta.url, 'bootstrapper/github-workflows/prism-eval-gate-kiro.yml');
71
+ if (existsSync(workflowSrc)) {
72
+ mkdirSync(workflowsDir, { recursive: true });
73
+ const dest = resolve(workflowsDir, 'prism-eval-gate.yml');
74
+ if (existsSync(dest)) {
75
+ const overwrite = await prompt('Workflow already exists. Overwrite? [y/N]', 'n');
76
+ if (overwrite.toLowerCase() !== 'y') {
77
+ console.log(' Skipped workflow.');
78
+ }
79
+ else {
80
+ copyFileSync(workflowSrc, dest);
81
+ console.log('✓ Updated .github/workflows/prism-eval-gate.yml');
60
82
  }
61
- console.log(`✓ Installed ${readdirSync(resolve(targetDir, 'rubrics')).length} production rubrics`);
62
83
  }
63
84
  else {
64
- console.log('✓ rubrics/ directory created (empty — add your own rubric JSON files)');
85
+ copyFileSync(workflowSrc, dest);
86
+ console.log('✓ Installed .github/workflows/prism-eval-gate.yml');
87
+ }
88
+ }
89
+ console.log('\n════════════════════════════════════════════════');
90
+ console.log(' ✅ Kiro eval gate installed!');
91
+ console.log('════════════════════════════════════════════════');
92
+ console.log('\n Mode: kiro-cli headless');
93
+ console.log(' Rules: .kiro/steering/code-review.md');
94
+ console.log(' Workflow: .github/workflows/prism-eval-gate.yml');
95
+ console.log('\n Required: Add KIRO_API_KEY as a GitHub repository secret');
96
+ console.log(' Generate at: https://app.kiro.dev → Settings → API Keys');
97
+ console.log('\n Optional: Add PRISM_METRICS_ROLE_ARN for EventBridge metrics');
98
+ console.log('');
99
+ }
100
+ async function installBedrockMode(gitRoot, targetDir, opts) {
101
+ // --- Config ---
102
+ const model = opts.model || await prompt('Eval model ID', 'us.anthropic.claude-haiku-4-5-20251001-v1:0');
103
+ const threshold = opts.threshold || await prompt('Pass threshold', '0.82');
104
+ const region = await prompt('AWS region', 'us-west-2');
105
+ // --- Install script + config ---
106
+ mkdirSync(resolve(targetDir, 'rubrics'), { recursive: true });
107
+ // Copy run-eval.sh
108
+ copyFileSync(resolve(EVAL_SOURCE, 'run-eval.sh'), resolve(targetDir, 'run-eval.sh'));
109
+ chmodSync(resolve(targetDir, 'run-eval.sh'), 0o755);
110
+ console.log('✓ Installed .prism/eval-harness/run-eval.sh');
111
+ // Write eval-config.json
112
+ const config = {
113
+ pass_threshold: parseFloat(threshold),
114
+ eval_model_id: model,
115
+ aws_region: region,
116
+ event_bus: 'prism-d1-metrics',
117
+ emit_to_eventbridge: true,
118
+ };
119
+ writeFileSync(resolve(targetDir, 'eval-config.json'), JSON.stringify(config, null, 2) + '\n');
120
+ console.log('✓ Created .prism/eval-harness/eval-config.json');
121
+ // --- Rubrics ---
122
+ if (opts.withRubrics) {
123
+ const rubricsSrc = resolve(EVAL_SOURCE, 'rubrics');
124
+ for (const file of readdirSync(rubricsSrc).filter(f => f.endsWith('.json'))) {
125
+ copyFileSync(resolve(rubricsSrc, file), resolve(targetDir, 'rubrics', file));
65
126
  }
66
- // --- Workflow ---
67
- const workflowsDir = resolve(gitRoot, '.github/workflows');
68
- const workflowSrc = getAssetPath(import.meta.url, 'bootstrapper/github-workflows/prism-eval-gate.yml');
69
- if (existsSync(workflowSrc)) {
70
- mkdirSync(workflowsDir, { recursive: true });
71
- const dest = resolve(workflowsDir, 'prism-eval-gate.yml');
72
- if (existsSync(dest)) {
73
- const overwrite = await prompt('Workflow already exists. Overwrite? [y/N]', 'n');
74
- if (overwrite.toLowerCase() !== 'y') {
75
- console.log(' Skipped workflow.');
76
- }
77
- else {
78
- copyFileSync(workflowSrc, dest);
79
- console.log('✓ Updated .github/workflows/prism-eval-gate.yml');
80
- }
127
+ console.log(`✓ Installed ${readdirSync(resolve(targetDir, 'rubrics')).length} production rubrics`);
128
+ }
129
+ else {
130
+ console.log('✓ rubrics/ directory created (empty — add your own rubric JSON files)');
131
+ }
132
+ // --- Workflow ---
133
+ const workflowsDir = resolve(gitRoot, '.github/workflows');
134
+ const workflowSrc = getAssetPath(import.meta.url, 'bootstrapper/github-workflows/prism-eval-gate.yml');
135
+ if (existsSync(workflowSrc)) {
136
+ mkdirSync(workflowsDir, { recursive: true });
137
+ const dest = resolve(workflowsDir, 'prism-eval-gate.yml');
138
+ if (existsSync(dest)) {
139
+ const overwrite = await prompt('Workflow already exists. Overwrite? [y/N]', 'n');
140
+ if (overwrite.toLowerCase() !== 'y') {
141
+ console.log(' Skipped workflow.');
81
142
  }
82
143
  else {
83
144
  copyFileSync(workflowSrc, dest);
84
- console.log('✓ Installed .github/workflows/prism-eval-gate.yml');
145
+ console.log('✓ Updated .github/workflows/prism-eval-gate.yml');
85
146
  }
86
147
  }
87
- console.log('\n════════════════════════════════════════════════');
88
- console.log(' ✅ Eval harness installed!');
89
- console.log('════════════════════════════════════════════════');
90
- console.log(`\n Model: ${model}`);
91
- console.log(` Threshold: ${threshold}`);
92
- console.log(` Rubrics: ${opts.withRubrics ? 'production set' : 'empty (add your own)'}`);
93
- if (!opts.withRubrics) {
94
- console.log('\n Next: Create a rubric at .prism/eval-harness/rubrics/my-rubric.json');
95
- console.log(' See: bootstrapper/eval-harness/rubrics/ for examples');
148
+ else {
149
+ copyFileSync(workflowSrc, dest);
150
+ console.log('✓ Installed .github/workflows/prism-eval-gate.yml');
96
151
  }
97
- console.log('');
98
- },
99
- };
152
+ }
153
+ console.log('\n════════════════════════════════════════════════');
154
+ console.log(' ✅ Eval harness installed (legacy Bedrock mode)!');
155
+ console.log('════════════════════════════════════════════════');
156
+ console.log(`\n Model: ${model}`);
157
+ console.log(` Threshold: ${threshold}`);
158
+ console.log(` Rubrics: ${opts.withRubrics ? 'production set' : 'empty (add your own)'}`);
159
+ if (!opts.withRubrics) {
160
+ console.log('\n Next: Create a rubric at .prism/eval-harness/rubrics/my-rubric.json');
161
+ console.log(' See: bootstrapper/eval-harness/rubrics/ for examples');
162
+ }
163
+ console.log('\n 💡 Consider upgrading to kiro mode: prism-cli bootstrapper install-eval-harness --mode kiro');
164
+ console.log('');
165
+ }
100
166
  //# sourceMappingURL=install-eval-harness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-eval-harness.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-eval-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-eval-harness.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-eval-harness.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-github-oidc.d.ts","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/setup-github-oidc.ts"],"names":[],"mappings":";;;;;;iBAqDqB;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;;AAN3D,wBAyNE"}
1
+ {"version":3,"file":"setup-github-oidc.d.ts","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/setup-github-oidc.ts"],"names":[],"mappings":";;;;;;iBAqDqB;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;;AAN3D,wBA+OE"}
@@ -233,6 +233,26 @@ export default {
233
233
  console.error(` ✗ Failed to attach policy: ${putPolicy.stderr}`);
234
234
  process.exit(1);
235
235
  }
236
+ // Step 4: Attach Continuum CI managed policy (if deployed)
237
+ console.log('\nStep 4: Attaching Continuum CI scan policy (if available)...');
238
+ const continuumPolicy = run(`aws iam list-policies --scope Local --query "Policies[?PolicyName=='prism-d1-continuum-ci-scan'].Arn" --output text`);
239
+ if (continuumPolicy.ok && continuumPolicy.stdout) {
240
+ const attachResult = run(`aws iam attach-role-policy --role-name ${roleName} --policy-arn ${continuumPolicy.stdout}`);
241
+ if (attachResult.ok) {
242
+ console.log(` ✓ Continuum CI policy attached (SSM + S3 + SecurityAgent access).`);
243
+ }
244
+ else if (attachResult.stderr.includes('already')) {
245
+ console.log(' ✓ Continuum CI policy already attached.');
246
+ }
247
+ else {
248
+ console.log(` ⚠️ Could not attach Continuum policy: ${attachResult.stderr}`);
249
+ console.log(' The eval gate workflow will skip security scanning until this is resolved.');
250
+ }
251
+ }
252
+ else {
253
+ console.log(' ℹ️ Continuum CI policy not found (deploy with --context enableSecurityAgent=true to create it).');
254
+ console.log(' The eval gate workflow will gracefully skip security scanning.');
255
+ }
236
256
  // Summary
237
257
  const roleArn = `arn:aws:iam::${accountId}:role/${roleName}`;
238
258
  console.log('\n════════════════════════════════════════════════');
@@ -1 +1 @@
1
- {"version":3,"file":"setup-github-oidc.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/setup-github-oidc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-github-oidc.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/setup-github-oidc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prism-d1/cli",
3
- "version": "1.0.71",
3
+ "version": "1.0.73",
4
4
  "description": "PRISM D1 Velocity CLI — AI development lifecycle assessment tool",
5
5
  "author": "andklee",
6
6
  "engines": {