@vibescope/mcp-server 0.3.0 → 0.3.3

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 (154) hide show
  1. package/dist/api-client/blockers.d.ts +46 -0
  2. package/dist/api-client/blockers.js +43 -0
  3. package/dist/api-client/cost.d.ts +112 -0
  4. package/dist/api-client/cost.js +76 -0
  5. package/dist/api-client/decisions.d.ts +55 -0
  6. package/dist/api-client/decisions.js +32 -0
  7. package/dist/api-client/discovery.d.ts +62 -0
  8. package/dist/api-client/discovery.js +21 -0
  9. package/dist/api-client/ideas.d.ts +75 -0
  10. package/dist/api-client/ideas.js +36 -0
  11. package/dist/api-client/index.d.ts +749 -0
  12. package/dist/api-client/index.js +291 -0
  13. package/dist/api-client/project.d.ts +132 -0
  14. package/dist/api-client/project.js +45 -0
  15. package/dist/api-client/session.d.ts +163 -0
  16. package/dist/api-client/session.js +52 -0
  17. package/dist/api-client/tasks.d.ts +328 -0
  18. package/dist/api-client/tasks.js +132 -0
  19. package/dist/api-client/types.d.ts +25 -0
  20. package/dist/api-client/types.js +4 -0
  21. package/dist/api-client/worktrees.d.ts +33 -0
  22. package/dist/api-client/worktrees.js +26 -0
  23. package/dist/api-client.d.ts +9 -0
  24. package/dist/api-client.js +104 -25
  25. package/dist/cli-init.d.ts +17 -0
  26. package/dist/cli-init.js +445 -0
  27. package/dist/cli.js +0 -0
  28. package/dist/handlers/cloud-agents.d.ts +21 -0
  29. package/dist/handlers/cloud-agents.js +91 -0
  30. package/dist/handlers/discovery.js +7 -0
  31. package/dist/handlers/index.d.ts +1 -0
  32. package/dist/handlers/index.js +3 -0
  33. package/dist/handlers/session.js +3 -1
  34. package/dist/handlers/tasks.js +10 -12
  35. package/dist/handlers/types.d.ts +2 -1
  36. package/dist/handlers/validation.js +5 -1
  37. package/dist/index.js +8 -3
  38. package/dist/token-tracking.js +2 -2
  39. package/dist/tools/blockers.d.ts +13 -0
  40. package/dist/tools/blockers.js +119 -0
  41. package/dist/tools/bodies-of-work.d.ts +19 -0
  42. package/dist/tools/bodies-of-work.js +280 -0
  43. package/dist/tools/cloud-agents.d.ts +9 -0
  44. package/dist/tools/cloud-agents.js +67 -0
  45. package/dist/tools/connectors.d.ts +14 -0
  46. package/dist/tools/connectors.js +188 -0
  47. package/dist/tools/cost.d.ts +11 -0
  48. package/dist/tools/cost.js +108 -0
  49. package/dist/tools/decisions.d.ts +12 -0
  50. package/dist/tools/decisions.js +108 -0
  51. package/dist/tools/deployment.d.ts +24 -0
  52. package/dist/tools/deployment.js +439 -0
  53. package/dist/tools/discovery.d.ts +10 -0
  54. package/dist/tools/discovery.js +73 -0
  55. package/dist/tools/fallback.d.ts +11 -0
  56. package/dist/tools/fallback.js +108 -0
  57. package/dist/tools/file-checkouts.d.ts +13 -0
  58. package/dist/tools/file-checkouts.js +141 -0
  59. package/dist/tools/findings.d.ts +13 -0
  60. package/dist/tools/findings.js +98 -0
  61. package/dist/tools/git-issues.d.ts +11 -0
  62. package/dist/tools/git-issues.js +127 -0
  63. package/dist/tools/ideas.d.ts +13 -0
  64. package/dist/tools/ideas.js +159 -0
  65. package/dist/tools/index.d.ts +71 -0
  66. package/dist/tools/index.js +98 -0
  67. package/dist/tools/milestones.d.ts +12 -0
  68. package/dist/tools/milestones.js +115 -0
  69. package/dist/tools/organizations.d.ts +17 -0
  70. package/dist/tools/organizations.js +221 -0
  71. package/dist/tools/progress.d.ts +9 -0
  72. package/dist/tools/progress.js +70 -0
  73. package/dist/tools/project.d.ts +13 -0
  74. package/dist/tools/project.js +199 -0
  75. package/dist/tools/requests.d.ts +10 -0
  76. package/dist/tools/requests.js +65 -0
  77. package/dist/tools/roles.d.ts +11 -0
  78. package/dist/tools/roles.js +109 -0
  79. package/dist/tools/session.d.ts +15 -0
  80. package/dist/tools/session.js +178 -0
  81. package/dist/tools/sprints.d.ts +18 -0
  82. package/dist/tools/sprints.js +295 -0
  83. package/dist/tools/tasks.d.ts +27 -0
  84. package/dist/tools/tasks.js +539 -0
  85. package/dist/tools/types.d.ts +7 -0
  86. package/dist/tools/types.js +6 -0
  87. package/dist/tools/validation.d.ts +10 -0
  88. package/dist/tools/validation.js +72 -0
  89. package/dist/tools/worktrees.d.ts +9 -0
  90. package/dist/tools/worktrees.js +63 -0
  91. package/dist/utils.d.ts +66 -0
  92. package/dist/utils.js +102 -0
  93. package/docs/TOOLS.md +55 -2
  94. package/package.json +5 -3
  95. package/scripts/generate-docs.ts +1 -1
  96. package/src/api-client/blockers.ts +86 -0
  97. package/src/api-client/cost.ts +185 -0
  98. package/src/api-client/decisions.ts +87 -0
  99. package/src/api-client/discovery.ts +81 -0
  100. package/src/api-client/ideas.ts +112 -0
  101. package/src/api-client/index.ts +378 -0
  102. package/src/api-client/project.ts +179 -0
  103. package/src/api-client/session.ts +220 -0
  104. package/src/api-client/tasks.ts +450 -0
  105. package/src/api-client/types.ts +32 -0
  106. package/src/api-client/worktrees.ts +53 -0
  107. package/src/api-client.test.ts +136 -9
  108. package/src/api-client.ts +125 -27
  109. package/src/cli-init.ts +504 -0
  110. package/src/handlers/__test-utils__.ts +2 -0
  111. package/src/handlers/cloud-agents.ts +138 -0
  112. package/src/handlers/discovery.ts +7 -0
  113. package/src/handlers/index.ts +3 -0
  114. package/src/handlers/session.ts +3 -1
  115. package/src/handlers/tasks.ts +10 -12
  116. package/src/handlers/tool-categories.test.ts +1 -1
  117. package/src/handlers/types.ts +2 -1
  118. package/src/handlers/validation.ts +6 -1
  119. package/src/index.test.ts +2 -2
  120. package/src/index.ts +8 -2
  121. package/src/token-tracking.ts +3 -2
  122. package/src/tools/blockers.ts +122 -0
  123. package/src/tools/bodies-of-work.ts +283 -0
  124. package/src/tools/cloud-agents.ts +70 -0
  125. package/src/tools/connectors.ts +191 -0
  126. package/src/tools/cost.ts +111 -0
  127. package/src/tools/decisions.ts +111 -0
  128. package/src/tools/deployment.ts +442 -0
  129. package/src/tools/discovery.ts +76 -0
  130. package/src/tools/fallback.ts +111 -0
  131. package/src/tools/file-checkouts.ts +145 -0
  132. package/src/tools/findings.ts +101 -0
  133. package/src/tools/git-issues.ts +130 -0
  134. package/src/tools/ideas.ts +162 -0
  135. package/src/tools/index.ts +131 -0
  136. package/src/tools/milestones.ts +118 -0
  137. package/src/tools/organizations.ts +224 -0
  138. package/src/tools/progress.ts +73 -0
  139. package/src/tools/project.ts +202 -0
  140. package/src/tools/requests.ts +68 -0
  141. package/src/tools/roles.ts +112 -0
  142. package/src/tools/session.ts +181 -0
  143. package/src/tools/sprints.ts +298 -0
  144. package/src/tools/tasks.ts +542 -0
  145. package/src/tools/tools.test.ts +222 -0
  146. package/src/tools/types.ts +9 -0
  147. package/src/tools/validation.ts +75 -0
  148. package/src/tools/worktrees.ts +66 -0
  149. package/src/tools.test.ts +1 -1
  150. package/src/utils.test.ts +229 -0
  151. package/src/utils.ts +117 -0
  152. package/dist/tools.d.ts +0 -2
  153. package/dist/tools.js +0 -3602
  154. package/src/tools.ts +0 -3607
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Tasks API Methods
3
+ *
4
+ * Methods for task management:
5
+ * - getTasks: List tasks for a project
6
+ * - createTask: Create a new task
7
+ * - getNextTask: Get highest priority pending task
8
+ * - getTask: Get a single task
9
+ * - getTaskById: Get task with optional subtasks/milestones
10
+ * - searchTasks: Search tasks by text query
11
+ * - getTasksByPriority: Get tasks filtered by priority
12
+ * - getRecentTasks: Get recently created/modified tasks
13
+ * - getTaskStats: Get task statistics
14
+ * - updateTask: Update task details
15
+ * - completeTask: Mark task as completed
16
+ * - deleteTask: Delete a task
17
+ * - releaseTask: Release task back to pending
18
+ * - cancelTask: Cancel a task
19
+ * - addTaskReference: Add reference URL to task
20
+ * - removeTaskReference: Remove reference from task
21
+ * - batchUpdateTasks: Update multiple tasks
22
+ * - batchCompleteTasks: Complete multiple tasks
23
+ */
24
+ import type { ApiResponse, RequestFn, ProxyFn } from './types.js';
25
+ export interface TasksMethods {
26
+ getTasks(projectId: string, params?: {
27
+ status?: string;
28
+ limit?: number;
29
+ offset?: number;
30
+ include_subtasks?: boolean;
31
+ search_query?: string;
32
+ include_metadata?: boolean;
33
+ }): Promise<ApiResponse<{
34
+ tasks: Array<{
35
+ id: string;
36
+ title: string;
37
+ description?: string;
38
+ priority: number;
39
+ status: string;
40
+ progress_percentage?: number;
41
+ estimated_minutes?: number;
42
+ started_at?: string;
43
+ completed_at?: string;
44
+ parent_task_id?: string;
45
+ }>;
46
+ total_count: number;
47
+ has_more: boolean;
48
+ }>>;
49
+ createTask(projectId: string, params: {
50
+ title: string;
51
+ description?: string;
52
+ priority?: number;
53
+ estimated_minutes?: number;
54
+ blocking?: boolean;
55
+ session_id?: string;
56
+ task_type?: string;
57
+ }): Promise<ApiResponse<{
58
+ success: boolean;
59
+ task_id: string;
60
+ title: string;
61
+ blocking?: boolean;
62
+ message?: string;
63
+ }>>;
64
+ getNextTask(projectId: string, sessionId?: string): Promise<ApiResponse<{
65
+ task?: {
66
+ id: string;
67
+ title: string;
68
+ description?: string;
69
+ priority: number;
70
+ estimated_minutes?: number;
71
+ blocking?: boolean;
72
+ } | null;
73
+ blocking_task?: boolean;
74
+ deployment_blocks_tasks?: boolean;
75
+ deployment?: {
76
+ id: string;
77
+ status: string;
78
+ env: string;
79
+ };
80
+ awaiting_validation?: Array<{
81
+ id: string;
82
+ title: string;
83
+ }>;
84
+ validation_priority?: string;
85
+ all_claimed?: boolean;
86
+ is_subtask?: boolean;
87
+ suggested_activity?: string;
88
+ directive?: string;
89
+ message?: string;
90
+ action?: string;
91
+ }>>;
92
+ getTask(taskId: string): Promise<ApiResponse<{
93
+ task: {
94
+ id: string;
95
+ title: string;
96
+ description?: string;
97
+ priority: number;
98
+ status: string;
99
+ progress_percentage?: number;
100
+ estimated_minutes?: number;
101
+ started_at?: string;
102
+ completed_at?: string;
103
+ git_branch?: string;
104
+ blocking?: boolean;
105
+ references?: Array<{
106
+ url: string;
107
+ label?: string;
108
+ }>;
109
+ parent_task_id?: string;
110
+ working_agent_session_id?: string;
111
+ };
112
+ }>>;
113
+ getTaskById(taskId: string, params?: {
114
+ include_subtasks?: boolean;
115
+ include_milestones?: boolean;
116
+ }): Promise<ApiResponse<{
117
+ task: {
118
+ id: string;
119
+ title: string;
120
+ description?: string;
121
+ priority: number;
122
+ status: string;
123
+ progress_percentage?: number;
124
+ estimated_minutes?: number;
125
+ started_at?: string;
126
+ completed_at?: string;
127
+ git_branch?: string;
128
+ references?: Array<{
129
+ url: string;
130
+ label?: string;
131
+ }>;
132
+ };
133
+ subtasks?: Array<{
134
+ id: string;
135
+ title: string;
136
+ status: string;
137
+ progress_percentage?: number;
138
+ }>;
139
+ milestones?: Array<{
140
+ id: string;
141
+ title: string;
142
+ status: string;
143
+ order_index: number;
144
+ }>;
145
+ }>>;
146
+ searchTasks(projectId: string, params: {
147
+ query: string;
148
+ status?: string[];
149
+ limit?: number;
150
+ offset?: number;
151
+ }): Promise<ApiResponse<{
152
+ tasks: Array<{
153
+ id: string;
154
+ title: string;
155
+ status: string;
156
+ priority: number;
157
+ snippet?: string;
158
+ }>;
159
+ total_matches: number;
160
+ hint?: string;
161
+ }>>;
162
+ getTasksByPriority(projectId: string, params?: {
163
+ priority?: number;
164
+ priority_max?: number;
165
+ status?: string;
166
+ limit?: number;
167
+ offset?: number;
168
+ }): Promise<ApiResponse<{
169
+ tasks: Array<{
170
+ id: string;
171
+ title: string;
172
+ priority: number;
173
+ status: string;
174
+ estimated_minutes?: number;
175
+ }>;
176
+ total_count: number;
177
+ }>>;
178
+ getRecentTasks(projectId: string, params?: {
179
+ order?: 'newest' | 'oldest';
180
+ status?: string;
181
+ limit?: number;
182
+ offset?: number;
183
+ }): Promise<ApiResponse<{
184
+ tasks: Array<{
185
+ id: string;
186
+ title: string;
187
+ status: string;
188
+ priority: number;
189
+ created_at: string;
190
+ age?: string;
191
+ }>;
192
+ total_count: number;
193
+ }>>;
194
+ getTaskStats(projectId: string): Promise<ApiResponse<{
195
+ total: number;
196
+ by_status: {
197
+ backlog: number;
198
+ pending: number;
199
+ in_progress: number;
200
+ completed: number;
201
+ cancelled: number;
202
+ };
203
+ by_priority: {
204
+ 1: number;
205
+ 2: number;
206
+ 3: number;
207
+ 4: number;
208
+ 5: number;
209
+ };
210
+ awaiting_validation: number;
211
+ oldest_pending_days: number | null;
212
+ }>>;
213
+ updateTask(taskId: string, updates: {
214
+ title?: string;
215
+ description?: string;
216
+ priority?: number;
217
+ status?: string;
218
+ progress_percentage?: number;
219
+ progress_note?: string;
220
+ estimated_minutes?: number;
221
+ git_branch?: string;
222
+ worktree_path?: string;
223
+ session_id?: string;
224
+ }): Promise<ApiResponse<{
225
+ success: boolean;
226
+ task_id: string;
227
+ git_workflow?: {
228
+ workflow: string;
229
+ base_branch: string;
230
+ suggested_branch: string;
231
+ worktree_required: boolean;
232
+ };
233
+ worktree_setup?: {
234
+ message: string;
235
+ commands: string[];
236
+ worktree_path: string;
237
+ branch_name: string;
238
+ cleanup_command: string;
239
+ };
240
+ next_step?: string;
241
+ }>>;
242
+ completeTask(taskId: string, params: {
243
+ summary?: string;
244
+ session_id?: string;
245
+ }): Promise<ApiResponse<{
246
+ success: boolean;
247
+ directive: string;
248
+ auto_continue: boolean;
249
+ completed_task_id: string;
250
+ next_task?: {
251
+ id: string;
252
+ title: string;
253
+ priority: number;
254
+ estimated_minutes?: number;
255
+ } | null;
256
+ context?: {
257
+ validation?: number;
258
+ blockers?: number;
259
+ deployment?: string;
260
+ worktree_path?: string;
261
+ };
262
+ next_action: string;
263
+ warnings?: string[];
264
+ }>>;
265
+ deleteTask(taskId: string): Promise<ApiResponse<{
266
+ success: boolean;
267
+ deleted_id: string;
268
+ }>>;
269
+ releaseTask(taskId: string, params?: {
270
+ reason?: string;
271
+ session_id?: string;
272
+ }): Promise<ApiResponse<{
273
+ success: boolean;
274
+ task_id: string;
275
+ message: string;
276
+ reason?: string;
277
+ hint: string;
278
+ }>>;
279
+ cancelTask(taskId: string, params?: {
280
+ cancelled_reason?: 'pr_closed' | 'superseded' | 'user_cancelled' | 'validation_failed' | 'obsolete' | 'blocked';
281
+ cancellation_note?: string;
282
+ session_id?: string;
283
+ }): Promise<ApiResponse<{
284
+ success: boolean;
285
+ task_id: string;
286
+ cancelled_reason: string | null;
287
+ message: string;
288
+ }>>;
289
+ addTaskReference(taskId: string, url: string, label?: string): Promise<ApiResponse<{
290
+ success: boolean;
291
+ task_id: string;
292
+ reference: {
293
+ url: string;
294
+ label?: string;
295
+ };
296
+ }>>;
297
+ removeTaskReference(taskId: string, url: string): Promise<ApiResponse<{
298
+ success: boolean;
299
+ task_id: string;
300
+ }>>;
301
+ batchUpdateTasks(updates: Array<{
302
+ task_id: string;
303
+ priority?: number;
304
+ status?: string;
305
+ progress_percentage?: number;
306
+ }>): Promise<ApiResponse<{
307
+ success: boolean;
308
+ updated_count: number;
309
+ results: Array<{
310
+ task_id: string;
311
+ success: boolean;
312
+ error?: string;
313
+ }>;
314
+ }>>;
315
+ batchCompleteTasks(completions: Array<{
316
+ task_id: string;
317
+ summary?: string;
318
+ }>): Promise<ApiResponse<{
319
+ success: boolean;
320
+ completed_count: number;
321
+ results: Array<{
322
+ task_id: string;
323
+ success: boolean;
324
+ error?: string;
325
+ }>;
326
+ }>>;
327
+ }
328
+ export declare function createTasksMethods(request: RequestFn, proxy: ProxyFn): TasksMethods;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Tasks API Methods
3
+ *
4
+ * Methods for task management:
5
+ * - getTasks: List tasks for a project
6
+ * - createTask: Create a new task
7
+ * - getNextTask: Get highest priority pending task
8
+ * - getTask: Get a single task
9
+ * - getTaskById: Get task with optional subtasks/milestones
10
+ * - searchTasks: Search tasks by text query
11
+ * - getTasksByPriority: Get tasks filtered by priority
12
+ * - getRecentTasks: Get recently created/modified tasks
13
+ * - getTaskStats: Get task statistics
14
+ * - updateTask: Update task details
15
+ * - completeTask: Mark task as completed
16
+ * - deleteTask: Delete a task
17
+ * - releaseTask: Release task back to pending
18
+ * - cancelTask: Cancel a task
19
+ * - addTaskReference: Add reference URL to task
20
+ * - removeTaskReference: Remove reference from task
21
+ * - batchUpdateTasks: Update multiple tasks
22
+ * - batchCompleteTasks: Complete multiple tasks
23
+ */
24
+ export function createTasksMethods(request, proxy) {
25
+ return {
26
+ async getTasks(projectId, params) {
27
+ const queryParams = new URLSearchParams();
28
+ if (params?.status)
29
+ queryParams.set('status', params.status);
30
+ if (params?.limit)
31
+ queryParams.set('limit', params.limit.toString());
32
+ if (params?.offset)
33
+ queryParams.set('offset', params.offset.toString());
34
+ if (params?.include_subtasks)
35
+ queryParams.set('include_subtasks', 'true');
36
+ if (params?.search_query)
37
+ queryParams.set('search_query', params.search_query);
38
+ if (params?.include_metadata)
39
+ queryParams.set('include_metadata', 'true');
40
+ const query = queryParams.toString();
41
+ const url = `/api/mcp/projects/${projectId}/tasks${query ? `?${query}` : ''}`;
42
+ return request('GET', url);
43
+ },
44
+ async createTask(projectId, params) {
45
+ return request('POST', `/api/mcp/projects/${projectId}/tasks`, params);
46
+ },
47
+ async getNextTask(projectId, sessionId) {
48
+ const url = sessionId
49
+ ? `/api/mcp/projects/${projectId}/next-task?session_id=${sessionId}`
50
+ : `/api/mcp/projects/${projectId}/next-task`;
51
+ return request('GET', url);
52
+ },
53
+ async getTask(taskId) {
54
+ return request('GET', `/api/mcp/tasks/${taskId}`);
55
+ },
56
+ async getTaskById(taskId, params) {
57
+ return proxy('get_task', {
58
+ task_id: taskId,
59
+ include_subtasks: params?.include_subtasks,
60
+ include_milestones: params?.include_milestones,
61
+ });
62
+ },
63
+ async searchTasks(projectId, params) {
64
+ return proxy('search_tasks', {
65
+ project_id: projectId,
66
+ query: params.query,
67
+ status: params.status,
68
+ limit: params.limit,
69
+ offset: params.offset,
70
+ });
71
+ },
72
+ async getTasksByPriority(projectId, params) {
73
+ return proxy('get_tasks_by_priority', {
74
+ project_id: projectId,
75
+ priority: params?.priority,
76
+ priority_max: params?.priority_max,
77
+ status: params?.status,
78
+ limit: params?.limit,
79
+ offset: params?.offset,
80
+ });
81
+ },
82
+ async getRecentTasks(projectId, params) {
83
+ return proxy('get_recent_tasks', {
84
+ project_id: projectId,
85
+ order: params?.order,
86
+ status: params?.status,
87
+ limit: params?.limit,
88
+ offset: params?.offset,
89
+ });
90
+ },
91
+ async getTaskStats(projectId) {
92
+ return proxy('get_task_stats', { project_id: projectId });
93
+ },
94
+ async updateTask(taskId, updates) {
95
+ return request('PATCH', `/api/mcp/tasks/${taskId}`, updates);
96
+ },
97
+ async completeTask(taskId, params) {
98
+ return proxy('complete_task', {
99
+ task_id: taskId,
100
+ summary: params.summary,
101
+ }, params.session_id ? { session_id: params.session_id } : undefined);
102
+ },
103
+ async deleteTask(taskId) {
104
+ return request('DELETE', `/api/mcp/tasks/${taskId}`);
105
+ },
106
+ async releaseTask(taskId, params) {
107
+ return proxy('release_task', {
108
+ task_id: taskId,
109
+ reason: params?.reason,
110
+ }, params?.session_id ? { session_id: params.session_id } : undefined);
111
+ },
112
+ async cancelTask(taskId, params) {
113
+ return proxy('cancel_task', {
114
+ task_id: taskId,
115
+ cancelled_reason: params?.cancelled_reason,
116
+ cancellation_note: params?.cancellation_note,
117
+ }, params?.session_id ? { session_id: params.session_id } : undefined);
118
+ },
119
+ async addTaskReference(taskId, url, label) {
120
+ return proxy('add_task_reference', { task_id: taskId, url, label });
121
+ },
122
+ async removeTaskReference(taskId, url) {
123
+ return proxy('remove_task_reference', { task_id: taskId, url });
124
+ },
125
+ async batchUpdateTasks(updates) {
126
+ return proxy('batch_update_tasks', { updates });
127
+ },
128
+ async batchCompleteTasks(completions) {
129
+ return proxy('batch_complete_tasks', { completions });
130
+ }
131
+ };
132
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared Types for Vibescope API Client
3
+ */
4
+ export interface RetryConfig {
5
+ maxRetries?: number;
6
+ baseDelayMs?: number;
7
+ maxDelayMs?: number;
8
+ retryStatusCodes?: number[];
9
+ }
10
+ export interface ApiClientConfig {
11
+ apiKey: string;
12
+ baseUrl?: string;
13
+ retry?: RetryConfig;
14
+ }
15
+ export interface ApiResponse<T> {
16
+ ok: boolean;
17
+ status: number;
18
+ data?: T;
19
+ error?: string;
20
+ }
21
+ export type RequestFn = <T>(method: string, path: string, body?: unknown) => Promise<ApiResponse<T>>;
22
+ export type ProxyFn = <T>(operation: string, args: Record<string, unknown>, sessionContext?: {
23
+ session_id?: string;
24
+ project_id?: string;
25
+ }) => Promise<ApiResponse<T>>;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Shared Types for Vibescope API Client
3
+ */
4
+ export {};
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Worktrees API Methods
3
+ *
4
+ * Methods for git worktree management:
5
+ * - getStaleWorktrees: List stale worktrees for cleanup
6
+ * - clearWorktreePath: Clear worktree path from a task
7
+ */
8
+ import type { ApiResponse, RequestFn } from './types.js';
9
+ export interface WorktreesMethods {
10
+ getStaleWorktrees(projectId: string, params?: {
11
+ hostname?: string;
12
+ limit?: number;
13
+ offset?: number;
14
+ }): Promise<ApiResponse<{
15
+ stale_worktrees: Array<{
16
+ task_id: string;
17
+ task_title: string;
18
+ worktree_path: string;
19
+ worktree_hostname?: string | null;
20
+ last_heartbeat?: string;
21
+ session_status?: string;
22
+ }>;
23
+ total_count: number;
24
+ has_more: boolean;
25
+ cleanup_instructions: string;
26
+ }>>;
27
+ clearWorktreePath(taskId: string): Promise<ApiResponse<{
28
+ success: boolean;
29
+ task_id: string;
30
+ message: string;
31
+ }>>;
32
+ }
33
+ export declare function createWorktreesMethods(request: RequestFn): WorktreesMethods;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Worktrees API Methods
3
+ *
4
+ * Methods for git worktree management:
5
+ * - getStaleWorktrees: List stale worktrees for cleanup
6
+ * - clearWorktreePath: Clear worktree path from a task
7
+ */
8
+ export function createWorktreesMethods(request) {
9
+ return {
10
+ async getStaleWorktrees(projectId, params) {
11
+ const queryParams = new URLSearchParams();
12
+ if (params?.hostname)
13
+ queryParams.set('hostname', params.hostname);
14
+ if (params?.limit)
15
+ queryParams.set('limit', params.limit.toString());
16
+ if (params?.offset)
17
+ queryParams.set('offset', params.offset.toString());
18
+ const query = queryParams.toString();
19
+ const url = `/api/mcp/projects/${projectId}/worktrees/stale${query ? `?${query}` : ''}`;
20
+ return request('GET', url);
21
+ },
22
+ async clearWorktreePath(taskId) {
23
+ return request('POST', `/api/mcp/tasks/${taskId}/clear-worktree`);
24
+ }
25
+ };
26
+ }
@@ -4,9 +4,16 @@
4
4
  * HTTP client for communicating with the Vibescope API.
5
5
  * All database operations are handled server-side through these endpoints.
6
6
  */
7
+ interface RetryConfig {
8
+ maxRetries?: number;
9
+ baseDelayMs?: number;
10
+ maxDelayMs?: number;
11
+ retryStatusCodes?: number[];
12
+ }
7
13
  interface ApiClientConfig {
8
14
  apiKey: string;
9
15
  baseUrl?: string;
16
+ retry?: RetryConfig;
10
17
  }
11
18
  interface ApiResponse<T> {
12
19
  ok: boolean;
@@ -17,6 +24,7 @@ interface ApiResponse<T> {
17
24
  export declare class VibescopeApiClient {
18
25
  private apiKey;
19
26
  private baseUrl;
27
+ private retryConfig;
20
28
  constructor(config: ApiClientConfig);
21
29
  private request;
22
30
  validateAuth(): Promise<ApiResponse<{
@@ -33,6 +41,7 @@ export declare class VibescopeApiClient {
33
41
  role?: string;
34
42
  hostname?: string;
35
43
  agent_type?: string;
44
+ agent_name?: string;
36
45
  }): Promise<ApiResponse<{
37
46
  session_started: boolean;
38
47
  session_id?: string;