@vibescope/mcp-server 0.5.0 → 0.5.1
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/tasks.d.ts +1 -0
- package/dist/cli-init.js +21 -21
- package/dist/cli.js +26 -26
- package/dist/handlers/tasks.js +7 -1
- package/dist/handlers/tool-docs.js +1216 -1216
- package/dist/index.js +73 -73
- package/dist/templates/agent-guidelines.d.ts +1 -1
- package/dist/templates/agent-guidelines.js +205 -205
- package/dist/templates/help-content.js +1621 -1621
- package/dist/tools/bodies-of-work.js +6 -6
- package/dist/tools/cloud-agents.js +22 -22
- package/dist/tools/milestones.js +2 -2
- 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 +43 -35
- package/dist/tools/worktrees.js +14 -14
- package/dist/utils.js +11 -11
- package/docs/TOOLS.md +2687 -2685
- 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 +181 -181
- 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 +451 -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 +2728 -2728
- package/src/cli-init.ts +558 -558
- 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 -101
- 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 +433 -433
- 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 +245 -245
- 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 +1144 -1137
- package/src/handlers/tool-categories.test.ts +66 -66
- package/src/handlers/tool-docs.test.ts +511 -511
- package/src/handlers/tool-docs.ts +1595 -1595
- 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 +884 -884
- package/src/setup.test.ts +243 -243
- package/src/setup.ts +410 -410
- package/src/templates/agent-guidelines.ts +233 -233
- 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 -72
- 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 -154
- 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 +145 -145
- package/src/tools/milestones.ts +118 -118
- package/src/tools/organizations.ts +224 -224
- package/src/tools/persona-templates.ts +25 -25
- package/src/tools/progress.ts +73 -73
- package/src/tools/project.ts +210 -210
- 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 +583 -575
- 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 +162 -162
- package/tsconfig.json +16 -16
- package/vitest.config.ts +14 -14
- package/dist/tools.d.ts +0 -2
- package/dist/tools.js +0 -3602
|
@@ -1,156 +1,156 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cloud Agents Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles cloud agent management:
|
|
5
|
-
* - cleanup_stale_cloud_agents
|
|
6
|
-
* - list_cloud_agents
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Handler, HandlerRegistry } from './types.js';
|
|
10
|
-
import { success, error } from './types.js';
|
|
11
|
-
import { parseArgs, uuidValidator, createEnumValidator } from '../validators.js';
|
|
12
|
-
import { getApiClient } from '../api-client.js';
|
|
13
|
-
|
|
14
|
-
// Argument schemas
|
|
15
|
-
const cleanupStaleAgentsSchema = {
|
|
16
|
-
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
17
|
-
stale_minutes: { type: 'number' as const, default: 5 },
|
|
18
|
-
include_running: { type: 'boolean' as const, default: false },
|
|
19
|
-
dry_run: { type: 'boolean' as const, default: false },
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const listCloudAgentsSchema = {
|
|
23
|
-
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
24
|
-
status: {
|
|
25
|
-
type: 'string' as const,
|
|
26
|
-
default: 'all',
|
|
27
|
-
validate: createEnumValidator(['starting', 'running', 'stopped', 'failed', 'all'])
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
interface CleanupResponse {
|
|
32
|
-
cleaned: number;
|
|
33
|
-
failed?: number;
|
|
34
|
-
wouldClean?: number;
|
|
35
|
-
dryRun?: boolean;
|
|
36
|
-
agents: Array<{
|
|
37
|
-
id: string;
|
|
38
|
-
name?: string;
|
|
39
|
-
success?: boolean;
|
|
40
|
-
error?: string;
|
|
41
|
-
status?: string;
|
|
42
|
-
createdAt?: string;
|
|
43
|
-
}>;
|
|
44
|
-
message?: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
interface ListAgentsResponse {
|
|
48
|
-
agents: Array<{
|
|
49
|
-
id: string;
|
|
50
|
-
name?: string;
|
|
51
|
-
status: string;
|
|
52
|
-
created_at: string;
|
|
53
|
-
last_heartbeat?: string;
|
|
54
|
-
public_ip?: string;
|
|
55
|
-
ecs_task_id?: string;
|
|
56
|
-
}>;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Clean up stale cloud agents that failed to start or lost connection.
|
|
61
|
-
* Only operates on agents in the specified project (security scoped).
|
|
62
|
-
*/
|
|
63
|
-
export const cleanupStaleCloudAgents: Handler = async (args, _ctx) => {
|
|
64
|
-
const { project_id, stale_minutes, include_running, dry_run } = parseArgs(args, cleanupStaleAgentsSchema);
|
|
65
|
-
|
|
66
|
-
const apiClient = getApiClient();
|
|
67
|
-
|
|
68
|
-
// Call the cleanup endpoint via fetch (since it's a new endpoint not in the client)
|
|
69
|
-
const response = await apiClient.proxy<CleanupResponse>('cleanup_stale_cloud_agents', {
|
|
70
|
-
project_id,
|
|
71
|
-
staleMinutes: stale_minutes,
|
|
72
|
-
includeRunning: include_running,
|
|
73
|
-
dryRun: dry_run,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
if (!response.ok || !response.data) {
|
|
77
|
-
return error(response.error || 'Failed to cleanup stale agents');
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const data = response.data!;
|
|
81
|
-
|
|
82
|
-
if (dry_run) {
|
|
83
|
-
return success({
|
|
84
|
-
dryRun: true,
|
|
85
|
-
wouldClean: data.wouldClean || 0,
|
|
86
|
-
agents: data.agents,
|
|
87
|
-
message: `Found ${data.wouldClean || 0} stale agents that would be cleaned up`
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return success({
|
|
92
|
-
cleaned: data.cleaned,
|
|
93
|
-
failed: data.failed || 0,
|
|
94
|
-
agents: data.agents,
|
|
95
|
-
message: `Cleaned up ${data.cleaned} stale agents`
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* List cloud agents for a project with optional status filter.
|
|
101
|
-
*/
|
|
102
|
-
export const listCloudAgents: Handler = async (args, _ctx) => {
|
|
103
|
-
const { project_id, status } = parseArgs(args, listCloudAgentsSchema);
|
|
104
|
-
|
|
105
|
-
const apiClient = getApiClient();
|
|
106
|
-
|
|
107
|
-
const response = await apiClient.proxy<ListAgentsResponse>('list_cloud_agents', {
|
|
108
|
-
project_id,
|
|
109
|
-
status: status === 'all' ? undefined : status,
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
if (!response.ok || !response.data) {
|
|
113
|
-
return error(response.error || 'Failed to list cloud agents');
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return success({
|
|
117
|
-
agents: response.data!.agents,
|
|
118
|
-
count: response.data!.agents.length
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Update agent status message (for dashboard display).
|
|
124
|
-
*/
|
|
125
|
-
export const updateAgentStatus: Handler = async (args, ctx) => {
|
|
126
|
-
const statusMessage = args.status_message as string;
|
|
127
|
-
const projectId = (args.project_id || ctx.session.currentProjectId) as string;
|
|
128
|
-
const agentName = args.agent_name as string | undefined;
|
|
129
|
-
|
|
130
|
-
if (!statusMessage) {
|
|
131
|
-
return error('status_message is required');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const apiClient = getApiClient();
|
|
135
|
-
|
|
136
|
-
const response = await apiClient.proxy<{ success: boolean }>('update_agent_status', {
|
|
137
|
-
project_id: projectId,
|
|
138
|
-
agent_name: agentName,
|
|
139
|
-
status_message: statusMessage,
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
if (!response.ok) {
|
|
143
|
-
return error(response.error || 'Failed to update status');
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return success({ updated: true, status_message: statusMessage });
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Cloud agents handlers registry
|
|
151
|
-
*/
|
|
152
|
-
export const cloudAgentHandlers: HandlerRegistry = {
|
|
153
|
-
cleanup_stale_cloud_agents: cleanupStaleCloudAgents,
|
|
154
|
-
list_cloud_agents: listCloudAgents,
|
|
155
|
-
update_agent_status: updateAgentStatus,
|
|
156
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Agents Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles cloud agent management:
|
|
5
|
+
* - cleanup_stale_cloud_agents
|
|
6
|
+
* - list_cloud_agents
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Handler, HandlerRegistry } from './types.js';
|
|
10
|
+
import { success, error } from './types.js';
|
|
11
|
+
import { parseArgs, uuidValidator, createEnumValidator } from '../validators.js';
|
|
12
|
+
import { getApiClient } from '../api-client.js';
|
|
13
|
+
|
|
14
|
+
// Argument schemas
|
|
15
|
+
const cleanupStaleAgentsSchema = {
|
|
16
|
+
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
17
|
+
stale_minutes: { type: 'number' as const, default: 5 },
|
|
18
|
+
include_running: { type: 'boolean' as const, default: false },
|
|
19
|
+
dry_run: { type: 'boolean' as const, default: false },
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const listCloudAgentsSchema = {
|
|
23
|
+
project_id: { type: 'string' as const, required: true as const, validate: uuidValidator },
|
|
24
|
+
status: {
|
|
25
|
+
type: 'string' as const,
|
|
26
|
+
default: 'all',
|
|
27
|
+
validate: createEnumValidator(['starting', 'running', 'stopped', 'failed', 'all'])
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
interface CleanupResponse {
|
|
32
|
+
cleaned: number;
|
|
33
|
+
failed?: number;
|
|
34
|
+
wouldClean?: number;
|
|
35
|
+
dryRun?: boolean;
|
|
36
|
+
agents: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
name?: string;
|
|
39
|
+
success?: boolean;
|
|
40
|
+
error?: string;
|
|
41
|
+
status?: string;
|
|
42
|
+
createdAt?: string;
|
|
43
|
+
}>;
|
|
44
|
+
message?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface ListAgentsResponse {
|
|
48
|
+
agents: Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
name?: string;
|
|
51
|
+
status: string;
|
|
52
|
+
created_at: string;
|
|
53
|
+
last_heartbeat?: string;
|
|
54
|
+
public_ip?: string;
|
|
55
|
+
ecs_task_id?: string;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Clean up stale cloud agents that failed to start or lost connection.
|
|
61
|
+
* Only operates on agents in the specified project (security scoped).
|
|
62
|
+
*/
|
|
63
|
+
export const cleanupStaleCloudAgents: Handler = async (args, _ctx) => {
|
|
64
|
+
const { project_id, stale_minutes, include_running, dry_run } = parseArgs(args, cleanupStaleAgentsSchema);
|
|
65
|
+
|
|
66
|
+
const apiClient = getApiClient();
|
|
67
|
+
|
|
68
|
+
// Call the cleanup endpoint via fetch (since it's a new endpoint not in the client)
|
|
69
|
+
const response = await apiClient.proxy<CleanupResponse>('cleanup_stale_cloud_agents', {
|
|
70
|
+
project_id,
|
|
71
|
+
staleMinutes: stale_minutes,
|
|
72
|
+
includeRunning: include_running,
|
|
73
|
+
dryRun: dry_run,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (!response.ok || !response.data) {
|
|
77
|
+
return error(response.error || 'Failed to cleanup stale agents');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const data = response.data!;
|
|
81
|
+
|
|
82
|
+
if (dry_run) {
|
|
83
|
+
return success({
|
|
84
|
+
dryRun: true,
|
|
85
|
+
wouldClean: data.wouldClean || 0,
|
|
86
|
+
agents: data.agents,
|
|
87
|
+
message: `Found ${data.wouldClean || 0} stale agents that would be cleaned up`
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return success({
|
|
92
|
+
cleaned: data.cleaned,
|
|
93
|
+
failed: data.failed || 0,
|
|
94
|
+
agents: data.agents,
|
|
95
|
+
message: `Cleaned up ${data.cleaned} stale agents`
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* List cloud agents for a project with optional status filter.
|
|
101
|
+
*/
|
|
102
|
+
export const listCloudAgents: Handler = async (args, _ctx) => {
|
|
103
|
+
const { project_id, status } = parseArgs(args, listCloudAgentsSchema);
|
|
104
|
+
|
|
105
|
+
const apiClient = getApiClient();
|
|
106
|
+
|
|
107
|
+
const response = await apiClient.proxy<ListAgentsResponse>('list_cloud_agents', {
|
|
108
|
+
project_id,
|
|
109
|
+
status: status === 'all' ? undefined : status,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
if (!response.ok || !response.data) {
|
|
113
|
+
return error(response.error || 'Failed to list cloud agents');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return success({
|
|
117
|
+
agents: response.data!.agents,
|
|
118
|
+
count: response.data!.agents.length
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Update agent status message (for dashboard display).
|
|
124
|
+
*/
|
|
125
|
+
export const updateAgentStatus: Handler = async (args, ctx) => {
|
|
126
|
+
const statusMessage = args.status_message as string;
|
|
127
|
+
const projectId = (args.project_id || ctx.session.currentProjectId) as string;
|
|
128
|
+
const agentName = args.agent_name as string | undefined;
|
|
129
|
+
|
|
130
|
+
if (!statusMessage) {
|
|
131
|
+
return error('status_message is required');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const apiClient = getApiClient();
|
|
135
|
+
|
|
136
|
+
const response = await apiClient.proxy<{ success: boolean }>('update_agent_status', {
|
|
137
|
+
project_id: projectId,
|
|
138
|
+
agent_name: agentName,
|
|
139
|
+
status_message: statusMessage,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
return error(response.error || 'Failed to update status');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return success({ updated: true, status_message: statusMessage });
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Cloud agents handlers registry
|
|
151
|
+
*/
|
|
152
|
+
export const cloudAgentHandlers: HandlerRegistry = {
|
|
153
|
+
cleanup_stale_cloud_agents: cleanupStaleCloudAgents,
|
|
154
|
+
list_cloud_agents: listCloudAgents,
|
|
155
|
+
update_agent_status: updateAgentStatus,
|
|
156
|
+
};
|