@ryuenn3123/agentic-senior-core 1.8.2 → 1.9.1

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 (76) hide show
  1. package/.agent-context/blueprints/mobile-app.md +21 -21
  2. package/.agent-context/policies/llm-judge-threshold.json +19 -19
  3. package/.agent-context/profiles/platform.md +13 -13
  4. package/.agent-context/profiles/regulated.md +13 -13
  5. package/.agent-context/profiles/startup.md +13 -13
  6. package/.agent-context/review-checklists/frontend-skill-parity.md +28 -28
  7. package/.agent-context/review-checklists/frontend-usability.md +33 -33
  8. package/.agent-context/review-checklists/release-operations.md +29 -29
  9. package/.agent-context/skills/README.md +62 -62
  10. package/.agent-context/skills/backend/README.md +67 -67
  11. package/.agent-context/skills/backend/architecture.md +360 -360
  12. package/.agent-context/skills/backend/data-access.md +230 -230
  13. package/.agent-context/skills/backend/errors.md +137 -137
  14. package/.agent-context/skills/backend/validation.md +116 -116
  15. package/.agent-context/skills/backend.md +28 -28
  16. package/.agent-context/skills/cli/README.md +49 -49
  17. package/.agent-context/skills/cli/init.md +37 -37
  18. package/.agent-context/skills/cli/output.md +35 -35
  19. package/.agent-context/skills/cli/upgrade.md +37 -37
  20. package/.agent-context/skills/cli.md +28 -28
  21. package/.agent-context/skills/distribution/README.md +18 -18
  22. package/.agent-context/skills/distribution/compatibility.md +31 -31
  23. package/.agent-context/skills/distribution/publish.md +36 -36
  24. package/.agent-context/skills/distribution/rollback.md +31 -31
  25. package/.agent-context/skills/distribution.md +28 -28
  26. package/.agent-context/skills/frontend/README.md +35 -35
  27. package/.agent-context/skills/frontend/accessibility.md +107 -107
  28. package/.agent-context/skills/frontend/motion.md +66 -66
  29. package/.agent-context/skills/frontend/performance.md +62 -62
  30. package/.agent-context/skills/frontend/ui-architecture.md +128 -128
  31. package/.agent-context/skills/frontend.md +29 -29
  32. package/.agent-context/skills/fullstack/README.md +18 -18
  33. package/.agent-context/skills/fullstack/contracts.md +52 -52
  34. package/.agent-context/skills/fullstack/end-to-end.md +41 -41
  35. package/.agent-context/skills/fullstack/feature-slicing.md +64 -64
  36. package/.agent-context/skills/fullstack.md +26 -26
  37. package/.agent-context/skills/index.json +107 -107
  38. package/.agent-context/skills/review-quality/README.md +18 -18
  39. package/.agent-context/skills/review-quality/benchmark.md +29 -29
  40. package/.agent-context/skills/review-quality/planning.md +37 -37
  41. package/.agent-context/skills/review-quality/security.md +33 -33
  42. package/.agent-context/skills/review-quality.md +27 -27
  43. package/.agent-context/stacks/flutter.md +16 -16
  44. package/.agent-context/stacks/react-native.md +16 -16
  45. package/.agent-context/state/architecture-map.md +25 -25
  46. package/.agent-context/state/benchmark-analysis.json +431 -431
  47. package/.agent-context/state/benchmark-thresholds.json +10 -10
  48. package/.agent-context/state/benchmark-watchlist.json +19 -19
  49. package/.agent-context/state/dependency-map.md +32 -32
  50. package/.agent-context/state/skill-platform.json +38 -38
  51. package/.agent-override.md +36 -36
  52. package/.cursorrules +140 -140
  53. package/.github/ISSUE_TEMPLATE/v1.7-frontend-work-item.yml +54 -54
  54. package/.github/copilot-instructions.md +62 -0
  55. package/.github/workflows/benchmark-detection.yml +38 -38
  56. package/.github/workflows/benchmark-intelligence.yml +50 -50
  57. package/.github/workflows/frontend-usability-gate.yml +36 -36
  58. package/.github/workflows/publish.yml +32 -0
  59. package/.github/workflows/release-gate.yml +32 -32
  60. package/.github/workflows/sbom-compliance.yml +32 -32
  61. package/.windsurfrules +106 -106
  62. package/AGENTS.md +181 -131
  63. package/README.md +318 -318
  64. package/bin/agentic-senior-core.js +1556 -1556
  65. package/mcp.json +92 -29
  66. package/package.json +1 -1
  67. package/scripts/benchmark-gate.mjs +121 -121
  68. package/scripts/benchmark-intelligence.mjs +140 -140
  69. package/scripts/detection-benchmark.mjs +138 -138
  70. package/scripts/frontend-usability-audit.mjs +87 -87
  71. package/scripts/generate-sbom.mjs +61 -61
  72. package/scripts/init-project.ps1 +104 -104
  73. package/scripts/llm-judge.mjs +664 -664
  74. package/scripts/release-gate.mjs +116 -116
  75. package/scripts/skill-tier-policy.mjs +75 -75
  76. package/scripts/validate.mjs +636 -636
@@ -1,54 +1,54 @@
1
- name: V1.7 Frontend Work Item
2
- description: Track a V1.7 frontend task with quality-gate ready acceptance criteria.
3
- title: "[V1.7][QX] "
4
- labels:
5
- - v1.7
6
- body:
7
- - type: textarea
8
- id: background
9
- attributes:
10
- label: Background
11
- description: Why this item exists and what user problem it addresses.
12
- validations:
13
- required: true
14
- - type: textarea
15
- id: scope
16
- attributes:
17
- label: Scope
18
- description: What is included in this issue.
19
- validations:
20
- required: true
21
- - type: textarea
22
- id: out_of_scope
23
- attributes:
24
- label: Out of Scope
25
- description: What is intentionally excluded.
26
- validations:
27
- required: true
28
- - type: textarea
29
- id: acceptance_criteria
30
- attributes:
31
- label: Acceptance Criteria
32
- description: Use measurable and testable criteria.
33
- placeholder: |
34
- - [ ] ...
35
- - [ ] ...
36
- validations:
37
- required: true
38
- - type: textarea
39
- id: dependencies
40
- attributes:
41
- label: Dependencies
42
- description: Link prerequisite issues or blockers.
43
- - type: textarea
44
- id: definition_of_done
45
- attributes:
46
- label: Definition of Done
47
- description: Include testing, documentation, and evidence requirements.
48
- validations:
49
- required: true
50
- - type: textarea
51
- id: evidence
52
- attributes:
53
- label: Evidence
54
- description: Screenshots, benchmark output, links to reports.
1
+ name: V1.7 Frontend Work Item
2
+ description: Track a V1.7 frontend task with quality-gate ready acceptance criteria.
3
+ title: "[V1.7][QX] "
4
+ labels:
5
+ - v1.7
6
+ body:
7
+ - type: textarea
8
+ id: background
9
+ attributes:
10
+ label: Background
11
+ description: Why this item exists and what user problem it addresses.
12
+ validations:
13
+ required: true
14
+ - type: textarea
15
+ id: scope
16
+ attributes:
17
+ label: Scope
18
+ description: What is included in this issue.
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: out_of_scope
23
+ attributes:
24
+ label: Out of Scope
25
+ description: What is intentionally excluded.
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: acceptance_criteria
30
+ attributes:
31
+ label: Acceptance Criteria
32
+ description: Use measurable and testable criteria.
33
+ placeholder: |
34
+ - [ ] ...
35
+ - [ ] ...
36
+ validations:
37
+ required: true
38
+ - type: textarea
39
+ id: dependencies
40
+ attributes:
41
+ label: Dependencies
42
+ description: Link prerequisite issues or blockers.
43
+ - type: textarea
44
+ id: definition_of_done
45
+ attributes:
46
+ label: Definition of Done
47
+ description: Include testing, documentation, and evidence requirements.
48
+ validations:
49
+ required: true
50
+ - type: textarea
51
+ id: evidence
52
+ attributes:
53
+ label: Evidence
54
+ description: Screenshots, benchmark output, links to reports.
@@ -50,6 +50,46 @@ Load the relevant stack profile from `.agent-context/stacks/`:
50
50
  - C#/.NET → `stacks/csharp.md`
51
51
  - Rust → `stacks/rust.md`
52
52
  - Ruby on Rails → `stacks/ruby.md`
53
+ - Flutter → `stacks/flutter.md`
54
+ - React Native → `stacks/react-native.md`
55
+
56
+ ## Domain Skills (Auto-Load by Context)
57
+
58
+ You have access to 6 specialized skill packs. Load the relevant one(s) based on the request:
59
+
60
+ | Skill | When Loaded | Key Controls |
61
+ |-------|------------|---------------|
62
+ | **Backend** | Service/API/microservice request | Layer separation, validation boundaries, error handling |
63
+ | **Frontend** | UI/web/React/Vue request | Smart/Dumb components, state management patterns |
64
+ | **CLI** | Tool/script/automation request | Argument parsing, help text, exit codes |
65
+ | **Distribution** | Release/deploy/package request | Versioning, SBOM, changelog, binary safety |
66
+ | **Fullstack** | End-to-end feature request | Integration points, data flow, contract design |
67
+ | **Review-Quality** | Code review/audit request | Architecture violations, security issues, optimization paths |
68
+
69
+ **Location**: `.agent-context/skills/[skill-name].md`
70
+
71
+ ## Prompts (Request-Specific Templates)
72
+
73
+ When user explicitly requests one of these workflows, load the full prompt template:
74
+
75
+ - **Init-Project**: User says "create new project" → Load `.agent-context/prompts/init-project.md` → Auto-Architect mode
76
+ - **Refactor**: User says "refactor", "improve", "clean up" → Load `.agent-context/prompts/refactor.md` → Safety-first refactoring
77
+ - **Review-Code**: User says "review", "audit", "check" → Load `.agent-context/prompts/review-code.md` → Architectural code review
78
+
79
+ ## Team Profiles (Governance Defaults)
80
+
81
+ If the codebase declares a team profile in `.agent-context/profiles/`, load governance defaults:
82
+
83
+ - **Platform**: Reliability-focused, strict CI, Go default → `.agent-context/profiles/platform.md`
84
+ - **Regulated**: Compliance-focused (finance/health), all severities block → `.agent-context/profiles/regulated.md`
85
+ - **Startup**: Speed-focused, TypeScript/Next.js, permissive gates → `.agent-context/profiles/startup.md`
86
+
87
+ ## Policies & Thresholds
88
+
89
+ Load `.agent-context/policies/llm-judge-threshold.json` to understand:
90
+ - Skill tier requirements (beginner/balanced/advanced/expert)
91
+ - LLM quality gates per severity level
92
+ - Blocking vs. reporting severities
53
93
 
54
94
  ## State Awareness & Override (V1.4)
55
95
 
@@ -71,6 +111,8 @@ Why Better: [WHY this is more professional — teach the human]
71
111
 
72
112
  If the user asks for "quick and dirty" code, skipping tests, or ignoring validation, you MUST politely but firmly refuse. Explain that today's hack is tomorrow's production incident. You do NOT tolerate shortcuts.
73
113
 
114
+ **SKILL TIER AWARENESS**: Before executing complex tasks, check `.agent-context/policies/llm-judge-threshold.json` to ensure your AI model's tier (beginner/balanced/advanced/expert) meets requirements. Refuse tasks outside your tier.
115
+
74
116
  ### The Security Halt
75
117
 
76
118
  If you detect critical security vulnerabilities (e.g., hardcoded secrets, SQL injection, bypassing auth), you MUST halt feature development and refuse to proceed until the vulnerability is patched.
@@ -99,6 +141,26 @@ If the user asks to install a new library, or if you feel the need to use one, e
99
141
 
100
142
  **NEVER** declare a task "done" or ready for review without explicitly running and passing `.agent-context/review-checklists/pr-checklist.md`.
101
143
 
144
+ ---
145
+
146
+ ## Full Knowledge Injection Checklist
147
+
148
+ **This file (copilot-instructions.md) is your unified agent context.** All 8 knowledge layers are now injected:
149
+
150
+ All Layers Loaded:
151
+ 1. Rules (14 files) — Engineering standards
152
+ 2. Stacks (10 profiles) — Language conventions
153
+ 3. Blueprints (14 templates) — Scaffolding patterns
154
+ 4. Skills (6 packs) — Domain expertise [NEW]
155
+ 5. Prompts (3 templates) — Request workflows [NEW]
156
+ 6. Profiles (3 teams) — Governance defaults [NEW]
157
+ 7. State (maps, benchmarks) — Codebase awareness [NEW]
158
+ 8. Policies (thresholds) — Quality gates [NEW]
159
+
160
+ You now have 100% context visibility. No knowledge layer is skipped.
161
+
162
+ If you encounter a decision that requires a missing layer, report it immediately.
163
+
102
164
  ## Full Reference
103
165
 
104
166
  See `.cursorrules` and `AGENTS.md` in the repository root for detailed agent instructions.
@@ -1,38 +1,38 @@
1
- name: Detection Benchmark
2
-
3
- on:
4
- push:
5
- branches:
6
- - '**'
7
- pull_request:
8
- workflow_dispatch:
9
-
10
- permissions:
11
- contents: read
12
-
13
- jobs:
14
- benchmark-detection:
15
- runs-on: ubuntu-latest
16
- timeout-minutes: 10
17
- env:
18
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
- steps:
20
- - name: Checkout repository
21
- uses: actions/checkout@v4
22
-
23
- - name: Setup Node.js
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: '22'
27
-
28
- - name: Run detection benchmark
29
- run: |
30
- node ./scripts/detection-benchmark.mjs > detection-benchmark-report.json
31
- test -s detection-benchmark-report.json
32
-
33
- - name: Upload benchmark artifact
34
- if: always()
35
- uses: actions/upload-artifact@v4
36
- with:
37
- name: detection-benchmark-report
38
- path: detection-benchmark-report.json
1
+ name: Detection Benchmark
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ benchmark-detection:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 10
17
+ env:
18
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
+ steps:
20
+ - name: Checkout repository
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Setup Node.js
24
+ uses: actions/setup-node@v4
25
+ with:
26
+ node-version: '22'
27
+
28
+ - name: Run detection benchmark
29
+ run: |
30
+ node ./scripts/detection-benchmark.mjs > detection-benchmark-report.json
31
+ test -s detection-benchmark-report.json
32
+
33
+ - name: Upload benchmark artifact
34
+ if: always()
35
+ uses: actions/upload-artifact@v4
36
+ with:
37
+ name: detection-benchmark-report
38
+ path: detection-benchmark-report.json
@@ -1,50 +1,50 @@
1
- name: Benchmark Intelligence
2
-
3
- on:
4
- schedule:
5
- - cron: '0 2 * * 1'
6
- pull_request:
7
- workflow_dispatch:
8
-
9
- permissions:
10
- contents: read
11
-
12
- jobs:
13
- benchmark-intelligence:
14
- runs-on: ubuntu-latest
15
- timeout-minutes: 10
16
- env:
17
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
- steps:
19
- - name: Checkout repository
20
- uses: actions/checkout@v4
21
-
22
- - name: Setup Node.js
23
- uses: actions/setup-node@v4
24
- with:
25
- node-version: '22'
26
-
27
- - name: Run benchmark detection report
28
- run: |
29
- node ./scripts/detection-benchmark.mjs > detection-benchmark-report.json
30
- test -s detection-benchmark-report.json
31
-
32
- - name: Run benchmark anti-regression gate
33
- run: |
34
- node ./scripts/benchmark-gate.mjs > benchmark-gate-report.json
35
- test -s benchmark-gate-report.json
36
-
37
- - name: Run benchmark intelligence report
38
- run: |
39
- node ./scripts/benchmark-intelligence.mjs > benchmark-intelligence-report.json
40
- test -s benchmark-intelligence-report.json
41
-
42
- - name: Upload benchmark artifacts
43
- if: always()
44
- uses: actions/upload-artifact@v4
45
- with:
46
- name: benchmark-intelligence-report
47
- path: |
48
- detection-benchmark-report.json
49
- benchmark-gate-report.json
50
- benchmark-intelligence-report.json
1
+ name: Benchmark Intelligence
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 2 * * 1'
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ benchmark-intelligence:
14
+ runs-on: ubuntu-latest
15
+ timeout-minutes: 10
16
+ env:
17
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
+ steps:
19
+ - name: Checkout repository
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Setup Node.js
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: '22'
26
+
27
+ - name: Run benchmark detection report
28
+ run: |
29
+ node ./scripts/detection-benchmark.mjs > detection-benchmark-report.json
30
+ test -s detection-benchmark-report.json
31
+
32
+ - name: Run benchmark anti-regression gate
33
+ run: |
34
+ node ./scripts/benchmark-gate.mjs > benchmark-gate-report.json
35
+ test -s benchmark-gate-report.json
36
+
37
+ - name: Run benchmark intelligence report
38
+ run: |
39
+ node ./scripts/benchmark-intelligence.mjs > benchmark-intelligence-report.json
40
+ test -s benchmark-intelligence-report.json
41
+
42
+ - name: Upload benchmark artifacts
43
+ if: always()
44
+ uses: actions/upload-artifact@v4
45
+ with:
46
+ name: benchmark-intelligence-report
47
+ path: |
48
+ detection-benchmark-report.json
49
+ benchmark-gate-report.json
50
+ benchmark-intelligence-report.json
@@ -1,36 +1,36 @@
1
- name: Frontend Usability Gate
2
-
3
- on:
4
- push:
5
- branches:
6
- - '**'
7
- pull_request:
8
- workflow_dispatch:
9
-
10
- permissions:
11
- contents: read
12
-
13
- jobs:
14
- frontend-usability-audit:
15
- runs-on: ubuntu-latest
16
- timeout-minutes: 10
17
- env:
18
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
- steps:
20
- - name: Checkout repository
21
- uses: actions/checkout@v4
22
-
23
- - name: Setup Node.js
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: '22'
27
-
28
- - name: Run frontend usability audit
29
- run: node ./scripts/frontend-usability-audit.mjs > frontend-usability-audit-report.json
30
-
31
- - name: Upload frontend audit artifact
32
- if: always()
33
- uses: actions/upload-artifact@v4
34
- with:
35
- name: frontend-usability-audit-report
36
- path: frontend-usability-audit-report.json
1
+ name: Frontend Usability Gate
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ frontend-usability-audit:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 10
17
+ env:
18
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
+ steps:
20
+ - name: Checkout repository
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Setup Node.js
24
+ uses: actions/setup-node@v4
25
+ with:
26
+ node-version: '22'
27
+
28
+ - name: Run frontend usability audit
29
+ run: node ./scripts/frontend-usability-audit.mjs > frontend-usability-audit-report.json
30
+
31
+ - name: Upload frontend audit artifact
32
+ if: always()
33
+ uses: actions/upload-artifact@v4
34
+ with:
35
+ name: frontend-usability-audit-report
36
+ path: frontend-usability-audit-report.json
@@ -0,0 +1,32 @@
1
+ name: publish-to-npm
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v4
14
+
15
+ - name: Setup Node.js
16
+ uses: actions/setup-node@v4
17
+ with:
18
+ node-version: 24
19
+ registry-url: 'https://registry.npmjs.org'
20
+
21
+ - name: Install dependencies
22
+ run: npm install
23
+
24
+ - name: Run verification
25
+ run: |
26
+ npm run validate
27
+ npm test
28
+
29
+ - name: Publish to NPM
30
+ run: npm publish --access public
31
+ env:
32
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -1,32 +1,32 @@
1
- name: release-gate
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- pull_request:
8
- workflow_dispatch:
9
-
10
- permissions:
11
- contents: read
12
-
13
- jobs:
14
- release-gate:
15
- runs-on: ubuntu-latest
16
- steps:
17
- - name: Checkout repository
18
- uses: actions/checkout@v4
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: 24
24
-
25
- - name: Run release gate
26
- run: node ./scripts/release-gate.mjs > release-gate-report.json
27
-
28
- - name: Upload release gate report artifact
29
- uses: actions/upload-artifact@v4
30
- with:
31
- name: release-gate-report
32
- path: release-gate-report.json
1
+ name: release-gate
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ release-gate:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: 24
24
+
25
+ - name: Run release gate
26
+ run: node ./scripts/release-gate.mjs > release-gate-report.json
27
+
28
+ - name: Upload release gate report artifact
29
+ uses: actions/upload-artifact@v4
30
+ with:
31
+ name: release-gate-report
32
+ path: release-gate-report.json
@@ -1,32 +1,32 @@
1
- name: sbom-compliance
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- pull_request:
8
- workflow_dispatch:
9
-
10
- permissions:
11
- contents: read
12
-
13
- jobs:
14
- generate-sbom:
15
- runs-on: ubuntu-latest
16
- steps:
17
- - name: Checkout repository
18
- uses: actions/checkout@v4
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: 24
24
-
25
- - name: Generate CycloneDX SBOM
26
- run: node ./scripts/generate-sbom.mjs > sbom.cdx.json
27
-
28
- - name: Upload SBOM artifact
29
- uses: actions/upload-artifact@v4
30
- with:
31
- name: sbom-cyclonedx
32
- path: sbom.cdx.json
1
+ name: sbom-compliance
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ generate-sbom:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: 24
24
+
25
+ - name: Generate CycloneDX SBOM
26
+ run: node ./scripts/generate-sbom.mjs > sbom.cdx.json
27
+
28
+ - name: Upload SBOM artifact
29
+ uses: actions/upload-artifact@v4
30
+ with:
31
+ name: sbom-cyclonedx
32
+ path: sbom.cdx.json