@mcp-graph-workflow/mcp-graph 5.3.0 → 5.5.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/api/router.js +1 -1
- package/dist/api/router.js.map +1 -1
- package/dist/api/routes/code-graph.js +2 -2
- package/dist/api/routes/code-graph.js.map +1 -1
- package/dist/api/routes/context.d.ts.map +1 -1
- package/dist/api/routes/context.js +75 -0
- package/dist/api/routes/context.js.map +1 -1
- package/dist/api/routes/folder.js +2 -2
- package/dist/api/routes/folder.js.map +1 -1
- package/dist/api/routes/skills.d.ts +2 -1
- package/dist/api/routes/skills.d.ts.map +1 -1
- package/dist/api/routes/skills.js +139 -3
- package/dist/api/routes/skills.js.map +1 -1
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +60 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/code/code-indexer.d.ts +2 -2
- package/dist/core/code/code-indexer.d.ts.map +1 -1
- package/dist/core/code/code-indexer.js +3 -3
- package/dist/core/code/code-indexer.js.map +1 -1
- package/dist/core/code/code-types.d.ts +1 -1
- package/dist/core/code/code-types.d.ts.map +1 -1
- package/dist/core/code/ts-analyzer.d.ts +7 -1
- package/dist/core/code/ts-analyzer.d.ts.map +1 -1
- package/dist/core/code/ts-analyzer.js +105 -72
- package/dist/core/code/ts-analyzer.js.map +1 -1
- package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
- package/dist/core/config/ai-memory-generator.js +78 -7
- package/dist/core/config/ai-memory-generator.js.map +1 -1
- package/dist/core/events/event-types.d.ts +18 -1
- package/dist/core/events/event-types.d.ts.map +1 -1
- package/dist/core/graph/graph-types.d.ts +1 -0
- package/dist/core/graph/graph-types.d.ts.map +1 -1
- package/dist/core/importer/prd-to-graph.d.ts.map +1 -1
- package/dist/core/importer/prd-to-graph.js +49 -12
- package/dist/core/importer/prd-to-graph.js.map +1 -1
- package/dist/core/parser/classify.d.ts +1 -0
- package/dist/core/parser/classify.d.ts.map +1 -1
- package/dist/core/parser/classify.js +1 -0
- package/dist/core/parser/classify.js.map +1 -1
- package/dist/core/skills/built-in-skills.d.ts +1 -1
- package/dist/core/skills/built-in-skills.d.ts.map +1 -1
- package/dist/core/skills/built-in-skills.js +265 -1
- package/dist/core/skills/built-in-skills.js.map +1 -1
- package/dist/core/skills/self-healing-listener.d.ts +22 -0
- package/dist/core/skills/self-healing-listener.d.ts.map +1 -0
- package/dist/core/skills/self-healing-listener.js +102 -0
- package/dist/core/skills/self-healing-listener.js.map +1 -0
- package/dist/core/skills/skill-store.d.ts +14 -0
- package/dist/core/skills/skill-store.d.ts.map +1 -0
- package/dist/core/skills/skill-store.js +109 -0
- package/dist/core/skills/skill-store.js.map +1 -0
- package/dist/core/store/migrations.d.ts.map +1 -1
- package/dist/core/store/migrations.js +39 -0
- package/dist/core/store/migrations.js.map +1 -1
- package/dist/core/store/path-resolver.d.ts +38 -0
- package/dist/core/store/path-resolver.d.ts.map +1 -0
- package/dist/core/store/path-resolver.js +92 -0
- package/dist/core/store/path-resolver.js.map +1 -0
- package/dist/core/store/sqlite-store.d.ts +21 -0
- package/dist/core/store/sqlite-store.d.ts.map +1 -1
- package/dist/core/store/sqlite-store.js +109 -40
- package/dist/core/store/sqlite-store.js.map +1 -1
- package/dist/core/utils/constants.d.ts +10 -0
- package/dist/core/utils/constants.d.ts.map +1 -1
- package/dist/core/utils/constants.js +12 -0
- package/dist/core/utils/constants.js.map +1 -1
- package/dist/mcp/init-project.d.ts +14 -0
- package/dist/mcp/init-project.d.ts.map +1 -1
- package/dist/mcp/init-project.js +140 -36
- package/dist/mcp/init-project.js.map +1 -1
- package/dist/mcp/lifecycle-wrapper.d.ts +2 -1
- package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
- package/dist/mcp/lifecycle-wrapper.js +20 -1
- package/dist/mcp/lifecycle-wrapper.js.map +1 -1
- package/dist/mcp/server.js +18 -16
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/add-node.d.ts +3 -0
- package/dist/mcp/tools/add-node.d.ts.map +1 -1
- package/dist/mcp/tools/add-node.js +7 -3
- package/dist/mcp/tools/add-node.js.map +1 -1
- package/dist/mcp/tools/delete-node.d.ts +3 -0
- package/dist/mcp/tools/delete-node.d.ts.map +1 -1
- package/dist/mcp/tools/delete-node.js +7 -3
- package/dist/mcp/tools/delete-node.js.map +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +21 -10
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list-skills.d.ts +1 -2
- package/dist/mcp/tools/list-skills.d.ts.map +1 -1
- package/dist/mcp/tools/list-skills.js +6 -4
- package/dist/mcp/tools/list-skills.js.map +1 -1
- package/dist/mcp/tools/manage-skill.d.ts +8 -0
- package/dist/mcp/tools/manage-skill.d.ts.map +1 -0
- package/dist/mcp/tools/manage-skill.js +202 -0
- package/dist/mcp/tools/manage-skill.js.map +1 -0
- package/dist/mcp/tools/node.d.ts +9 -0
- package/dist/mcp/tools/node.d.ts.map +1 -0
- package/dist/mcp/tools/node.js +195 -0
- package/dist/mcp/tools/node.js.map +1 -0
- package/dist/mcp/tools/update-node.d.ts +3 -0
- package/dist/mcp/tools/update-node.d.ts.map +1 -1
- package/dist/mcp/tools/update-node.js +7 -3
- package/dist/mcp/tools/update-node.js.map +1 -1
- package/dist/mcp/tools/validate-ac.d.ts +3 -0
- package/dist/mcp/tools/validate-ac.d.ts.map +1 -1
- package/dist/mcp/tools/validate-ac.js +6 -2
- package/dist/mcp/tools/validate-ac.js.map +1 -1
- package/dist/mcp/tools/validate-task.d.ts +3 -0
- package/dist/mcp/tools/validate-task.d.ts.map +1 -1
- package/dist/mcp/tools/validate-task.js +6 -1
- package/dist/mcp/tools/validate-task.js.map +1 -1
- package/dist/mcp/tools/validate.d.ts +9 -0
- package/dist/mcp/tools/validate.d.ts.map +1 -0
- package/dist/mcp/tools/validate.js +70 -0
- package/dist/mcp/tools/validate.js.map +1 -0
- package/dist/schemas/graph.schema.d.ts +2 -0
- package/dist/schemas/graph.schema.d.ts.map +1 -1
- package/dist/schemas/graph.schema.js +1 -0
- package/dist/schemas/graph.schema.js.map +1 -1
- package/dist/schemas/skill.schema.d.ts +57 -0
- package/dist/schemas/skill.schema.d.ts.map +1 -0
- package/dist/schemas/skill.schema.js +24 -0
- package/dist/schemas/skill.schema.js.map +1 -0
- package/dist/web/dashboard/dist/assets/{benchmark-tab-B5Sr8Cah.js → benchmark-tab-BW4QxI49.js} +1 -1
- package/dist/web/dashboard/dist/assets/context-tab-C5RAlXNW.js +1 -0
- package/dist/web/dashboard/dist/assets/{gitnexus-tab-DqmbSdzV.js → gitnexus-tab-BnxxYl2F.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-tab-BKns5HdW.js → graph-tab-Cv_wQ6Az.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-utils-BxUWNvsI.js → graph-utils-Ds1zJyD1.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-CZOiKbTP.js → index-BAeZDWWy.js} +11 -11
- package/dist/web/dashboard/dist/assets/{index-Dd4vKyDX.js → index-Bic_URMs.js} +1 -1
- package/dist/web/dashboard/dist/assets/index-DQqYFXms.css +1 -0
- package/dist/web/dashboard/dist/assets/{insights-tab-B1kPckBM.js → insights-tab-U_ATOqPu.js} +1 -1
- package/dist/web/dashboard/dist/assets/{logs-tab-BWfsrRlB.js → logs-tab-B8psCXuB.js} +1 -1
- package/dist/web/dashboard/dist/assets/{memories-tab-D3zm-1Sq.js → memories-tab-DcWok2by.js} +1 -1
- package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DXP4dFP-.js → prd-backlog-tab-CjftveTc.js} +1 -1
- package/dist/web/dashboard/dist/assets/skills-tab-Ddp1w4vS.js +1 -0
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/dashboard/dist/assets/index-xyMN-_UV.css +0 -1
- package/dist/web/dashboard/dist/assets/skills-tab-CAlVL80S.js +0 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool — manage_skill
|
|
3
|
+
* Enable/disable skills and CRUD custom skills via agent.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod/v4";
|
|
6
|
+
import { setSkillEnabled, getSkillPreferences, createCustomSkill, updateCustomSkill, deleteCustomSkill, getCustomSkills, getCustomSkillByName, } from "../../core/skills/skill-store.js";
|
|
7
|
+
import { getBuiltInSkills, getSkillsByPhase, getSkillByName } from "../../core/skills/built-in-skills.js";
|
|
8
|
+
import { CustomSkillInputSchema } from "../../schemas/skill.schema.js";
|
|
9
|
+
import { logger } from "../../core/utils/logger.js";
|
|
10
|
+
export function registerManageSkill(server, store) {
|
|
11
|
+
server.tool("manage_skill", "Manage skills: list built-in skills, enable/disable, CRUD custom skills.", {
|
|
12
|
+
action: z
|
|
13
|
+
.enum(["list", "enable", "disable", "create", "update", "delete", "list_custom", "get_preferences"])
|
|
14
|
+
.describe("Action to perform"),
|
|
15
|
+
skillName: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Skill name (for list: get full instructions; enable/disable/delete_by_name)"),
|
|
19
|
+
skillId: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Skill ID (for update/delete)"),
|
|
23
|
+
phase: z
|
|
24
|
+
.enum(["ANALYZE", "DESIGN", "PLAN", "IMPLEMENT", "VALIDATE", "REVIEW", "HANDOFF", "LISTENING"])
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Filter skills by lifecycle phase (list only)"),
|
|
27
|
+
data: z
|
|
28
|
+
.object({
|
|
29
|
+
name: z.string().optional(),
|
|
30
|
+
description: z.string().optional(),
|
|
31
|
+
category: z.string().optional(),
|
|
32
|
+
phases: z.array(z.string()).optional(),
|
|
33
|
+
instructions: z.string().optional(),
|
|
34
|
+
})
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Skill data (for create/update)"),
|
|
37
|
+
}, async ({ action, skillName, skillId, phase, data }) => {
|
|
38
|
+
logger.debug("tool:manage_skill", { action, skillName, skillId });
|
|
39
|
+
const project = store.getProject();
|
|
40
|
+
if (!project) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify({ error: "No active project. Run init first." }) }],
|
|
43
|
+
isError: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const db = store.getDb();
|
|
47
|
+
const projectId = project.id;
|
|
48
|
+
try {
|
|
49
|
+
switch (action) {
|
|
50
|
+
case "list": {
|
|
51
|
+
// Single skill lookup with full instructions
|
|
52
|
+
if (skillName) {
|
|
53
|
+
const skill = getSkillByName(skillName);
|
|
54
|
+
if (!skill) {
|
|
55
|
+
return {
|
|
56
|
+
content: [{
|
|
57
|
+
type: "text",
|
|
58
|
+
text: JSON.stringify({ error: `Skill '${skillName}' not found` }, null, 2),
|
|
59
|
+
}],
|
|
60
|
+
isError: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
content: [{
|
|
65
|
+
type: "text",
|
|
66
|
+
text: JSON.stringify({
|
|
67
|
+
name: skill.name,
|
|
68
|
+
description: skill.description,
|
|
69
|
+
category: skill.category,
|
|
70
|
+
phases: skill.phases,
|
|
71
|
+
instructions: skill.instructions,
|
|
72
|
+
}, null, 2),
|
|
73
|
+
}],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// List skills (optionally filtered by phase)
|
|
77
|
+
const skills = phase
|
|
78
|
+
? getSkillsByPhase(phase)
|
|
79
|
+
: getBuiltInSkills();
|
|
80
|
+
const summary = skills.map((s) => ({
|
|
81
|
+
name: s.name,
|
|
82
|
+
description: s.description,
|
|
83
|
+
category: s.category,
|
|
84
|
+
phases: s.phases,
|
|
85
|
+
}));
|
|
86
|
+
logger.info("tool:manage_skill:list:ok", { count: summary.length, phase: phase ?? "all" });
|
|
87
|
+
return {
|
|
88
|
+
content: [{
|
|
89
|
+
type: "text",
|
|
90
|
+
text: JSON.stringify({
|
|
91
|
+
total: summary.length,
|
|
92
|
+
...(phase ? { phase } : {}),
|
|
93
|
+
skills: summary,
|
|
94
|
+
}, null, 2),
|
|
95
|
+
}],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
case "enable":
|
|
99
|
+
case "disable": {
|
|
100
|
+
if (!skillName) {
|
|
101
|
+
return {
|
|
102
|
+
content: [{ type: "text", text: JSON.stringify({ error: "skillName required for enable/disable" }) }],
|
|
103
|
+
isError: true,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
setSkillEnabled(db, projectId, skillName, action === "enable");
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, skillName, enabled: action === "enable" }) }],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
case "create": {
|
|
112
|
+
if (!data) {
|
|
113
|
+
return {
|
|
114
|
+
content: [{ type: "text", text: JSON.stringify({ error: "data required for create" }) }],
|
|
115
|
+
isError: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const parsed = CustomSkillInputSchema.safeParse(data);
|
|
119
|
+
if (!parsed.success) {
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: "text", text: JSON.stringify({ error: "Validation failed", details: parsed.error.issues }) }],
|
|
122
|
+
isError: true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const created = createCustomSkill(db, projectId, parsed.data);
|
|
126
|
+
logger.info("tool:manage_skill:created", { id: created.id, name: created.name });
|
|
127
|
+
return {
|
|
128
|
+
content: [{ type: "text", text: JSON.stringify(created, null, 2) }],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
case "update": {
|
|
132
|
+
if (!skillId || !data) {
|
|
133
|
+
return {
|
|
134
|
+
content: [{ type: "text", text: JSON.stringify({ error: "skillId and data required for update" }) }],
|
|
135
|
+
isError: true,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const updated = updateCustomSkill(db, projectId, skillId, data);
|
|
139
|
+
return {
|
|
140
|
+
content: [{ type: "text", text: JSON.stringify(updated, null, 2) }],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
case "delete": {
|
|
144
|
+
if (!skillId && !skillName) {
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: "text", text: JSON.stringify({ error: "skillId or skillName required for delete" }) }],
|
|
147
|
+
isError: true,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (skillId) {
|
|
151
|
+
deleteCustomSkill(db, projectId, skillId);
|
|
152
|
+
}
|
|
153
|
+
else if (skillName) {
|
|
154
|
+
const skill = getCustomSkillByName(db, projectId, skillName);
|
|
155
|
+
if (!skill) {
|
|
156
|
+
return {
|
|
157
|
+
content: [{ type: "text", text: JSON.stringify({ error: `Custom skill '${skillName}' not found` }) }],
|
|
158
|
+
isError: true,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
deleteCustomSkill(db, projectId, skill.id);
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, deleted: skillId ?? skillName }) }],
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
case "list_custom": {
|
|
168
|
+
const customs = getCustomSkills(db, projectId);
|
|
169
|
+
return {
|
|
170
|
+
content: [{
|
|
171
|
+
type: "text",
|
|
172
|
+
text: JSON.stringify({ total: customs.length, skills: customs }, null, 2),
|
|
173
|
+
}],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
case "get_preferences": {
|
|
177
|
+
const prefs = getSkillPreferences(db, projectId);
|
|
178
|
+
const obj = {};
|
|
179
|
+
for (const [k, v] of prefs)
|
|
180
|
+
obj[k] = v;
|
|
181
|
+
return {
|
|
182
|
+
content: [{ type: "text", text: JSON.stringify({ preferences: obj }, null, 2) }],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
default:
|
|
186
|
+
return {
|
|
187
|
+
content: [{ type: "text", text: JSON.stringify({ error: `Unknown action: ${action}` }) }],
|
|
188
|
+
isError: true,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
194
|
+
logger.error("tool:manage_skill:error", { action, error: message });
|
|
195
|
+
return {
|
|
196
|
+
content: [{ type: "text", text: JSON.stringify({ error: message }) }],
|
|
197
|
+
isError: true,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=manage-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-skill.js","sourceRoot":"","sources":["../../../src/mcp/tools/manage-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool — node
|
|
3
|
+
* Consolidated CRUD for graph nodes (add, update, delete).
|
|
4
|
+
* Replaces separate add_node, update_node, delete_node tools.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
8
|
+
export declare function registerNode(server: McpServer, store: SqliteStore): void;
|
|
9
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/node.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAiMxE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool — node
|
|
3
|
+
* Consolidated CRUD for graph nodes (add, update, delete).
|
|
4
|
+
* Replaces separate add_node, update_node, delete_node tools.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod/v4";
|
|
7
|
+
import { NodeTypeSchema, NodeStatusSchema, XpSizeSchema, PrioritySchema } from "../../schemas/node.schema.js";
|
|
8
|
+
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
9
|
+
import { generateId } from "../../core/utils/id.js";
|
|
10
|
+
import { now } from "../../core/utils/time.js";
|
|
11
|
+
import { logger } from "../../core/utils/logger.js";
|
|
12
|
+
export function registerNode(server, store) {
|
|
13
|
+
server.tool("node", "Manage graph nodes: add, update, or delete", {
|
|
14
|
+
action: z.enum(["add", "update", "delete"]).describe("Action to perform"),
|
|
15
|
+
// add params
|
|
16
|
+
type: NodeTypeSchema.optional().describe("Node type — required for add (epic, task, subtask, etc.)"),
|
|
17
|
+
title: z.string().optional().describe("Node title — required for add"),
|
|
18
|
+
description: z.string().optional().describe("Node description (add/update)"),
|
|
19
|
+
status: NodeStatusSchema.optional().describe("Node status (add: default backlog, update: new status)"),
|
|
20
|
+
priority: PrioritySchema.optional().describe("Priority 1-5 (add: default 3, update)"),
|
|
21
|
+
xpSize: XpSizeSchema.optional().describe("Size: XS, S, M, L, XL (add/update)"),
|
|
22
|
+
estimateMinutes: z.number().optional().describe("Time estimate in minutes (add/update)"),
|
|
23
|
+
tags: z.array(z.string()).optional().describe("Tags for categorization (add/update)"),
|
|
24
|
+
parentId: z.string().nullable().optional().describe("Parent node ID (add/update)"),
|
|
25
|
+
sprint: z.string().nullable().optional().describe("Sprint identifier (add/update)"),
|
|
26
|
+
acceptanceCriteria: z.array(z.string()).optional().describe("Acceptance criteria (add/update)"),
|
|
27
|
+
blocked: z.boolean().optional().describe("Whether the node is blocked (add)"),
|
|
28
|
+
metadata: z.record(z.string(), z.unknown()).optional().describe("Custom metadata (add)"),
|
|
29
|
+
// update/delete params
|
|
30
|
+
id: z.string().optional().describe("Node ID — required for update/delete"),
|
|
31
|
+
}, async ({ action, id, type, title, description, status, priority, xpSize, estimateMinutes, tags, parentId, sprint, acceptanceCriteria, blocked, metadata }) => {
|
|
32
|
+
logger.debug("tool:node", { action, id, type, title });
|
|
33
|
+
if (action === "add") {
|
|
34
|
+
if (!type || !title) {
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: "text", text: JSON.stringify({ error: "type and title are required for add action" }) }],
|
|
37
|
+
isError: true,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (parentId) {
|
|
41
|
+
const parent = store.getNodeById(parentId);
|
|
42
|
+
if (!parent) {
|
|
43
|
+
const err = new NodeNotFoundError(parentId);
|
|
44
|
+
return {
|
|
45
|
+
content: [{ type: "text", text: JSON.stringify({ error: `Parent not found: ${err.message}` }) }],
|
|
46
|
+
isError: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const timestamp = now();
|
|
51
|
+
const node = {
|
|
52
|
+
id: generateId("node"),
|
|
53
|
+
type,
|
|
54
|
+
title,
|
|
55
|
+
description,
|
|
56
|
+
status: status ?? "backlog",
|
|
57
|
+
priority: priority ?? 3,
|
|
58
|
+
xpSize,
|
|
59
|
+
estimateMinutes,
|
|
60
|
+
tags,
|
|
61
|
+
parentId,
|
|
62
|
+
sprint,
|
|
63
|
+
acceptanceCriteria,
|
|
64
|
+
blocked,
|
|
65
|
+
metadata,
|
|
66
|
+
createdAt: timestamp,
|
|
67
|
+
updatedAt: timestamp,
|
|
68
|
+
};
|
|
69
|
+
store.insertNode(node);
|
|
70
|
+
if (parentId) {
|
|
71
|
+
store.insertEdge({
|
|
72
|
+
id: generateId("edge"),
|
|
73
|
+
from: parentId,
|
|
74
|
+
to: node.id,
|
|
75
|
+
relationType: "parent_of",
|
|
76
|
+
createdAt: timestamp,
|
|
77
|
+
});
|
|
78
|
+
store.insertEdge({
|
|
79
|
+
id: generateId("edge"),
|
|
80
|
+
from: node.id,
|
|
81
|
+
to: parentId,
|
|
82
|
+
relationType: "child_of",
|
|
83
|
+
createdAt: timestamp,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
logger.info("tool:node:add:ok", { nodeId: node.id, type: node.type });
|
|
87
|
+
return {
|
|
88
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, node }, null, 2) }],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (action === "update") {
|
|
92
|
+
if (!id) {
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: "text", text: JSON.stringify({ error: "id is required for update action" }) }],
|
|
95
|
+
isError: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const fields = {};
|
|
99
|
+
if (title !== undefined)
|
|
100
|
+
fields.title = title;
|
|
101
|
+
if (description !== undefined)
|
|
102
|
+
fields.description = description;
|
|
103
|
+
if (type !== undefined)
|
|
104
|
+
fields.type = type;
|
|
105
|
+
if (priority !== undefined)
|
|
106
|
+
fields.priority = priority;
|
|
107
|
+
if (xpSize !== undefined)
|
|
108
|
+
fields.xpSize = xpSize;
|
|
109
|
+
if (estimateMinutes !== undefined)
|
|
110
|
+
fields.estimateMinutes = estimateMinutes;
|
|
111
|
+
if (tags !== undefined)
|
|
112
|
+
fields.tags = tags;
|
|
113
|
+
if (sprint !== undefined)
|
|
114
|
+
fields.sprint = sprint;
|
|
115
|
+
if (parentId !== undefined)
|
|
116
|
+
fields.parentId = parentId;
|
|
117
|
+
if (acceptanceCriteria !== undefined)
|
|
118
|
+
fields.acceptanceCriteria = acceptanceCriteria;
|
|
119
|
+
// If parentId is changing, manage edges
|
|
120
|
+
if (parentId !== undefined) {
|
|
121
|
+
const existingNode = store.getNodeById(id);
|
|
122
|
+
if (existingNode) {
|
|
123
|
+
const oldParentId = existingNode.parentId;
|
|
124
|
+
// Remove old parent/child edges
|
|
125
|
+
if (oldParentId) {
|
|
126
|
+
const edgesFromOldParent = store.getEdgesFrom(oldParentId);
|
|
127
|
+
for (const edge of edgesFromOldParent) {
|
|
128
|
+
if (edge.to === id && edge.relationType === "parent_of") {
|
|
129
|
+
store.deleteEdge(edge.id);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const edgesFromNode = store.getEdgesFrom(id);
|
|
133
|
+
for (const edge of edgesFromNode) {
|
|
134
|
+
if (edge.to === oldParentId && edge.relationType === "child_of") {
|
|
135
|
+
store.deleteEdge(edge.id);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Create new parent/child edges
|
|
140
|
+
if (parentId !== null) {
|
|
141
|
+
const timestamp = now();
|
|
142
|
+
store.insertEdge({
|
|
143
|
+
id: generateId("edge"),
|
|
144
|
+
from: parentId,
|
|
145
|
+
to: id,
|
|
146
|
+
relationType: "parent_of",
|
|
147
|
+
createdAt: timestamp,
|
|
148
|
+
});
|
|
149
|
+
store.insertEdge({
|
|
150
|
+
id: generateId("edge"),
|
|
151
|
+
from: id,
|
|
152
|
+
to: parentId,
|
|
153
|
+
relationType: "child_of",
|
|
154
|
+
createdAt: timestamp,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const updated = store.updateNode(id, fields);
|
|
160
|
+
if (!updated) {
|
|
161
|
+
const err = new NodeNotFoundError(id);
|
|
162
|
+
logger.warn("tool:node:update:fail", { error: err.message });
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: "text", text: JSON.stringify({ error: err.message }) }],
|
|
165
|
+
isError: true,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
logger.info("tool:node:update:ok", { id });
|
|
169
|
+
return {
|
|
170
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, node: updated }, null, 2) }],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// action === "delete"
|
|
174
|
+
if (!id) {
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: "text", text: JSON.stringify({ error: "id is required for delete action" }) }],
|
|
177
|
+
isError: true,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const deleted = store.deleteNode(id);
|
|
181
|
+
if (!deleted) {
|
|
182
|
+
const err = new NodeNotFoundError(id);
|
|
183
|
+
logger.warn("tool:node:delete:fail", { error: err.message });
|
|
184
|
+
return {
|
|
185
|
+
content: [{ type: "text", text: JSON.stringify({ error: err.message }) }],
|
|
186
|
+
isError: true,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
logger.info("tool:node:delete:ok", { id });
|
|
190
|
+
return {
|
|
191
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, deletedId: id }, null, 2) }],
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/mcp/tools/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `node` tool with action:"update" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
5
|
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
6
|
export declare function registerUpdateNode(server: McpServer, store: SqliteStore): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/update-node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-node.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/update-node.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA+C9E"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `node` tool with action:"update" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import { z } from "zod/v4";
|
|
2
5
|
import { NodeTypeSchema, XpSizeSchema, PrioritySchema } from "../../schemas/node.schema.js";
|
|
3
6
|
import { NodeNotFoundError } from "../../core/utils/errors.js";
|
|
4
7
|
import { logger } from "../../core/utils/logger.js";
|
|
5
8
|
export function registerUpdateNode(server, store) {
|
|
6
|
-
server.tool("update_node", "Update arbitrary fields of a node (
|
|
9
|
+
server.tool("update_node", "Update arbitrary fields of a node (DEPRECATED — use `node` with action:\"update\")", {
|
|
7
10
|
id: z.string().describe("The node ID to update"),
|
|
8
11
|
title: z.string().optional().describe("New title"),
|
|
9
12
|
description: z.string().optional().describe("New description"),
|
|
@@ -19,6 +22,7 @@ export function registerUpdateNode(server, store) {
|
|
|
19
22
|
.optional()
|
|
20
23
|
.describe("New acceptance criteria"),
|
|
21
24
|
}, async ({ id, ...fields }) => {
|
|
25
|
+
logger.warn("tool:update_node:deprecated", { message: "Use 'node' tool with action:'update' instead" });
|
|
22
26
|
logger.debug("tool:update_node", { id, fields: Object.keys(fields) });
|
|
23
27
|
const updated = store.updateNode(id, fields);
|
|
24
28
|
if (!updated) {
|
|
@@ -26,7 +30,7 @@ export function registerUpdateNode(server, store) {
|
|
|
26
30
|
logger.warn("tool:update_node:fail", { error: err.message });
|
|
27
31
|
return {
|
|
28
32
|
content: [
|
|
29
|
-
{ type: "text", text: JSON.stringify({ error: err.message }) },
|
|
33
|
+
{ type: "text", text: JSON.stringify({ error: err.message, _deprecated: "Use 'node' tool with action:'update'" }) },
|
|
30
34
|
],
|
|
31
35
|
isError: true,
|
|
32
36
|
};
|
|
@@ -36,7 +40,7 @@ export function registerUpdateNode(server, store) {
|
|
|
36
40
|
content: [
|
|
37
41
|
{
|
|
38
42
|
type: "text",
|
|
39
|
-
text: JSON.stringify({ ok: true, node: updated }, null, 2),
|
|
43
|
+
text: JSON.stringify({ ok: true, node: updated, _deprecated: "Use 'node' tool with action:'update'" }, null, 2),
|
|
40
44
|
},
|
|
41
45
|
],
|
|
42
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node.js","sourceRoot":"","sources":["../../../src/mcp/tools/update-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,KAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"update-node.js","sourceRoot":"","sources":["../../../src/mcp/tools/update-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `validate` tool with action:"ac" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
5
|
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
6
|
export declare function registerValidateAc(server: McpServer, store: SqliteStore): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-ac.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/validate-ac.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-ac.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/validate-ac.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAyB9E"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `validate` tool with action:"ac" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import { z } from "zod/v4";
|
|
2
5
|
import { validateAcQuality } from "../../core/analyzer/ac-validator.js";
|
|
3
6
|
import { logger } from "../../core/utils/logger.js";
|
|
4
7
|
export function registerValidateAc(server, store) {
|
|
5
|
-
server.tool("validate_ac", "Validate acceptance criteria quality
|
|
8
|
+
server.tool("validate_ac", "Validate acceptance criteria quality (DEPRECATED — use `validate` with action:\"ac\")", {
|
|
6
9
|
nodeId: z.string().optional().describe("Validate AC for a specific node"),
|
|
7
10
|
all: z.boolean().optional().describe("Validate all nodes with AC (default: true if no nodeId)"),
|
|
8
11
|
}, async ({ nodeId, all }) => {
|
|
12
|
+
logger.warn("tool:validate_ac:deprecated", { message: "Use 'validate' tool with action:'ac' instead" });
|
|
9
13
|
logger.debug("tool:validate_ac", { nodeId, all });
|
|
10
14
|
const doc = store.toGraphDocument();
|
|
11
15
|
const report = validateAcQuality(doc, nodeId, all ?? !nodeId);
|
|
@@ -14,7 +18,7 @@ export function registerValidateAc(server, store) {
|
|
|
14
18
|
content: [
|
|
15
19
|
{
|
|
16
20
|
type: "text",
|
|
17
|
-
text: JSON.stringify({ ok: true, ...report }, null, 2),
|
|
21
|
+
text: JSON.stringify({ ok: true, ...report, _deprecated: "Use 'validate' tool with action:'ac'" }, null, 2),
|
|
18
22
|
},
|
|
19
23
|
],
|
|
20
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-ac.js","sourceRoot":"","sources":["../../../src/mcp/tools/validate-ac.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,KAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"validate-ac.js","sourceRoot":"","sources":["../../../src/mcp/tools/validate-ac.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,KAAkB;IACtE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,uFAAuF,EACvF;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACzE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KAChG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAC;QACxG,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9D,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/F,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC5G;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `validate` tool with action:"task" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
5
|
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
3
6
|
export declare function registerValidateTask(server: McpServer, store: SqliteStore): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/validate-task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/validate-task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAMpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA8DhF"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `validate` tool with action:"task" instead. Will be removed in v7.0.
|
|
3
|
+
*/
|
|
1
4
|
import { z } from "zod/v4";
|
|
2
5
|
import { runValidation } from "../../core/capture/validate-runner.js";
|
|
3
6
|
import { KnowledgeStore } from "../../core/store/knowledge-store.js";
|
|
4
7
|
import { indexCapture } from "../../core/rag/capture-indexer.js";
|
|
5
8
|
import { logger } from "../../core/utils/logger.js";
|
|
6
9
|
export function registerValidateTask(server, store) {
|
|
7
|
-
server.tool("validate_task", "Run browser-based validation for a task
|
|
10
|
+
server.tool("validate_task", "Run browser-based validation for a task (DEPRECATED — use `validate` with action:\"task\")", {
|
|
8
11
|
url: z.string().url().describe("URL to validate"),
|
|
9
12
|
compareUrl: z
|
|
10
13
|
.string()
|
|
@@ -20,6 +23,7 @@ export function registerValidateTask(server, store) {
|
|
|
20
23
|
.optional()
|
|
21
24
|
.describe("Associate validation with a graph node"),
|
|
22
25
|
}, async ({ url, compareUrl, selector, nodeId }) => {
|
|
26
|
+
logger.warn("tool:validate_task:deprecated", { message: "Use 'validate' tool with action:'task' instead" });
|
|
23
27
|
logger.debug("tool:validate_task", { nodeId });
|
|
24
28
|
const result = await runValidation(url, { compareUrl, selector });
|
|
25
29
|
// Index captured content into knowledge store
|
|
@@ -34,6 +38,7 @@ export function registerValidateTask(server, store) {
|
|
|
34
38
|
wordCount: result.primary.wordCount,
|
|
35
39
|
title: result.primary.title,
|
|
36
40
|
timestamp: result.timestamp,
|
|
41
|
+
_deprecated: "Use 'validate' tool with action:'task'",
|
|
37
42
|
};
|
|
38
43
|
if (nodeId) {
|
|
39
44
|
response.nodeId = nodeId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/validate-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAkB;IACxE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"validate-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/validate-task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAkB;IACxE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4FAA4F,EAC5F;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACjD,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0CAA0C,CAAC;QACvD,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElE,8CAA8C;QAC9C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAA4B;YACxC,EAAE,EAAE,IAAI;YACR,GAAG;YACH,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;YACnC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,wCAAwC;SACtD,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,QAAQ,CAAC,UAAU,GAAG;gBACpB,UAAU;gBACV,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;gBAC1C,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;aACrC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool — validate
|
|
3
|
+
* Consolidated validation tool (task browser validation + AC quality check).
|
|
4
|
+
* Replaces separate validate_task and validate_ac tools.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
|
+
import type { SqliteStore } from "../../core/store/sqlite-store.js";
|
|
8
|
+
export declare function registerValidate(server: McpServer, store: SqliteStore): void;
|
|
9
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAuE5E"}
|