@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.
Files changed (170) hide show
  1. package/README.md +113 -98
  2. package/dist/api-client.d.ts +1114 -0
  3. package/dist/api-client.js +698 -0
  4. package/dist/cli.d.ts +1 -6
  5. package/dist/cli.js +39 -240
  6. package/dist/config/tool-categories.d.ts +31 -0
  7. package/dist/config/tool-categories.js +253 -0
  8. package/dist/handlers/blockers.js +57 -58
  9. package/dist/handlers/bodies-of-work.d.ts +2 -0
  10. package/dist/handlers/bodies-of-work.js +106 -476
  11. package/dist/handlers/cost.d.ts +1 -0
  12. package/dist/handlers/cost.js +35 -113
  13. package/dist/handlers/decisions.d.ts +2 -0
  14. package/dist/handlers/decisions.js +28 -27
  15. package/dist/handlers/deployment.js +112 -828
  16. package/dist/handlers/discovery.js +31 -0
  17. package/dist/handlers/fallback.d.ts +2 -0
  18. package/dist/handlers/fallback.js +39 -134
  19. package/dist/handlers/findings.js +43 -67
  20. package/dist/handlers/git-issues.d.ts +9 -13
  21. package/dist/handlers/git-issues.js +80 -225
  22. package/dist/handlers/ideas.d.ts +3 -0
  23. package/dist/handlers/ideas.js +53 -134
  24. package/dist/handlers/index.d.ts +2 -0
  25. package/dist/handlers/index.js +6 -0
  26. package/dist/handlers/milestones.d.ts +2 -0
  27. package/dist/handlers/milestones.js +51 -98
  28. package/dist/handlers/organizations.js +79 -275
  29. package/dist/handlers/progress.d.ts +2 -0
  30. package/dist/handlers/progress.js +25 -123
  31. package/dist/handlers/project.js +42 -221
  32. package/dist/handlers/requests.d.ts +2 -0
  33. package/dist/handlers/requests.js +23 -83
  34. package/dist/handlers/session.js +99 -585
  35. package/dist/handlers/sprints.d.ts +32 -0
  36. package/dist/handlers/sprints.js +274 -0
  37. package/dist/handlers/tasks.d.ts +7 -10
  38. package/dist/handlers/tasks.js +230 -900
  39. package/dist/handlers/tool-docs.d.ts +8 -0
  40. package/dist/handlers/tool-docs.js +657 -0
  41. package/dist/handlers/types.d.ts +11 -3
  42. package/dist/handlers/validation.d.ts +1 -1
  43. package/dist/handlers/validation.js +26 -153
  44. package/dist/index.js +473 -160
  45. package/dist/knowledge.js +106 -9
  46. package/dist/tools.js +4 -0
  47. package/dist/validators.d.ts +21 -0
  48. package/dist/validators.js +91 -0
  49. package/package.json +2 -3
  50. package/src/api-client.ts +1752 -0
  51. package/src/cli.test.ts +128 -302
  52. package/src/cli.ts +41 -285
  53. package/src/handlers/__test-setup__.ts +210 -0
  54. package/src/handlers/__test-utils__.ts +4 -134
  55. package/src/handlers/blockers.test.ts +114 -124
  56. package/src/handlers/blockers.ts +68 -70
  57. package/src/handlers/bodies-of-work.test.ts +236 -831
  58. package/src/handlers/bodies-of-work.ts +194 -525
  59. package/src/handlers/cost.test.ts +149 -113
  60. package/src/handlers/cost.ts +44 -132
  61. package/src/handlers/decisions.test.ts +111 -209
  62. package/src/handlers/decisions.ts +35 -27
  63. package/src/handlers/deployment.test.ts +193 -239
  64. package/src/handlers/deployment.ts +140 -895
  65. package/src/handlers/discovery.test.ts +20 -67
  66. package/src/handlers/discovery.ts +32 -0
  67. package/src/handlers/fallback.test.ts +128 -361
  68. package/src/handlers/fallback.ts +62 -148
  69. package/src/handlers/findings.test.ts +127 -345
  70. package/src/handlers/findings.ts +49 -66
  71. package/src/handlers/git-issues.test.ts +623 -0
  72. package/src/handlers/git-issues.ts +174 -0
  73. package/src/handlers/ideas.test.ts +229 -343
  74. package/src/handlers/ideas.ts +69 -143
  75. package/src/handlers/index.ts +6 -0
  76. package/src/handlers/milestones.test.ts +167 -281
  77. package/src/handlers/milestones.ts +54 -93
  78. package/src/handlers/organizations.test.ts +275 -467
  79. package/src/handlers/organizations.ts +84 -294
  80. package/src/handlers/progress.test.ts +112 -218
  81. package/src/handlers/progress.ts +29 -142
  82. package/src/handlers/project.test.ts +203 -226
  83. package/src/handlers/project.ts +48 -238
  84. package/src/handlers/requests.test.ts +74 -342
  85. package/src/handlers/requests.ts +25 -83
  86. package/src/handlers/session.test.ts +241 -206
  87. package/src/handlers/session.ts +110 -657
  88. package/src/handlers/sprints.test.ts +711 -0
  89. package/src/handlers/sprints.ts +497 -0
  90. package/src/handlers/tasks.test.ts +608 -353
  91. package/src/handlers/tasks.ts +248 -1025
  92. package/src/handlers/types.ts +12 -4
  93. package/src/handlers/validation.test.ts +189 -572
  94. package/src/handlers/validation.ts +29 -166
  95. package/src/index.ts +473 -184
  96. package/src/knowledge.ts +107 -9
  97. package/src/tools.ts +2506 -0
  98. package/src/validators.test.ts +223 -223
  99. package/src/validators.ts +127 -0
  100. package/tsconfig.json +1 -1
  101. package/vitest.config.ts +14 -13
  102. package/dist/cli.test.d.ts +0 -1
  103. package/dist/cli.test.js +0 -367
  104. package/dist/handlers/__test-utils__.d.ts +0 -72
  105. package/dist/handlers/__test-utils__.js +0 -176
  106. package/dist/handlers/checkouts.d.ts +0 -37
  107. package/dist/handlers/checkouts.js +0 -377
  108. package/dist/handlers/knowledge-query.d.ts +0 -22
  109. package/dist/handlers/knowledge-query.js +0 -253
  110. package/dist/handlers/knowledge.d.ts +0 -12
  111. package/dist/handlers/knowledge.js +0 -108
  112. package/dist/handlers/roles.d.ts +0 -30
  113. package/dist/handlers/roles.js +0 -281
  114. package/dist/handlers/tasks.test.d.ts +0 -1
  115. package/dist/handlers/tasks.test.js +0 -431
  116. package/dist/utils.test.d.ts +0 -1
  117. package/dist/utils.test.js +0 -532
  118. package/dist/validators.test.d.ts +0 -1
  119. package/dist/validators.test.js +0 -176
  120. package/src/tmpclaude-0078-cwd +0 -1
  121. package/src/tmpclaude-0ee1-cwd +0 -1
  122. package/src/tmpclaude-2dd5-cwd +0 -1
  123. package/src/tmpclaude-344c-cwd +0 -1
  124. package/src/tmpclaude-3860-cwd +0 -1
  125. package/src/tmpclaude-4b63-cwd +0 -1
  126. package/src/tmpclaude-5c73-cwd +0 -1
  127. package/src/tmpclaude-5ee3-cwd +0 -1
  128. package/src/tmpclaude-6795-cwd +0 -1
  129. package/src/tmpclaude-709e-cwd +0 -1
  130. package/src/tmpclaude-9839-cwd +0 -1
  131. package/src/tmpclaude-d829-cwd +0 -1
  132. package/src/tmpclaude-e072-cwd +0 -1
  133. package/src/tmpclaude-f6ee-cwd +0 -1
  134. package/tmpclaude-0439-cwd +0 -1
  135. package/tmpclaude-132f-cwd +0 -1
  136. package/tmpclaude-15bb-cwd +0 -1
  137. package/tmpclaude-165a-cwd +0 -1
  138. package/tmpclaude-1ba9-cwd +0 -1
  139. package/tmpclaude-21a3-cwd +0 -1
  140. package/tmpclaude-2a38-cwd +0 -1
  141. package/tmpclaude-2adf-cwd +0 -1
  142. package/tmpclaude-2f56-cwd +0 -1
  143. package/tmpclaude-3626-cwd +0 -1
  144. package/tmpclaude-3727-cwd +0 -1
  145. package/tmpclaude-40bc-cwd +0 -1
  146. package/tmpclaude-436f-cwd +0 -1
  147. package/tmpclaude-4783-cwd +0 -1
  148. package/tmpclaude-4b6d-cwd +0 -1
  149. package/tmpclaude-4ba4-cwd +0 -1
  150. package/tmpclaude-51e6-cwd +0 -1
  151. package/tmpclaude-5ecf-cwd +0 -1
  152. package/tmpclaude-6f97-cwd +0 -1
  153. package/tmpclaude-7fb2-cwd +0 -1
  154. package/tmpclaude-825c-cwd +0 -1
  155. package/tmpclaude-8baf-cwd +0 -1
  156. package/tmpclaude-8d9f-cwd +0 -1
  157. package/tmpclaude-975c-cwd +0 -1
  158. package/tmpclaude-9983-cwd +0 -1
  159. package/tmpclaude-a045-cwd +0 -1
  160. package/tmpclaude-ac4a-cwd +0 -1
  161. package/tmpclaude-b593-cwd +0 -1
  162. package/tmpclaude-b891-cwd +0 -1
  163. package/tmpclaude-c032-cwd +0 -1
  164. package/tmpclaude-cf43-cwd +0 -1
  165. package/tmpclaude-d040-cwd +0 -1
  166. package/tmpclaude-dcdd-cwd +0 -1
  167. package/tmpclaude-dcee-cwd +0 -1
  168. package/tmpclaude-e16b-cwd +0 -1
  169. package/tmpclaude-ecd2-cwd +0 -1
  170. package/tmpclaude-f48d-cwd +0 -1
@@ -6,11 +6,14 @@
6
6
  * - stop_fallback_activity
7
7
  * - get_activity_history
8
8
  * - get_activity_schedules
9
+ *
10
+ * MIGRATED: Uses Vibescope API client instead of direct Supabase
9
11
  */
10
12
 
11
13
  import type { Handler, HandlerRegistry } from './types.js';
12
14
  import { validateRequired, validateUUID } from '../validators.js';
13
15
  import { FALLBACK_ACTIVITIES } from '../utils.js';
16
+ import { getApiClient } from '../api-client.js';
14
17
 
15
18
  const VALID_ACTIVITIES = [
16
19
  'feature_ideation',
@@ -36,21 +39,14 @@ export const startFallbackActivity: Handler = async (args, ctx) => {
36
39
  throw new Error(`Invalid activity. Must be one of: ${VALID_ACTIVITIES.join(', ')}`);
37
40
  }
38
41
 
39
- const { supabase, session } = ctx;
40
- const currentSessionId = session.currentSessionId;
42
+ const { session } = ctx;
43
+ const apiClient = getApiClient();
41
44
 
42
- // Update the current session's fallback activity
43
- const { error: updateError } = await supabase
44
- .from('agent_sessions')
45
- .update({
46
- current_fallback_activity: activity,
47
- current_task_id: null, // Clear any task when starting fallback
48
- status: 'active',
49
- last_synced_at: new Date().toISOString(),
50
- })
51
- .eq('id', currentSessionId);
45
+ const response = await apiClient.startFallbackActivity(project_id, activity, session.currentSessionId || undefined);
52
46
 
53
- if (updateError) throw updateError;
47
+ if (!response.ok) {
48
+ throw new Error(`Failed to start fallback activity: ${response.error}`);
49
+ }
54
50
 
55
51
  // Get the activity details for the response
56
52
  const activityInfo = FALLBACK_ACTIVITIES.find((a) => a.activity === activity);
@@ -62,7 +58,7 @@ export const startFallbackActivity: Handler = async (args, ctx) => {
62
58
  title: activityInfo?.title || activity,
63
59
  description: activityInfo?.description || '',
64
60
  prompt: activityInfo?.prompt || '',
65
- message: `Started fallback activity: ${activityInfo?.title || activity}`,
61
+ message: response.data?.message || `Started fallback activity: ${activityInfo?.title || activity}`,
66
62
  },
67
63
  };
68
64
  };
@@ -73,91 +69,19 @@ export const stopFallbackActivity: Handler = async (args, ctx) => {
73
69
  validateRequired(project_id, 'project_id');
74
70
  validateUUID(project_id, 'project_id');
75
71
 
76
- const { supabase, session } = ctx;
77
- const currentSessionId = session.currentSessionId;
78
-
79
- // Get the current session's fallback activity before clearing it
80
- const { data: sessionData, error: sessionError } = await supabase
81
- .from('agent_sessions')
82
- .select('current_fallback_activity')
83
- .eq('id', currentSessionId)
84
- .single();
85
-
86
- if (sessionError) throw sessionError;
87
-
88
- const activityType = sessionData?.current_fallback_activity;
89
-
90
- // Log the activity completion to history if there was an active activity
91
- if (activityType) {
92
- const completedAt = new Date().toISOString();
72
+ const { session } = ctx;
73
+ const apiClient = getApiClient();
93
74
 
94
- // Insert history record
95
- await supabase.from('background_activity_history').insert({
96
- project_id,
97
- activity_type: activityType,
98
- completed_at: completedAt,
99
- completed_by_session_id: currentSessionId,
100
- summary: summary || null,
101
- });
75
+ const response = await apiClient.stopFallbackActivity(project_id, summary, session.currentSessionId || undefined);
102
76
 
103
- // Update schedule if one exists for this activity
104
- const { data: schedule } = await supabase
105
- .from('background_activity_schedules')
106
- .select('*')
107
- .eq('project_id', project_id)
108
- .eq('activity_type', activityType)
109
- .eq('enabled', true)
110
- .single();
111
-
112
- if (schedule) {
113
- let nextRunAt: string | null = null;
114
- let enabled = true;
115
-
116
- // Calculate next run time based on schedule type
117
- const completedDate = new Date(completedAt);
118
- switch (schedule.schedule_type) {
119
- case 'once':
120
- enabled = false;
121
- break;
122
- case 'daily':
123
- completedDate.setDate(completedDate.getDate() + 1);
124
- nextRunAt = completedDate.toISOString();
125
- break;
126
- case 'weekly':
127
- completedDate.setDate(completedDate.getDate() + 7);
128
- nextRunAt = completedDate.toISOString();
129
- break;
130
- case 'monthly':
131
- completedDate.setDate(completedDate.getDate() + 30);
132
- nextRunAt = completedDate.toISOString();
133
- break;
134
- }
135
-
136
- await supabase
137
- .from('background_activity_schedules')
138
- .update({ next_run_at: nextRunAt, enabled })
139
- .eq('id', schedule.id);
140
- }
77
+ if (!response.ok) {
78
+ throw new Error(`Failed to stop fallback activity: ${response.error}`);
141
79
  }
142
80
 
143
- // Clear the current session's fallback activity
144
- const { error: updateError } = await supabase
145
- .from('agent_sessions')
146
- .update({
147
- current_fallback_activity: null,
148
- status: 'idle',
149
- last_synced_at: new Date().toISOString(),
150
- })
151
- .eq('id', currentSessionId);
152
-
153
- if (updateError) throw updateError;
154
-
155
81
  return {
156
82
  result: {
157
83
  success: true,
158
- message: activityType
159
- ? `Fallback activity '${activityType}' completed and logged to history`
160
- : 'Fallback activity stopped',
84
+ message: 'Fallback activity stopped',
161
85
  },
162
86
  };
163
87
  };
@@ -172,48 +96,33 @@ export const getActivityHistory: Handler = async (args, ctx) => {
172
96
  validateRequired(project_id, 'project_id');
173
97
  validateUUID(project_id, 'project_id');
174
98
 
175
- const { supabase } = ctx;
176
-
177
- let query = supabase
178
- .from('background_activity_history')
179
- .select(
180
- `
181
- id,
182
- activity_type,
183
- completed_at,
184
- completed_by_session_id,
185
- summary,
186
- created_at,
187
- agent_sessions!completed_by_session_id (
188
- agent_name
189
- )
190
- `
191
- )
192
- .eq('project_id', project_id)
193
- .order('completed_at', { ascending: false })
194
- .limit(limit);
195
-
196
- if (activity_type) {
197
- query = query.eq('activity_type', activity_type);
198
- }
199
-
200
- const { data: history, error } = await query;
201
-
202
- if (error) throw error;
203
-
204
- // Also get the most recent completion for each activity type
205
- const latestByType: Record<string, unknown> = {};
206
- for (const entry of history || []) {
207
- if (!latestByType[entry.activity_type]) {
208
- latestByType[entry.activity_type] = entry;
209
- }
99
+ const apiClient = getApiClient();
100
+
101
+ // Use proxy for get_activity_history operation
102
+ const response = await apiClient.proxy<{
103
+ history: Array<{
104
+ id: string;
105
+ activity_type: string;
106
+ completed_at: string;
107
+ summary?: string;
108
+ }>;
109
+ latest_by_type?: Record<string, unknown>;
110
+ count: number;
111
+ }>('get_activity_history', {
112
+ project_id,
113
+ activity_type,
114
+ limit
115
+ });
116
+
117
+ if (!response.ok) {
118
+ throw new Error(`Failed to get activity history: ${response.error}`);
210
119
  }
211
120
 
212
121
  return {
213
122
  result: {
214
- history: history || [],
215
- latest_by_type: latestByType,
216
- count: history?.length || 0,
123
+ history: response.data?.history || [],
124
+ latest_by_type: response.data?.latest_by_type || {},
125
+ count: response.data?.count || 0,
217
126
  },
218
127
  };
219
128
  };
@@ -224,27 +133,32 @@ export const getActivitySchedules: Handler = async (args, ctx) => {
224
133
  validateRequired(project_id, 'project_id');
225
134
  validateUUID(project_id, 'project_id');
226
135
 
227
- const { supabase } = ctx;
228
-
229
- const { data: schedules, error } = await supabase
230
- .from('background_activity_schedules')
231
- .select('*')
232
- .eq('project_id', project_id)
233
- .order('activity_type');
234
-
235
- if (error) throw error;
236
-
237
- // Identify which activities are "due" (next_run_at < now AND enabled)
238
- const now = new Date();
239
- const dueActivities = (schedules || [])
240
- .filter((s) => s.enabled && s.next_run_at && new Date(s.next_run_at) < now)
241
- .map((s) => s.activity_type);
136
+ const apiClient = getApiClient();
137
+
138
+ // Use proxy for get_activity_schedules operation
139
+ const response = await apiClient.proxy<{
140
+ schedules: Array<{
141
+ id: string;
142
+ activity_type: string;
143
+ schedule_type: string;
144
+ next_run_at?: string;
145
+ enabled: boolean;
146
+ }>;
147
+ due_activities: string[];
148
+ count: number;
149
+ }>('get_activity_schedules', {
150
+ project_id
151
+ });
152
+
153
+ if (!response.ok) {
154
+ throw new Error(`Failed to get activity schedules: ${response.error}`);
155
+ }
242
156
 
243
157
  return {
244
158
  result: {
245
- schedules: schedules || [],
246
- due_activities: dueActivities,
247
- count: schedules?.length || 0,
159
+ schedules: response.data?.schedules || [],
160
+ due_activities: response.data?.due_activities || [],
161
+ count: response.data?.count || 0,
248
162
  },
249
163
  };
250
164
  };