@proletariat/cli 0.3.25 → 0.3.27
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/commands/action/index.js +2 -2
- package/dist/commands/action/show.js +7 -1
- package/dist/commands/agent/auth.js +1 -1
- package/dist/commands/agent/cleanup.js +6 -6
- package/dist/commands/agent/discover.js +1 -1
- package/dist/commands/agent/remove.js +4 -4
- package/dist/commands/autocomplete/setup.d.ts +2 -2
- package/dist/commands/autocomplete/setup.js +5 -5
- package/dist/commands/branch/create.js +31 -30
- package/dist/commands/branch/list.js +14 -11
- package/dist/commands/branch/validate.js +10 -1
- package/dist/commands/category/create.js +4 -5
- package/dist/commands/category/delete.js +2 -3
- package/dist/commands/category/rename.js +2 -3
- package/dist/commands/claude.d.ts +2 -8
- package/dist/commands/claude.js +26 -26
- package/dist/commands/commit.d.ts +2 -8
- package/dist/commands/commit.js +4 -26
- package/dist/commands/config/index.d.ts +2 -10
- package/dist/commands/config/index.js +8 -34
- package/dist/commands/docker/clean.js +7 -9
- package/dist/commands/docker/index.d.ts +2 -2
- package/dist/commands/docker/index.js +13 -12
- 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/delete.js +4 -5
- package/dist/commands/epic/list.js +17 -2
- package/dist/commands/execution/list.js +25 -17
- package/dist/commands/feedback/submit.d.ts +2 -2
- package/dist/commands/feedback/submit.js +9 -9
- package/dist/commands/link/index.js +2 -2
- package/dist/commands/pmo/init.d.ts +2 -2
- package/dist/commands/pmo/init.js +29 -10
- package/dist/commands/project/spec.js +6 -6
- 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.d.ts +29 -0
- package/dist/commands/session/health.js +496 -0
- package/dist/commands/session/index.js +4 -0
- package/dist/commands/session/list.js +15 -8
- package/dist/commands/spec/edit.js +2 -3
- package/dist/commands/staff/add.d.ts +2 -2
- package/dist/commands/staff/add.js +15 -14
- package/dist/commands/staff/index.js +2 -2
- package/dist/commands/staff/list.d.ts +3 -1
- package/dist/commands/staff/list.js +15 -1
- package/dist/commands/staff/remove.js +4 -4
- package/dist/commands/status/index.js +6 -7
- package/dist/commands/template/apply.js +10 -11
- package/dist/commands/template/create.js +18 -17
- package/dist/commands/template/index.d.ts +2 -2
- package/dist/commands/template/index.js +6 -6
- package/dist/commands/template/save.js +8 -7
- package/dist/commands/template/update.js +6 -7
- package/dist/commands/terminal/title.d.ts +2 -26
- package/dist/commands/terminal/title.js +4 -33
- package/dist/commands/theme/index.d.ts +2 -2
- package/dist/commands/theme/index.js +19 -18
- package/dist/commands/theme/list.d.ts +3 -0
- package/dist/commands/theme/list.js +25 -0
- package/dist/commands/theme/set.d.ts +2 -2
- package/dist/commands/theme/set.js +5 -5
- package/dist/commands/ticket/complete.js +4 -1
- package/dist/commands/ticket/create.d.ts +1 -0
- package/dist/commands/ticket/create.js +64 -16
- package/dist/commands/ticket/delete.js +18 -16
- package/dist/commands/ticket/edit.js +22 -14
- package/dist/commands/ticket/epic.js +12 -10
- package/dist/commands/ticket/list.js +24 -5
- package/dist/commands/ticket/move.js +4 -1
- package/dist/commands/ticket/project.js +11 -9
- package/dist/commands/ticket/reassign.js +23 -19
- package/dist/commands/ticket/spec.js +7 -5
- package/dist/commands/ticket/update.js +55 -53
- package/dist/commands/ticket/view.js +4 -2
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +22 -4
- package/dist/commands/work/complete.js +2 -2
- package/dist/commands/work/ready.js +9 -9
- package/dist/commands/work/revise.js +15 -13
- package/dist/commands/work/spawn.js +154 -57
- package/dist/commands/work/start.d.ts +1 -0
- package/dist/commands/work/start.js +299 -177
- package/dist/commands/workspace/prune.d.ts +3 -2
- package/dist/commands/workspace/prune.js +70 -10
- package/dist/hooks/init.js +4 -0
- 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 +63 -0
- 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/pr/index.d.ts +9 -0
- package/dist/lib/pr/index.js +101 -14
- package/dist/lib/prompt-command.d.ts +3 -0
- package/dist/lib/prompt-json.d.ts +72 -1
- package/dist/lib/prompt-json.js +46 -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 +594 -449
- package/package.json +3 -2
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* They're wrapped for MCP but return formatted text output.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { errorResponse, textResponse } from '../helpers.js';
|
|
8
|
+
import { errorResponse, textResponse, strictTool } from '../helpers.js';
|
|
9
9
|
export function registerAgentTools(server, ctx) {
|
|
10
|
-
server
|
|
10
|
+
strictTool(server, 'agent_list', 'List all agents', { type: z.enum(['staff', 'temp', 'all']).optional() }, async (params) => {
|
|
11
11
|
try {
|
|
12
12
|
const typeFlag = params.type ? `--type ${params.type}` : '';
|
|
13
13
|
const output = ctx.runCommand(`prlt agent list ${typeFlag} --json 2>/dev/null || prlt agent list ${typeFlag}`);
|
|
@@ -17,7 +17,7 @@ export function registerAgentTools(server, ctx) {
|
|
|
17
17
|
return errorResponse(error);
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
-
server
|
|
20
|
+
strictTool(server, 'agent_status', 'Check agent status', {}, async () => {
|
|
21
21
|
try {
|
|
22
22
|
const output = ctx.runCommand('prlt agent status --json 2>/dev/null || prlt agent status');
|
|
23
23
|
return textResponse(output);
|
|
@@ -26,7 +26,7 @@ export function registerAgentTools(server, ctx) {
|
|
|
26
26
|
return errorResponse(error);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
server
|
|
29
|
+
strictTool(server, 'agent_add', 'Add new agents', {
|
|
30
30
|
names: z.array(z.string()).optional().describe('Agent names'),
|
|
31
31
|
theme: z.string().optional().describe('Theme for names'),
|
|
32
32
|
clone: z.boolean().optional().describe('Use git clone instead of worktree'),
|
|
@@ -42,7 +42,7 @@ export function registerAgentTools(server, ctx) {
|
|
|
42
42
|
return errorResponse(error);
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
|
-
server
|
|
45
|
+
strictTool(server, 'agent_remove', 'Remove an agent', { name: z.string().describe('Agent name') }, async (params) => {
|
|
46
46
|
try {
|
|
47
47
|
const output = ctx.runCommand(`prlt agent remove ${params.name} --json`);
|
|
48
48
|
return textResponse(output);
|
|
@@ -53,7 +53,7 @@ export function registerAgentTools(server, ctx) {
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
export function registerDockerTools(server, ctx) {
|
|
56
|
-
server
|
|
56
|
+
strictTool(server, 'docker_status', 'Check Docker daemon status', {}, async () => {
|
|
57
57
|
try {
|
|
58
58
|
const output = ctx.runCommand('prlt docker status');
|
|
59
59
|
return textResponse(output);
|
|
@@ -62,7 +62,7 @@ export function registerDockerTools(server, ctx) {
|
|
|
62
62
|
return errorResponse(error);
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
|
-
server
|
|
65
|
+
strictTool(server, 'docker_list', 'List Docker containers', {}, async () => {
|
|
66
66
|
try {
|
|
67
67
|
const output = ctx.runCommand('prlt docker list');
|
|
68
68
|
return textResponse(output);
|
|
@@ -71,7 +71,7 @@ export function registerDockerTools(server, ctx) {
|
|
|
71
71
|
return errorResponse(error);
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
-
server
|
|
74
|
+
strictTool(server, 'docker_start', 'Start Docker containers', { agent: z.string().optional().describe('Agent name') }, async (params) => {
|
|
75
75
|
try {
|
|
76
76
|
const agentArg = params.agent || '';
|
|
77
77
|
const output = ctx.runCommand(`prlt docker start ${agentArg}`);
|
|
@@ -81,7 +81,7 @@ export function registerDockerTools(server, ctx) {
|
|
|
81
81
|
return errorResponse(error);
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
|
-
server
|
|
84
|
+
strictTool(server, 'docker_stop', 'Stop Docker containers', { agent: z.string().optional().describe('Agent name') }, async (params) => {
|
|
85
85
|
try {
|
|
86
86
|
const agentArg = params.agent || '';
|
|
87
87
|
const output = ctx.runCommand(`prlt docker stop ${agentArg}`);
|
|
@@ -91,7 +91,7 @@ export function registerDockerTools(server, ctx) {
|
|
|
91
91
|
return errorResponse(error);
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
|
-
server
|
|
94
|
+
strictTool(server, 'docker_logs', 'Get container logs', {
|
|
95
95
|
agent: z.string().describe('Agent name'),
|
|
96
96
|
lines: z.number().optional().describe('Number of lines'),
|
|
97
97
|
}, async (params) => {
|
|
@@ -106,7 +106,7 @@ export function registerDockerTools(server, ctx) {
|
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
export function registerRepoTools(server, ctx) {
|
|
109
|
-
server
|
|
109
|
+
strictTool(server, 'repo_list', 'List repositories in workspace', {}, async () => {
|
|
110
110
|
try {
|
|
111
111
|
const output = ctx.runCommand('prlt repo list');
|
|
112
112
|
return textResponse(output);
|
|
@@ -115,7 +115,7 @@ export function registerRepoTools(server, ctx) {
|
|
|
115
115
|
return errorResponse(error);
|
|
116
116
|
}
|
|
117
117
|
});
|
|
118
|
-
server
|
|
118
|
+
strictTool(server, 'repo_add', 'Add a repository', {
|
|
119
119
|
path: z.string().describe('Repository path or URL'),
|
|
120
120
|
name: z.string().optional().describe('Name for the repo'),
|
|
121
121
|
}, async (params) => {
|
|
@@ -128,7 +128,7 @@ export function registerRepoTools(server, ctx) {
|
|
|
128
128
|
return errorResponse(error);
|
|
129
129
|
}
|
|
130
130
|
});
|
|
131
|
-
server
|
|
131
|
+
strictTool(server, 'repo_remove', 'Remove a repository', { name: z.string().describe('Repository name') }, async (params) => {
|
|
132
132
|
try {
|
|
133
133
|
const output = ctx.runCommand(`prlt repo remove ${params.name}`);
|
|
134
134
|
return textResponse(output);
|
|
@@ -139,7 +139,7 @@ export function registerRepoTools(server, ctx) {
|
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
export function registerBranchTools(server, ctx) {
|
|
142
|
-
server
|
|
142
|
+
strictTool(server, 'branch_list', 'List branches', {}, async () => {
|
|
143
143
|
try {
|
|
144
144
|
const output = ctx.runCommand('prlt branch list');
|
|
145
145
|
return textResponse(output);
|
|
@@ -148,7 +148,7 @@ export function registerBranchTools(server, ctx) {
|
|
|
148
148
|
return errorResponse(error);
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
|
-
server
|
|
151
|
+
strictTool(server, 'branch_create', 'Create a branch for a ticket', {
|
|
152
152
|
ticket_id: z.string().describe('Ticket ID'),
|
|
153
153
|
name: z.string().optional().describe('Branch name override'),
|
|
154
154
|
}, async (params) => {
|
|
@@ -161,7 +161,7 @@ export function registerBranchTools(server, ctx) {
|
|
|
161
161
|
return errorResponse(error);
|
|
162
162
|
}
|
|
163
163
|
});
|
|
164
|
-
server
|
|
164
|
+
strictTool(server, 'branch_where', 'Show which ticket/branch you are on', {}, async () => {
|
|
165
165
|
try {
|
|
166
166
|
const output = ctx.runCommand('prlt branch where');
|
|
167
167
|
return textResponse(output);
|
|
@@ -172,7 +172,7 @@ export function registerBranchTools(server, ctx) {
|
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
export function registerGitHubTools(server, ctx) {
|
|
175
|
-
server
|
|
175
|
+
strictTool(server, 'gh_status', 'Check GitHub CLI status', {}, async () => {
|
|
176
176
|
try {
|
|
177
177
|
const output = ctx.runCommand('prlt gh status');
|
|
178
178
|
return textResponse(output);
|
|
@@ -181,7 +181,7 @@ export function registerGitHubTools(server, ctx) {
|
|
|
181
181
|
return errorResponse(error);
|
|
182
182
|
}
|
|
183
183
|
});
|
|
184
|
-
server
|
|
184
|
+
strictTool(server, 'gh_login', 'Login to GitHub', {}, async () => {
|
|
185
185
|
try {
|
|
186
186
|
const output = ctx.runCommand('prlt gh login');
|
|
187
187
|
return textResponse(output);
|
|
@@ -190,7 +190,7 @@ export function registerGitHubTools(server, ctx) {
|
|
|
190
190
|
return errorResponse(error);
|
|
191
191
|
}
|
|
192
192
|
});
|
|
193
|
-
server
|
|
193
|
+
strictTool(server, 'pr_create', 'Create a pull request', {
|
|
194
194
|
ticket_id: z.string().optional().describe('Ticket ID'),
|
|
195
195
|
title: z.string().optional().describe('PR title'),
|
|
196
196
|
body: z.string().optional().describe('PR body'),
|
|
@@ -208,7 +208,7 @@ export function registerGitHubTools(server, ctx) {
|
|
|
208
208
|
return errorResponse(error);
|
|
209
209
|
}
|
|
210
210
|
});
|
|
211
|
-
server
|
|
211
|
+
strictTool(server, 'pr_list', 'List pull requests', {}, async () => {
|
|
212
212
|
try {
|
|
213
213
|
const output = ctx.runCommand('prlt pr list');
|
|
214
214
|
return textResponse(output);
|
|
@@ -217,7 +217,7 @@ export function registerGitHubTools(server, ctx) {
|
|
|
217
217
|
return errorResponse(error);
|
|
218
218
|
}
|
|
219
219
|
});
|
|
220
|
-
server
|
|
220
|
+
strictTool(server, 'pr_status', 'Check PR status', {}, async () => {
|
|
221
221
|
try {
|
|
222
222
|
const output = ctx.runCommand('prlt pr status');
|
|
223
223
|
return textResponse(output);
|
|
@@ -228,7 +228,7 @@ export function registerGitHubTools(server, ctx) {
|
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
230
|
export function registerInitTools(server, ctx) {
|
|
231
|
-
server
|
|
231
|
+
strictTool(server, 'init', 'Initialize an HQ workspace', {
|
|
232
232
|
name: z.string().describe('HQ name'),
|
|
233
233
|
path: z.string().optional().describe('HQ path'),
|
|
234
234
|
repos: z.array(z.string()).optional().describe('Repository paths'),
|
|
@@ -247,7 +247,7 @@ export function registerInitTools(server, ctx) {
|
|
|
247
247
|
return errorResponse(error);
|
|
248
248
|
}
|
|
249
249
|
});
|
|
250
|
-
server
|
|
250
|
+
strictTool(server, 'pmo_init', 'Initialize PMO in existing workspace', {
|
|
251
251
|
template: z.string().optional().describe('Board template'),
|
|
252
252
|
name: z.string().optional().describe('Board name'),
|
|
253
253
|
}, async (params) => {
|
|
@@ -263,7 +263,7 @@ export function registerInitTools(server, ctx) {
|
|
|
263
263
|
});
|
|
264
264
|
}
|
|
265
265
|
export function registerUtilityTools(server, ctx) {
|
|
266
|
-
server
|
|
266
|
+
strictTool(server, 'whoami', 'Show current context (agent, workspace)', {}, async () => {
|
|
267
267
|
try {
|
|
268
268
|
const output = ctx.runCommand('prlt whoami');
|
|
269
269
|
return textResponse(output);
|
|
@@ -272,7 +272,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
272
272
|
return errorResponse(error);
|
|
273
273
|
}
|
|
274
274
|
});
|
|
275
|
-
server
|
|
275
|
+
strictTool(server, 'commit', 'Create a commit with ticket reference', {
|
|
276
276
|
message: z.string().describe('Commit message'),
|
|
277
277
|
ticket_id: z.string().optional().describe('Ticket ID'),
|
|
278
278
|
}, async (params) => {
|
|
@@ -285,7 +285,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
285
285
|
return errorResponse(error);
|
|
286
286
|
}
|
|
287
287
|
});
|
|
288
|
-
server
|
|
288
|
+
strictTool(server, 'execution_list', 'List work executions', {}, async () => {
|
|
289
289
|
try {
|
|
290
290
|
const output = ctx.runCommand('prlt execution list');
|
|
291
291
|
return textResponse(output);
|
|
@@ -294,7 +294,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
294
294
|
return errorResponse(error);
|
|
295
295
|
}
|
|
296
296
|
});
|
|
297
|
-
server
|
|
297
|
+
strictTool(server, 'execution_view', 'View execution details', { id: z.string().describe('Execution ID') }, async (params) => {
|
|
298
298
|
try {
|
|
299
299
|
const output = ctx.runCommand(`prlt execution view ${params.id}`);
|
|
300
300
|
return textResponse(output);
|
|
@@ -303,7 +303,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
303
303
|
return errorResponse(error);
|
|
304
304
|
}
|
|
305
305
|
});
|
|
306
|
-
server
|
|
306
|
+
strictTool(server, 'execution_logs', 'Get execution logs', { id: z.string().describe('Execution ID') }, async (params) => {
|
|
307
307
|
try {
|
|
308
308
|
const output = ctx.runCommand(`prlt execution logs ${params.id}`);
|
|
309
309
|
return textResponse(output);
|
|
@@ -312,7 +312,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
312
312
|
return errorResponse(error);
|
|
313
313
|
}
|
|
314
314
|
});
|
|
315
|
-
server
|
|
315
|
+
strictTool(server, 'session_list', 'List tmux sessions', {}, async () => {
|
|
316
316
|
try {
|
|
317
317
|
const output = ctx.runCommand('prlt session list');
|
|
318
318
|
return textResponse(output);
|
|
@@ -321,7 +321,7 @@ export function registerUtilityTools(server, ctx) {
|
|
|
321
321
|
return errorResponse(error);
|
|
322
322
|
}
|
|
323
323
|
});
|
|
324
|
-
server
|
|
324
|
+
strictTool(server, 'config_show', 'Show configuration', {}, async () => {
|
|
325
325
|
try {
|
|
326
326
|
const output = ctx.runCommand('prlt config');
|
|
327
327
|
return textResponse(output);
|
|
@@ -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 {
|