@vibescope/mcp-server 0.4.5 → 0.4.6
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/CHANGELOG.md +84 -84
- package/README.md +194 -194
- package/dist/api-client/project.d.ts +1 -0
- package/dist/api-client.d.ts +1 -0
- package/dist/cli-init.js +21 -21
- package/dist/cli.js +26 -26
- package/dist/handlers/chat.d.ts +2 -0
- package/dist/handlers/chat.js +25 -0
- package/dist/handlers/discovery.js +12 -0
- package/dist/handlers/project.js +4 -2
- package/dist/handlers/tool-docs.js +1203 -1137
- package/dist/index.js +73 -73
- package/dist/templates/agent-guidelines.d.ts +1 -1
- package/dist/templates/agent-guidelines.js +205 -187
- package/dist/templates/help-content.js +1621 -1621
- package/dist/tools/bodies-of-work.js +6 -6
- package/dist/tools/chat.d.ts +1 -0
- package/dist/tools/chat.js +24 -0
- package/dist/tools/cloud-agents.js +22 -22
- package/dist/tools/features.d.ts +13 -0
- package/dist/tools/features.js +151 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/milestones.js +2 -2
- package/dist/tools/project.js +4 -0
- package/dist/tools/requests.js +1 -1
- package/dist/tools/session.js +11 -11
- package/dist/tools/sprints.js +9 -9
- package/dist/tools/tasks.js +35 -35
- package/dist/tools/worktrees.js +14 -14
- package/dist/tools.d.ts +2 -0
- package/dist/tools.js +3602 -0
- package/dist/utils.js +11 -11
- package/docs/TOOLS.md +2663 -2559
- package/package.json +53 -53
- package/scripts/generate-docs.ts +212 -212
- package/scripts/version-bump.ts +203 -203
- package/src/api-client/blockers.ts +86 -86
- package/src/api-client/bodies-of-work.ts +194 -194
- package/src/api-client/chat.ts +50 -50
- package/src/api-client/connectors.ts +152 -152
- package/src/api-client/cost.ts +185 -185
- package/src/api-client/decisions.ts +87 -87
- package/src/api-client/deployment.ts +313 -313
- package/src/api-client/discovery.ts +81 -81
- package/src/api-client/fallback.ts +52 -52
- package/src/api-client/file-checkouts.ts +115 -115
- package/src/api-client/findings.ts +100 -100
- package/src/api-client/git-issues.ts +88 -88
- package/src/api-client/ideas.ts +112 -112
- package/src/api-client/index.ts +592 -592
- package/src/api-client/milestones.ts +83 -83
- package/src/api-client/organizations.ts +185 -185
- package/src/api-client/progress.ts +94 -94
- package/src/api-client/project.ts +180 -179
- package/src/api-client/requests.ts +54 -54
- package/src/api-client/session.ts +220 -220
- package/src/api-client/sprints.ts +227 -227
- package/src/api-client/subtasks.ts +57 -57
- package/src/api-client/tasks.ts +450 -450
- package/src/api-client/types.ts +32 -32
- package/src/api-client/validation.ts +60 -60
- package/src/api-client/worktrees.ts +53 -53
- package/src/api-client.test.ts +847 -847
- package/src/api-client.ts +2707 -2706
- package/src/cli-init.ts +557 -557
- package/src/cli.test.ts +284 -284
- package/src/cli.ts +204 -204
- package/src/handlers/__test-setup__.ts +240 -240
- package/src/handlers/__test-utils__.ts +89 -89
- package/src/handlers/blockers.test.ts +468 -468
- package/src/handlers/blockers.ts +172 -172
- package/src/handlers/bodies-of-work.test.ts +704 -704
- package/src/handlers/bodies-of-work.ts +526 -526
- package/src/handlers/chat.test.ts +185 -185
- package/src/handlers/chat.ts +101 -69
- package/src/handlers/cloud-agents.test.ts +438 -438
- package/src/handlers/cloud-agents.ts +156 -156
- package/src/handlers/connectors.test.ts +834 -834
- package/src/handlers/connectors.ts +229 -229
- package/src/handlers/cost.test.ts +462 -462
- package/src/handlers/cost.ts +285 -285
- package/src/handlers/decisions.test.ts +382 -382
- package/src/handlers/decisions.ts +153 -153
- package/src/handlers/deployment.test.ts +551 -551
- package/src/handlers/deployment.ts +570 -570
- package/src/handlers/discovery.test.ts +206 -206
- package/src/handlers/discovery.ts +427 -415
- package/src/handlers/fallback.test.ts +537 -537
- package/src/handlers/fallback.ts +194 -194
- package/src/handlers/file-checkouts.test.ts +750 -750
- package/src/handlers/file-checkouts.ts +185 -185
- package/src/handlers/findings.test.ts +633 -633
- package/src/handlers/findings.ts +239 -239
- package/src/handlers/git-issues.test.ts +631 -631
- package/src/handlers/git-issues.ts +136 -136
- package/src/handlers/ideas.test.ts +644 -644
- package/src/handlers/ideas.ts +207 -207
- package/src/handlers/index.ts +93 -93
- package/src/handlers/milestones.test.ts +475 -475
- package/src/handlers/milestones.ts +180 -180
- package/src/handlers/organizations.test.ts +826 -826
- package/src/handlers/organizations.ts +315 -315
- package/src/handlers/progress.test.ts +269 -269
- package/src/handlers/progress.ts +77 -77
- package/src/handlers/project.test.ts +546 -546
- package/src/handlers/project.ts +242 -239
- package/src/handlers/requests.test.ts +303 -303
- package/src/handlers/requests.ts +99 -99
- package/src/handlers/roles.test.ts +305 -305
- package/src/handlers/roles.ts +219 -219
- package/src/handlers/session.test.ts +998 -998
- package/src/handlers/session.ts +1105 -1105
- package/src/handlers/sprints.test.ts +732 -732
- package/src/handlers/sprints.ts +537 -537
- package/src/handlers/tasks.test.ts +931 -931
- package/src/handlers/tasks.ts +1133 -1133
- package/src/handlers/tool-categories.test.ts +66 -66
- package/src/handlers/tool-docs.test.ts +511 -511
- package/src/handlers/tool-docs.ts +1571 -1499
- package/src/handlers/types.test.ts +259 -259
- package/src/handlers/types.ts +176 -176
- package/src/handlers/validation.test.ts +582 -582
- package/src/handlers/validation.ts +164 -164
- package/src/handlers/version.ts +63 -63
- package/src/index.test.ts +674 -674
- package/src/index.ts +807 -807
- package/src/setup.test.ts +233 -233
- package/src/setup.ts +404 -404
- package/src/templates/agent-guidelines.ts +233 -215
- package/src/templates/help-content.ts +1751 -1751
- package/src/token-tracking.test.ts +463 -463
- package/src/token-tracking.ts +167 -167
- package/src/tools/blockers.ts +122 -122
- package/src/tools/bodies-of-work.ts +283 -283
- package/src/tools/chat.ts +72 -46
- package/src/tools/cloud-agents.ts +101 -101
- package/src/tools/connectors.ts +191 -191
- package/src/tools/cost.ts +111 -111
- package/src/tools/decisions.ts +111 -111
- package/src/tools/deployment.ts +455 -455
- package/src/tools/discovery.ts +76 -76
- package/src/tools/fallback.ts +111 -111
- package/src/tools/features.ts +154 -0
- package/src/tools/file-checkouts.ts +145 -145
- package/src/tools/findings.ts +101 -101
- package/src/tools/git-issues.ts +130 -130
- package/src/tools/ideas.ts +162 -162
- package/src/tools/index.ts +141 -137
- package/src/tools/milestones.ts +118 -118
- package/src/tools/organizations.ts +224 -224
- package/src/tools/progress.ts +73 -73
- package/src/tools/project.ts +206 -202
- package/src/tools/requests.ts +68 -68
- package/src/tools/roles.ts +112 -112
- package/src/tools/session.ts +181 -181
- package/src/tools/sprints.ts +298 -298
- package/src/tools/tasks.ts +550 -550
- package/src/tools/tools.test.ts +222 -222
- package/src/tools/types.ts +9 -9
- package/src/tools/validation.ts +75 -75
- package/src/tools/version.ts +34 -34
- package/src/tools/worktrees.ts +66 -66
- package/src/tools.test.ts +416 -416
- package/src/utils.test.ts +1014 -1014
- package/src/utils.ts +586 -586
- package/src/validators.test.ts +223 -223
- package/src/validators.ts +249 -249
- package/src/version.ts +109 -109
- package/tsconfig.json +16 -16
- package/vitest.config.ts +14 -14
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decisions Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles architectural/technical decisions:
|
|
5
|
-
* - log_decision
|
|
6
|
-
* - get_decisions
|
|
7
|
-
* - delete_decision
|
|
8
|
-
*
|
|
9
|
-
* MIGRATED: Uses Vibescope API client instead of direct Supabase
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import type { Handler, HandlerRegistry } from './types.js';
|
|
13
|
-
import { parseArgs, uuidValidator } from '../validators.js';
|
|
14
|
-
import { getApiClient } from '../api-client.js';
|
|
15
|
-
|
|
16
|
-
// Argument schemas for type-safe parsing
|
|
17
|
-
const logDecisionSchema = {
|
|
18
|
-
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
19
|
-
title: { type: 'string' as const, required: true as const },
|
|
20
|
-
description: { type: 'string' as const, required: true as const },
|
|
21
|
-
rationale: { type: 'string' as const },
|
|
22
|
-
alternatives_considered: { type: 'array' as const },
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const getDecisionSchema = {
|
|
26
|
-
decision_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const getDecisionsSchema = {
|
|
30
|
-
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
31
|
-
limit: { type: 'number' as const, default: 10 },
|
|
32
|
-
offset: { type: 'number' as const, default: 0 },
|
|
33
|
-
search_query: { type: 'string' as const },
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const deleteDecisionSchema = {
|
|
37
|
-
decision_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const getDecisionsStatsSchema = {
|
|
41
|
-
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const logDecision: Handler = async (args, ctx) => {
|
|
45
|
-
const { project_id, title, description, rationale, alternatives_considered } = parseArgs(args, logDecisionSchema);
|
|
46
|
-
|
|
47
|
-
const { session } = ctx;
|
|
48
|
-
const apiClient = getApiClient();
|
|
49
|
-
|
|
50
|
-
const response = await apiClient.logDecision(project_id, {
|
|
51
|
-
title,
|
|
52
|
-
description,
|
|
53
|
-
rationale,
|
|
54
|
-
alternatives_considered: alternatives_considered as string[] | undefined
|
|
55
|
-
}, session.currentSessionId || undefined);
|
|
56
|
-
|
|
57
|
-
if (!response.ok) {
|
|
58
|
-
return { result: { error: response.error || 'Failed to log decision' }, isError: true };
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return { result: { success: true, title, decision_id: response.data?.decision_id } };
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Get a single decision by ID.
|
|
66
|
-
* More token-efficient than get_decisions when you need details for a specific decision.
|
|
67
|
-
*/
|
|
68
|
-
export const getDecision: Handler = async (args, _ctx) => {
|
|
69
|
-
const { decision_id } = parseArgs(args, getDecisionSchema);
|
|
70
|
-
|
|
71
|
-
const apiClient = getApiClient();
|
|
72
|
-
const response = await apiClient.proxy<{
|
|
73
|
-
decision: {
|
|
74
|
-
id: string;
|
|
75
|
-
title: string;
|
|
76
|
-
description: string;
|
|
77
|
-
rationale?: string;
|
|
78
|
-
alternatives_considered?: string[];
|
|
79
|
-
created_at: string;
|
|
80
|
-
};
|
|
81
|
-
}>('get_decision', { decision_id });
|
|
82
|
-
|
|
83
|
-
if (!response.ok) {
|
|
84
|
-
return { result: { error: response.error || 'Failed to get decision' }, isError: true };
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return { result: response.data };
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export const getDecisions: Handler = async (args, _ctx) => {
|
|
91
|
-
const { project_id, limit, offset, search_query } = parseArgs(args, getDecisionsSchema);
|
|
92
|
-
|
|
93
|
-
const apiClient = getApiClient();
|
|
94
|
-
|
|
95
|
-
const response = await apiClient.getDecisions(project_id, {
|
|
96
|
-
limit: Math.min(limit ?? 10, 200),
|
|
97
|
-
offset,
|
|
98
|
-
search_query
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
if (!response.ok) {
|
|
102
|
-
return { result: { error: response.error || 'Failed to fetch decisions' }, isError: true };
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
result: {
|
|
107
|
-
decisions: response.data?.decisions || [],
|
|
108
|
-
},
|
|
109
|
-
};
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export const deleteDecision: Handler = async (args, _ctx) => {
|
|
113
|
-
const { decision_id } = parseArgs(args, deleteDecisionSchema);
|
|
114
|
-
|
|
115
|
-
const apiClient = getApiClient();
|
|
116
|
-
|
|
117
|
-
const response = await apiClient.deleteDecision(decision_id);
|
|
118
|
-
|
|
119
|
-
if (!response.ok) {
|
|
120
|
-
return { result: { error: response.error || 'Failed to delete decision' }, isError: true };
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return { result: { success: true } };
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Get aggregate statistics about decisions for a project.
|
|
128
|
-
* Returns total count without the actual decision data.
|
|
129
|
-
* This is more token-efficient than get_decisions for understanding overall state.
|
|
130
|
-
*/
|
|
131
|
-
export const getDecisionsStats: Handler = async (args, _ctx) => {
|
|
132
|
-
const { project_id } = parseArgs(args, getDecisionsStatsSchema);
|
|
133
|
-
|
|
134
|
-
const apiClient = getApiClient();
|
|
135
|
-
const response = await apiClient.getDecisionsStats(project_id);
|
|
136
|
-
|
|
137
|
-
if (!response.ok) {
|
|
138
|
-
return { result: { error: response.error || 'Failed to get decisions stats' }, isError: true };
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return { result: response.data };
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Decisions handlers registry
|
|
146
|
-
*/
|
|
147
|
-
export const decisionHandlers: HandlerRegistry = {
|
|
148
|
-
log_decision: logDecision,
|
|
149
|
-
get_decision: getDecision,
|
|
150
|
-
get_decisions: getDecisions,
|
|
151
|
-
get_decisions_stats: getDecisionsStats,
|
|
152
|
-
delete_decision: deleteDecision,
|
|
153
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Decisions Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles architectural/technical decisions:
|
|
5
|
+
* - log_decision
|
|
6
|
+
* - get_decisions
|
|
7
|
+
* - delete_decision
|
|
8
|
+
*
|
|
9
|
+
* MIGRATED: Uses Vibescope API client instead of direct Supabase
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Handler, HandlerRegistry } from './types.js';
|
|
13
|
+
import { parseArgs, uuidValidator } from '../validators.js';
|
|
14
|
+
import { getApiClient } from '../api-client.js';
|
|
15
|
+
|
|
16
|
+
// Argument schemas for type-safe parsing
|
|
17
|
+
const logDecisionSchema = {
|
|
18
|
+
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
19
|
+
title: { type: 'string' as const, required: true as const },
|
|
20
|
+
description: { type: 'string' as const, required: true as const },
|
|
21
|
+
rationale: { type: 'string' as const },
|
|
22
|
+
alternatives_considered: { type: 'array' as const },
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const getDecisionSchema = {
|
|
26
|
+
decision_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const getDecisionsSchema = {
|
|
30
|
+
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
31
|
+
limit: { type: 'number' as const, default: 10 },
|
|
32
|
+
offset: { type: 'number' as const, default: 0 },
|
|
33
|
+
search_query: { type: 'string' as const },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const deleteDecisionSchema = {
|
|
37
|
+
decision_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const getDecisionsStatsSchema = {
|
|
41
|
+
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const logDecision: Handler = async (args, ctx) => {
|
|
45
|
+
const { project_id, title, description, rationale, alternatives_considered } = parseArgs(args, logDecisionSchema);
|
|
46
|
+
|
|
47
|
+
const { session } = ctx;
|
|
48
|
+
const apiClient = getApiClient();
|
|
49
|
+
|
|
50
|
+
const response = await apiClient.logDecision(project_id, {
|
|
51
|
+
title,
|
|
52
|
+
description,
|
|
53
|
+
rationale,
|
|
54
|
+
alternatives_considered: alternatives_considered as string[] | undefined
|
|
55
|
+
}, session.currentSessionId || undefined);
|
|
56
|
+
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
return { result: { error: response.error || 'Failed to log decision' }, isError: true };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return { result: { success: true, title, decision_id: response.data?.decision_id } };
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get a single decision by ID.
|
|
66
|
+
* More token-efficient than get_decisions when you need details for a specific decision.
|
|
67
|
+
*/
|
|
68
|
+
export const getDecision: Handler = async (args, _ctx) => {
|
|
69
|
+
const { decision_id } = parseArgs(args, getDecisionSchema);
|
|
70
|
+
|
|
71
|
+
const apiClient = getApiClient();
|
|
72
|
+
const response = await apiClient.proxy<{
|
|
73
|
+
decision: {
|
|
74
|
+
id: string;
|
|
75
|
+
title: string;
|
|
76
|
+
description: string;
|
|
77
|
+
rationale?: string;
|
|
78
|
+
alternatives_considered?: string[];
|
|
79
|
+
created_at: string;
|
|
80
|
+
};
|
|
81
|
+
}>('get_decision', { decision_id });
|
|
82
|
+
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
return { result: { error: response.error || 'Failed to get decision' }, isError: true };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return { result: response.data };
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const getDecisions: Handler = async (args, _ctx) => {
|
|
91
|
+
const { project_id, limit, offset, search_query } = parseArgs(args, getDecisionsSchema);
|
|
92
|
+
|
|
93
|
+
const apiClient = getApiClient();
|
|
94
|
+
|
|
95
|
+
const response = await apiClient.getDecisions(project_id, {
|
|
96
|
+
limit: Math.min(limit ?? 10, 200),
|
|
97
|
+
offset,
|
|
98
|
+
search_query
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
return { result: { error: response.error || 'Failed to fetch decisions' }, isError: true };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
result: {
|
|
107
|
+
decisions: response.data?.decisions || [],
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const deleteDecision: Handler = async (args, _ctx) => {
|
|
113
|
+
const { decision_id } = parseArgs(args, deleteDecisionSchema);
|
|
114
|
+
|
|
115
|
+
const apiClient = getApiClient();
|
|
116
|
+
|
|
117
|
+
const response = await apiClient.deleteDecision(decision_id);
|
|
118
|
+
|
|
119
|
+
if (!response.ok) {
|
|
120
|
+
return { result: { error: response.error || 'Failed to delete decision' }, isError: true };
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return { result: { success: true } };
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Get aggregate statistics about decisions for a project.
|
|
128
|
+
* Returns total count without the actual decision data.
|
|
129
|
+
* This is more token-efficient than get_decisions for understanding overall state.
|
|
130
|
+
*/
|
|
131
|
+
export const getDecisionsStats: Handler = async (args, _ctx) => {
|
|
132
|
+
const { project_id } = parseArgs(args, getDecisionsStatsSchema);
|
|
133
|
+
|
|
134
|
+
const apiClient = getApiClient();
|
|
135
|
+
const response = await apiClient.getDecisionsStats(project_id);
|
|
136
|
+
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
return { result: { error: response.error || 'Failed to get decisions stats' }, isError: true };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return { result: response.data };
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Decisions handlers registry
|
|
146
|
+
*/
|
|
147
|
+
export const decisionHandlers: HandlerRegistry = {
|
|
148
|
+
log_decision: logDecision,
|
|
149
|
+
get_decision: getDecision,
|
|
150
|
+
get_decisions: getDecisions,
|
|
151
|
+
get_decisions_stats: getDecisionsStats,
|
|
152
|
+
delete_decision: deleteDecision,
|
|
153
|
+
};
|