@planu/cli 0.92.0 → 0.93.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.
- package/dist/engine/telemetry/error-reporter.d.ts +6 -0
- package/dist/engine/telemetry/error-reporter.d.ts.map +1 -1
- package/dist/engine/telemetry/error-reporter.js +22 -0
- package/dist/engine/telemetry/error-reporter.js.map +1 -1
- package/dist/tools/audit-trail-handler.d.ts +6 -2
- package/dist/tools/audit-trail-handler.d.ts.map +1 -1
- package/dist/tools/audit-trail-handler.js +12 -9
- package/dist/tools/audit-trail-handler.js.map +1 -1
- package/dist/tools/check-readiness.d.ts +3 -1
- package/dist/tools/check-readiness.d.ts.map +1 -1
- package/dist/tools/check-readiness.js +9 -1
- package/dist/tools/check-readiness.js.map +1 -1
- package/dist/tools/data-governance.d.ts +3 -1
- package/dist/tools/data-governance.d.ts.map +1 -1
- package/dist/tools/data-governance.js +9 -1
- package/dist/tools/data-governance.js.map +1 -1
- package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
- package/dist/tools/register-audit-trail-tools.js +27 -4
- package/dist/tools/register-audit-trail-tools.js.map +1 -1
- package/dist/tools/register-backlog-tools.d.ts.map +1 -1
- package/dist/tools/register-backlog-tools.js +24 -8
- package/dist/tools/register-backlog-tools.js.map +1 -1
- package/dist/tools/register-ci-tools.d.ts.map +1 -1
- package/dist/tools/register-ci-tools.js +27 -5
- package/dist/tools/register-ci-tools.js.map +1 -1
- package/dist/tools/register-coverage-tools.d.ts.map +1 -1
- package/dist/tools/register-coverage-tools.js +14 -2
- package/dist/tools/register-coverage-tools.js.map +1 -1
- package/dist/tools/register-domain-criteria-tools.d.ts.map +1 -1
- package/dist/tools/register-domain-criteria-tools.js +27 -4
- package/dist/tools/register-domain-criteria-tools.js.map +1 -1
- package/dist/tools/register-elicitation-tools.d.ts.map +1 -1
- package/dist/tools/register-elicitation-tools.js +14 -2
- package/dist/tools/register-elicitation-tools.js.map +1 -1
- package/dist/tools/register-event-tools.d.ts.map +1 -1
- package/dist/tools/register-event-tools.js +14 -2
- package/dist/tools/register-event-tools.js.map +1 -1
- package/dist/tools/register-federation-tools.d.ts.map +1 -1
- package/dist/tools/register-federation-tools.js +27 -4
- package/dist/tools/register-federation-tools.js.map +1 -1
- package/dist/tools/register-governance-tools.d.ts.map +1 -1
- package/dist/tools/register-governance-tools.js +27 -4
- package/dist/tools/register-governance-tools.js.map +1 -1
- package/dist/tools/register-hooks-tools.d.ts.map +1 -1
- package/dist/tools/register-hooks-tools.js +14 -2
- package/dist/tools/register-hooks-tools.js.map +1 -1
- package/dist/tools/register-infrastructure-tools.d.ts.map +1 -1
- package/dist/tools/register-infrastructure-tools.js +17 -2
- package/dist/tools/register-infrastructure-tools.js.map +1 -1
- package/dist/tools/register-lessons-tools.d.ts.map +1 -1
- package/dist/tools/register-lessons-tools.js +12 -4
- package/dist/tools/register-lessons-tools.js.map +1 -1
- package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -1
- package/dist/tools/register-living-spec-advanced-tools.js +92 -16
- package/dist/tools/register-living-spec-advanced-tools.js.map +1 -1
- package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-living-spec-tools.js +53 -10
- package/dist/tools/register-living-spec-tools.js.map +1 -1
- package/dist/tools/register-migration-tools.d.ts.map +1 -1
- package/dist/tools/register-migration-tools.js +10 -3
- package/dist/tools/register-migration-tools.js.map +1 -1
- package/dist/tools/register-readiness-tools.d.ts.map +1 -1
- package/dist/tools/register-readiness-tools.js +27 -4
- package/dist/tools/register-readiness-tools.js.map +1 -1
- package/dist/tools/register-scan-tools.js +1 -1
- package/dist/tools/register-scan-tools.js.map +1 -1
- package/dist/tools/register-scope-tools.d.ts.map +1 -1
- package/dist/tools/register-scope-tools.js +27 -4
- package/dist/tools/register-scope-tools.js.map +1 -1
- package/dist/tools/register-search-tools.d.ts.map +1 -1
- package/dist/tools/register-search-tools.js +14 -2
- package/dist/tools/register-search-tools.js.map +1 -1
- package/dist/tools/register-security-tools.d.ts.map +1 -1
- package/dist/tools/register-security-tools.js +14 -2
- package/dist/tools/register-security-tools.js.map +1 -1
- package/dist/tools/register-spec-observability-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-observability-tools.js +14 -2
- package/dist/tools/register-spec-observability-tools.js.map +1 -1
- package/dist/tools/register-spec-split-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-split-tools.js +26 -6
- package/dist/tools/register-spec-split-tools.js.map +1 -1
- package/dist/tools/register-stack-tools.d.ts.map +1 -1
- package/dist/tools/register-stack-tools.js +40 -9
- package/dist/tools/register-stack-tools.js.map +1 -1
- package/dist/tools/register-team-tools.d.ts.map +1 -1
- package/dist/tools/register-team-tools.js +38 -6
- package/dist/tools/register-team-tools.js.map +1 -1
- package/dist/tools/register-telemetry-tools.d.ts.map +1 -1
- package/dist/tools/register-telemetry-tools.js +6 -1
- package/dist/tools/register-telemetry-tools.js.map +1 -1
- package/dist/tools/register-versioning-tools.d.ts.map +1 -1
- package/dist/tools/register-versioning-tools.js +66 -13
- package/dist/tools/register-versioning-tools.js.map +1 -1
- package/dist/tools/resolve-project-id.d.ts +13 -0
- package/dist/tools/resolve-project-id.d.ts.map +1 -0
- package/dist/tools/resolve-project-id.js +22 -0
- package/dist/tools/resolve-project-id.js.map +1 -0
- package/dist/tools/safe-handler.d.ts.map +1 -1
- package/dist/tools/safe-handler.js +7 -2
- package/dist/tools/safe-handler.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ import { handleLivingSpecCoverage } from './living-spec-coverage.js';
|
|
|
9
9
|
import { handleSyncSpecToCode } from './sync-spec-to-code.js';
|
|
10
10
|
import { handleSyncCodeToSpec } from './sync-code-to-spec.js';
|
|
11
11
|
import { handleResolveSyncConflict } from './resolve-sync-conflict.js';
|
|
12
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
12
13
|
/**
|
|
13
14
|
* Registers SPEC-121 living spec advanced tools on the MCP server.
|
|
14
15
|
*/
|
|
@@ -17,7 +18,12 @@ export function registerLivingSpecAdvancedTools(server) {
|
|
|
17
18
|
server.registerTool('living_spec_watch', {
|
|
18
19
|
description: 'Start, stop, or check status of the in-memory drift watcher for a project. The watcher caches drift detection results with a configurable TTL to avoid redundant computations.',
|
|
19
20
|
inputSchema: {
|
|
20
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
21
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
22
|
+
projectPath: z
|
|
23
|
+
.string()
|
|
24
|
+
.max(4096)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
21
27
|
action: z
|
|
22
28
|
.enum(['start', 'stop', 'status'])
|
|
23
29
|
.describe('Action to perform. Valid values: "start", "stop", "status"'),
|
|
@@ -34,39 +40,72 @@ export function registerLivingSpecAdvancedTools(server) {
|
|
|
34
40
|
.optional()
|
|
35
41
|
.describe('Glob patterns to exclude from drift watching (e.g., ["node_modules/**", "dist/**"])'),
|
|
36
42
|
},
|
|
37
|
-
}, safeLicensed('living_spec_watch', async (args) =>
|
|
43
|
+
}, safeLicensed('living_spec_watch', async (args) => {
|
|
44
|
+
const pid = resolveProjectId(args);
|
|
45
|
+
if (!pid) {
|
|
46
|
+
return missingProjectIdError;
|
|
47
|
+
}
|
|
48
|
+
return handleLivingSpecWatch({ ...args, projectId: pid });
|
|
49
|
+
}));
|
|
38
50
|
// living_spec_status
|
|
39
51
|
server.registerTool('living_spec_status', {
|
|
40
52
|
description: 'Get detailed status of the living spec watcher including cache state and configuration. Read-only diagnostic tool.',
|
|
41
53
|
annotations: { readOnlyHint: true },
|
|
42
54
|
inputSchema: {
|
|
43
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
55
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
56
|
+
projectPath: z
|
|
57
|
+
.string()
|
|
58
|
+
.max(4096)
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
44
61
|
specId: z
|
|
45
62
|
.string()
|
|
46
63
|
.max(500)
|
|
47
64
|
.optional()
|
|
48
65
|
.describe('Optional spec ID to get cached drift data for'),
|
|
49
66
|
},
|
|
50
|
-
}, safeLicensed('living_spec_status', async (args) =>
|
|
67
|
+
}, safeLicensed('living_spec_status', async (args) => {
|
|
68
|
+
const pid = resolveProjectId(args);
|
|
69
|
+
if (!pid) {
|
|
70
|
+
return missingProjectIdError;
|
|
71
|
+
}
|
|
72
|
+
return handleLivingSpecStatus({ ...args, projectId: pid });
|
|
73
|
+
}));
|
|
51
74
|
// spec_diff
|
|
52
75
|
server.registerTool('spec_diff', {
|
|
53
76
|
description: 'Compare spec hash snapshots to detect file and signature changes. Shows a Markdown-formatted diff table. Use after snapshot_spec_hashes to see what changed.',
|
|
54
77
|
annotations: { readOnlyHint: true },
|
|
55
78
|
inputSchema: {
|
|
56
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
79
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
80
|
+
projectPath: z
|
|
81
|
+
.string()
|
|
82
|
+
.max(4096)
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
57
85
|
specId: z
|
|
58
86
|
.string()
|
|
59
87
|
.max(500)
|
|
60
88
|
.optional()
|
|
61
89
|
.describe('Specific spec ID to diff (if omitted, diffs all specs)'),
|
|
62
90
|
},
|
|
63
|
-
}, safeLicensed('spec_diff', async (args) =>
|
|
91
|
+
}, safeLicensed('spec_diff', async (args) => {
|
|
92
|
+
const pid = resolveProjectId(args);
|
|
93
|
+
if (!pid) {
|
|
94
|
+
return missingProjectIdError;
|
|
95
|
+
}
|
|
96
|
+
return handleSpecDiff({ ...args, projectId: pid });
|
|
97
|
+
}));
|
|
64
98
|
// living_spec_coverage
|
|
65
99
|
server.registerTool('living_spec_coverage', {
|
|
66
100
|
description: 'Correlate test coverage with spec acceptance criteria. Parses Vitest JSON or JUnit XML reports and groups results by @spec annotations to determine criterion status (verified/regression/untested).',
|
|
67
101
|
annotations: { readOnlyHint: true },
|
|
68
102
|
inputSchema: {
|
|
69
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
103
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
104
|
+
projectPath: z
|
|
105
|
+
.string()
|
|
106
|
+
.max(4096)
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
70
109
|
coverageJsonPath: z
|
|
71
110
|
.string()
|
|
72
111
|
.max(4096)
|
|
@@ -74,30 +113,61 @@ export function registerLivingSpecAdvancedTools(server) {
|
|
|
74
113
|
.describe('Path to Vitest JSON report file'),
|
|
75
114
|
junitXmlPath: z.string().max(4096).optional().describe('Path to JUnit XML report file'),
|
|
76
115
|
},
|
|
77
|
-
}, safeLicensed('living_spec_coverage', async (args) =>
|
|
116
|
+
}, safeLicensed('living_spec_coverage', async (args) => {
|
|
117
|
+
const pid = resolveProjectId(args);
|
|
118
|
+
if (!pid) {
|
|
119
|
+
return missingProjectIdError;
|
|
120
|
+
}
|
|
121
|
+
return handleLivingSpecCoverage({ ...args, projectId: pid });
|
|
122
|
+
}));
|
|
78
123
|
// sync_spec_to_code
|
|
79
124
|
server.registerTool('sync_spec_to_code', {
|
|
80
125
|
description: 'Sync from spec to code: generate TODO comments for pending acceptance criteria that lack @spec annotations. Also detects conflicts between spec and code state.',
|
|
81
126
|
inputSchema: {
|
|
82
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
127
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
128
|
+
projectPath: z
|
|
129
|
+
.string()
|
|
130
|
+
.max(4096)
|
|
131
|
+
.optional()
|
|
132
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
83
133
|
specId: z.string().max(500).describe('Spec ID to sync from'),
|
|
84
|
-
projectPath: z.string().max(4096).describe('Path to the project root directory'),
|
|
85
134
|
},
|
|
86
|
-
}, safeLicensed('sync_spec_to_code', async (args) =>
|
|
135
|
+
}, safeLicensed('sync_spec_to_code', async (args) => {
|
|
136
|
+
const pid = resolveProjectId(args);
|
|
137
|
+
if (!pid) {
|
|
138
|
+
return missingProjectIdError;
|
|
139
|
+
}
|
|
140
|
+
return handleSyncSpecToCode({ ...args, projectId: pid });
|
|
141
|
+
}));
|
|
87
142
|
// sync_code_to_spec
|
|
88
143
|
server.registerTool('sync_code_to_spec', {
|
|
89
144
|
description: 'Sync from code to spec: detect @spec annotations in source code and generate progress updates for the corresponding spec criteria. Also detects conflicts.',
|
|
90
145
|
inputSchema: {
|
|
91
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
146
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
147
|
+
projectPath: z
|
|
148
|
+
.string()
|
|
149
|
+
.max(4096)
|
|
150
|
+
.optional()
|
|
151
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
92
152
|
specId: z.string().max(500).describe('Spec ID to sync to'),
|
|
93
|
-
projectPath: z.string().max(4096).describe('Path to the project root directory'),
|
|
94
153
|
},
|
|
95
|
-
}, safeLicensed('sync_code_to_spec', async (args) =>
|
|
154
|
+
}, safeLicensed('sync_code_to_spec', async (args) => {
|
|
155
|
+
const pid = resolveProjectId(args);
|
|
156
|
+
if (!pid) {
|
|
157
|
+
return missingProjectIdError;
|
|
158
|
+
}
|
|
159
|
+
return handleSyncCodeToSpec({ ...args, projectId: pid });
|
|
160
|
+
}));
|
|
96
161
|
// resolve_sync_conflict
|
|
97
162
|
server.registerTool('resolve_sync_conflict', {
|
|
98
163
|
description: 'Resolve a sync conflict detected by sync_spec_to_code or sync_code_to_spec. Choose to accept the code state, accept the spec state, or provide a manual resolution.',
|
|
99
164
|
inputSchema: {
|
|
100
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
165
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
166
|
+
projectPath: z
|
|
167
|
+
.string()
|
|
168
|
+
.max(4096)
|
|
169
|
+
.optional()
|
|
170
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
101
171
|
conflictId: z.string().max(100).describe('Conflict ID from the sync result'),
|
|
102
172
|
resolution: z
|
|
103
173
|
.enum(['accept-code', 'accept-spec', 'manual'])
|
|
@@ -108,6 +178,12 @@ export function registerLivingSpecAdvancedTools(server) {
|
|
|
108
178
|
.optional()
|
|
109
179
|
.describe('Description of manual resolution (required when resolution is "manual")'),
|
|
110
180
|
},
|
|
111
|
-
}, safeLicensed('resolve_sync_conflict', async (args) =>
|
|
181
|
+
}, safeLicensed('resolve_sync_conflict', async (args) => {
|
|
182
|
+
const pid = resolveProjectId(args);
|
|
183
|
+
if (!pid) {
|
|
184
|
+
return missingProjectIdError;
|
|
185
|
+
}
|
|
186
|
+
return handleResolveSyncConflict({ ...args, projectId: pid });
|
|
187
|
+
}));
|
|
112
188
|
}
|
|
113
189
|
//# sourceMappingURL=register-living-spec-advanced-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-living-spec-advanced-tools.js","sourceRoot":"","sources":["../../src/tools/register-living-spec-advanced-tools.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qFAAqF;AACrF,yEAAyE;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"register-living-spec-advanced-tools.js","sourceRoot":"","sources":["../../src/tools/register-living-spec-advanced-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-living-spec-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-living-spec-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-living-spec-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-living-spec-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6H/D"}
|
|
@@ -4,6 +4,7 @@ import { handleValidateAnnotations } from './validate-annotations.js';
|
|
|
4
4
|
import { handleGenerateAnnotations } from './generate-annotations.js';
|
|
5
5
|
import { handleSnapshotSpecHashes } from './snapshot-spec-hashes.js';
|
|
6
6
|
import { handleAutoReconcile } from './auto-reconcile.js';
|
|
7
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
7
8
|
/**
|
|
8
9
|
* Registers living spec tools on the MCP server.
|
|
9
10
|
*/
|
|
@@ -13,38 +14,74 @@ export function registerLivingSpecTools(server) {
|
|
|
13
14
|
description: 'Validate @spec annotations in source code. Checks that all annotated spec IDs exist and criteria numbers are valid. Use after adding annotations to verify correctness.',
|
|
14
15
|
annotations: { readOnlyHint: true },
|
|
15
16
|
inputSchema: {
|
|
16
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
17
|
-
projectPath: z
|
|
17
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
18
|
+
projectPath: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(4096)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
18
23
|
specId: z
|
|
19
24
|
.string()
|
|
20
25
|
.max(500)
|
|
21
26
|
.optional()
|
|
22
27
|
.describe('Optional spec ID to filter annotations for a specific spec'),
|
|
23
28
|
},
|
|
24
|
-
}, safeLicensed('validate_annotations', async (args) =>
|
|
29
|
+
}, safeLicensed('validate_annotations', async (args) => {
|
|
30
|
+
const pid = resolveProjectId(args);
|
|
31
|
+
if (!pid) {
|
|
32
|
+
return missingProjectIdError;
|
|
33
|
+
}
|
|
34
|
+
return handleValidateAnnotations({ ...args, projectId: pid });
|
|
35
|
+
}));
|
|
25
36
|
// generate_annotations
|
|
26
37
|
server.registerTool('generate_annotations', {
|
|
27
38
|
description: 'Suggest @spec annotations for unannotated source files. Uses living-spec-analyzer heuristics to match files to spec criteria and generates annotation comments to add.',
|
|
28
39
|
annotations: { readOnlyHint: true },
|
|
29
40
|
inputSchema: {
|
|
30
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
31
|
-
projectPath: z
|
|
41
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
42
|
+
projectPath: z
|
|
43
|
+
.string()
|
|
44
|
+
.max(4096)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
32
47
|
specId: z.string().max(500).describe('Spec ID to generate annotations for'),
|
|
33
48
|
},
|
|
34
|
-
}, safeLicensed('generate_annotations', async (args) =>
|
|
49
|
+
}, safeLicensed('generate_annotations', async (args) => {
|
|
50
|
+
const pid = resolveProjectId(args);
|
|
51
|
+
if (!pid) {
|
|
52
|
+
return missingProjectIdError;
|
|
53
|
+
}
|
|
54
|
+
return handleGenerateAnnotations({ ...args, projectId: pid });
|
|
55
|
+
}));
|
|
35
56
|
// snapshot_spec_hashes
|
|
36
57
|
server.registerTool('snapshot_spec_hashes', {
|
|
37
58
|
description: 'Create or update a SHA-256 hash snapshot for a spec. Tracks file hashes and exported function signatures of all files referenced in the spec technical.md File Plan section. Used for drift detection.',
|
|
38
59
|
inputSchema: {
|
|
39
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
60
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
61
|
+
projectPath: z
|
|
62
|
+
.string()
|
|
63
|
+
.max(4096)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
40
66
|
specId: z.string().max(500).describe('Spec ID to snapshot'),
|
|
41
67
|
},
|
|
42
|
-
}, safeLicensed('snapshot_spec_hashes', async (args) =>
|
|
68
|
+
}, safeLicensed('snapshot_spec_hashes', async (args) => {
|
|
69
|
+
const pid = resolveProjectId(args);
|
|
70
|
+
if (!pid) {
|
|
71
|
+
return missingProjectIdError;
|
|
72
|
+
}
|
|
73
|
+
return handleSnapshotSpecHashes({ ...args, projectId: pid });
|
|
74
|
+
}));
|
|
43
75
|
// auto_reconcile
|
|
44
76
|
server.registerTool('auto_reconcile', {
|
|
45
77
|
description: 'Auto-reconcile specs after code changes. Applies safe changes automatically (completion %, status flip, hash update, timestamp). Unsafe changes (status downgrade, criterion removal) are skipped and require manual approval. Rate-limited: max 1 per spec per 5 minutes.',
|
|
46
78
|
inputSchema: {
|
|
47
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
79
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
80
|
+
projectPath: z
|
|
81
|
+
.string()
|
|
82
|
+
.max(4096)
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
48
85
|
specId: z
|
|
49
86
|
.string()
|
|
50
87
|
.max(500)
|
|
@@ -56,6 +93,12 @@ export function registerLivingSpecTools(server) {
|
|
|
56
93
|
.optional()
|
|
57
94
|
.describe('List of changed file paths to find affected specs'),
|
|
58
95
|
},
|
|
59
|
-
}, safeLicensed('auto_reconcile', async (args) =>
|
|
96
|
+
}, safeLicensed('auto_reconcile', async (args) => {
|
|
97
|
+
const pid = resolveProjectId(args);
|
|
98
|
+
if (!pid) {
|
|
99
|
+
return missingProjectIdError;
|
|
100
|
+
}
|
|
101
|
+
return handleAutoReconcile({ ...args, projectId: pid });
|
|
102
|
+
}));
|
|
60
103
|
}
|
|
61
104
|
//# sourceMappingURL=register-living-spec-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-living-spec-tools.js","sourceRoot":"","sources":["../../src/tools/register-living-spec-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-living-spec-tools.js","sourceRoot":"","sources":["../../src/tools/register-living-spec-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-migration-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-migration-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-migration-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-migration-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiCzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiE9D"}
|
|
@@ -3,6 +3,7 @@ import { z } from 'zod';
|
|
|
3
3
|
import { t } from '../i18n/index.js';
|
|
4
4
|
import { handleMigrateTech } from './migrate-tech.js';
|
|
5
5
|
import { safeLicensed } from './safe-handler.js';
|
|
6
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
6
7
|
const MigrateTechActionEnum = z.enum([
|
|
7
8
|
'analyze',
|
|
8
9
|
'map',
|
|
@@ -35,12 +36,12 @@ export function registerMigrationTools(server) {
|
|
|
35
36
|
annotations: { readOnlyHint: false },
|
|
36
37
|
inputSchema: {
|
|
37
38
|
action: MigrateTechActionEnum.describe('Migration action: analyze | map | plan | strategy | validate | analyze-db | map-db | plan-db | analyze-services | map-services | plan-services | validate-service | rollback-plan | checkpoint | rollback | feature-flags | status | webpack-to-vite | vite6-to-vite7 | detect-pending'),
|
|
38
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
39
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
39
40
|
projectPath: z
|
|
40
41
|
.string()
|
|
41
42
|
.max(4096)
|
|
42
43
|
.optional()
|
|
43
|
-
.describe('Absolute path to project root
|
|
44
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
44
45
|
sourceStack: z
|
|
45
46
|
.string()
|
|
46
47
|
.max(500)
|
|
@@ -72,6 +73,12 @@ export function registerMigrationTools(server) {
|
|
|
72
73
|
.optional()
|
|
73
74
|
.describe('ID of a previous analyze result to reuse for plan/strategy actions'),
|
|
74
75
|
},
|
|
75
|
-
}, safeLicensed('migrate_tech', async (args) =>
|
|
76
|
+
}, safeLicensed('migrate_tech', async (args) => {
|
|
77
|
+
const pid = resolveProjectId(args);
|
|
78
|
+
if (!pid) {
|
|
79
|
+
return missingProjectIdError;
|
|
80
|
+
}
|
|
81
|
+
return handleMigrateTech({ ...args, projectId: pid });
|
|
82
|
+
}));
|
|
76
83
|
}
|
|
77
84
|
//# sourceMappingURL=register-migration-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-migration-tools.js","sourceRoot":"","sources":["../../src/tools/register-migration-tools.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAG5F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-migration-tools.js","sourceRoot":"","sources":["../../src/tools/register-migration-tools.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAG5F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,SAAS;IACT,KAAK;IACL,MAAM;IACN,UAAU;IACV,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,UAAU;IACV,eAAe;IACf,QAAQ;IACR,0CAA0C;IAC1C,iBAAiB;IACjB,gBAAgB;IAChB,+CAA+C;IAC/C,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,CAAC,CAAC,gCAAgC,CAAC;QAChD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;QACpC,WAAW,EAAE;YACX,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CACpC,wRAAwR,CACzR;YACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,yGAAyG,CAC1G;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,oGAAoG,CACrG;YACH,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2DAA2D,CAAC;YACxE,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,yGAAyG,CAC1G;YACH,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;YACnE,kBAAkB,EAAE,CAAC;iBAClB,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,oEAAoE,CAAC;SAClF;KACF,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAE9C,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-readiness-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-readiness-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-readiness-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-readiness-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyD9D"}
|
|
@@ -5,12 +5,18 @@ import { handleCheckReadiness } from './check-readiness.js';
|
|
|
5
5
|
import { handlePackageHandoff } from './package-handoff.js';
|
|
6
6
|
import { safeLicensed } from './safe-handler.js';
|
|
7
7
|
import { CheckReadinessOutputSchema } from './schemas/index.js';
|
|
8
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
8
9
|
export function registerReadinessTools(server) {
|
|
9
10
|
// check_readiness — SPEC-039
|
|
10
11
|
server.registerTool('check_readiness', {
|
|
11
12
|
description: t('tools.check_readiness.description'),
|
|
12
13
|
inputSchema: {
|
|
13
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
14
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
15
|
+
projectPath: z
|
|
16
|
+
.string()
|
|
17
|
+
.max(4096)
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
14
20
|
specId: z.string().max(500).describe('Spec ID to evaluate'),
|
|
15
21
|
mode: z
|
|
16
22
|
.enum(['strict', 'lenient'])
|
|
@@ -18,14 +24,31 @@ export function registerReadinessTools(server) {
|
|
|
18
24
|
.describe('Evaluation mode: strict (default) requires score >=70; lenient requires >=60'),
|
|
19
25
|
},
|
|
20
26
|
outputSchema: CheckReadinessOutputSchema,
|
|
21
|
-
}, safeLicensed('check_readiness', async (args) =>
|
|
27
|
+
}, safeLicensed('check_readiness', async (args) => {
|
|
28
|
+
const pid = resolveProjectId(args);
|
|
29
|
+
if (!pid) {
|
|
30
|
+
return missingProjectIdError;
|
|
31
|
+
}
|
|
32
|
+
return handleCheckReadiness({ ...args, projectId: pid });
|
|
33
|
+
}));
|
|
22
34
|
// package_handoff — SPEC-039
|
|
23
35
|
server.registerTool('package_handoff', {
|
|
24
36
|
description: t('tools.package_handoff.description'),
|
|
25
37
|
inputSchema: {
|
|
26
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
38
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
39
|
+
projectPath: z
|
|
40
|
+
.string()
|
|
41
|
+
.max(4096)
|
|
42
|
+
.optional()
|
|
43
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
27
44
|
specId: z.string().max(500).describe('Spec ID to generate handoff package for'),
|
|
28
45
|
},
|
|
29
|
-
}, safeLicensed('package_handoff', async (args) =>
|
|
46
|
+
}, safeLicensed('package_handoff', async (args) => {
|
|
47
|
+
const pid = resolveProjectId(args);
|
|
48
|
+
if (!pid) {
|
|
49
|
+
return missingProjectIdError;
|
|
50
|
+
}
|
|
51
|
+
return handlePackageHandoff({ ...args, projectId: pid });
|
|
52
|
+
}));
|
|
30
53
|
}
|
|
31
54
|
//# sourceMappingURL=register-readiness-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-readiness-tools.js","sourceRoot":"","sources":["../../src/tools/register-readiness-tools.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAGrF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-readiness-tools.js","sourceRoot":"","sources":["../../src/tools/register-readiness-tools.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAGrF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,CAAC,CAAC,mCAAmC,CAAC;QACnD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC3D,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBAC3B,QAAQ,EAAE;iBACV,QAAQ,CAAC,8EAA8E,CAAC;SAC5F;QACD,YAAY,EAAE,0BAA0B;KACzC,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAEjD,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,CAAC,CAAC,mCAAmC,CAAC;QACnD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SAChF;KACF,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAEjD,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -6,7 +6,7 @@ export function registerScanTools(server) {
|
|
|
6
6
|
description: 'Scan an entire project, discover modules, analyze each in parallel, detect cross-module dependencies and antipatterns, calculate a project health score, and generate specs for every module. Returns ready-to-use team plan for parallel implementation.',
|
|
7
7
|
inputSchema: {
|
|
8
8
|
path: z.string().max(4096).describe('Absolute path to the project root directory'),
|
|
9
|
-
projectId: z.string().max(500).describe('Project ID
|
|
9
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
10
10
|
depth: z
|
|
11
11
|
.enum(['shallow', 'deep', 'deep-v2'])
|
|
12
12
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-scan-tools.js","sourceRoot":"","sources":["../../src/tools/register-scan-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,2PAA2P;QAC7P,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"register-scan-tools.js","sourceRoot":"","sources":["../../src/tools/register-scan-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,2PAA2P;QAC7P,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;iBACpC,QAAQ,EAAE;iBACV,QAAQ,CACP,uIAAuI,CACxI;YACH,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CACP,qHAAqH,CACtH;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,gGAAgG,CACjG;YACH,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,2EAA2E,CAAC;SACzF;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;SACpB;KACF,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAwB,CAAC,CAAC,CAC1F,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-scope-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-scope-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkH1D"}
|
|
@@ -3,6 +3,7 @@ import { z } from 'zod';
|
|
|
3
3
|
import { handleManageScope } from './manage-scope.js';
|
|
4
4
|
import { handleDetectContradictions } from './detect-contradictions.js';
|
|
5
5
|
import { safeLicensed } from './safe-handler.js';
|
|
6
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
6
7
|
/**
|
|
7
8
|
* Registers the `manage_scope` and `detect_contradictions` tools (SPEC-038).
|
|
8
9
|
*/
|
|
@@ -13,7 +14,12 @@ export function registerScopeTools(server) {
|
|
|
13
14
|
'View current scope, list backlog items, add deferred requirements to backlog, ' +
|
|
14
15
|
'or propose a formal scope change (requires explicit approval and reason).',
|
|
15
16
|
inputSchema: {
|
|
16
|
-
projectId: z.string().max(500).describe('Project ID'),
|
|
17
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
18
|
+
projectPath: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(4096)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
17
23
|
operation: z
|
|
18
24
|
.enum(['view', 'add_to_backlog', 'propose_change', 'list_backlog'])
|
|
19
25
|
.describe('view: show current scope; list_backlog: list deferred items; ' +
|
|
@@ -67,7 +73,13 @@ export function registerScopeTools(server) {
|
|
|
67
73
|
annotations: {
|
|
68
74
|
readOnlyHint: false,
|
|
69
75
|
},
|
|
70
|
-
}, safeLicensed('manage_scope', async (args) =>
|
|
76
|
+
}, safeLicensed('manage_scope', async (args) => {
|
|
77
|
+
const pid = resolveProjectId(args);
|
|
78
|
+
if (!pid) {
|
|
79
|
+
return missingProjectIdError;
|
|
80
|
+
}
|
|
81
|
+
return handleManageScope({ ...args, projectId: pid });
|
|
82
|
+
}));
|
|
71
83
|
// detect_contradictions — analyze all specs for semantic conflicts
|
|
72
84
|
server.registerTool('detect_contradictions', {
|
|
73
85
|
description: 'Analyze all specs in a project for semantic contradictions. ' +
|
|
@@ -75,11 +87,22 @@ export function registerScopeTools(server) {
|
|
|
75
87
|
'performance vs security, local vs cloud. ' +
|
|
76
88
|
'Returns a report with severity (blocker/warning) and recommendations.',
|
|
77
89
|
inputSchema: {
|
|
78
|
-
projectId: z.string().max(500).describe('Project ID
|
|
90
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
91
|
+
projectPath: z
|
|
92
|
+
.string()
|
|
93
|
+
.max(4096)
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
79
96
|
},
|
|
80
97
|
annotations: {
|
|
81
98
|
readOnlyHint: true,
|
|
82
99
|
},
|
|
83
|
-
}, safeLicensed('detect_contradictions', async (args) =>
|
|
100
|
+
}, safeLicensed('detect_contradictions', async (args) => {
|
|
101
|
+
const pid = resolveProjectId(args);
|
|
102
|
+
if (!pid) {
|
|
103
|
+
return missingProjectIdError;
|
|
104
|
+
}
|
|
105
|
+
return handleDetectContradictions({ ...args, projectId: pid });
|
|
106
|
+
}));
|
|
84
107
|
}
|
|
85
108
|
//# sourceMappingURL=register-scope-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-scope-tools.js","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-scope-tools.js","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyC3D"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { safeLicensed } from './safe-handler.js';
|
|
5
5
|
import { handleSemanticSearch } from './semantic-search-handler.js';
|
|
6
|
+
import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
|
|
6
7
|
/**
|
|
7
8
|
* Registers the semantic_search tool (SPEC-075) on the MCP server.
|
|
8
9
|
* Pro tier: semantic search across project knowledge.
|
|
@@ -13,7 +14,12 @@ export function registerSearchTools(server) {
|
|
|
13
14
|
'not just by exact text. Uses TF-IDF embeddings to find semantically similar documents. ' +
|
|
14
15
|
'Requires init_project first.',
|
|
15
16
|
inputSchema: {
|
|
16
|
-
projectId: z.string().max(500).describe('Project ID
|
|
17
|
+
projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
|
|
18
|
+
projectPath: z
|
|
19
|
+
.string()
|
|
20
|
+
.max(4096)
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
17
23
|
query: z.string().max(10_000).describe('Natural language search query'),
|
|
18
24
|
scope: z
|
|
19
25
|
.enum(['spec', 'pattern', 'knowledge', 'decision', 'all'])
|
|
@@ -29,6 +35,12 @@ export function registerSearchTools(server) {
|
|
|
29
35
|
title: 'Semantic Search',
|
|
30
36
|
readOnlyHint: true,
|
|
31
37
|
},
|
|
32
|
-
}, safeLicensed('semantic_search', async (args) =>
|
|
38
|
+
}, safeLicensed('semantic_search', async (args) => {
|
|
39
|
+
const pid = resolveProjectId(args);
|
|
40
|
+
if (!pid) {
|
|
41
|
+
return missingProjectIdError;
|
|
42
|
+
}
|
|
43
|
+
return handleSemanticSearch({ ...args, projectId: pid });
|
|
44
|
+
}));
|
|
33
45
|
}
|
|
34
46
|
//# sourceMappingURL=register-search-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-search-tools.js","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,uFAAuF;AAGvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"register-search-tools.js","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,uFAAuF;AAGvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,6FAA6F;YAC7F,yFAAyF;YACzF,8BAA8B;QAChC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACvE,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;iBACzD,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oDAAoD,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,gDAAgD,CAAC;SAC9D;QACD,WAAW,EAAE;YACX,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAEjD,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|