@proletariat/cli 0.3.26 → 0.3.28
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/bin/dev.js +7 -0
- package/bin/run.js +7 -0
- package/dist/commands/action/show.js +7 -1
- package/dist/commands/agent/shell.js +24 -10
- package/dist/commands/branch/list.js +14 -11
- package/dist/commands/branch/validate.js +10 -1
- package/dist/commands/claude.js +12 -40
- package/dist/commands/docker/clean.js +7 -9
- package/dist/commands/docker/index.js +5 -4
- package/dist/commands/docker/list.d.ts +1 -0
- package/dist/commands/docker/list.js +31 -17
- package/dist/commands/docker/status.d.ts +3 -1
- package/dist/commands/docker/status.js +28 -2
- package/dist/commands/docker/sync.js +7 -6
- package/dist/commands/epic/list.js +17 -2
- package/dist/commands/execution/list.js +25 -17
- package/dist/commands/pmo/init.js +22 -3
- package/dist/commands/repo/list.js +14 -8
- package/dist/commands/repo/view.js +2 -1
- package/dist/commands/roadmap/list.js +16 -1
- package/dist/commands/session/health.js +11 -10
- package/dist/commands/session/list.js +15 -8
- package/dist/commands/staff/list.d.ts +3 -1
- package/dist/commands/staff/list.js +15 -1
- package/dist/commands/theme/list.d.ts +3 -0
- package/dist/commands/theme/list.js +25 -0
- package/dist/commands/ticket/complete.js +4 -1
- package/dist/commands/ticket/create.d.ts +1 -0
- package/dist/commands/ticket/create.js +30 -0
- package/dist/commands/ticket/delete.js +3 -3
- package/dist/commands/ticket/edit.js +2 -2
- package/dist/commands/ticket/list.js +24 -5
- package/dist/commands/ticket/move.js +4 -1
- package/dist/commands/ticket/view.js +4 -2
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +22 -5
- package/dist/commands/work/complete.js +2 -2
- package/dist/commands/work/ready.js +2 -2
- package/dist/commands/work/revise.js +2 -2
- package/dist/commands/work/spawn.js +6 -21
- package/dist/commands/work/start.js +10 -25
- package/dist/commands/work/watch.js +57 -33
- package/dist/commands/workspace/prune.d.ts +3 -2
- package/dist/commands/workspace/prune.js +70 -10
- package/dist/lib/agents/commands.js +4 -0
- package/dist/lib/agents/index.js +12 -0
- package/dist/lib/execution/devcontainer.d.ts +4 -0
- package/dist/lib/execution/devcontainer.js +88 -3
- package/dist/lib/mcp/helpers.d.ts +15 -0
- package/dist/lib/mcp/helpers.js +15 -0
- package/dist/lib/mcp/tools/action.js +5 -5
- package/dist/lib/mcp/tools/board.js +7 -7
- package/dist/lib/mcp/tools/category.js +5 -5
- package/dist/lib/mcp/tools/cli-passthrough.js +30 -30
- package/dist/lib/mcp/tools/epic.js +8 -8
- package/dist/lib/mcp/tools/phase.js +7 -7
- package/dist/lib/mcp/tools/project.js +10 -10
- package/dist/lib/mcp/tools/roadmap.js +7 -7
- package/dist/lib/mcp/tools/spec.js +9 -9
- package/dist/lib/mcp/tools/status.js +6 -6
- package/dist/lib/mcp/tools/template.js +6 -6
- package/dist/lib/mcp/tools/ticket.js +19 -19
- package/dist/lib/mcp/tools/view.js +4 -4
- package/dist/lib/mcp/tools/work.js +6 -6
- package/dist/lib/mcp/tools/workflow.js +5 -5
- package/dist/lib/pmo/index.js +4 -0
- package/dist/lib/pmo/storage/base.js +49 -0
- package/dist/lib/pmo/types.d.ts +1 -1
- package/dist/lib/pmo/types.js +1 -0
- package/dist/lib/pr/index.d.ts +5 -0
- package/dist/lib/pr/index.js +69 -0
- package/dist/lib/repos/index.js +4 -0
- package/dist/lib/string-utils.d.ts +10 -0
- package/dist/lib/string-utils.js +16 -0
- package/oclif.manifest.json +3331 -3253
- package/package.json +3 -2
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Epic Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerEpicTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'epic_list', 'List epics', {
|
|
8
8
|
project: z.string().optional(),
|
|
9
9
|
status: z.enum(['active', 'draft', 'complete', 'dropped', 'future']).optional(),
|
|
10
10
|
search: z.string().optional(),
|
|
@@ -39,7 +39,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
39
39
|
return errorResponse(error);
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
-
server
|
|
42
|
+
strictTool(server, 'epic_create', 'Create an epic', {
|
|
43
43
|
title: z.string().describe('Epic title'),
|
|
44
44
|
project: z.string().optional(),
|
|
45
45
|
description: z.string().optional(),
|
|
@@ -71,7 +71,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
71
71
|
return errorResponse(error);
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
-
server
|
|
74
|
+
strictTool(server, 'epic_show', 'Get epic details with tickets', { id: z.string().describe('Epic ID') }, async (params) => {
|
|
75
75
|
try {
|
|
76
76
|
const epic = await ctx.storage.getEpic(params.id);
|
|
77
77
|
if (!epic)
|
|
@@ -97,7 +97,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
97
97
|
return errorResponse(error);
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
|
-
server
|
|
100
|
+
strictTool(server, 'epic_update', 'Update an epic', {
|
|
101
101
|
id: z.string().describe('Epic ID'),
|
|
102
102
|
title: z.string().optional(),
|
|
103
103
|
description: z.string().optional(),
|
|
@@ -123,7 +123,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
123
123
|
return errorResponse(error);
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
|
-
server
|
|
126
|
+
strictTool(server, 'epic_delete', 'Delete an epic', { id: z.string().describe('Epic ID') }, async (params) => {
|
|
127
127
|
try {
|
|
128
128
|
await ctx.storage.deleteEpic(params.id);
|
|
129
129
|
return {
|
|
@@ -137,7 +137,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
137
137
|
return errorResponse(error);
|
|
138
138
|
}
|
|
139
139
|
});
|
|
140
|
-
server
|
|
140
|
+
strictTool(server, 'epic_reorder', 'Reorder an epic', {
|
|
141
141
|
id: z.string().describe('Epic ID'),
|
|
142
142
|
position: z.number().describe('New position'),
|
|
143
143
|
project: z.string().optional(),
|
|
@@ -158,7 +158,7 @@ export function registerEpicTools(server, ctx) {
|
|
|
158
158
|
return errorResponse(error);
|
|
159
159
|
}
|
|
160
160
|
});
|
|
161
|
-
server
|
|
161
|
+
strictTool(server, 'epic_add_blocker', 'Add epic dependency', {
|
|
162
162
|
epic_id: z.string().describe('Epic that will be blocked'),
|
|
163
163
|
blocker_id: z.string().describe('Epic that blocks'),
|
|
164
164
|
}, async (params) => {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Phase Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerPhaseTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'phase_list', 'List project phases', { category: z.enum(['triage', 'backlog', 'unstarted', 'started', 'completed', 'canceled']).optional() }, async (params) => {
|
|
8
8
|
try {
|
|
9
9
|
const phases = await ctx.storage.listPhases({ category: params.category });
|
|
10
10
|
return {
|
|
@@ -27,7 +27,7 @@ export function registerPhaseTools(server, ctx) {
|
|
|
27
27
|
return errorResponse(error);
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
-
server
|
|
30
|
+
strictTool(server, 'phase_create', 'Create a project phase', {
|
|
31
31
|
name: z.string().describe('Phase name'),
|
|
32
32
|
category: z.enum(['triage', 'backlog', 'unstarted', 'started', 'completed', 'canceled']),
|
|
33
33
|
position: z.number().optional(),
|
|
@@ -51,7 +51,7 @@ export function registerPhaseTools(server, ctx) {
|
|
|
51
51
|
return errorResponse(error);
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
-
server
|
|
54
|
+
strictTool(server, 'phase_update', 'Update a phase', {
|
|
55
55
|
id: z.string().describe('Phase ID'),
|
|
56
56
|
name: z.string().optional(),
|
|
57
57
|
category: z.enum(['triage', 'backlog', 'unstarted', 'started', 'completed', 'canceled']).optional(),
|
|
@@ -74,7 +74,7 @@ export function registerPhaseTools(server, ctx) {
|
|
|
74
74
|
return errorResponse(error);
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
|
-
server
|
|
77
|
+
strictTool(server, 'phase_delete', 'Delete a phase', { id: z.string().describe('Phase ID') }, async (params) => {
|
|
78
78
|
try {
|
|
79
79
|
await ctx.storage.deletePhase(params.id);
|
|
80
80
|
return {
|
|
@@ -88,7 +88,7 @@ export function registerPhaseTools(server, ctx) {
|
|
|
88
88
|
return errorResponse(error);
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
|
-
server
|
|
91
|
+
strictTool(server, 'phase_template_list', 'List phase templates', {}, async () => {
|
|
92
92
|
try {
|
|
93
93
|
const templates = await ctx.storage.listPhaseTemplates();
|
|
94
94
|
return {
|
|
@@ -110,7 +110,7 @@ export function registerPhaseTools(server, ctx) {
|
|
|
110
110
|
return errorResponse(error);
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
|
-
server
|
|
113
|
+
strictTool(server, 'phase_template_apply', 'Apply a phase template', { template_id: z.string().describe('Template ID') }, async (params) => {
|
|
114
114
|
try {
|
|
115
115
|
const phases = await ctx.storage.applyPhaseTemplate(params.template_id);
|
|
116
116
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Project Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerProjectTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'project_list', 'List all projects', {
|
|
8
8
|
include_archived: z.boolean().optional().describe('Include archived'),
|
|
9
9
|
search: z.string().optional().describe('Search in name'),
|
|
10
10
|
}, async (params) => {
|
|
@@ -38,7 +38,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
38
38
|
return errorResponse(error);
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
-
server
|
|
41
|
+
strictTool(server, 'project_create', 'Create a new project', {
|
|
42
42
|
name: z.string().describe('Project name'),
|
|
43
43
|
description: z.string().optional().describe('Description'),
|
|
44
44
|
template: z.string().optional().describe('Template (kanban, scrum, linear, simple)'),
|
|
@@ -63,7 +63,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
63
63
|
return errorResponse(error);
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
|
-
server
|
|
66
|
+
strictTool(server, 'project_show', 'Get project details', { id: z.string().describe('Project ID') }, async (params) => {
|
|
67
67
|
try {
|
|
68
68
|
const project = await ctx.storage.getProject(params.id);
|
|
69
69
|
if (!project)
|
|
@@ -94,7 +94,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
94
94
|
return errorResponse(error);
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
|
-
server
|
|
97
|
+
strictTool(server, 'project_update', 'Update a project', {
|
|
98
98
|
id: z.string().describe('Project ID'),
|
|
99
99
|
name: z.string().optional().describe('New name'),
|
|
100
100
|
description: z.string().optional().describe('New description'),
|
|
@@ -117,7 +117,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
117
117
|
return errorResponse(error);
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
|
-
server
|
|
120
|
+
strictTool(server, 'project_archive', 'Archive a project', { id: z.string().describe('Project ID') }, async (params) => {
|
|
121
121
|
try {
|
|
122
122
|
const project = await ctx.storage.archiveProject(params.id);
|
|
123
123
|
return {
|
|
@@ -131,7 +131,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
131
131
|
return errorResponse(error);
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
|
-
server
|
|
134
|
+
strictTool(server, 'project_unarchive', 'Unarchive a project', { id: z.string().describe('Project ID') }, async (params) => {
|
|
135
135
|
try {
|
|
136
136
|
const project = await ctx.storage.unarchiveProject(params.id);
|
|
137
137
|
return {
|
|
@@ -145,7 +145,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
145
145
|
return errorResponse(error);
|
|
146
146
|
}
|
|
147
147
|
});
|
|
148
|
-
server
|
|
148
|
+
strictTool(server, 'project_delete', 'Delete a project', { id: z.string().describe('Project ID') }, async (params) => {
|
|
149
149
|
try {
|
|
150
150
|
await ctx.storage.deleteProject(params.id);
|
|
151
151
|
return {
|
|
@@ -159,7 +159,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
159
159
|
return errorResponse(error);
|
|
160
160
|
}
|
|
161
161
|
});
|
|
162
|
-
server
|
|
162
|
+
strictTool(server, 'project_link_to_spec', 'Link project to a spec', {
|
|
163
163
|
project_id: z.string().describe('Project ID'),
|
|
164
164
|
spec_id: z.string().describe('Spec ID'),
|
|
165
165
|
}, async (params) => {
|
|
@@ -176,7 +176,7 @@ export function registerProjectTools(server, ctx) {
|
|
|
176
176
|
return errorResponse(error);
|
|
177
177
|
}
|
|
178
178
|
});
|
|
179
|
-
server
|
|
179
|
+
strictTool(server, 'project_get_specs', 'Get specs linked to a project', { project_id: z.string().describe('Project ID') }, async (params) => {
|
|
180
180
|
try {
|
|
181
181
|
const specs = await ctx.storage.getSpecsForProject(params.project_id);
|
|
182
182
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Roadmap Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerRoadmapTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'roadmap_list', 'List roadmaps', {}, async () => {
|
|
8
8
|
try {
|
|
9
9
|
const roadmaps = await ctx.storage.listRoadmaps();
|
|
10
10
|
return {
|
|
@@ -26,7 +26,7 @@ export function registerRoadmapTools(server, ctx) {
|
|
|
26
26
|
return errorResponse(error);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
server
|
|
29
|
+
strictTool(server, 'roadmap_create', 'Create a roadmap', {
|
|
30
30
|
name: z.string().describe('Roadmap name'),
|
|
31
31
|
description: z.string().optional(),
|
|
32
32
|
is_default: z.boolean().optional(),
|
|
@@ -48,7 +48,7 @@ export function registerRoadmapTools(server, ctx) {
|
|
|
48
48
|
return errorResponse(error);
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
|
-
server
|
|
51
|
+
strictTool(server, 'roadmap_show', 'Get roadmap with projects', { id: z.string().describe('Roadmap ID') }, async (params) => {
|
|
52
52
|
try {
|
|
53
53
|
const roadmap = await ctx.storage.getRoadmap(params.id);
|
|
54
54
|
if (!roadmap)
|
|
@@ -71,7 +71,7 @@ export function registerRoadmapTools(server, ctx) {
|
|
|
71
71
|
return errorResponse(error);
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
-
server
|
|
74
|
+
strictTool(server, 'roadmap_add_project', 'Add project to roadmap', {
|
|
75
75
|
roadmap_id: z.string().describe('Roadmap ID'),
|
|
76
76
|
project_id: z.string().describe('Project ID'),
|
|
77
77
|
position: z.number().optional(),
|
|
@@ -89,7 +89,7 @@ export function registerRoadmapTools(server, ctx) {
|
|
|
89
89
|
return errorResponse(error);
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
|
-
server
|
|
92
|
+
strictTool(server, 'roadmap_remove_project', 'Remove project from roadmap', {
|
|
93
93
|
roadmap_id: z.string().describe('Roadmap ID'),
|
|
94
94
|
project_id: z.string().describe('Project ID'),
|
|
95
95
|
}, async (params) => {
|
|
@@ -106,7 +106,7 @@ export function registerRoadmapTools(server, ctx) {
|
|
|
106
106
|
return errorResponse(error);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
|
-
server
|
|
109
|
+
strictTool(server, 'roadmap_delete', 'Delete a roadmap', { id: z.string().describe('Roadmap ID') }, async (params) => {
|
|
110
110
|
try {
|
|
111
111
|
await ctx.storage.deleteRoadmap(params.id);
|
|
112
112
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Spec Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerSpecTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'spec_list', 'List specifications', {
|
|
8
8
|
status: z.enum(['draft', 'active', 'implemented']).optional(),
|
|
9
9
|
type: z.enum(['product', 'platform', 'infra', 'integration']).optional(),
|
|
10
10
|
search: z.string().optional(),
|
|
@@ -37,7 +37,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
37
37
|
return errorResponse(error);
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
server
|
|
40
|
+
strictTool(server, 'spec_create', 'Create a specification', {
|
|
41
41
|
title: z.string().describe('Spec title'),
|
|
42
42
|
status: z.enum(['draft', 'active', 'implemented']).optional(),
|
|
43
43
|
type: z.enum(['product', 'platform', 'infra', 'integration']).optional(),
|
|
@@ -67,7 +67,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
67
67
|
return errorResponse(error);
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
|
-
server
|
|
70
|
+
strictTool(server, 'spec_show', 'Get spec details', { id: z.string().describe('Spec ID') }, async (params) => {
|
|
71
71
|
try {
|
|
72
72
|
const spec = await ctx.storage.getSpec(params.id);
|
|
73
73
|
if (!spec)
|
|
@@ -83,7 +83,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
83
83
|
return errorResponse(error);
|
|
84
84
|
}
|
|
85
85
|
});
|
|
86
|
-
server
|
|
86
|
+
strictTool(server, 'spec_update', 'Update a spec', {
|
|
87
87
|
id: z.string().describe('Spec ID'),
|
|
88
88
|
title: z.string().optional(),
|
|
89
89
|
status: z.enum(['draft', 'active', 'implemented']).optional(),
|
|
@@ -118,7 +118,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
118
118
|
return errorResponse(error);
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
|
-
server
|
|
121
|
+
strictTool(server, 'spec_delete', 'Delete a spec', { id: z.string().describe('Spec ID') }, async (params) => {
|
|
122
122
|
try {
|
|
123
123
|
await ctx.storage.deleteSpec(params.id);
|
|
124
124
|
return {
|
|
@@ -132,7 +132,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
132
132
|
return errorResponse(error);
|
|
133
133
|
}
|
|
134
134
|
});
|
|
135
|
-
server
|
|
135
|
+
strictTool(server, 'spec_add_dependency', 'Add spec dependency', {
|
|
136
136
|
spec_id: z.string().describe('Spec ID'),
|
|
137
137
|
depends_on_id: z.string().describe('ID of spec this depends on'),
|
|
138
138
|
}, async (params) => {
|
|
@@ -149,7 +149,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
149
149
|
return errorResponse(error);
|
|
150
150
|
}
|
|
151
151
|
});
|
|
152
|
-
server
|
|
152
|
+
strictTool(server, 'spec_get_dependencies', 'Get spec dependencies', { spec_id: z.string().describe('Spec ID') }, async (params) => {
|
|
153
153
|
try {
|
|
154
154
|
const deps = await ctx.storage.getSpecDependencies(params.spec_id);
|
|
155
155
|
return {
|
|
@@ -166,7 +166,7 @@ export function registerSpecTools(server, ctx) {
|
|
|
166
166
|
return errorResponse(error);
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
|
-
server
|
|
169
|
+
strictTool(server, 'spec_get_tickets', 'Get tickets linked to a spec', {
|
|
170
170
|
spec_id: z.string().describe('Spec ID'),
|
|
171
171
|
project: z.string().optional().describe('Project ID'),
|
|
172
172
|
}, async (params) => {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Status Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerStatusTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'status_list', 'List statuses in a workflow', { workflow_id: z.string().describe('Workflow ID') }, async (params) => {
|
|
8
8
|
try {
|
|
9
9
|
const statuses = await ctx.storage.listStatuses(params.workflow_id);
|
|
10
10
|
return {
|
|
@@ -27,7 +27,7 @@ export function registerStatusTools(server, ctx) {
|
|
|
27
27
|
return errorResponse(error);
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
-
server
|
|
30
|
+
strictTool(server, 'status_create', 'Create a status in a workflow', {
|
|
31
31
|
workflow_id: z.string().describe('Workflow ID'),
|
|
32
32
|
name: z.string().describe('Status name'),
|
|
33
33
|
category: z.enum(['triage', 'backlog', 'unstarted', 'started', 'completed', 'canceled']).describe('Category'),
|
|
@@ -52,7 +52,7 @@ export function registerStatusTools(server, ctx) {
|
|
|
52
52
|
return errorResponse(error);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
|
-
server
|
|
55
|
+
strictTool(server, 'status_update', 'Update a status', {
|
|
56
56
|
id: z.string().describe('Status ID'),
|
|
57
57
|
name: z.string().optional(),
|
|
58
58
|
category: z.enum(['triage', 'backlog', 'unstarted', 'started', 'completed', 'canceled']).optional(),
|
|
@@ -75,7 +75,7 @@ export function registerStatusTools(server, ctx) {
|
|
|
75
75
|
return errorResponse(error);
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
|
-
server
|
|
78
|
+
strictTool(server, 'status_reorder', 'Reorder a status', {
|
|
79
79
|
id: z.string().describe('Status ID'),
|
|
80
80
|
position: z.number().describe('New position'),
|
|
81
81
|
}, async (params) => {
|
|
@@ -92,7 +92,7 @@ export function registerStatusTools(server, ctx) {
|
|
|
92
92
|
return errorResponse(error);
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
|
-
server
|
|
95
|
+
strictTool(server, 'status_delete', 'Delete a status', { id: z.string().describe('Status ID') }, async (params) => {
|
|
96
96
|
try {
|
|
97
97
|
await ctx.storage.deleteStatus(params.id);
|
|
98
98
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Template Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerTemplateTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'ticket_template_list', 'List ticket templates', { include_builtin: z.boolean().optional() }, async (params) => {
|
|
8
8
|
try {
|
|
9
9
|
const templates = await ctx.storage.listTicketTemplates({
|
|
10
10
|
isBuiltin: params.include_builtin ? undefined : false,
|
|
@@ -28,7 +28,7 @@ export function registerTemplateTools(server, ctx) {
|
|
|
28
28
|
return errorResponse(error);
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
-
server
|
|
31
|
+
strictTool(server, 'ticket_template_show', 'Get ticket template details', { id: z.string().describe('Template ID') }, async (params) => {
|
|
32
32
|
try {
|
|
33
33
|
const template = await ctx.storage.getTicketTemplate(params.id);
|
|
34
34
|
if (!template)
|
|
@@ -44,7 +44,7 @@ export function registerTemplateTools(server, ctx) {
|
|
|
44
44
|
return errorResponse(error);
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
|
-
server
|
|
47
|
+
strictTool(server, 'ticket_template_create', 'Create a ticket template', {
|
|
48
48
|
name: z.string().describe('Template name'),
|
|
49
49
|
description: z.string().optional(),
|
|
50
50
|
title_pattern: z.string().optional(),
|
|
@@ -72,7 +72,7 @@ export function registerTemplateTools(server, ctx) {
|
|
|
72
72
|
return errorResponse(error);
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
|
-
server
|
|
75
|
+
strictTool(server, 'ticket_template_create_from_ticket', 'Create template from existing ticket', {
|
|
76
76
|
ticket_id: z.string().describe('Ticket ID'),
|
|
77
77
|
name: z.string().describe('Template name'),
|
|
78
78
|
description: z.string().optional(),
|
|
@@ -90,7 +90,7 @@ export function registerTemplateTools(server, ctx) {
|
|
|
90
90
|
return errorResponse(error);
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
|
-
server
|
|
93
|
+
strictTool(server, 'ticket_template_delete', 'Delete a ticket template', { id: z.string().describe('Template ID') }, async (params) => {
|
|
94
94
|
try {
|
|
95
95
|
await ctx.storage.deleteTicketTemplate(params.id);
|
|
96
96
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP Ticket Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { formatTicket, formatTicketFull, errorResponse } from '../helpers.js';
|
|
5
|
+
import { formatTicket, formatTicketFull, errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerTicketTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'ticket_list', 'List tickets with optional filters', {
|
|
8
8
|
project: z.string().optional().describe('Project ID'),
|
|
9
9
|
column: z.string().optional().describe('Filter by column/status'),
|
|
10
10
|
priority: z.enum(['P0', 'P1', 'P2', 'P3']).optional().describe('Filter by priority'),
|
|
@@ -56,7 +56,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
56
56
|
return errorResponse(error);
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
|
-
server
|
|
59
|
+
strictTool(server, 'ticket_create', 'Create a new ticket', {
|
|
60
60
|
title: z.string().describe('Ticket title (required)'),
|
|
61
61
|
project: z.string().optional().describe('Project ID'),
|
|
62
62
|
description: z.string().optional().describe('Ticket description'),
|
|
@@ -100,7 +100,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
100
100
|
return errorResponse(error);
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
|
-
server
|
|
103
|
+
strictTool(server, 'ticket_show', 'Get detailed ticket information', { id: z.string().describe('Ticket ID') }, async (params) => {
|
|
104
104
|
try {
|
|
105
105
|
const ticket = await ctx.storage.getTicket(params.id);
|
|
106
106
|
if (!ticket)
|
|
@@ -116,7 +116,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
116
116
|
return errorResponse(error);
|
|
117
117
|
}
|
|
118
118
|
});
|
|
119
|
-
server
|
|
119
|
+
strictTool(server, 'ticket_update', 'Update a ticket', {
|
|
120
120
|
id: z.string().describe('Ticket ID'),
|
|
121
121
|
title: z.string().optional().describe('New title'),
|
|
122
122
|
description: z.string().optional().describe('New description'),
|
|
@@ -154,7 +154,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
154
154
|
return errorResponse(error);
|
|
155
155
|
}
|
|
156
156
|
});
|
|
157
|
-
server
|
|
157
|
+
strictTool(server, 'ticket_move', 'Move ticket to a different column/status', {
|
|
158
158
|
id: z.string().describe('Ticket ID'),
|
|
159
159
|
column: z.string().describe('Target column/status'),
|
|
160
160
|
position: z.number().optional().describe('Position in column'),
|
|
@@ -175,7 +175,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
175
175
|
return errorResponse(error);
|
|
176
176
|
}
|
|
177
177
|
});
|
|
178
|
-
server
|
|
178
|
+
strictTool(server, 'ticket_delete', 'Delete a ticket', { id: z.string().describe('Ticket ID') }, async (params) => {
|
|
179
179
|
try {
|
|
180
180
|
await ctx.storage.deleteTicket(params.id);
|
|
181
181
|
return {
|
|
@@ -189,7 +189,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
189
189
|
return errorResponse(error);
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
|
-
server
|
|
192
|
+
strictTool(server, 'ticket_move_to_project', 'Move ticket to a different project', {
|
|
193
193
|
id: z.string().describe('Ticket ID'),
|
|
194
194
|
project: z.string().describe('Target project ID'),
|
|
195
195
|
}, async (params) => {
|
|
@@ -206,7 +206,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
206
206
|
return errorResponse(error);
|
|
207
207
|
}
|
|
208
208
|
});
|
|
209
|
-
server
|
|
209
|
+
strictTool(server, 'ticket_add_subtask', 'Add a subtask to a ticket', {
|
|
210
210
|
ticket_id: z.string().describe('Ticket ID'),
|
|
211
211
|
title: z.string().describe('Subtask title'),
|
|
212
212
|
}, async (params) => {
|
|
@@ -223,7 +223,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
223
223
|
return errorResponse(error);
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
|
-
server
|
|
226
|
+
strictTool(server, 'ticket_toggle_subtask', 'Toggle subtask completion', {
|
|
227
227
|
ticket_id: z.string().describe('Ticket ID'),
|
|
228
228
|
subtask_id: z.string().describe('Subtask ID'),
|
|
229
229
|
}, async (params) => {
|
|
@@ -240,7 +240,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
240
240
|
return errorResponse(error);
|
|
241
241
|
}
|
|
242
242
|
});
|
|
243
|
-
server
|
|
243
|
+
strictTool(server, 'ticket_remove_subtask', 'Remove a subtask', {
|
|
244
244
|
ticket_id: z.string().describe('Ticket ID'),
|
|
245
245
|
subtask_id: z.string().describe('Subtask ID'),
|
|
246
246
|
}, async (params) => {
|
|
@@ -257,7 +257,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
257
257
|
return errorResponse(error);
|
|
258
258
|
}
|
|
259
259
|
});
|
|
260
|
-
server
|
|
260
|
+
strictTool(server, 'ticket_add_acceptance_criterion', 'Add acceptance criterion to a ticket', {
|
|
261
261
|
ticket_id: z.string().describe('Ticket ID'),
|
|
262
262
|
criterion: z.string().describe('Acceptance criterion text'),
|
|
263
263
|
}, async (params) => {
|
|
@@ -274,7 +274,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
274
274
|
return errorResponse(error);
|
|
275
275
|
}
|
|
276
276
|
});
|
|
277
|
-
server
|
|
277
|
+
strictTool(server, 'ticket_remove_acceptance_criterion', 'Remove acceptance criterion', {
|
|
278
278
|
ticket_id: z.string().describe('Ticket ID'),
|
|
279
279
|
criterion_id: z.string().describe('Criterion ID'),
|
|
280
280
|
}, async (params) => {
|
|
@@ -291,7 +291,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
291
291
|
return errorResponse(error);
|
|
292
292
|
}
|
|
293
293
|
});
|
|
294
|
-
server
|
|
294
|
+
strictTool(server, 'ticket_link_to_epic', 'Link ticket to an epic', {
|
|
295
295
|
ticket_id: z.string().describe('Ticket ID'),
|
|
296
296
|
epic_id: z.string().describe('Epic ID'),
|
|
297
297
|
}, async (params) => {
|
|
@@ -308,7 +308,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
308
308
|
return errorResponse(error);
|
|
309
309
|
}
|
|
310
310
|
});
|
|
311
|
-
server
|
|
311
|
+
strictTool(server, 'ticket_unlink_from_epic', 'Unlink ticket from its epic', { ticket_id: z.string().describe('Ticket ID') }, async (params) => {
|
|
312
312
|
try {
|
|
313
313
|
await ctx.storage.unlinkTicketFromEpic(params.ticket_id);
|
|
314
314
|
return {
|
|
@@ -322,7 +322,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
322
322
|
return errorResponse(error);
|
|
323
323
|
}
|
|
324
324
|
});
|
|
325
|
-
server
|
|
325
|
+
strictTool(server, 'ticket_link_to_spec', 'Link ticket to a spec', {
|
|
326
326
|
ticket_id: z.string().describe('Ticket ID'),
|
|
327
327
|
spec_id: z.string().describe('Spec ID'),
|
|
328
328
|
}, async (params) => {
|
|
@@ -339,7 +339,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
339
339
|
return errorResponse(error);
|
|
340
340
|
}
|
|
341
341
|
});
|
|
342
|
-
server
|
|
342
|
+
strictTool(server, 'ticket_add_blocker', 'Add a blocking dependency', {
|
|
343
343
|
ticket_id: z.string().describe('Ticket that will be blocked'),
|
|
344
344
|
blocker_id: z.string().describe('Ticket that blocks'),
|
|
345
345
|
}, async (params) => {
|
|
@@ -356,7 +356,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
356
356
|
return errorResponse(error);
|
|
357
357
|
}
|
|
358
358
|
});
|
|
359
|
-
server
|
|
359
|
+
strictTool(server, 'ticket_remove_blocker', 'Remove a blocking dependency', {
|
|
360
360
|
ticket_id: z.string().describe('Blocked ticket'),
|
|
361
361
|
blocker_id: z.string().describe('Blocking ticket'),
|
|
362
362
|
}, async (params) => {
|
|
@@ -373,7 +373,7 @@ export function registerTicketTools(server, ctx) {
|
|
|
373
373
|
return errorResponse(error);
|
|
374
374
|
}
|
|
375
375
|
});
|
|
376
|
-
server
|
|
376
|
+
strictTool(server, 'ticket_get_blockers', 'Get tickets blocking this ticket', { ticket_id: z.string().describe('Ticket ID') }, async (params) => {
|
|
377
377
|
try {
|
|
378
378
|
const blockers = await ctx.storage.getTicketBlockers(params.ticket_id);
|
|
379
379
|
return {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* MCP View Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { errorResponse } from '../helpers.js';
|
|
5
|
+
import { errorResponse, strictTool } from '../helpers.js';
|
|
6
6
|
export function registerViewTools(server, ctx) {
|
|
7
|
-
server
|
|
7
|
+
strictTool(server, 'view_list', 'List board views for a project', { project: z.string().optional() }, async (params) => {
|
|
8
8
|
try {
|
|
9
9
|
const views = await ctx.storage.listBoardViews({ projectId: params.project });
|
|
10
10
|
return {
|
|
@@ -27,7 +27,7 @@ export function registerViewTools(server, ctx) {
|
|
|
27
27
|
return errorResponse(error);
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
-
server
|
|
30
|
+
strictTool(server, 'view_create', 'Create a board view', {
|
|
31
31
|
project: z.string().describe('Project ID'),
|
|
32
32
|
name: z.string().describe('View name'),
|
|
33
33
|
description: z.string().optional(),
|
|
@@ -59,7 +59,7 @@ export function registerViewTools(server, ctx) {
|
|
|
59
59
|
return errorResponse(error);
|
|
60
60
|
}
|
|
61
61
|
});
|
|
62
|
-
server
|
|
62
|
+
strictTool(server, 'view_delete', 'Delete a board view', { id: z.string().describe('View ID') }, async (params) => {
|
|
63
63
|
try {
|
|
64
64
|
await ctx.storage.deleteBoardView(params.id);
|
|
65
65
|
return {
|