@vibescope/mcp-server 0.0.1 → 0.2.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/README.md +113 -98
- package/dist/api-client.d.ts +1169 -0
- package/dist/api-client.js +713 -0
- package/dist/cli.d.ts +1 -6
- package/dist/cli.js +39 -240
- package/dist/config/tool-categories.d.ts +31 -0
- package/dist/config/tool-categories.js +253 -0
- package/dist/handlers/blockers.js +57 -58
- package/dist/handlers/bodies-of-work.d.ts +2 -0
- package/dist/handlers/bodies-of-work.js +108 -477
- package/dist/handlers/cost.d.ts +1 -0
- package/dist/handlers/cost.js +35 -113
- package/dist/handlers/decisions.d.ts +2 -0
- package/dist/handlers/decisions.js +28 -27
- package/dist/handlers/deployment.js +113 -828
- package/dist/handlers/discovery.d.ts +3 -0
- package/dist/handlers/discovery.js +26 -627
- package/dist/handlers/fallback.d.ts +2 -0
- package/dist/handlers/fallback.js +56 -142
- package/dist/handlers/findings.d.ts +8 -1
- package/dist/handlers/findings.js +65 -68
- package/dist/handlers/git-issues.d.ts +9 -13
- package/dist/handlers/git-issues.js +80 -225
- package/dist/handlers/ideas.d.ts +3 -0
- package/dist/handlers/ideas.js +53 -134
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.js +6 -0
- package/dist/handlers/milestones.d.ts +2 -0
- package/dist/handlers/milestones.js +51 -98
- package/dist/handlers/organizations.js +79 -275
- package/dist/handlers/progress.d.ts +2 -0
- package/dist/handlers/progress.js +25 -123
- package/dist/handlers/project.js +42 -221
- package/dist/handlers/requests.d.ts +2 -0
- package/dist/handlers/requests.js +23 -83
- package/dist/handlers/session.js +119 -590
- package/dist/handlers/sprints.d.ts +32 -0
- package/dist/handlers/sprints.js +275 -0
- package/dist/handlers/tasks.d.ts +7 -10
- package/dist/handlers/tasks.js +245 -894
- package/dist/handlers/tool-docs.d.ts +9 -0
- package/dist/handlers/tool-docs.js +904 -0
- package/dist/handlers/types.d.ts +11 -3
- package/dist/handlers/validation.d.ts +1 -1
- package/dist/handlers/validation.js +38 -153
- package/dist/index.js +493 -162
- package/dist/knowledge.js +106 -9
- package/dist/tools.js +34 -4
- package/dist/validators.d.ts +21 -0
- package/dist/validators.js +91 -0
- package/package.json +2 -3
- package/src/api-client.ts +1822 -0
- package/src/cli.test.ts +128 -302
- package/src/cli.ts +41 -285
- package/src/handlers/__test-setup__.ts +215 -0
- package/src/handlers/__test-utils__.ts +4 -134
- package/src/handlers/blockers.test.ts +114 -124
- package/src/handlers/blockers.ts +68 -70
- package/src/handlers/bodies-of-work.test.ts +236 -831
- package/src/handlers/bodies-of-work.ts +210 -525
- package/src/handlers/cost.test.ts +149 -113
- package/src/handlers/cost.ts +44 -132
- package/src/handlers/decisions.test.ts +111 -209
- package/src/handlers/decisions.ts +35 -27
- package/src/handlers/deployment.test.ts +193 -239
- package/src/handlers/deployment.ts +143 -896
- package/src/handlers/discovery.test.ts +20 -67
- package/src/handlers/discovery.ts +29 -714
- package/src/handlers/fallback.test.ts +206 -361
- package/src/handlers/fallback.ts +81 -156
- package/src/handlers/findings.test.ts +229 -320
- package/src/handlers/findings.ts +76 -64
- package/src/handlers/git-issues.test.ts +623 -0
- package/src/handlers/git-issues.ts +174 -0
- package/src/handlers/ideas.test.ts +229 -343
- package/src/handlers/ideas.ts +69 -143
- package/src/handlers/index.ts +6 -0
- package/src/handlers/milestones.test.ts +167 -281
- package/src/handlers/milestones.ts +54 -93
- package/src/handlers/organizations.test.ts +275 -467
- package/src/handlers/organizations.ts +84 -294
- package/src/handlers/progress.test.ts +112 -218
- package/src/handlers/progress.ts +29 -142
- package/src/handlers/project.test.ts +203 -226
- package/src/handlers/project.ts +48 -238
- package/src/handlers/requests.test.ts +74 -342
- package/src/handlers/requests.ts +25 -83
- package/src/handlers/session.test.ts +276 -206
- package/src/handlers/session.ts +136 -662
- package/src/handlers/sprints.test.ts +711 -0
- package/src/handlers/sprints.ts +510 -0
- package/src/handlers/tasks.test.ts +669 -353
- package/src/handlers/tasks.ts +263 -1015
- package/src/handlers/tool-docs.ts +1024 -0
- package/src/handlers/types.ts +12 -4
- package/src/handlers/validation.test.ts +237 -568
- package/src/handlers/validation.ts +43 -167
- package/src/index.ts +493 -186
- package/src/tools.ts +2532 -0
- package/src/validators.test.ts +223 -223
- package/src/validators.ts +127 -0
- package/tsconfig.json +1 -1
- package/vitest.config.ts +14 -13
- package/dist/cli.test.d.ts +0 -1
- package/dist/cli.test.js +0 -367
- package/dist/handlers/__test-utils__.d.ts +0 -72
- package/dist/handlers/__test-utils__.js +0 -176
- package/dist/handlers/checkouts.d.ts +0 -37
- package/dist/handlers/checkouts.js +0 -377
- package/dist/handlers/knowledge-query.d.ts +0 -22
- package/dist/handlers/knowledge-query.js +0 -253
- package/dist/handlers/knowledge.d.ts +0 -12
- package/dist/handlers/knowledge.js +0 -108
- package/dist/handlers/roles.d.ts +0 -30
- package/dist/handlers/roles.js +0 -281
- package/dist/handlers/tasks.test.d.ts +0 -1
- package/dist/handlers/tasks.test.js +0 -431
- package/dist/utils.test.d.ts +0 -1
- package/dist/utils.test.js +0 -532
- package/dist/validators.test.d.ts +0 -1
- package/dist/validators.test.js +0 -176
- package/src/knowledge.ts +0 -132
- package/src/tmpclaude-0078-cwd +0 -1
- package/src/tmpclaude-0ee1-cwd +0 -1
- package/src/tmpclaude-2dd5-cwd +0 -1
- package/src/tmpclaude-344c-cwd +0 -1
- package/src/tmpclaude-3860-cwd +0 -1
- package/src/tmpclaude-4b63-cwd +0 -1
- package/src/tmpclaude-5c73-cwd +0 -1
- package/src/tmpclaude-5ee3-cwd +0 -1
- package/src/tmpclaude-6795-cwd +0 -1
- package/src/tmpclaude-709e-cwd +0 -1
- package/src/tmpclaude-9839-cwd +0 -1
- package/src/tmpclaude-d829-cwd +0 -1
- package/src/tmpclaude-e072-cwd +0 -1
- package/src/tmpclaude-f6ee-cwd +0 -1
- package/tmpclaude-0439-cwd +0 -1
- package/tmpclaude-132f-cwd +0 -1
- package/tmpclaude-15bb-cwd +0 -1
- package/tmpclaude-165a-cwd +0 -1
- package/tmpclaude-1ba9-cwd +0 -1
- package/tmpclaude-21a3-cwd +0 -1
- package/tmpclaude-2a38-cwd +0 -1
- package/tmpclaude-2adf-cwd +0 -1
- package/tmpclaude-2f56-cwd +0 -1
- package/tmpclaude-3626-cwd +0 -1
- package/tmpclaude-3727-cwd +0 -1
- package/tmpclaude-40bc-cwd +0 -1
- package/tmpclaude-436f-cwd +0 -1
- package/tmpclaude-4783-cwd +0 -1
- package/tmpclaude-4b6d-cwd +0 -1
- package/tmpclaude-4ba4-cwd +0 -1
- package/tmpclaude-51e6-cwd +0 -1
- package/tmpclaude-5ecf-cwd +0 -1
- package/tmpclaude-6f97-cwd +0 -1
- package/tmpclaude-7fb2-cwd +0 -1
- package/tmpclaude-825c-cwd +0 -1
- package/tmpclaude-8baf-cwd +0 -1
- package/tmpclaude-8d9f-cwd +0 -1
- package/tmpclaude-975c-cwd +0 -1
- package/tmpclaude-9983-cwd +0 -1
- package/tmpclaude-a045-cwd +0 -1
- package/tmpclaude-ac4a-cwd +0 -1
- package/tmpclaude-b593-cwd +0 -1
- package/tmpclaude-b891-cwd +0 -1
- package/tmpclaude-c032-cwd +0 -1
- package/tmpclaude-cf43-cwd +0 -1
- package/tmpclaude-d040-cwd +0 -1
- package/tmpclaude-dcdd-cwd +0 -1
- package/tmpclaude-dcee-cwd +0 -1
- package/tmpclaude-e16b-cwd +0 -1
- package/tmpclaude-ecd2-cwd +0 -1
- package/tmpclaude-f48d-cwd +0 -1
package/src/handlers/findings.ts
CHANGED
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles audit findings and knowledge base:
|
|
5
5
|
* - add_finding
|
|
6
|
-
* - get_findings
|
|
6
|
+
* - get_findings (supports summary_only for reduced tokens)
|
|
7
|
+
* - get_findings_stats (aggregate counts for minimal tokens)
|
|
7
8
|
* - update_finding
|
|
8
9
|
* - delete_finding
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
12
|
import type { Handler, HandlerRegistry } from './types.js';
|
|
12
13
|
import { validateRequired, validateUUID } from '../validators.js';
|
|
14
|
+
import { getApiClient } from '../api-client.js';
|
|
13
15
|
|
|
14
16
|
type FindingCategory = 'performance' | 'security' | 'code_quality' | 'accessibility' | 'documentation' | 'architecture' | 'testing' | 'other';
|
|
15
17
|
type FindingSeverity = 'info' | 'low' | 'medium' | 'high' | 'critical';
|
|
@@ -32,60 +34,78 @@ export const addFinding: Handler = async (args, ctx) => {
|
|
|
32
34
|
validateRequired(title, 'title');
|
|
33
35
|
if (related_task_id) validateUUID(related_task_id, 'related_task_id');
|
|
34
36
|
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
.select('id')
|
|
52
|
-
.single();
|
|
53
|
-
|
|
54
|
-
if (error) throw new Error(`Failed to add finding: ${error.message}`);
|
|
55
|
-
|
|
56
|
-
return { result: { success: true, finding_id: data.id, title } };
|
|
37
|
+
const apiClient = getApiClient();
|
|
38
|
+
const response = await apiClient.addFinding(project_id, {
|
|
39
|
+
title,
|
|
40
|
+
description,
|
|
41
|
+
category,
|
|
42
|
+
severity,
|
|
43
|
+
file_path,
|
|
44
|
+
line_number,
|
|
45
|
+
related_task_id
|
|
46
|
+
}, ctx.session.currentSessionId || undefined);
|
|
47
|
+
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(response.error || 'Failed to add finding');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return { result: response.data };
|
|
57
53
|
};
|
|
58
54
|
|
|
59
55
|
export const getFindings: Handler = async (args, ctx) => {
|
|
60
|
-
const { project_id, category, severity, status, limit } = args as {
|
|
56
|
+
const { project_id, category, severity, status, limit = 50, offset = 0, search_query, summary_only = false } = args as {
|
|
61
57
|
project_id: string;
|
|
62
58
|
category?: FindingCategory;
|
|
63
59
|
severity?: FindingSeverity;
|
|
64
60
|
status?: FindingStatus;
|
|
65
61
|
limit?: number;
|
|
62
|
+
offset?: number;
|
|
63
|
+
search_query?: string;
|
|
64
|
+
summary_only?: boolean;
|
|
66
65
|
};
|
|
67
66
|
|
|
68
67
|
validateRequired(project_id, 'project_id');
|
|
69
68
|
validateUUID(project_id, 'project_id');
|
|
70
69
|
|
|
71
|
-
const
|
|
70
|
+
const apiClient = getApiClient();
|
|
71
|
+
const response = await apiClient.getFindings(project_id, {
|
|
72
|
+
category,
|
|
73
|
+
severity,
|
|
74
|
+
status,
|
|
75
|
+
limit,
|
|
76
|
+
offset,
|
|
77
|
+
search_query,
|
|
78
|
+
summary_only
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(response.error || 'Failed to get findings');
|
|
83
|
+
}
|
|
72
84
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
.select('id, title, category, severity, status, file_path, created_at')
|
|
76
|
-
.eq('project_id', project_id)
|
|
77
|
-
.order('created_at', { ascending: false })
|
|
78
|
-
.limit(limit || 50);
|
|
85
|
+
return { result: response.data };
|
|
86
|
+
};
|
|
79
87
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Get aggregate statistics about findings for a project.
|
|
90
|
+
* Returns counts by category, severity, and status without the actual finding data.
|
|
91
|
+
* This is much more token-efficient than get_findings for understanding the overall state.
|
|
92
|
+
*/
|
|
93
|
+
export const getFindingsStats: Handler = async (args, ctx) => {
|
|
94
|
+
const { project_id } = args as {
|
|
95
|
+
project_id: string;
|
|
96
|
+
};
|
|
83
97
|
|
|
84
|
-
|
|
98
|
+
validateRequired(project_id, 'project_id');
|
|
99
|
+
validateUUID(project_id, 'project_id');
|
|
85
100
|
|
|
86
|
-
|
|
101
|
+
const apiClient = getApiClient();
|
|
102
|
+
const response = await apiClient.getFindingsStats(project_id);
|
|
103
|
+
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error(response.error || 'Failed to get findings stats');
|
|
106
|
+
}
|
|
87
107
|
|
|
88
|
-
return { result:
|
|
108
|
+
return { result: response.data };
|
|
89
109
|
};
|
|
90
110
|
|
|
91
111
|
export const updateFinding: Handler = async (args, ctx) => {
|
|
@@ -101,29 +121,20 @@ export const updateFinding: Handler = async (args, ctx) => {
|
|
|
101
121
|
validateRequired(finding_id, 'finding_id');
|
|
102
122
|
validateUUID(finding_id, 'finding_id');
|
|
103
123
|
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
124
|
+
const apiClient = getApiClient();
|
|
125
|
+
const response = await apiClient.updateFinding(finding_id, {
|
|
126
|
+
title,
|
|
127
|
+
description,
|
|
128
|
+
severity,
|
|
129
|
+
status,
|
|
130
|
+
resolution_note
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new Error(response.error || 'Failed to update finding');
|
|
116
135
|
}
|
|
117
|
-
if (resolution_note) updates.resolution_note = resolution_note;
|
|
118
136
|
|
|
119
|
-
|
|
120
|
-
.from('findings')
|
|
121
|
-
.update(updates)
|
|
122
|
-
.eq('id', finding_id);
|
|
123
|
-
|
|
124
|
-
if (error) throw new Error(`Failed to update finding: ${error.message}`);
|
|
125
|
-
|
|
126
|
-
return { result: { success: true, finding_id } };
|
|
137
|
+
return { result: response.data };
|
|
127
138
|
};
|
|
128
139
|
|
|
129
140
|
export const deleteFinding: Handler = async (args, ctx) => {
|
|
@@ -132,14 +143,14 @@ export const deleteFinding: Handler = async (args, ctx) => {
|
|
|
132
143
|
validateRequired(finding_id, 'finding_id');
|
|
133
144
|
validateUUID(finding_id, 'finding_id');
|
|
134
145
|
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
.delete()
|
|
138
|
-
.eq('id', finding_id);
|
|
146
|
+
const apiClient = getApiClient();
|
|
147
|
+
const response = await apiClient.deleteFinding(finding_id);
|
|
139
148
|
|
|
140
|
-
if (
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
throw new Error(response.error || 'Failed to delete finding');
|
|
151
|
+
}
|
|
141
152
|
|
|
142
|
-
return { result:
|
|
153
|
+
return { result: response.data };
|
|
143
154
|
};
|
|
144
155
|
|
|
145
156
|
/**
|
|
@@ -148,6 +159,7 @@ export const deleteFinding: Handler = async (args, ctx) => {
|
|
|
148
159
|
export const findingHandlers: HandlerRegistry = {
|
|
149
160
|
add_finding: addFinding,
|
|
150
161
|
get_findings: getFindings,
|
|
162
|
+
get_findings_stats: getFindingsStats,
|
|
151
163
|
update_finding: updateFinding,
|
|
152
164
|
delete_finding: deleteFinding,
|
|
153
165
|
};
|