openspec-mcp 0.3.0 → 0.3.2
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/README.md +22 -6
- package/README.zh.md +36 -1
- package/dist/api/routes/changes.d.ts.map +1 -1
- package/dist/api/routes/changes.js +42 -0
- package/dist/api/routes/changes.js.map +1 -1
- package/dist/api/routes/context.d.ts +8 -0
- package/dist/api/routes/context.d.ts.map +1 -0
- package/dist/api/routes/context.js +45 -0
- package/dist/api/routes/context.js.map +1 -0
- package/dist/api/routes/kanban.d.ts +8 -0
- package/dist/api/routes/kanban.d.ts.map +1 -0
- package/dist/api/routes/kanban.js +181 -0
- package/dist/api/routes/kanban.js.map +1 -0
- package/dist/api/routes/qa.d.ts +8 -0
- package/dist/api/routes/qa.d.ts.map +1 -0
- package/dist/api/routes/qa.js +98 -0
- package/dist/api/routes/qa.js.map +1 -0
- package/dist/api/server.d.ts +1 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +7 -0
- package/dist/api/server.js.map +1 -1
- package/dist/core/approval-manager.d.ts.map +1 -1
- package/dist/core/approval-manager.js +9 -1
- package/dist/core/approval-manager.js.map +1 -1
- package/dist/core/approval-manager.test.js +14 -0
- package/dist/core/approval-manager.test.js.map +1 -1
- package/dist/core/context-analyzer.d.ts +116 -0
- package/dist/core/context-analyzer.d.ts.map +1 -0
- package/dist/core/context-analyzer.js +495 -0
- package/dist/core/context-analyzer.js.map +1 -0
- package/dist/core/prompt-manager.d.ts +50 -0
- package/dist/core/prompt-manager.d.ts.map +1 -0
- package/dist/core/prompt-manager.js +186 -0
- package/dist/core/prompt-manager.js.map +1 -0
- package/dist/core/qa-runner.d.ts +134 -0
- package/dist/core/qa-runner.d.ts.map +1 -0
- package/dist/core/qa-runner.js +299 -0
- package/dist/core/qa-runner.js.map +1 -0
- package/dist/core/spec-critic.d.ts +118 -0
- package/dist/core/spec-critic.d.ts.map +1 -0
- package/dist/core/spec-critic.js +478 -0
- package/dist/core/spec-critic.js.map +1 -0
- package/dist/core/spec-critic.test.d.ts +5 -0
- package/dist/core/spec-critic.test.d.ts.map +1 -0
- package/dist/core/spec-critic.test.js +152 -0
- package/dist/core/spec-critic.test.js.map +1 -0
- package/dist/core/task-parser.d.ts.map +1 -1
- package/dist/core/task-parser.js +39 -14
- package/dist/core/task-parser.js.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/server/tools/ai-context.d.ts +13 -0
- package/dist/server/tools/ai-context.d.ts.map +1 -0
- package/dist/server/tools/ai-context.js +212 -0
- package/dist/server/tools/ai-context.js.map +1 -0
- package/dist/server/tools/approval.d.ts.map +1 -1
- package/dist/server/tools/approval.js +33 -18
- package/dist/server/tools/approval.js.map +1 -1
- package/dist/server/tools/archive.d.ts.map +1 -1
- package/dist/server/tools/archive.js +9 -6
- package/dist/server/tools/archive.js.map +1 -1
- package/dist/server/tools/context.d.ts +12 -0
- package/dist/server/tools/context.d.ts.map +1 -0
- package/dist/server/tools/context.js +145 -0
- package/dist/server/tools/context.js.map +1 -0
- package/dist/server/tools/critique.d.ts +12 -0
- package/dist/server/tools/critique.d.ts.map +1 -0
- package/dist/server/tools/critique.js +194 -0
- package/dist/server/tools/critique.js.map +1 -0
- package/dist/server/tools/cross-service.d.ts.map +1 -1
- package/dist/server/tools/cross-service.js +11 -5
- package/dist/server/tools/cross-service.js.map +1 -1
- package/dist/server/tools/generator.d.ts.map +1 -1
- package/dist/server/tools/generator.js +27 -18
- package/dist/server/tools/generator.js.map +1 -1
- package/dist/server/tools/guides.d.ts.map +1 -1
- package/dist/server/tools/guides.js +8 -2
- package/dist/server/tools/guides.js.map +1 -1
- package/dist/server/tools/hooks.d.ts.map +1 -1
- package/dist/server/tools/hooks.js +7 -4
- package/dist/server/tools/hooks.js.map +1 -1
- package/dist/server/tools/management.d.ts.map +1 -1
- package/dist/server/tools/management.js +26 -14
- package/dist/server/tools/management.js.map +1 -1
- package/dist/server/tools/qa.d.ts +12 -0
- package/dist/server/tools/qa.d.ts.map +1 -0
- package/dist/server/tools/qa.js +248 -0
- package/dist/server/tools/qa.js.map +1 -0
- package/dist/server/tools/reviews.d.ts.map +1 -1
- package/dist/server/tools/reviews.js +55 -37
- package/dist/server/tools/reviews.js.map +1 -1
- package/dist/server/tools/tasks.d.ts.map +1 -1
- package/dist/server/tools/tasks.js +29 -17
- package/dist/server/tools/tasks.js.map +1 -1
- package/dist/server/tools/templates.d.ts.map +1 -1
- package/dist/server/tools/templates.js +26 -17
- package/dist/server/tools/templates.js.map +1 -1
- package/dist/server/tools/validation.d.ts.map +1 -1
- package/dist/server/tools/validation.js +31 -22
- package/dist/server/tools/validation.js.map +1 -1
- package/package.json +1 -1
- package/web/dist/assets/index-Bf5mzJti.css +1 -0
- package/web/dist/assets/index-W9UMaaAn.js +244 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-CCYunmpc.css +0 -1
- package/web/dist/assets/index-wgGN6sVJ.js +0 -244
|
@@ -7,22 +7,25 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
7
7
|
/**
|
|
8
8
|
* 添加评审意见
|
|
9
9
|
*/
|
|
10
|
-
server.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
server.registerTool('openspec_add_review', {
|
|
11
|
+
description: 'Add a review comment to a change or spec',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
targetType: z
|
|
14
|
+
.enum(['proposal', 'design', 'spec', 'tasks'])
|
|
15
|
+
.describe('Type of target to review'),
|
|
16
|
+
targetId: z.string().describe('Change ID or Spec ID'),
|
|
17
|
+
lineNumber: z.number().int().positive().optional().describe('Line number (optional)'),
|
|
18
|
+
type: z
|
|
19
|
+
.enum(['comment', 'suggestion', 'question', 'issue'])
|
|
20
|
+
.describe('Type of review'),
|
|
21
|
+
severity: z
|
|
22
|
+
.enum(['low', 'medium', 'high'])
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('Severity (for issues)'),
|
|
25
|
+
body: z.string().describe('Review comment content'),
|
|
26
|
+
suggestedChange: z.string().optional().describe('Suggested code change'),
|
|
27
|
+
author: z.string().default('ai').describe('Author of the review'),
|
|
28
|
+
},
|
|
26
29
|
}, async ({ targetType, targetId, lineNumber, type, severity, body, suggestedChange, author }) => {
|
|
27
30
|
const review = await reviewManager.addReview({
|
|
28
31
|
targetType: targetType,
|
|
@@ -53,11 +56,14 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
53
56
|
/**
|
|
54
57
|
* 列出评审意见
|
|
55
58
|
*/
|
|
56
|
-
server.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
server.registerTool('openspec_list_reviews', {
|
|
60
|
+
description: 'List review comments for a change or spec',
|
|
61
|
+
inputSchema: {
|
|
62
|
+
targetType: z.enum(['proposal', 'design', 'spec', 'tasks']),
|
|
63
|
+
targetId: z.string(),
|
|
64
|
+
status: z.enum(['open', 'resolved', 'wont_fix']).optional(),
|
|
65
|
+
type: z.enum(['comment', 'suggestion', 'question', 'issue']).optional(),
|
|
66
|
+
},
|
|
61
67
|
}, async ({ targetType, targetId, status, type }) => {
|
|
62
68
|
const reviews = await reviewManager.listReviews(targetType, targetId, { status, type: type });
|
|
63
69
|
if (reviews.length === 0) {
|
|
@@ -85,12 +91,15 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
85
91
|
/**
|
|
86
92
|
* 回复评审意见
|
|
87
93
|
*/
|
|
88
|
-
server.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
server.registerTool('openspec_reply_review', {
|
|
95
|
+
description: 'Reply to a review comment',
|
|
96
|
+
inputSchema: {
|
|
97
|
+
targetType: z.enum(['proposal', 'design', 'spec', 'tasks']),
|
|
98
|
+
targetId: z.string(),
|
|
99
|
+
reviewId: z.string(),
|
|
100
|
+
body: z.string(),
|
|
101
|
+
author: z.string().default('ai'),
|
|
102
|
+
},
|
|
94
103
|
}, async ({ targetType, targetId, reviewId, body, author }) => {
|
|
95
104
|
const reply = await reviewManager.addReply(targetType, targetId, reviewId, author, body);
|
|
96
105
|
if (!reply) {
|
|
@@ -106,12 +115,15 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
106
115
|
/**
|
|
107
116
|
* 解决评审意见
|
|
108
117
|
*/
|
|
109
|
-
server.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
server.registerTool('openspec_resolve_review', {
|
|
119
|
+
description: 'Mark a review as resolved or won\'t fix',
|
|
120
|
+
inputSchema: {
|
|
121
|
+
targetType: z.enum(['proposal', 'design', 'spec', 'tasks']),
|
|
122
|
+
targetId: z.string(),
|
|
123
|
+
reviewId: z.string(),
|
|
124
|
+
resolution: z.enum(['resolved', 'wont_fix']).default('resolved'),
|
|
125
|
+
resolvedBy: z.string().default('user'),
|
|
126
|
+
},
|
|
115
127
|
}, async ({ targetType, targetId, reviewId, resolution, resolvedBy }) => {
|
|
116
128
|
const success = await reviewManager.resolveReview(targetType, targetId, reviewId, resolvedBy, resolution);
|
|
117
129
|
if (!success) {
|
|
@@ -128,8 +140,11 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
128
140
|
/**
|
|
129
141
|
* 获取评审统计
|
|
130
142
|
*/
|
|
131
|
-
server.
|
|
132
|
-
|
|
143
|
+
server.registerTool('openspec_get_review_summary', {
|
|
144
|
+
description: 'Get review summary for a change (all files)',
|
|
145
|
+
inputSchema: {
|
|
146
|
+
changeId: z.string().describe('Change ID'),
|
|
147
|
+
},
|
|
133
148
|
}, async ({ changeId }) => {
|
|
134
149
|
const { proposal, design, tasks, summary } = await reviewManager.getChangeReviews(changeId);
|
|
135
150
|
let text = `Review Summary for: ${changeId}\n`;
|
|
@@ -155,8 +170,11 @@ export function registerReviewTools(server, reviewManager) {
|
|
|
155
170
|
/**
|
|
156
171
|
* 检查审批准备状态
|
|
157
172
|
*/
|
|
158
|
-
server.
|
|
159
|
-
|
|
173
|
+
server.registerTool('openspec_check_approval_readiness', {
|
|
174
|
+
description: 'Check if a change is ready for approval',
|
|
175
|
+
inputSchema: {
|
|
176
|
+
changeId: z.string(),
|
|
177
|
+
},
|
|
160
178
|
}, async ({ changeId }) => {
|
|
161
179
|
const blockers = await reviewManager.checkApprovalReadiness(changeId);
|
|
162
180
|
if (blockers.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../../src/server/tools/reviews.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,aAA4B;IACjF;;OAEG;IACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../../src/server/tools/reviews.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/server/tools/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/server/tools/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAuM5E"}
|
|
@@ -7,8 +7,11 @@ export function registerTasksTools(server, cli) {
|
|
|
7
7
|
/**
|
|
8
8
|
* 获取变更的任务列表和进度
|
|
9
9
|
*/
|
|
10
|
-
server.
|
|
11
|
-
|
|
10
|
+
server.registerTool('openspec_get_tasks', {
|
|
11
|
+
description: 'Get tasks and progress for a change',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
changeId: z.string().describe('Change ID'),
|
|
14
|
+
},
|
|
12
15
|
}, async ({ changeId }) => {
|
|
13
16
|
const { tasks, progress } = await cli.getTasks(changeId);
|
|
14
17
|
// 格式化输出
|
|
@@ -40,12 +43,15 @@ export function registerTasksTools(server, cli) {
|
|
|
40
43
|
/**
|
|
41
44
|
* 更新任务状态
|
|
42
45
|
*/
|
|
43
|
-
server.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
.
|
|
48
|
-
|
|
46
|
+
server.registerTool('openspec_update_task', {
|
|
47
|
+
description: 'Update task status',
|
|
48
|
+
inputSchema: {
|
|
49
|
+
changeId: z.string().describe('Change ID'),
|
|
50
|
+
taskId: z.string().describe('Task ID (e.g., 1.1, 2.3)'),
|
|
51
|
+
status: z
|
|
52
|
+
.enum(['pending', 'in_progress', 'done'])
|
|
53
|
+
.describe('New status'),
|
|
54
|
+
},
|
|
49
55
|
}, async ({ changeId, taskId, status }) => {
|
|
50
56
|
const result = await cli.updateTaskStatus(changeId, taskId, status);
|
|
51
57
|
if (result.success) {
|
|
@@ -74,7 +80,10 @@ export function registerTasksTools(server, cli) {
|
|
|
74
80
|
/**
|
|
75
81
|
* 获取所有变更的进度汇总
|
|
76
82
|
*/
|
|
77
|
-
server.
|
|
83
|
+
server.registerTool('openspec_get_progress_summary', {
|
|
84
|
+
description: 'Get progress summary for all changes',
|
|
85
|
+
inputSchema: {},
|
|
86
|
+
}, async () => {
|
|
78
87
|
const changes = await cli.listChanges();
|
|
79
88
|
const summaries = [];
|
|
80
89
|
for (const change of changes) {
|
|
@@ -114,14 +123,17 @@ export function registerTasksTools(server, cli) {
|
|
|
114
123
|
/**
|
|
115
124
|
* 批量更新任务状态
|
|
116
125
|
*/
|
|
117
|
-
server.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
server.registerTool('openspec_batch_update_tasks', {
|
|
127
|
+
description: 'Batch update multiple task statuses in a change',
|
|
128
|
+
inputSchema: {
|
|
129
|
+
changeId: z.string().describe('Change ID'),
|
|
130
|
+
updates: z
|
|
131
|
+
.array(z.object({
|
|
132
|
+
taskId: z.string().describe('Task ID (e.g., 1.1, 2.3)'),
|
|
133
|
+
status: z.enum(['pending', 'in_progress', 'done']).describe('New status'),
|
|
134
|
+
}))
|
|
135
|
+
.describe('Array of task updates'),
|
|
136
|
+
},
|
|
125
137
|
}, async ({ changeId, updates }) => {
|
|
126
138
|
const results = [];
|
|
127
139
|
for (const update of updates) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/server/tools/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAgB;IACpE;;OAEG;IACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/server/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/server/tools/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/server/tools/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI,CAgHhG"}
|
|
@@ -7,7 +7,10 @@ export function registerTemplatesTools(server, templateManager) {
|
|
|
7
7
|
/**
|
|
8
8
|
* 列出所有可用模板
|
|
9
9
|
*/
|
|
10
|
-
server.
|
|
10
|
+
server.registerTool('openspec_list_templates', {
|
|
11
|
+
description: 'List all available change templates',
|
|
12
|
+
inputSchema: {},
|
|
13
|
+
}, async () => {
|
|
11
14
|
const templates = await templateManager.listTemplates();
|
|
12
15
|
let text = `Available Templates\n`;
|
|
13
16
|
text += `===================\n\n`;
|
|
@@ -23,18 +26,21 @@ export function registerTemplatesTools(server, templateManager) {
|
|
|
23
26
|
/**
|
|
24
27
|
* 从模板创建新的 Change
|
|
25
28
|
*/
|
|
26
|
-
server.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
server.registerTool('openspec_create_change', {
|
|
30
|
+
description: 'Create a new change from a template',
|
|
31
|
+
inputSchema: {
|
|
32
|
+
changeId: z
|
|
33
|
+
.string()
|
|
34
|
+
.describe('Change ID (kebab-case, e.g., add-user-auth)'),
|
|
35
|
+
template: z
|
|
36
|
+
.enum(['feature', 'bugfix', 'refactor'])
|
|
37
|
+
.default('feature')
|
|
38
|
+
.describe('Template to use'),
|
|
39
|
+
title: z
|
|
40
|
+
.string()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Change title (defaults to changeId)'),
|
|
43
|
+
},
|
|
38
44
|
}, async ({ changeId, template, title }) => {
|
|
39
45
|
const result = await templateManager.createChange(changeId, { template, title });
|
|
40
46
|
if (result.success) {
|
|
@@ -62,10 +68,13 @@ export function registerTemplatesTools(server, templateManager) {
|
|
|
62
68
|
/**
|
|
63
69
|
* 预览模板内容
|
|
64
70
|
*/
|
|
65
|
-
server.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
server.registerTool('openspec_preview_template', {
|
|
72
|
+
description: 'Preview the content of a template',
|
|
73
|
+
inputSchema: {
|
|
74
|
+
template: z
|
|
75
|
+
.enum(['feature', 'bugfix', 'refactor'])
|
|
76
|
+
.describe('Template name'),
|
|
77
|
+
},
|
|
69
78
|
}, async ({ template: templateName }) => {
|
|
70
79
|
const template = await templateManager.getTemplate(templateName);
|
|
71
80
|
if (!template) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/server/tools/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,eAAgC;IACxF;;OAEG;IACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/server/tools/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/server/tools/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/server/tools/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAmJjF"}
|
|
@@ -7,12 +7,15 @@ export function registerValidationTools(server, cli) {
|
|
|
7
7
|
/**
|
|
8
8
|
* 验证单个变更
|
|
9
9
|
*/
|
|
10
|
-
server.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
server.registerTool('openspec_validate_change', {
|
|
11
|
+
description: 'Validate a change proposal',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
changeId: z.string().describe('Change ID to validate'),
|
|
14
|
+
strict: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Use strict validation mode'),
|
|
18
|
+
},
|
|
16
19
|
}, async ({ changeId, strict }) => {
|
|
17
20
|
const result = await cli.validateChange(changeId, { strict });
|
|
18
21
|
const statusText = result.valid ? '✅ Valid' : '❌ Invalid';
|
|
@@ -34,12 +37,15 @@ export function registerValidationTools(server, cli) {
|
|
|
34
37
|
/**
|
|
35
38
|
* 验证单个规格
|
|
36
39
|
*/
|
|
37
|
-
server.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
server.registerTool('openspec_validate_spec', {
|
|
41
|
+
description: 'Validate a specification',
|
|
42
|
+
inputSchema: {
|
|
43
|
+
specId: z.string().describe('Spec ID to validate'),
|
|
44
|
+
strict: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('Use strict validation mode'),
|
|
48
|
+
},
|
|
43
49
|
}, async ({ specId, strict }) => {
|
|
44
50
|
const result = await cli.validateSpec(specId, { strict });
|
|
45
51
|
const statusText = result.valid ? '✅ Valid' : '❌ Invalid';
|
|
@@ -61,16 +67,19 @@ export function registerValidationTools(server, cli) {
|
|
|
61
67
|
/**
|
|
62
68
|
* 批量验证
|
|
63
69
|
*/
|
|
64
|
-
server.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
server.registerTool('openspec_validate_all', {
|
|
71
|
+
description: 'Validate all changes and/or specs',
|
|
72
|
+
inputSchema: {
|
|
73
|
+
type: z
|
|
74
|
+
.enum(['changes', 'specs', 'all'])
|
|
75
|
+
.optional()
|
|
76
|
+
.default('all')
|
|
77
|
+
.describe('What to validate: changes, specs, or all'),
|
|
78
|
+
strict: z
|
|
79
|
+
.boolean()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Use strict validation mode'),
|
|
82
|
+
},
|
|
74
83
|
}, async ({ type, strict }) => {
|
|
75
84
|
const results = [];
|
|
76
85
|
// 验证变更
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/server/tools/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,GAAgB;IACzE;;OAEG;IACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/server/tools/validation.ts"],"names":[],"mappings":"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"}
|