@rsaglobaltech/specgate 0.12.1 → 0.13.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 (48) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +66 -58
  3. package/bin/specgate.ts +35 -0
  4. package/dist/bin/specgate.js +31 -0
  5. package/dist/bin/specgate.js.map +1 -1
  6. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +22 -0
  7. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
  8. package/dist/packages/core/src/domain/DeltaFeature.js +39 -0
  9. package/dist/packages/core/src/domain/DeltaFeature.js.map +1 -0
  10. package/dist/packages/core/src/domain/DerivedMatrix.js +25 -19
  11. package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
  12. package/dist/packages/core/test/unit/delta-feature.test.js +74 -0
  13. package/dist/packages/core/test/unit/delta-feature.test.js.map +1 -0
  14. package/dist/packages/mcp-spec-driven/src/native-tools.js +256 -0
  15. package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -0
  16. package/dist/packages/mcp-spec-driven/src/server.js +276 -0
  17. package/dist/packages/mcp-spec-driven/src/server.js.map +1 -0
  18. package/dist/packages/mcp-spec-driven/src/tools.js +667 -0
  19. package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -0
  20. package/dist/scripts/agents/init.js +1 -1
  21. package/dist/scripts/agents/init.js.map +1 -1
  22. package/dist/scripts/alm/cli.js +4 -0
  23. package/dist/scripts/alm/cli.js.map +1 -1
  24. package/dist/scripts/change/instructions.js +5 -4
  25. package/dist/scripts/change/instructions.js.map +1 -1
  26. package/dist/scripts/cli/commands/config/CiInitCommand.js +47 -3
  27. package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
  28. package/dist/scripts/cli/commands/harness/RunCommand.js +3 -2
  29. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  30. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js +7 -1
  31. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js.map +1 -1
  32. package/dist/scripts/cli/commands/mcp/index.js +52 -0
  33. package/dist/scripts/cli/commands/mcp/index.js.map +1 -1
  34. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +38 -0
  35. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
  36. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +11 -3
  37. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
  38. package/dist/scripts/cli/commands/spec/DoneCommand.js +20 -6
  39. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  40. package/dist/scripts/docs/nav.js +5 -0
  41. package/dist/scripts/docs/nav.js.map +1 -1
  42. package/dist/scripts/gen_mcp_tools.js +17 -4
  43. package/dist/scripts/gen_mcp_tools.js.map +1 -1
  44. package/dist/scripts/lib/derived-writes.js +21 -6
  45. package/dist/scripts/lib/derived-writes.js.map +1 -1
  46. package/dist/scripts/lib/surface.js +10 -7
  47. package/dist/scripts/lib/surface.js.map +1 -1
  48. package/package.json +12 -3
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.writeMessage = exports.readMessage = exports.handleMessage = exports.defaultServer = exports.McpServer = void 0;
38
+ /**
39
+ * MCP server for create-spec-driven-app projects.
40
+ *
41
+ * Implements the Model Context Protocol over stdio (JSON-RPC 2.0).
42
+ * Supported methods: initialize, tools/list, tools/call.
43
+ *
44
+ * This is a minimal hand-rolled implementation — no @modelcontextprotocol/sdk
45
+ * dependency — to keep the install footprint small. It implements the subset
46
+ * required by Claude Desktop, Cursor, Aider, and other MCP-aware clients.
47
+ */
48
+ const tools_1 = require("./tools");
49
+ const fs = __importStar(require("node:fs"));
50
+ const path = __importStar(require("node:path"));
51
+ const PROTOCOL_VERSION = "2024-11-05";
52
+ /**
53
+ * This file is compiled into two layouts: the repository's root `dist/` for the
54
+ * test suite, and the package's own `dist/` for publishing. A fixed relative
55
+ * path to package.json resolves in one and not the other, so walk up for it.
56
+ */
57
+ function packageVersion() {
58
+ let dir = __dirname;
59
+ for (let i = 0; i < 6; i++) {
60
+ const candidate = path.join(dir, "package.json");
61
+ if (fs.existsSync(candidate)) {
62
+ try {
63
+ const pkg = JSON.parse(fs.readFileSync(candidate, "utf8"));
64
+ // This package's own manifest, whatever it is called. Matching on an
65
+ // exact name is what made this announce 0.0.0 twice: once when a path
66
+ // assumption broke, and again when the CLI package became
67
+ // `@rsaglobaltech/specgate` and a hard-coded `"specgate"` stopped matching.
68
+ // The shape of the tree is the stable signal, not the spelling.
69
+ const sibling = path.join(dir, "packages", "mcp-spec-driven", "package.json");
70
+ if (fs.existsSync(sibling)) {
71
+ // Reached the repository root: the manifest is beside it, not above
72
+ // the compiled file, because the root build flattens into dist/.
73
+ return JSON.parse(fs.readFileSync(sibling, "utf8")).version;
74
+ }
75
+ // Shipped inside the CLI package and started by `specgate mcp serve`:
76
+ // the server is that package's version.
77
+ if (typeof pkg.name === "string" &&
78
+ (pkg.name.endsWith("/mcp-server") || pkg.name === "@rsaglobaltech/specgate")) {
79
+ return pkg.version;
80
+ }
81
+ }
82
+ catch {
83
+ // Keep walking — a malformed manifest above us is not ours.
84
+ }
85
+ }
86
+ const parent = path.dirname(dir);
87
+ if (parent === dir)
88
+ break;
89
+ dir = parent;
90
+ }
91
+ return "0.0.0";
92
+ }
93
+ const SERVER_INFO = {
94
+ name: "mcp-spec-driven",
95
+ version: packageVersion(),
96
+ };
97
+ // ── JSON-RPC framing over stdio ──────────────────────────────────────────────────
98
+ class McpServer {
99
+ buffer = "";
100
+ start() {
101
+ process.stdin.setEncoding("utf8");
102
+ process.stdin.on("data", (chunk) => {
103
+ const messages = this.readMessage(chunk);
104
+ for (const msg of messages) {
105
+ this.handleMessage(msg);
106
+ }
107
+ });
108
+ process.stdin.on("end", () => {
109
+ this.stop();
110
+ });
111
+ // Log activation to stderr so clients see it (stdout is reserved for JSON-RPC)
112
+ process.stderr.write(`mcp-spec-driven ${SERVER_INFO.version} ready\n`);
113
+ }
114
+ stop() {
115
+ process.exit(0);
116
+ }
117
+ readMessage(chunk) {
118
+ this.buffer += chunk.toString();
119
+ const messages = [];
120
+ // Try Content-Length framing first (per LSP/MCP convention)
121
+ while (true) {
122
+ const headerEnd = this.buffer.indexOf("\r\n\r\n");
123
+ if (headerEnd === -1)
124
+ break;
125
+ const headers = this.buffer.slice(0, headerEnd);
126
+ const lengthMatch = headers.match(/Content-Length:\s*(\d+)/i);
127
+ if (!lengthMatch) {
128
+ // Bad header — drop until next \r\n\r\n
129
+ this.buffer = this.buffer.slice(headerEnd + 4);
130
+ continue;
131
+ }
132
+ const length = parseInt(lengthMatch[1], 10);
133
+ const messageStart = headerEnd + 4;
134
+ if (this.buffer.length < messageStart + length)
135
+ break;
136
+ const body = this.buffer.slice(messageStart, messageStart + length);
137
+ this.buffer = this.buffer.slice(messageStart + length);
138
+ try {
139
+ messages.push(JSON.parse(body));
140
+ }
141
+ catch (err) {
142
+ const error = err;
143
+ this.writeError(null, -32700, `Parse error: ${error.message}`);
144
+ }
145
+ }
146
+ // Also try newline-delimited JSON (used by some clients)
147
+ if (messages.length === 0 && this.buffer.includes("\n")) {
148
+ const lines = this.buffer.split("\n");
149
+ this.buffer = lines.pop() || "";
150
+ for (const line of lines) {
151
+ const trimmed = line.trim();
152
+ if (!trimmed)
153
+ continue;
154
+ try {
155
+ messages.push(JSON.parse(trimmed));
156
+ }
157
+ catch {
158
+ // not JSON — ignore (probably a Content-Length header fragment)
159
+ }
160
+ }
161
+ }
162
+ return messages;
163
+ }
164
+ writeMessage(message) {
165
+ const body = JSON.stringify(message);
166
+ const out = `Content-Length: ${Buffer.byteLength(body, "utf8")}\r\n\r\n${body}`;
167
+ process.stdout.write(out);
168
+ }
169
+ writeError(id, code, message, data) {
170
+ this.writeMessage({
171
+ jsonrpc: "2.0",
172
+ id,
173
+ error: { code, message, ...(data !== undefined ? { data } : {}) },
174
+ });
175
+ }
176
+ writeResult(id, result) {
177
+ this.writeMessage({ jsonrpc: "2.0", id, result });
178
+ }
179
+ // ── Method dispatch ──────────────────────────────────────────────────────────────────────
180
+ handleMessage(msg) {
181
+ if (msg.jsonrpc !== "2.0") {
182
+ this.writeError(msg.id || null, -32600, "Invalid request: missing jsonrpc=2.0");
183
+ return;
184
+ }
185
+ const { id = null, method, params } = msg;
186
+ try {
187
+ switch (method) {
188
+ case "initialize":
189
+ this.writeResult(id, {
190
+ protocolVersion: PROTOCOL_VERSION,
191
+ serverInfo: SERVER_INFO,
192
+ capabilities: { tools: {} },
193
+ });
194
+ break;
195
+ case "initialized":
196
+ case "notifications/initialized":
197
+ // Notification — no response
198
+ break;
199
+ case "tools/list":
200
+ this.writeResult(id, {
201
+ tools: Object.entries(tools_1.TOOLS).map(([name, t]) => ({
202
+ name,
203
+ description: t.description,
204
+ inputSchema: t.inputSchema,
205
+ })),
206
+ });
207
+ break;
208
+ case "tools/call": {
209
+ const toolName = params && params.name;
210
+ const args = (params && params.arguments) || {};
211
+ // `csda_*` was the generated prefix until 0.12: an agent config
212
+ // that allow-lists a tool by that name keeps resolving. The old
213
+ // names are accepted here and never listed.
214
+ const tool = tools_1.TOOLS[toolName] ||
215
+ (typeof toolName === "string" && toolName.startsWith("csda_")
216
+ ? tools_1.TOOLS[`specgate_${toolName.slice("csda_".length)}`]
217
+ : undefined);
218
+ if (!tool) {
219
+ this.writeError(id, -32601, `Unknown tool: ${toolName}`);
220
+ break;
221
+ }
222
+ try {
223
+ const result = tool.handler(args);
224
+ this.writeResult(id, {
225
+ content: [
226
+ {
227
+ type: "text",
228
+ text: JSON.stringify(result, null, 2),
229
+ },
230
+ ],
231
+ isError: false,
232
+ });
233
+ }
234
+ catch (err) {
235
+ const error = err;
236
+ this.writeResult(id, {
237
+ content: [{ type: "text", text: `Error: ${error.message}` }],
238
+ isError: true,
239
+ });
240
+ }
241
+ break;
242
+ }
243
+ case "ping":
244
+ this.writeResult(id, {});
245
+ break;
246
+ case "shutdown":
247
+ this.writeResult(id, null);
248
+ this.stop();
249
+ break;
250
+ default:
251
+ if (id !== undefined && id !== null) {
252
+ this.writeError(id, -32601, `Method not found: ${method}`);
253
+ }
254
+ // else: notification — ignore unknown notifications
255
+ }
256
+ }
257
+ catch (err) {
258
+ const error = err;
259
+ this.writeError(id, -32603, `Internal error: ${error.message}`);
260
+ }
261
+ }
262
+ }
263
+ exports.McpServer = McpServer;
264
+ if (require.main === module) {
265
+ const server = new McpServer();
266
+ server.start();
267
+ }
268
+ // Export a default instance for tests to bind to
269
+ exports.defaultServer = new McpServer();
270
+ const handleMessage = (msg) => exports.defaultServer.handleMessage(msg);
271
+ exports.handleMessage = handleMessage;
272
+ const readMessage = (chunk) => exports.defaultServer.readMessage(chunk);
273
+ exports.readMessage = readMessage;
274
+ const writeMessage = (msg) => exports.defaultServer.writeMessage(msg);
275
+ exports.writeMessage = writeMessage;
276
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../packages/mcp-spec-driven/src/server.ts"],"names":[],"mappings":"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"}