specky-sdd 3.1.0 → 3.2.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.
- package/CHANGELOG.md +51 -0
- package/README.md +76 -95
- package/SECURITY.md +61 -2
- package/dist/config.d.ts +14 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -18
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +48 -3
- package/dist/index.js.map +1 -1
- package/dist/services/audit-logger.d.ts +20 -4
- package/dist/services/audit-logger.d.ts.map +1 -1
- package/dist/services/audit-logger.js +91 -12
- package/dist/services/audit-logger.js.map +1 -1
- package/dist/services/rate-limiter.d.ts +33 -0
- package/dist/services/rate-limiter.d.ts.map +1 -0
- package/dist/services/rate-limiter.js +61 -0
- package/dist/services/rate-limiter.js.map +1 -0
- package/dist/services/rbac-engine.d.ts +29 -0
- package/dist/services/rbac-engine.d.ts.map +1 -0
- package/dist/services/rbac-engine.js +85 -0
- package/dist/services/rbac-engine.js.map +1 -0
- package/dist/services/state-machine.d.ts +10 -2
- package/dist/services/state-machine.d.ts.map +1 -1
- package/dist/services/state-machine.js +36 -7
- package/dist/services/state-machine.js.map +1 -1
- package/dist/services/template-engine.js +1 -1
- package/dist/services/template-engine.js.map +1 -1
- package/dist/templates/templates/analysis.md +55 -0
- package/dist/templates/templates/api-docs.md +40 -0
- package/dist/templates/templates/bugfix.md +46 -0
- package/dist/templates/templates/checklist.md +29 -0
- package/dist/templates/templates/compliance.md +28 -0
- package/dist/templates/templates/constitution.md +57 -0
- package/dist/templates/templates/cross-analysis.md +46 -0
- package/dist/templates/templates/data-model.md +35 -0
- package/dist/templates/templates/design.md +104 -0
- package/dist/templates/templates/devcontainer.md +36 -0
- package/dist/templates/templates/dockerfile.md +34 -0
- package/dist/templates/templates/journey.md +73 -0
- package/dist/templates/templates/onboarding.md +49 -0
- package/dist/templates/templates/research.md +39 -0
- package/dist/templates/templates/runbook.md +40 -0
- package/dist/templates/templates/specification.md +50 -0
- package/dist/templates/templates/sync-report.md +44 -0
- package/dist/templates/templates/tasks.md +39 -0
- package/dist/templates/terraform.md +38 -0
- package/dist/templates/test-stub.md +34 -0
- package/dist/templates/user-stories.md +39 -0
- package/dist/templates/verification.md +33 -0
- package/dist/templates/work-items.md +27 -0
- package/dist/tools/rbac.d.ts +8 -0
- package/dist/tools/rbac.d.ts.map +1 -0
- package/dist/tools/rbac.js +64 -0
- package/dist/tools/rbac.js.map +1 -0
- package/package.json +3 -6
- package/hooks/auto-checkpoint.md +0 -22
- package/hooks/auto-docs.md +0 -53
- package/hooks/auto-test.md +0 -61
- package/hooks/changelog.md +0 -74
- package/hooks/release-gate.md +0 -82
- package/hooks/security-scan.md +0 -72
- package/hooks/spec-quality.md +0 -55
- package/hooks/spec-sync.md +0 -80
- package/hooks/srp-validator.md +0 -86
- package/hooks/task-tracer.md +0 -63
- package/media/specky-icon-128.png +0 -0
- package/media/specky-icon-256.png +0 -0
- package/references/design-patterns.md +0 -434
- package/references/ears-notation.md +0 -605
- package/references/spec-templates.md +0 -936
- /package/{templates → dist/templates}/analysis.md +0 -0
- /package/{templates → dist/templates}/api-docs.md +0 -0
- /package/{templates → dist/templates}/bugfix.md +0 -0
- /package/{templates → dist/templates}/checklist.md +0 -0
- /package/{templates → dist/templates}/compliance.md +0 -0
- /package/{templates → dist/templates}/constitution.md +0 -0
- /package/{templates → dist/templates}/cross-analysis.md +0 -0
- /package/{templates → dist/templates}/data-model.md +0 -0
- /package/{templates → dist/templates}/design.md +0 -0
- /package/{templates → dist/templates}/devcontainer.md +0 -0
- /package/{templates → dist/templates}/dockerfile.md +0 -0
- /package/{templates → dist/templates}/journey.md +0 -0
- /package/{templates → dist/templates}/onboarding.md +0 -0
- /package/{templates → dist/templates}/research.md +0 -0
- /package/{templates → dist/templates}/runbook.md +0 -0
- /package/{templates → dist/templates}/specification.md +0 -0
- /package/{templates → dist/templates}/sync-report.md +0 -0
- /package/{templates → dist/templates}/tasks.md +0 -0
- /package/{templates → dist/templates/templates}/terraform.md +0 -0
- /package/{templates → dist/templates/templates}/test-stub.md +0 -0
- /package/{templates → dist/templates/templates}/user-stories.md +0 -0
- /package/{templates → dist/templates/templates}/verification.md +0 -0
- /package/{templates → dist/templates/templates}/work-items.md +0 -0
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
|
-
*
|
|
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
|
|
24
|
+
const flat = parseSimpleYaml(raw);
|
|
22
25
|
return {
|
|
23
|
-
templates_path: typeof
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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 (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
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
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -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 =
|
|
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";
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,OAAO,QAAe,CAAC;AAEpC,oCAAoC;AACpC,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC,2CAA2C;AAC3C,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqGhB,CAAC;AAEX,4DAA4D;AAC5D,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAEzC,sBAAsB;AACtB,eAAO,MAAM,UAAU,oBAAoB,CAAC;AAE5C,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iCAAiC;AACjC,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,qDAAqD;AACrD,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAUrD,CAAC;AAEF;;;GAGG;AACH,oBAAY,KAAK;IACf,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,gDAAgD;AAChD,eAAO,MAAM,WAAW,EAAE,SAAS,KAAK,EAWvC,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAWjE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,UAAU
|
|
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 =
|
|
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";
|
package/dist/constants.js.map
CHANGED
|
@@ -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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"}
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,9 @@ import { CognitiveDebtEngine } from "./services/cognitive-debt-engine.js";
|
|
|
55
55
|
import { IntentDriftEngine } from "./services/intent-drift-engine.js";
|
|
56
56
|
import { TestResultParser } from "./services/test-result-parser.js";
|
|
57
57
|
import { TestTraceabilityMapper } from "./services/test-traceability-mapper.js";
|
|
58
|
+
import { RateLimiter } from "./services/rate-limiter.js";
|
|
59
|
+
import { RbacEngine } from "./services/rbac-engine.js";
|
|
60
|
+
import { registerRbacTools } from "./tools/rbac.js";
|
|
58
61
|
// Resolve workspace root
|
|
59
62
|
const workspaceRoot = process.env["SDD_WORKSPACE"] || process.cwd();
|
|
60
63
|
console.error(`[specky] Workspace root: ${workspaceRoot}`);
|
|
@@ -68,10 +71,26 @@ if (config.audit_enabled)
|
|
|
68
71
|
const server = new McpServer({
|
|
69
72
|
name: SERVER_NAME,
|
|
70
73
|
version: VERSION,
|
|
74
|
+
title: "Specky",
|
|
75
|
+
description: "57 MCP tools for Spec-Driven Development. 10-phase enforced pipeline, EARS notation, 17 diagram types, 6 compliance frameworks.",
|
|
76
|
+
websiteUrl: "https://paulasilvatech.github.io/specky-site/",
|
|
77
|
+
icons: [
|
|
78
|
+
{
|
|
79
|
+
src: "https://raw.githubusercontent.com/paulasilvatech/specky/main/media/specky-brand-icon.svg",
|
|
80
|
+
mimeType: "image/svg+xml",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
src: "https://raw.githubusercontent.com/paulasilvatech/specky/main/media/specky-icon-128.png",
|
|
84
|
+
mimeType: "image/png",
|
|
85
|
+
sizes: ["128x128"],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
}, {
|
|
89
|
+
instructions: "Specky is a Spec-Driven Development engine. Start with sdd_init to create a project, then follow the 10-phase pipeline: Init → Discover → Specify → Clarify → Design → Tasks → Analyze → Implement → Verify → Release. Use sdd_get_status to check current phase. Reply LGTM at quality gates to advance.",
|
|
71
90
|
});
|
|
72
91
|
// Initialize services (v1)
|
|
73
92
|
const fileManager = new FileManager(workspaceRoot);
|
|
74
|
-
const stateMachine = new StateMachine(fileManager);
|
|
93
|
+
const stateMachine = new StateMachine(fileManager, workspaceRoot);
|
|
75
94
|
const templateEngine = new TemplateEngine(fileManager, config.templates_path || undefined);
|
|
76
95
|
const earsValidator = new EarsValidator();
|
|
77
96
|
const codebaseScanner = new CodebaseScanner(fileManager);
|
|
@@ -87,7 +106,8 @@ const docGenerator = new DocGenerator(fileManager, stateMachine);
|
|
|
87
106
|
const gitManager = new GitManager(fileManager);
|
|
88
107
|
const testGenerator = new TestGenerator(fileManager);
|
|
89
108
|
const pbtGenerator = new PbtGenerator(fileManager);
|
|
90
|
-
const auditLogger = new AuditLogger(workspaceRoot, config.audit_enabled);
|
|
109
|
+
const auditLogger = new AuditLogger(workspaceRoot, config.audit_enabled, config.audit.export_format, config.audit.max_file_size_mb);
|
|
110
|
+
const rbacEngine = new RbacEngine(config.rbac.enabled ?? false, config.rbac.default_role ?? "contributor");
|
|
91
111
|
const metricsGenerator = new MetricsGenerator(fileManager);
|
|
92
112
|
const modelRoutingEngine = new ModelRoutingEngine();
|
|
93
113
|
const contextTieringEngine = new ContextTieringEngine();
|
|
@@ -95,7 +115,7 @@ const cognitiveDebtEngine = new CognitiveDebtEngine();
|
|
|
95
115
|
const intentDriftEngine = new IntentDriftEngine();
|
|
96
116
|
const testResultParser = new TestResultParser();
|
|
97
117
|
const testTraceabilityMapper = new TestTraceabilityMapper();
|
|
98
|
-
// Register all tools (
|
|
118
|
+
// Register all tools (57 total)
|
|
99
119
|
// v1 tools
|
|
100
120
|
registerPipelineTools(server, fileManager, stateMachine, templateEngine, earsValidator);
|
|
101
121
|
registerAnalysisTools(server, fileManager, stateMachine, templateEngine, intentDriftEngine);
|
|
@@ -116,6 +136,7 @@ registerPbtTools(server, fileManager, stateMachine, pbtGenerator);
|
|
|
116
136
|
registerMetricsTools(server, fileManager, stateMachine, metricsGenerator, cognitiveDebtEngine, intentDriftEngine);
|
|
117
137
|
registerRoutingTools(server, modelRoutingEngine);
|
|
118
138
|
registerContextTools(server, fileManager, stateMachine, contextTieringEngine);
|
|
139
|
+
registerRbacTools(server, rbacEngine);
|
|
119
140
|
// Graceful shutdown
|
|
120
141
|
let isShuttingDown = false;
|
|
121
142
|
function handleShutdown(signal) {
|
|
@@ -145,8 +166,32 @@ async function main() {
|
|
|
145
166
|
sessionIdGenerator: () => randomUUID(),
|
|
146
167
|
});
|
|
147
168
|
await server.connect(transport);
|
|
169
|
+
// Rate limiter — only active in HTTP mode when enabled in config
|
|
170
|
+
const rateLimiter = config.rate_limit.enabled
|
|
171
|
+
? new RateLimiter(config.rate_limit.max_requests_per_minute ?? 60, config.rate_limit.burst ?? 10)
|
|
172
|
+
: null;
|
|
173
|
+
if (rateLimiter) {
|
|
174
|
+
console.error(`[specky] Rate limiting enabled: ${config.rate_limit.max_requests_per_minute} rpm, burst ${config.rate_limit.burst}`);
|
|
175
|
+
}
|
|
148
176
|
const httpServer = http.createServer(async (req, res) => {
|
|
149
177
|
if (req.url === "/mcp") {
|
|
178
|
+
// Apply rate limiting before forwarding to MCP handler
|
|
179
|
+
if (rateLimiter) {
|
|
180
|
+
const clientId = req.socket.remoteAddress ?? "unknown";
|
|
181
|
+
const check = rateLimiter.checkRateLimit(clientId);
|
|
182
|
+
if (!check.allowed) {
|
|
183
|
+
const retryAfterSec = Math.ceil((check.retry_after_ms ?? 1000) / 1000);
|
|
184
|
+
res.writeHead(429, {
|
|
185
|
+
"Content-Type": "application/json",
|
|
186
|
+
"Retry-After": String(retryAfterSec),
|
|
187
|
+
});
|
|
188
|
+
res.end(JSON.stringify({
|
|
189
|
+
error: "Too Many Requests",
|
|
190
|
+
retry_after_ms: check.retry_after_ms,
|
|
191
|
+
}));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
150
195
|
await transport.handleRequest(req, res);
|
|
151
196
|
}
|
|
152
197
|
else if (req.url === "/health") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AuditLogger — Enterprise audit trail for SDD tool calls.
|
|
3
3
|
* Appends JSONL entries to .specs/NNN/.audit.jsonl when audit_enabled=true.
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* v3.2.0 enhancements:
|
|
6
|
+
* - Hash-chaining: each entry includes SHA-256 hash of the previous entry line
|
|
7
|
+
* - Log rotation: when file exceeds max_file_size_mb, rotates to .audit.jsonl.1
|
|
8
|
+
* - Export formats: jsonl (default), syslog (RFC 5424), otlp (stub)
|
|
5
9
|
*/
|
|
6
10
|
export interface AuditEntry {
|
|
7
11
|
timestamp: string;
|
|
@@ -11,20 +15,32 @@ export interface AuditEntry {
|
|
|
11
15
|
phase?: string;
|
|
12
16
|
result: "success" | "error";
|
|
13
17
|
summary?: string;
|
|
18
|
+
previous_hash: string;
|
|
14
19
|
}
|
|
15
20
|
export declare class AuditLogger {
|
|
16
21
|
private workspaceRoot;
|
|
17
22
|
private enabled;
|
|
18
|
-
|
|
23
|
+
private exportFormat;
|
|
24
|
+
private maxFileSizeMb;
|
|
25
|
+
private lastHash;
|
|
26
|
+
constructor(workspaceRoot: string, enabled: boolean, exportFormat?: "jsonl" | "syslog" | "otlp", maxFileSizeMb?: number);
|
|
19
27
|
/**
|
|
20
|
-
* Log a tool call to
|
|
21
|
-
* No-ops when
|
|
28
|
+
* Log a tool call to the audit file.
|
|
29
|
+
* No-ops when disabled. Never throws — audit failures must not break tool calls.
|
|
22
30
|
*/
|
|
23
31
|
log(entry: AuditEntry): Promise<void>;
|
|
24
32
|
/** Convenience: log a successful tool call */
|
|
25
33
|
logSuccess(tool: string, specDir: string, featureNumber?: string, phase?: string, summary?: string): Promise<void>;
|
|
26
34
|
/** Convenience: log a failed tool call */
|
|
27
35
|
logError(tool: string, specDir: string, featureNumber?: string, errorMessage?: string): Promise<void>;
|
|
36
|
+
/** Expose current chain hash (for testing and external verification) */
|
|
37
|
+
get currentHash(): string;
|
|
38
|
+
/** Reset chain hash (for testing) */
|
|
39
|
+
resetChain(): void;
|
|
28
40
|
private resolveAuditFile;
|
|
41
|
+
/** Rotate log files when size exceeds threshold */
|
|
42
|
+
private rotateIfNeeded;
|
|
43
|
+
/** Write RFC 5424 syslog format to a parallel .audit.syslog file */
|
|
44
|
+
private appendSyslog;
|
|
29
45
|
}
|
|
30
46
|
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/services/audit-logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/services/audit-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,WAAW;IAIpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IANvB,OAAO,CAAC,QAAQ,CAAsB;gBAG5B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,YAAY,GAAE,OAAO,GAAG,QAAQ,GAAG,MAAgB,EACnD,aAAa,GAAE,MAAW;IAGpC;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3C,8CAA8C;IACxC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAahB,0CAA0C;IACpC,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAYhB,wEAAwE;IACxE,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,qCAAqC;IACrC,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,gBAAgB;IAIxB,mDAAmD;YACrC,cAAc;IA2B5B,oEAAoE;YACtD,YAAY;CAsB3B"}
|
|
@@ -1,20 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AuditLogger — Enterprise audit trail for SDD tool calls.
|
|
3
3
|
* Appends JSONL entries to .specs/NNN/.audit.jsonl when audit_enabled=true.
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* v3.2.0 enhancements:
|
|
6
|
+
* - Hash-chaining: each entry includes SHA-256 hash of the previous entry line
|
|
7
|
+
* - Log rotation: when file exceeds max_file_size_mb, rotates to .audit.jsonl.1
|
|
8
|
+
* - Export formats: jsonl (default), syslog (RFC 5424), otlp (stub)
|
|
5
9
|
*/
|
|
6
|
-
import { appendFile, mkdir } from "node:fs/promises";
|
|
10
|
+
import { appendFile, mkdir, stat, rename, unlink } from "node:fs/promises";
|
|
7
11
|
import { join, dirname } from "node:path";
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
/** Seed value for the first entry's previous_hash field */
|
|
14
|
+
const CHAIN_SEED = "specky-audit-v1";
|
|
15
|
+
/** Max rotated log files to keep */
|
|
16
|
+
const MAX_ROTATIONS = 3;
|
|
8
17
|
export class AuditLogger {
|
|
9
18
|
workspaceRoot;
|
|
10
19
|
enabled;
|
|
11
|
-
|
|
20
|
+
exportFormat;
|
|
21
|
+
maxFileSizeMb;
|
|
22
|
+
lastHash = CHAIN_SEED;
|
|
23
|
+
constructor(workspaceRoot, enabled, exportFormat = "jsonl", maxFileSizeMb = 10) {
|
|
12
24
|
this.workspaceRoot = workspaceRoot;
|
|
13
25
|
this.enabled = enabled;
|
|
26
|
+
this.exportFormat = exportFormat;
|
|
27
|
+
this.maxFileSizeMb = maxFileSizeMb;
|
|
14
28
|
}
|
|
15
29
|
/**
|
|
16
|
-
* Log a tool call to
|
|
17
|
-
* No-ops when
|
|
30
|
+
* Log a tool call to the audit file.
|
|
31
|
+
* No-ops when disabled. Never throws — audit failures must not break tool calls.
|
|
18
32
|
*/
|
|
19
33
|
async log(entry) {
|
|
20
34
|
if (!this.enabled)
|
|
@@ -22,8 +36,21 @@ export class AuditLogger {
|
|
|
22
36
|
try {
|
|
23
37
|
const auditFile = this.resolveAuditFile(entry.spec_dir, entry.feature_number);
|
|
24
38
|
await mkdir(dirname(auditFile), { recursive: true });
|
|
39
|
+
// Rotate if needed before appending
|
|
40
|
+
await this.rotateIfNeeded(auditFile);
|
|
25
41
|
const line = JSON.stringify(entry) + "\n";
|
|
26
|
-
|
|
42
|
+
if (this.exportFormat === "syslog") {
|
|
43
|
+
await this.appendSyslog(auditFile, entry, line);
|
|
44
|
+
}
|
|
45
|
+
else if (this.exportFormat === "otlp") {
|
|
46
|
+
console.error("[specky] OTLP export not yet implemented");
|
|
47
|
+
await appendFile(auditFile, line, "utf-8");
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await appendFile(auditFile, line, "utf-8");
|
|
51
|
+
}
|
|
52
|
+
// Advance chain: hash of the line just written
|
|
53
|
+
this.lastHash = createHash("sha256").update(line.trimEnd()).digest("hex");
|
|
27
54
|
}
|
|
28
55
|
catch {
|
|
29
56
|
// Audit failures must never break the tool call — silently ignore
|
|
@@ -39,6 +66,7 @@ export class AuditLogger {
|
|
|
39
66
|
phase,
|
|
40
67
|
result: "success",
|
|
41
68
|
summary,
|
|
69
|
+
previous_hash: this.lastHash,
|
|
42
70
|
});
|
|
43
71
|
}
|
|
44
72
|
/** Convenience: log a failed tool call */
|
|
@@ -50,15 +78,66 @@ export class AuditLogger {
|
|
|
50
78
|
feature_number: featureNumber,
|
|
51
79
|
result: "error",
|
|
52
80
|
summary: errorMessage,
|
|
81
|
+
previous_hash: this.lastHash,
|
|
53
82
|
});
|
|
54
83
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
84
|
+
/** Expose current chain hash (for testing and external verification) */
|
|
85
|
+
get currentHash() {
|
|
86
|
+
return this.lastHash;
|
|
87
|
+
}
|
|
88
|
+
/** Reset chain hash (for testing) */
|
|
89
|
+
resetChain() {
|
|
90
|
+
this.lastHash = CHAIN_SEED;
|
|
91
|
+
}
|
|
92
|
+
resolveAuditFile(specDir, _featureNumber) {
|
|
61
93
|
return join(this.workspaceRoot, specDir, ".audit.jsonl");
|
|
62
94
|
}
|
|
95
|
+
/** Rotate log files when size exceeds threshold */
|
|
96
|
+
async rotateIfNeeded(auditFile) {
|
|
97
|
+
try {
|
|
98
|
+
const fileStat = await stat(auditFile);
|
|
99
|
+
const thresholdBytes = this.maxFileSizeMb * 1024 * 1024;
|
|
100
|
+
if (fileStat.size <= thresholdBytes)
|
|
101
|
+
return;
|
|
102
|
+
// Rotate: .audit.jsonl.2 → .audit.jsonl.3, .1 → .2, current → .1
|
|
103
|
+
for (let i = MAX_ROTATIONS - 1; i >= 1; i--) {
|
|
104
|
+
const older = `${auditFile}.${i + 1}`;
|
|
105
|
+
const newer = `${auditFile}.${i}`;
|
|
106
|
+
try {
|
|
107
|
+
await unlink(older);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// file may not exist — ignore
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
await rename(newer, older);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// file may not exist — ignore
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
await rename(auditFile, `${auditFile}.1`);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// File doesn't exist yet — nothing to rotate
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Write RFC 5424 syslog format to a parallel .audit.syslog file */
|
|
126
|
+
async appendSyslog(jsonlFile, entry, jsonLine) {
|
|
127
|
+
const syslogFile = jsonlFile.replace(".audit.jsonl", ".audit.syslog");
|
|
128
|
+
// RFC 5424: <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID STRUCTURED-DATA MSG
|
|
129
|
+
// PRI = facility(1=user) * 8 + severity(6=info, 3=error)
|
|
130
|
+
const severity = entry.result === "error" ? 3 : 6;
|
|
131
|
+
const pri = 1 * 8 + severity;
|
|
132
|
+
const hostname = "specky";
|
|
133
|
+
const appName = "specky-sdd";
|
|
134
|
+
const procId = process.pid;
|
|
135
|
+
const msgId = entry.tool;
|
|
136
|
+
const msg = entry.summary ?? entry.result;
|
|
137
|
+
const syslogLine = `<${pri}>1 ${entry.timestamp} ${hostname} ${appName} ${procId} ${msgId} - ${msg}\n`;
|
|
138
|
+
await appendFile(syslogFile, syslogLine, "utf-8");
|
|
139
|
+
// Also keep JSONL copy
|
|
140
|
+
await appendFile(jsonlFile, jsonLine, "utf-8");
|
|
141
|
+
}
|
|
63
142
|
}
|
|
64
143
|
//# sourceMappingURL=audit-logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/services/audit-logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/services/audit-logger.ts"],"names":[],"mappings":"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"}
|