@vibescope/mcp-server 0.0.1 → 0.1.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 +1114 -0
- package/dist/api-client.js +698 -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 +106 -476
- 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 +112 -828
- package/dist/handlers/discovery.js +31 -0
- package/dist/handlers/fallback.d.ts +2 -0
- package/dist/handlers/fallback.js +39 -134
- package/dist/handlers/findings.js +43 -67
- 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 +99 -585
- package/dist/handlers/sprints.d.ts +32 -0
- package/dist/handlers/sprints.js +274 -0
- package/dist/handlers/tasks.d.ts +7 -10
- package/dist/handlers/tasks.js +230 -900
- package/dist/handlers/tool-docs.d.ts +8 -0
- package/dist/handlers/tool-docs.js +657 -0
- package/dist/handlers/types.d.ts +11 -3
- package/dist/handlers/validation.d.ts +1 -1
- package/dist/handlers/validation.js +26 -153
- package/dist/index.js +473 -160
- package/dist/knowledge.js +106 -9
- package/dist/tools.js +4 -0
- package/dist/validators.d.ts +21 -0
- package/dist/validators.js +91 -0
- package/package.json +2 -3
- package/src/api-client.ts +1752 -0
- package/src/cli.test.ts +128 -302
- package/src/cli.ts +41 -285
- package/src/handlers/__test-setup__.ts +210 -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 +194 -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 +140 -895
- package/src/handlers/discovery.test.ts +20 -67
- package/src/handlers/discovery.ts +32 -0
- package/src/handlers/fallback.test.ts +128 -361
- package/src/handlers/fallback.ts +62 -148
- package/src/handlers/findings.test.ts +127 -345
- package/src/handlers/findings.ts +49 -66
- 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 +241 -206
- package/src/handlers/session.ts +110 -657
- package/src/handlers/sprints.test.ts +711 -0
- package/src/handlers/sprints.ts +497 -0
- package/src/handlers/tasks.test.ts +608 -353
- package/src/handlers/tasks.ts +248 -1025
- package/src/handlers/types.ts +12 -4
- package/src/handlers/validation.test.ts +189 -572
- package/src/handlers/validation.ts +29 -166
- package/src/index.ts +473 -184
- package/src/knowledge.ts +107 -9
- package/src/tools.ts +2506 -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/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/requests.ts
CHANGED
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
* - get_pending_requests
|
|
6
6
|
* - acknowledge_request
|
|
7
7
|
* - answer_question
|
|
8
|
+
*
|
|
9
|
+
* MIGRATED: Uses Vibescope API client instead of direct Supabase
|
|
8
10
|
*/
|
|
9
11
|
|
|
10
12
|
import type { Handler, HandlerRegistry } from './types.js';
|
|
11
13
|
import { validateRequired, validateUUID } from '../validators.js';
|
|
14
|
+
import { getApiClient } from '../api-client.js';
|
|
12
15
|
|
|
13
16
|
export const getPendingRequests: Handler = async (args, ctx) => {
|
|
14
17
|
const { project_id } = args as { project_id: string };
|
|
@@ -16,65 +19,19 @@ export const getPendingRequests: Handler = async (args, ctx) => {
|
|
|
16
19
|
validateRequired(project_id, 'project_id');
|
|
17
20
|
validateUUID(project_id, 'project_id');
|
|
18
21
|
|
|
19
|
-
const {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
.eq('status', 'active');
|
|
28
|
-
const activeSessionIds = new Set((activeSessions || []).map((s) => s.id));
|
|
29
|
-
|
|
30
|
-
// Get pending requests for this project:
|
|
31
|
-
// - Unacknowledged requests OR unanswered questions (questions need answers, not just acknowledgment)
|
|
32
|
-
const { data: requests, error } = await supabase
|
|
33
|
-
.from('agent_requests')
|
|
34
|
-
.select('*')
|
|
35
|
-
.eq('project_id', project_id)
|
|
36
|
-
.or('acknowledged_at.is.null,and(request_type.eq.question,answered_at.is.null)')
|
|
37
|
-
.order('created_at', { ascending: false });
|
|
38
|
-
|
|
39
|
-
if (error) throw error;
|
|
40
|
-
|
|
41
|
-
// Filter to requests this agent can handle
|
|
42
|
-
const filteredRequests = (requests || []).filter((r) => {
|
|
43
|
-
// Broadcast requests (session_id is null) - anyone can handle
|
|
44
|
-
if (!r.session_id) return true;
|
|
45
|
-
// Targeted to this session
|
|
46
|
-
if (r.session_id === currentSessionId) return true;
|
|
47
|
-
// Orphaned questions (targeted session is disconnected) - any agent can answer
|
|
48
|
-
if (r.request_type === 'question' && !activeSessionIds.has(r.session_id)) return true;
|
|
49
|
-
return false;
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
// Sort questions first (highest priority) and add wait times
|
|
53
|
-
const now = new Date();
|
|
54
|
-
const sortedRequests = filteredRequests
|
|
55
|
-
.map((r) => ({
|
|
56
|
-
...r,
|
|
57
|
-
wait_minutes: Math.floor((now.getTime() - new Date(r.created_at).getTime()) / 60000),
|
|
58
|
-
}))
|
|
59
|
-
.sort((a, b) => {
|
|
60
|
-
// Questions first, then by created_at (oldest first for urgency)
|
|
61
|
-
const aIsQuestion = a.request_type === 'question' && !a.answered_at;
|
|
62
|
-
const bIsQuestion = b.request_type === 'question' && !b.answered_at;
|
|
63
|
-
if (aIsQuestion && !bIsQuestion) return -1;
|
|
64
|
-
if (!aIsQuestion && bIsQuestion) return 1;
|
|
65
|
-
return new Date(a.created_at).getTime() - new Date(b.created_at).getTime();
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// Count unanswered questions separately
|
|
69
|
-
const questionsCount = sortedRequests.filter(
|
|
70
|
-
(r) => r.request_type === 'question' && !r.answered_at
|
|
71
|
-
).length;
|
|
22
|
+
const { session } = ctx;
|
|
23
|
+
const apiClient = getApiClient();
|
|
24
|
+
|
|
25
|
+
const response = await apiClient.getPendingRequests(project_id, session.currentSessionId || undefined);
|
|
26
|
+
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`Failed to get pending requests: ${response.error}`);
|
|
29
|
+
}
|
|
72
30
|
|
|
73
31
|
return {
|
|
74
32
|
result: {
|
|
75
|
-
requests:
|
|
76
|
-
count:
|
|
77
|
-
questions_count: questionsCount,
|
|
33
|
+
requests: response.data?.requests || [],
|
|
34
|
+
count: response.data?.requests?.length || 0,
|
|
78
35
|
},
|
|
79
36
|
};
|
|
80
37
|
};
|
|
@@ -85,24 +42,18 @@ export const acknowledgeRequest: Handler = async (args, ctx) => {
|
|
|
85
42
|
validateRequired(request_id, 'request_id');
|
|
86
43
|
validateUUID(request_id, 'request_id');
|
|
87
44
|
|
|
88
|
-
const {
|
|
45
|
+
const { session } = ctx;
|
|
46
|
+
const apiClient = getApiClient();
|
|
89
47
|
|
|
90
|
-
const
|
|
91
|
-
.from('agent_requests')
|
|
92
|
-
.update({
|
|
93
|
-
acknowledged_at: new Date().toISOString(),
|
|
94
|
-
acknowledged_by_session_id: session.currentSessionId,
|
|
95
|
-
})
|
|
96
|
-
.eq('id', request_id)
|
|
97
|
-
.select()
|
|
98
|
-
.single();
|
|
48
|
+
const response = await apiClient.acknowledgeRequest(request_id, session.currentSessionId || undefined);
|
|
99
49
|
|
|
100
|
-
if (
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
throw new Error(`Failed to acknowledge request: ${response.error}`);
|
|
52
|
+
}
|
|
101
53
|
|
|
102
54
|
return {
|
|
103
55
|
result: {
|
|
104
56
|
success: true,
|
|
105
|
-
request,
|
|
106
57
|
},
|
|
107
58
|
};
|
|
108
59
|
};
|
|
@@ -114,28 +65,19 @@ export const answerQuestion: Handler = async (args, ctx) => {
|
|
|
114
65
|
validateRequired(answer, 'answer');
|
|
115
66
|
validateUUID(request_id, 'request_id');
|
|
116
67
|
|
|
117
|
-
const {
|
|
68
|
+
const { session } = ctx;
|
|
69
|
+
const apiClient = getApiClient();
|
|
118
70
|
|
|
119
|
-
|
|
120
|
-
const { data: request, error } = await supabase
|
|
121
|
-
.from('agent_requests')
|
|
122
|
-
.update({
|
|
123
|
-
answer,
|
|
124
|
-
answered_at: new Date().toISOString(),
|
|
125
|
-
acknowledged_at: new Date().toISOString(),
|
|
126
|
-
acknowledged_by_session_id: session.currentSessionId,
|
|
127
|
-
})
|
|
128
|
-
.eq('id', request_id)
|
|
129
|
-
.select()
|
|
130
|
-
.single();
|
|
71
|
+
const response = await apiClient.answerQuestion(request_id, answer, session.currentSessionId || undefined);
|
|
131
72
|
|
|
132
|
-
if (
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
throw new Error(`Failed to answer question: ${response.error}`);
|
|
75
|
+
}
|
|
133
76
|
|
|
134
77
|
return {
|
|
135
78
|
result: {
|
|
136
79
|
success: true,
|
|
137
80
|
message: 'Question answered successfully',
|
|
138
|
-
request,
|
|
139
81
|
},
|
|
140
82
|
};
|
|
141
83
|
};
|