specky-sdd 3.1.0 → 3.2.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 (72) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +52 -59
  3. package/SECURITY.md +61 -2
  4. package/dist/config.d.ts +14 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +90 -18
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.d.ts +2 -1
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js +3 -1
  11. package/dist/constants.js.map +1 -1
  12. package/dist/index.js +32 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/audit-logger.d.ts +20 -4
  15. package/dist/services/audit-logger.d.ts.map +1 -1
  16. package/dist/services/audit-logger.js +91 -12
  17. package/dist/services/audit-logger.js.map +1 -1
  18. package/dist/services/rate-limiter.d.ts +33 -0
  19. package/dist/services/rate-limiter.d.ts.map +1 -0
  20. package/dist/services/rate-limiter.js +61 -0
  21. package/dist/services/rate-limiter.js.map +1 -0
  22. package/dist/services/rbac-engine.d.ts +29 -0
  23. package/dist/services/rbac-engine.d.ts.map +1 -0
  24. package/dist/services/rbac-engine.js +85 -0
  25. package/dist/services/rbac-engine.js.map +1 -0
  26. package/dist/services/state-machine.d.ts +10 -2
  27. package/dist/services/state-machine.d.ts.map +1 -1
  28. package/dist/services/state-machine.js +36 -7
  29. package/dist/services/state-machine.js.map +1 -1
  30. package/dist/services/template-engine.js +1 -1
  31. package/dist/services/template-engine.js.map +1 -1
  32. package/dist/tools/rbac.d.ts +8 -0
  33. package/dist/tools/rbac.d.ts.map +1 -0
  34. package/dist/tools/rbac.js +64 -0
  35. package/dist/tools/rbac.js.map +1 -0
  36. package/package.json +3 -6
  37. package/hooks/auto-checkpoint.md +0 -22
  38. package/hooks/auto-docs.md +0 -53
  39. package/hooks/auto-test.md +0 -61
  40. package/hooks/changelog.md +0 -74
  41. package/hooks/release-gate.md +0 -82
  42. package/hooks/security-scan.md +0 -72
  43. package/hooks/spec-quality.md +0 -55
  44. package/hooks/spec-sync.md +0 -80
  45. package/hooks/srp-validator.md +0 -86
  46. package/hooks/task-tracer.md +0 -63
  47. package/references/design-patterns.md +0 -434
  48. package/references/ears-notation.md +0 -605
  49. package/references/spec-templates.md +0 -936
  50. /package/{templates → dist/templates}/analysis.md +0 -0
  51. /package/{templates → dist/templates}/api-docs.md +0 -0
  52. /package/{templates → dist/templates}/bugfix.md +0 -0
  53. /package/{templates → dist/templates}/checklist.md +0 -0
  54. /package/{templates → dist/templates}/compliance.md +0 -0
  55. /package/{templates → dist/templates}/constitution.md +0 -0
  56. /package/{templates → dist/templates}/cross-analysis.md +0 -0
  57. /package/{templates → dist/templates}/data-model.md +0 -0
  58. /package/{templates → dist/templates}/design.md +0 -0
  59. /package/{templates → dist/templates}/devcontainer.md +0 -0
  60. /package/{templates → dist/templates}/dockerfile.md +0 -0
  61. /package/{templates → dist/templates}/journey.md +0 -0
  62. /package/{templates → dist/templates}/onboarding.md +0 -0
  63. /package/{templates → dist/templates}/research.md +0 -0
  64. /package/{templates → dist/templates}/runbook.md +0 -0
  65. /package/{templates → dist/templates}/specification.md +0 -0
  66. /package/{templates → dist/templates}/sync-report.md +0 -0
  67. /package/{templates → dist/templates}/tasks.md +0 -0
  68. /package/{templates → dist/templates}/terraform.md +0 -0
  69. /package/{templates → dist/templates}/test-stub.md +0 -0
  70. /package/{templates → dist/templates}/user-stories.md +0 -0
  71. /package/{templates → dist/templates}/verification.md +0 -0
  72. /package/{templates → dist/templates}/work-items.md +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,57 @@ All notable changes to Specky are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.2.0] - 2026-04-12
9
+
10
+ ### Enterprise Security Hardening
11
+
12
+ #### Rate Limiting (opt-in)
13
+ - **`RateLimiter` service**: Token bucket algorithm — no external deps, pure TypeScript
14
+ - HTTP transport now supports `rate_limit.enabled: true` in `.specky/config.yml`
15
+ - Config: `max_requests_per_minute` (default 60), `burst` (default 10)
16
+ - Returns HTTP 429 with `Retry-After` header when limit exceeded
17
+ - stdio mode bypasses rate limiting by design (single-session, process-isolated)
18
+
19
+ #### State File Integrity
20
+ - **`StateMachine.saveState()`** now writes HMAC-SHA256 signature to `.sdd-state.json.sig`
21
+ - **`StateMachine.loadState()`** verifies signature on every load — tamper warning to stderr on mismatch
22
+ - Key: `SDD_STATE_KEY` env var, or derived from workspace path using SHA-256
23
+ - Missing `.sig` treated as unverified (no warning) — backward-compatible with pre-v3.2.0 state files
24
+
25
+ #### Enhanced Audit Logger
26
+ - **Hash-chaining**: every `AuditEntry` includes `previous_hash` (SHA-256 of previous line, seed `specky-audit-v1`)
27
+ - **Log rotation**: rotates `.audit.jsonl` → `.audit.jsonl.1` when `audit.max_file_size_mb` exceeded (default 10 MB)
28
+ - **Syslog export**: RFC 5424 format written to `.audit.syslog` when `audit.export_format: syslog`
29
+ - **OTLP stub**: `audit.export_format: otlp` logs placeholder — implementation in next release
30
+
31
+ #### RBAC Foundation (opt-in)
32
+ - **`RbacEngine` service**: `viewer` / `contributor` / `admin` roles; disabled by default
33
+ - **`sdd_check_access`** (NEW tool #57): Returns active role, per-tool access check, full role summary
34
+ - Role enforcement via `SDD_ROLE` env var or `rbac.default_role` in config
35
+ - Viewer: read-only tools only; Contributor: all except `sdd_create_pr`; Admin: all 57 tools
36
+ - Config: `rbac.enabled: true`, `rbac.default_role: contributor`
37
+
38
+ #### Config Extension
39
+ - `.specky/config.yml` now supports nested blocks: `rate_limit:`, `audit:`, `rbac:`
40
+ - Parser upgraded to handle indented YAML child keys (dot-notation flattening)
41
+ - All new options opt-in with safe defaults — existing behavior unchanged from v3.1.0
42
+
43
+ ### NPM-as-Default Migration
44
+ - Global install (`npm install -g specky-sdd`) is now the recommended installation method
45
+ - npx retained as an "alternative" option for per-workspace and convenience use
46
+ - All docs updated: README.md, GETTING-STARTED.md, SYSTEM-DESIGN.md, ONBOARDING.md, SECURITY.md
47
+ - New "Enterprise Installation Methods" section in GETTING-STARTED.md
48
+ - New "NPX Supply Chain Risk" + "MCP Security Framework Compliance" sections in SECURITY.md
49
+
50
+ ### Security Documentation
51
+ - **CoSAI MCP Security White Paper** — full T-01 through T-12 threat coverage table in SECURITY.md
52
+ - **OWASP MCP Top 10** — M1 through M10 coverage table in SECURITY.md
53
+
54
+ ### Tests
55
+ - 561 tests (+54): `rate-limiter.test.ts` (11), `state-integrity.test.ts` (8), `audit-enhanced.test.ts` (12), `rbac-engine.test.ts` (15), plus existing suite maintained at 100%
56
+
57
+ ---
58
+
8
59
  ## [3.1.0] - 2026-04-12
9
60
 
10
61
  ### Intelligence Layer (Specs 003–007)
package/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
  </p>
22
22
 
23
23
  <p>
24
- <a href="https://paulasilvatech.github.io/specky/">Website</a> ·
24
+ <a href="https://paulasilvatech.github.io/specky-site/">Website</a> ·
25
25
  <a href="GETTING-STARTED.md">Getting Started</a> ·
26
26
  <a href="https://www.npmjs.com/package/specky-sdd">npm</a> ·
27
27
  <a href="SECURITY.md">Security</a>
@@ -41,7 +41,7 @@
41
41
  | | [Input Methods](#input-methods-6-ways-to-start) | 6 ways to feed Specky |
42
42
  | | [Three Project Types](#three-project-types-one-pipeline) | Greenfield, Brownfield, Modernization |
43
43
  | **Pipeline** | [Pipeline and LGTM Gates](#pipeline-and-lgtm-gates) | 10 phases with human review gates |
44
- | | [All 56 Tools](#all-53-tools) | Complete tool reference by category |
44
+ | | [All 56 Tools](#all-56-tools) | Complete tool reference by category |
45
45
  | | [EARS Notation](#ears-notation) | The 6 requirement patterns |
46
46
  | **Enterprise** | [Compliance Frameworks](#compliance-frameworks) | HIPAA, SOC2, GDPR, PCI-DSS, ISO 27001 |
47
47
  | | [Enterprise Ready](#enterprise-ready) | Security, audit trail, quality gates |
@@ -51,7 +51,7 @@
51
51
 
52
52
  ## What is Specky?
53
53
 
54
- Specky is an open-source **MCP server** that turns the [Spec-Kit](https://github.com/paulasilvatech/spec-kit) SDD methodology into a **programmable enforcement engine** with 53 validated tools. It provides a deterministic pipeline from **any input** (meeting transcripts, documents, Figma designs, or natural language prompts) through specifications, architecture, infrastructure as code, implementation, and deployment.
54
+ Specky is an open-source **MCP server** that turns the [Spec-Kit](https://github.com/paulasilvatech/spec-kit) SDD methodology into a **programmable enforcement engine** with 56 validated tools. It provides a deterministic pipeline from **any input** (meeting transcripts, documents, Figma designs, or natural language prompts) through specifications, architecture, infrastructure as code, implementation, and deployment.
55
55
 
56
56
  **Spec-Kit** provides the methodology: EARS notation, gated pipeline phases, constitution model, quality patterns. **Specky** reimplements all of it as MCP tools and adds programmatic enforcement: a state machine that blocks phase-skipping, an EARS validator, cross-artifact analysis, compliance engines, test generation, and MCP-to-MCP routing.
57
57
 
@@ -132,51 +132,9 @@ Specky adds a **deterministic engine** between your intent and your code:
132
132
  ### Step 2: Install
133
133
 
134
134
  <details open>
135
- <summary><strong>Per Workspace: Per Workspace (recommended)</strong></summary>
135
+ <summary><strong>Global (recommended): Install once, use everywhere</strong></summary>
136
136
 
137
- No global install needed. You add a config file to the repo and `npx` handles the rest.
138
-
139
- **For VS Code with GitHub Copilot** create `.vscode/mcp.json` in the repo root:
140
-
141
- ```json
142
- {
143
- "servers": {
144
- "specky": {
145
- "command": "npx",
146
- "args": ["-y", "specky-sdd"],
147
- "env": {
148
- "SDD_WORKSPACE": "${workspaceFolder}"
149
- }
150
- }
151
- }
152
- }
153
- ```
154
-
155
- **For Claude Code** run this once inside the repo:
156
-
157
- ```bash
158
- claude mcp add specky -- npx -y specky-sdd
159
- ```
160
-
161
- **For Cursor** add to MCP settings (Settings > MCP Servers):
162
-
163
- ```json
164
- {
165
- "specky": {
166
- "command": "npx",
167
- "args": ["-y", "specky-sdd"]
168
- }
169
- }
170
- ```
171
-
172
- > **Tip:** Commit the config file to Git so every team member gets Specky automatically when they clone the repo.
173
-
174
- </details>
175
-
176
- <details>
177
- <summary><strong>Global: Global (once, all repos)</strong></summary>
178
-
179
- Install globally and Specky is available everywhere on your machine:
137
+ Install globally so `specky-sdd` is always available no re-download on every run:
180
138
 
181
139
  ```bash
182
140
  npm install -g specky-sdd
@@ -222,6 +180,33 @@ claude mcp add specky -- specky-sdd
222
180
 
223
181
  </details>
224
182
 
183
+ <details>
184
+ <summary><strong>Per Workspace (alternative): npx, no global install</strong></summary>
185
+
186
+ Add a config file to the repo so teammates get Specky automatically on clone — no global install needed.
187
+
188
+ **VS Code** (`.vscode/mcp.json`):
189
+ ```json
190
+ {
191
+ "servers": {
192
+ "specky": {
193
+ "command": "npx",
194
+ "args": ["-y", "specky-sdd"],
195
+ "env": { "SDD_WORKSPACE": "${workspaceFolder}" }
196
+ }
197
+ }
198
+ }
199
+ ```
200
+
201
+ **Claude Code**:
202
+ ```bash
203
+ claude mcp add specky -- npx -y specky-sdd
204
+ ```
205
+
206
+ > Commit `.vscode/mcp.json` to Git so every team member gets Specky automatically.
207
+
208
+ </details>
209
+
225
210
  <details>
226
211
  <summary><strong>Docker: Docker (HTTP mode, no Node.js required)</strong></summary>
227
212
 
@@ -255,7 +240,7 @@ Open your AI IDE and type:
255
240
  > What tools does Specky have?
256
241
  ```
257
242
 
258
- The AI should list the 53 SDD tools. If you see them, Specky is working.
243
+ The AI should list the 56 SDD tools. If you see them, Specky is working.
259
244
 
260
245
  ### Try It Now
261
246
 
@@ -541,7 +526,7 @@ The AI calls:
541
526
 
542
527
  The AI calls `sdd_export_work_items` + `sdd_create_pr` → generates work item payloads and PR body with full spec traceability.
543
528
 
544
- > **Next:** **Next:** Learn about [EARS notation](#ears-notation) to understand the requirement patterns, or see [All 56 Tools](#all-53-tools) for a complete reference.
529
+ > **Next:** **Next:** Learn about [EARS notation](#ears-notation) to understand the requirement patterns, or see [All 56 Tools](#all-56-tools) for a complete reference.
545
530
 
546
531
 
547
532
  ## Brownfield Project: Add Features to Existing Code
@@ -883,13 +868,13 @@ Together they form the **SDD layer** of the GitHub + Microsoft enterprise platfo
883
868
  {
884
869
  "servers": {
885
870
  "specky": {
886
- "command": "npx",
887
- "args": ["-y", "specky-sdd"]
871
+ "command": "specky-sdd"
888
872
  }
889
873
  }
890
874
  }
891
875
  ```
892
876
 
877
+ > **Note:** This example assumes `specky-sdd` is installed globally (`npm install -g specky-sdd`). See the [Installation](#installation) section for per-workspace and Docker alternatives.
893
878
 
894
879
  ## Project Configuration
895
880
 
@@ -1057,7 +1042,7 @@ Every pipeline phase produces a traceable artifact in `.specs/NNN-feature/`. The
1057
1042
  - **EARS Validator** — programmatic requirement quality enforcement
1058
1043
  - **Cross-Artifact Analysis** — automatic alignment checking between spec, design, and tasks
1059
1044
  - **Phase Enforcement** — state machine blocks phase-skipping; required files gate advancement
1060
- - **321 unit tests** — CI enforces thresholds on every push
1045
+ - **507 unit tests** — CI enforces thresholds on every push
1061
1046
 
1062
1047
 
1063
1048
  ## Development
@@ -1071,7 +1056,7 @@ npm install
1071
1056
  # Build
1072
1057
  npm run build
1073
1058
 
1074
- # Run tests (292 tests coverage)
1059
+ # Run tests (507 tests)
1075
1060
  npm test
1076
1061
 
1077
1062
  # Run tests with coverage report
@@ -1092,7 +1077,7 @@ curl http://localhost:3200/health
1092
1077
 
1093
1078
  ## Roadmap
1094
1079
 
1095
- ### v3.0 (current)
1080
+ ### v3.1 (current)
1096
1081
 
1097
1082
  | Capability | Status |
1098
1083
  |------------|--------|
@@ -1105,15 +1090,22 @@ curl http://localhost:3200/health
1105
1090
  | Turnkey spec from natural language (`sdd_turnkey_spec`) | Stable |
1106
1091
  | Property-based testing with fast-check and Hypothesis (`sdd_generate_pbt`) | Stable |
1107
1092
  | Checkpoint/restore for spec artifacts | Stable |
1108
- | 7 automation hooks (security-scan blocks on secrets) | Stable |
1093
+ | Intelligence layer: model routing hints on all tools | Stable |
1094
+ | Context tiering: Hot/Domain/Cold with token savings | Stable |
1095
+ | Cognitive debt metrics at LGTM gates | Stable |
1096
+ | Test traceability: REQ-ID → test coverage mapping | Stable |
1097
+ | Intent drift detection with amendment suggestions | Stable |
1098
+ | 10 automation hooks (2 blocking) | Stable |
1109
1099
  | 12 Claude Code commands + 5 Copilot agents | Stable |
1110
1100
  | 6 compliance frameworks (HIPAA, SOC2, GDPR, PCI-DSS, ISO 27001) | Stable |
1111
1101
  | 6 input types (transcript, PDF, DOCX, Figma, codebase, raw text) | Stable |
1112
1102
  | Test generation for 6 frameworks (vitest, jest, playwright, pytest, junit, xunit) | Stable |
1113
1103
  | MCP-to-MCP routing (GitHub, Azure DevOps, Jira, Terraform, Figma, Docker) | Stable |
1114
- | 321 unit tests | Stable |
1104
+ | SBOM + cosign signing on Docker image | Stable |
1105
+ | JSONL audit logger (optional) | Stable |
1106
+ | 507 unit tests | Stable |
1115
1107
 
1116
- ### v3.1+ (planned)
1108
+ ### v3.2+ (planned)
1117
1109
 
1118
1110
  | Feature | Description |
1119
1111
  |---------|-------------|
@@ -1122,9 +1114,10 @@ curl http://localhost:3200/health
1122
1114
  | Internationalization | Spec templates in PT-BR, ES, FR, DE, JA |
1123
1115
  | Automated shrinking | fast-check/Hypothesis shrinking feedback into spec refinement |
1124
1116
  | RBAC | Role-based access control for phase advancement |
1125
- | Persistent audit log | Centralized audit trail beyond `.sdd-state.json` |
1117
+ | Centralized audit log | SIEM-integrated tamper-evident audit trail |
1126
1118
  | Multi-tenant | Isolated workspaces for multiple teams |
1127
- | Analytics dashboard | Specification quality metrics over time |
1119
+ | Rate limiting | Request throttling for HTTP transport |
1120
+ | SSO / SAML | Federated identity for enterprise auth |
1128
1121
 
1129
1122
  Have a feature request? [Open an issue](https://github.com/paulasilvatech/specky/issues).
1130
1123
 
package/SECURITY.md CHANGED
@@ -26,7 +26,7 @@ If you discover a security vulnerability in Specky, please report it responsibly
26
26
 
27
27
  ### Input Validation
28
28
 
29
- All 53 MCP tool inputs are validated using [Zod](https://zod.dev/) schemas with `.strict()` mode. No unknown fields are accepted. This prevents injection of unexpected parameters through the MCP JSON-RPC interface.
29
+ All 56 MCP tool inputs are validated using [Zod](https://zod.dev/) schemas with `.strict()` mode. No unknown fields are accepted. This prevents injection of unexpected parameters through the MCP JSON-RPC interface.
30
30
 
31
31
  ```
32
32
  AI Client → JSON-RPC → Zod .strict() validation → Service layer
@@ -116,7 +116,7 @@ When using HTTP transport mode (`--http`), bind to `localhost` only. Do not expo
116
116
 
117
117
  | Practice | Details |
118
118
  |----------|---------|
119
- | **Use stdio mode by default** | `npx specky-sdd` — no network exposure, process-level isolation |
119
+ | **Use stdio mode by default** | `specky-sdd` (global install) — no network exposure, process-level isolation |
120
120
  | **Never expose HTTP mode publicly** | `--http` mode has no authentication or TLS. If you need remote access, place behind a reverse proxy (nginx, Caddy, Traefik) with TLS and authentication |
121
121
  | **Protect `.specs/` directory** | Contains architecture details, API contracts, security models. Add to `.gitignore` for sensitive projects, or use a private repository |
122
122
  | **Protect `.checkpoints/`** | Contains full copies of all spec artifacts. Treat like source code |
@@ -183,3 +183,62 @@ These are **architectural guarantees**, not configuration options:
183
183
  - **Never logs sensitive data** — logs go to stderr, contain only operational messages
184
184
 
185
185
  See [docs/SYSTEM-DESIGN.md](docs/SYSTEM-DESIGN.md) for the complete security architecture with threat model.
186
+
187
+ ## NPX Supply Chain Risk
188
+
189
+ Running `npx specky-sdd` without a pinned version downloads the latest package from npm on every invocation. This creates a supply-chain exposure: a compromised npm registry entry or a typosquat could execute malicious code in your environment before Specky even starts.
190
+
191
+ **Recommended mitigations:**
192
+
193
+ | Approach | Risk reduction | Notes |
194
+ |----------|---------------|-------|
195
+ | `npm install -g specky-sdd` | **High** — fetches once, runs offline after | Recommended default |
196
+ | `npm install -g specky-sdd@3.2.0` | **Higher** — version-pinned, no silent upgrades | Best for reproducible environments |
197
+ | Docker (`ghcr.io/paulasilvatech/specky:3.2.0`) | **Highest** — immutable image by digest | Best for CI/CD and air-gapped |
198
+ | `npx specky-sdd` (unversioned) | **Baseline** — re-downloads on each invocation | Avoid in production pipelines |
199
+
200
+ **Workspace isolation pattern** (CI/CD):
201
+
202
+ ```bash
203
+ # Install into a local vendor directory — no global write permissions needed
204
+ npm install specky-sdd@3.2.0 --prefix ./vendor --ignore-scripts
205
+ ./vendor/node_modules/.bin/specky-sdd
206
+ ```
207
+
208
+ The `--ignore-scripts` flag prevents npm lifecycle scripts from running during install, which is a common supply-chain attack vector.
209
+
210
+ ## MCP Security Framework Compliance
211
+
212
+ ### CoSAI MCP Security White Paper — Threat Category Coverage
213
+
214
+ Specky addresses the 12 threat categories from the CoSAI MCP Security White Paper:
215
+
216
+ | ID | Threat Category | Specky Mitigation |
217
+ |----|----------------|-------------------|
218
+ | T-01 | Tool Poisoning | Zod `.strict()` on all 57 tool inputs — no unknown fields accepted |
219
+ | T-02 | Prompt Injection via Tool Results | No user-controlled data interpolated into tool responses |
220
+ | T-03 | Excessive Tool Permissions | Thin Tools pattern — each tool does exactly one operation |
221
+ | T-04 | Insecure Data Storage | FileManager enforces workspace boundary; no secrets in files |
222
+ | T-05 | Insufficient Input Validation | All inputs validated with Zod schemas before reaching service layer |
223
+ | T-06 | Uncontrolled Resource Consumption | Rate limiter (opt-in) for HTTP mode; stdio is single-session |
224
+ | T-07 | Broken Access Control | RBAC engine (opt-in) — viewer/contributor/admin roles; path sanitization |
225
+ | T-08 | Supply Chain Compromise | 2 runtime deps only; Dependabot enabled; global install recommended |
226
+ | T-09 | Credential Leakage | No secrets in logs (stderr only); no credentials in spec artifacts |
227
+ | T-10 | Insecure Communication | stdio mode has zero network exposure; HTTP mode binds to localhost |
228
+ | T-11 | State Manipulation | HMAC-SHA256 signature on `.sdd-state.json`; tamper detection on load |
229
+ | T-12 | Audit Trail Integrity | Hash-chained JSONL audit log; rotation; syslog/OTLP export (opt-in) |
230
+
231
+ ### OWASP MCP Top 10 Coverage
232
+
233
+ | # | OWASP MCP Risk | Specky Mitigation |
234
+ |---|---------------|-------------------|
235
+ | M1 | Prompt Injection | No dynamic content in tool descriptions; outputs are structured JSON |
236
+ | M2 | Insecure Tool Design | Thin Tools / Fat Services — tools are pure input/output wrappers |
237
+ | M3 | Excessive Agency | No shell execution, no outbound network, no code eval |
238
+ | M4 | Insufficient Authentication | HTTP mode delegates to reverse proxy; stdio is process-isolated |
239
+ | M5 | Broken Object-Level Authorization | RBAC engine enforces per-tool access by role (opt-in) |
240
+ | M6 | Sensitive Data Exposure | FileManager path boundary; no credential logging; workspace-scoped I/O |
241
+ | M7 | Insecure Plugin Composition | Fixed tool set at startup — no dynamic plugin loading |
242
+ | M8 | Improper Error Handling | All service errors caught; tools return structured error responses |
243
+ | M9 | Insufficient Logging | Hash-chained audit trail; syslog export available |
244
+ | M10 | Vulnerable Dependencies | 2 runtime deps; `npm audit` in CI; Dependabot on GitHub |
package/dist/config.d.ts CHANGED
@@ -3,10 +3,23 @@ export interface SpeckyConfig {
3
3
  default_framework?: string;
4
4
  compliance_frameworks?: string[];
5
5
  audit_enabled?: boolean;
6
+ rate_limit?: {
7
+ enabled?: boolean;
8
+ max_requests_per_minute?: number;
9
+ burst?: number;
10
+ };
11
+ audit?: {
12
+ export_format?: "jsonl" | "syslog" | "otlp";
13
+ max_file_size_mb?: number;
14
+ };
15
+ rbac?: {
16
+ enabled?: boolean;
17
+ default_role?: "viewer" | "contributor" | "admin";
18
+ };
6
19
  }
7
20
  /**
8
21
  * Load `.specky/config.yml` from workspace root. Returns defaults if not found.
9
- * Uses simple YAML key-value parsing (no dependency on yaml library).
22
+ * Handles both flat keys (key: value) and nested blocks (key:\n sub: value).
10
23
  */
11
24
  export declare function loadConfig(workspaceRoot: string): Required<SpeckyConfig>;
12
25
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAcxE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAC;KACnD,CAAC;CACH;AAYD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CA6DxE"}
package/dist/config.js CHANGED
@@ -9,57 +9,129 @@ const DEFAULTS = {
9
9
  default_framework: "vitest",
10
10
  compliance_frameworks: ["general"],
11
11
  audit_enabled: false,
12
+ rate_limit: { enabled: false, max_requests_per_minute: 60, burst: 10 },
13
+ audit: { export_format: "jsonl", max_file_size_mb: 10 },
14
+ rbac: { enabled: false, default_role: "contributor" },
12
15
  };
13
16
  /**
14
17
  * Load `.specky/config.yml` from workspace root. Returns defaults if not found.
15
- * Uses simple YAML key-value parsing (no dependency on yaml library).
18
+ * Handles both flat keys (key: value) and nested blocks (key:\n sub: value).
16
19
  */
17
20
  export function loadConfig(workspaceRoot) {
18
21
  const configPath = join(workspaceRoot, ".specky", "config.yml");
19
22
  try {
20
23
  const raw = readFileSync(configPath, "utf-8");
21
- const parsed = parseSimpleYaml(raw);
24
+ const flat = parseSimpleYaml(raw);
22
25
  return {
23
- templates_path: typeof parsed["templates_path"] === "string" ? parsed["templates_path"] : DEFAULTS.templates_path,
24
- default_framework: typeof parsed["default_framework"] === "string" ? parsed["default_framework"] : DEFAULTS.default_framework,
25
- compliance_frameworks: parseArrayValue(parsed["compliance_frameworks"]) || DEFAULTS.compliance_frameworks,
26
- audit_enabled: parsed["audit_enabled"] === "true" || parsed["audit_enabled"] === true ? true : DEFAULTS.audit_enabled,
26
+ templates_path: typeof flat["templates_path"] === "string"
27
+ ? flat["templates_path"]
28
+ : DEFAULTS.templates_path,
29
+ default_framework: typeof flat["default_framework"] === "string"
30
+ ? flat["default_framework"]
31
+ : DEFAULTS.default_framework,
32
+ compliance_frameworks: parseArrayValue(flat["compliance_frameworks"]) ||
33
+ DEFAULTS.compliance_frameworks,
34
+ audit_enabled: flat["audit_enabled"] === "true" || flat["audit_enabled"] === true
35
+ ? true
36
+ : DEFAULTS.audit_enabled,
37
+ rate_limit: {
38
+ enabled: flat["rate_limit.enabled"] === "true" ||
39
+ flat["rate_limit.enabled"] === true
40
+ ? true
41
+ : DEFAULTS.rate_limit.enabled,
42
+ max_requests_per_minute: typeof flat["rate_limit.max_requests_per_minute"] === "string"
43
+ ? parseInt(flat["rate_limit.max_requests_per_minute"], 10) ||
44
+ DEFAULTS.rate_limit.max_requests_per_minute
45
+ : DEFAULTS.rate_limit.max_requests_per_minute,
46
+ burst: typeof flat["rate_limit.burst"] === "string"
47
+ ? parseInt(flat["rate_limit.burst"], 10) ||
48
+ DEFAULTS.rate_limit.burst
49
+ : DEFAULTS.rate_limit.burst,
50
+ },
51
+ audit: {
52
+ export_format: isValidExportFormat(flat["audit.export_format"])
53
+ ? flat["audit.export_format"]
54
+ : DEFAULTS.audit.export_format,
55
+ max_file_size_mb: typeof flat["audit.max_file_size_mb"] === "string"
56
+ ? parseInt(flat["audit.max_file_size_mb"], 10) ||
57
+ DEFAULTS.audit.max_file_size_mb
58
+ : DEFAULTS.audit.max_file_size_mb,
59
+ },
60
+ rbac: {
61
+ enabled: flat["rbac.enabled"] === "true" || flat["rbac.enabled"] === true
62
+ ? true
63
+ : DEFAULTS.rbac.enabled,
64
+ default_role: isValidRole(flat["rbac.default_role"])
65
+ ? flat["rbac.default_role"]
66
+ : DEFAULTS.rbac.default_role,
67
+ },
27
68
  };
28
69
  }
29
70
  catch {
30
71
  return { ...DEFAULTS };
31
72
  }
32
73
  }
74
+ /**
75
+ * Parse simple YAML — flat key:value pairs plus indented blocks.
76
+ * Indented child keys are flattened as "parent.child" dot-notation keys.
77
+ */
33
78
  function parseSimpleYaml(raw) {
34
79
  const result = {};
80
+ let currentParent = "";
35
81
  for (const line of raw.split("\n")) {
36
- const trimmed = line.trim();
37
- if (!trimmed || trimmed.startsWith("#"))
82
+ if (!line.trim() || line.trim().startsWith("#"))
38
83
  continue;
84
+ const indent = line.length - line.trimStart().length;
85
+ const trimmed = line.trim();
39
86
  const colonIdx = trimmed.indexOf(":");
40
87
  if (colonIdx === -1)
41
88
  continue;
42
89
  const key = trimmed.slice(0, colonIdx).trim();
43
90
  const value = trimmed.slice(colonIdx + 1).trim();
44
- if (value === "true")
45
- result[key] = true;
46
- else if (value === "false")
47
- result[key] = false;
48
- else
49
- result[key] = value;
91
+ if (indent === 0) {
92
+ currentParent = key;
93
+ if (value) {
94
+ // Top-level key with value
95
+ if (value === "true")
96
+ result[key] = true;
97
+ else if (value === "false")
98
+ result[key] = false;
99
+ else
100
+ result[key] = value;
101
+ }
102
+ // else: this is a parent block key with no value — children follow
103
+ }
104
+ else {
105
+ // Child key — store as "parent.child"
106
+ const flatKey = `${currentParent}.${key}`;
107
+ if (value === "true")
108
+ result[flatKey] = true;
109
+ else if (value === "false")
110
+ result[flatKey] = false;
111
+ else
112
+ result[flatKey] = value;
113
+ }
50
114
  }
51
115
  return result;
52
116
  }
117
+ function isValidExportFormat(v) {
118
+ return v === "jsonl" || v === "syslog" || v === "otlp";
119
+ }
120
+ function isValidRole(v) {
121
+ return v === "viewer" || v === "contributor" || v === "admin";
122
+ }
53
123
  function parseArrayValue(value) {
54
124
  if (typeof value !== "string" || !value)
55
125
  return null;
56
- // Handle inline YAML array: [item1, item2]
57
126
  if (value.startsWith("[") && value.endsWith("]")) {
58
- return value.slice(1, -1).split(",").map(s => s.trim().replace(/"/g, "")).filter(Boolean);
127
+ return value
128
+ .slice(1, -1)
129
+ .split(",")
130
+ .map((s) => s.trim().replace(/"/g, ""))
131
+ .filter(Boolean);
59
132
  }
60
- // Handle comma-separated
61
133
  if (value.includes(",")) {
62
- return value.split(",").map(s => s.trim()).filter(Boolean);
134
+ return value.split(",").map((s) => s.trim()).filter(Boolean);
63
135
  }
64
136
  return [value];
65
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,QAAQ,GAA2B;IACvC,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,QAAQ;IAC3B,qBAAqB,EAAE,CAAC,SAAS,CAAC;IAClC,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,aAAqB;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO;YACL,cAAc,EAAE,OAAO,MAAM,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc;YACjH,iBAAiB,EAAE,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB;YAC7H,qBAAqB,EAAE,eAAe,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,QAAQ,CAAC,qBAAqB;YACzG,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa;SACtH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,KAAK,KAAK,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aACpC,IAAI,KAAK,KAAK,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACrD,2CAA2C;IAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5F,CAAC;IACD,yBAAyB;IACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare const VERSION: string;
6
6
  /** Server name for MCP handshake */
7
7
  export declare const SERVER_NAME = "specky";
8
8
  /** Total tool count for ecosystem check */
9
- export declare const TOTAL_TOOLS = 56;
9
+ export declare const TOTAL_TOOLS = 57;
10
10
  /**
11
11
  * MCP Ecosystem — Recommended external MCP servers.
12
12
  * Each entry describes a server that enhances Specky's capabilities.
@@ -195,6 +195,7 @@ export declare const TOOL_NAMES: {
195
195
  readonly CHECK_ECOSYSTEM: "sdd_check_ecosystem";
196
196
  readonly MODEL_ROUTING: "sdd_model_routing";
197
197
  readonly CONTEXT_STATUS: "sdd_context_status";
198
+ readonly CHECK_ACCESS: "sdd_check_access";
198
199
  };
199
200
  export declare const TOOL_IMPORT_DOCUMENT = "sdd_import_document";
200
201
  export declare const TOOL_BATCH_IMPORT = "sdd_batch_import";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -10,7 +10,7 @@ export const VERSION = _pkg.version;
10
10
  /** Server name for MCP handshake */
11
11
  export const SERVER_NAME = "specky";
12
12
  /** Total tool count for ecosystem check */
13
- export const TOTAL_TOOLS = 56;
13
+ export const TOTAL_TOOLS = 57;
14
14
  /**
15
15
  * MCP Ecosystem — Recommended external MCP servers.
16
16
  * Each entry describes a server that enhances Specky's capabilities.
@@ -262,6 +262,8 @@ export const TOOL_NAMES = {
262
262
  MODEL_ROUTING: "sdd_model_routing",
263
263
  // Context Tiering
264
264
  CONTEXT_STATUS: "sdd_context_status",
265
+ // RBAC
266
+ CHECK_ACCESS: "sdd_check_access",
265
267
  };
266
268
  // Input & Conversion
267
269
  export const TOOL_IMPORT_DOCUMENT = "sdd_import_document";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}