@vibescope/mcp-server 0.4.4 → 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/bodies-of-work.d.ts +125 -0
- package/dist/api-client/bodies-of-work.js +78 -0
- package/dist/api-client/chat.d.ts +26 -0
- package/dist/api-client/chat.js +20 -0
- package/dist/api-client/connectors.d.ts +104 -0
- package/dist/api-client/connectors.js +46 -0
- package/dist/api-client/deployment.d.ts +190 -0
- package/dist/api-client/deployment.js +113 -0
- package/dist/api-client/file-checkouts.d.ts +71 -0
- package/dist/api-client/file-checkouts.js +43 -0
- package/dist/api-client/git-issues.d.ts +55 -0
- package/dist/api-client/git-issues.js +34 -0
- package/dist/api-client/index.d.ts +619 -1
- package/dist/api-client/index.js +148 -0
- package/dist/api-client/organizations.d.ts +101 -0
- package/dist/api-client/organizations.js +86 -0
- package/dist/api-client/progress.d.ts +61 -0
- package/dist/api-client/progress.js +34 -0
- package/dist/api-client/project.d.ts +1 -0
- package/dist/api-client/requests.d.ts +28 -0
- package/dist/api-client/requests.js +28 -0
- package/dist/api-client/sprints.d.ts +153 -0
- package/dist/api-client/sprints.js +82 -0
- package/dist/api-client/subtasks.d.ts +37 -0
- package/dist/api-client/subtasks.js +23 -0
- package/dist/api-client.d.ts +23 -0
- package/dist/api-client.js +15 -0
- package/dist/cli-init.js +21 -21
- package/dist/cli.js +26 -26
- package/dist/handlers/blockers.js +4 -0
- package/dist/handlers/chat.d.ts +23 -0
- package/dist/handlers/chat.js +84 -0
- package/dist/handlers/deployment.d.ts +3 -0
- package/dist/handlers/deployment.js +23 -0
- package/dist/handlers/discovery.js +13 -0
- package/dist/handlers/index.d.ts +1 -0
- package/dist/handlers/index.js +3 -0
- package/dist/handlers/project.js +4 -2
- package/dist/handlers/session.js +7 -0
- package/dist/handlers/tasks.js +7 -0
- package/dist/handlers/tool-docs.js +1204 -1131
- 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/deployment.js +13 -0
- 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 -2545
- 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 -0
- package/src/api-client/chat.ts +50 -0
- package/src/api-client/connectors.ts +152 -0
- package/src/api-client/cost.ts +185 -185
- package/src/api-client/decisions.ts +87 -87
- package/src/api-client/deployment.ts +313 -0
- package/src/api-client/discovery.ts +81 -81
- package/src/api-client/fallback.ts +52 -52
- package/src/api-client/file-checkouts.ts +115 -0
- package/src/api-client/findings.ts +100 -100
- package/src/api-client/git-issues.ts +88 -0
- package/src/api-client/ideas.ts +112 -112
- package/src/api-client/index.ts +592 -426
- package/src/api-client/milestones.ts +83 -83
- package/src/api-client/organizations.ts +185 -0
- package/src/api-client/progress.ts +94 -0
- package/src/api-client/project.ts +180 -179
- package/src/api-client/requests.ts +54 -0
- package/src/api-client/session.ts +220 -220
- package/src/api-client/sprints.ts +227 -0
- package/src/api-client/subtasks.ts +57 -0
- 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 -850
- package/src/api-client.ts +2707 -2672
- 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 -236
- package/src/handlers/__test-utils__.ts +89 -89
- package/src/handlers/blockers.test.ts +468 -468
- package/src/handlers/blockers.ts +172 -163
- 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 -0
- package/src/handlers/chat.ts +101 -0
- 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 -541
- package/src/handlers/discovery.test.ts +206 -206
- package/src/handlers/discovery.ts +427 -414
- 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 -90
- 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 -1093
- 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 -1121
- 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 -1491
- 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 -442
- 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
package/src/handlers/roles.ts
CHANGED
|
@@ -1,219 +1,219 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Role Management Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles agent role configuration and assignment:
|
|
5
|
-
* - get_role_settings: Get role configuration for a project
|
|
6
|
-
* - update_role_settings: Update role settings for a project
|
|
7
|
-
* - set_session_role: Set the role for the current session
|
|
8
|
-
* - get_agents_by_role: Get active agents grouped by their assigned roles
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { Handler, HandlerRegistry, AgentRole } from './types.js';
|
|
12
|
-
import { getApiClient } from '../api-client.js';
|
|
13
|
-
|
|
14
|
-
export const getRoleSettings: Handler = async (args, _ctx) => {
|
|
15
|
-
const { project_id } = args as { project_id: string };
|
|
16
|
-
|
|
17
|
-
if (!project_id) {
|
|
18
|
-
return {
|
|
19
|
-
result: { error: 'project_id is required' },
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const apiClient = getApiClient();
|
|
24
|
-
const response = await apiClient.proxy<{
|
|
25
|
-
roles: Array<{
|
|
26
|
-
role: AgentRole;
|
|
27
|
-
enabled: boolean;
|
|
28
|
-
display_name: string | null;
|
|
29
|
-
description: string | null;
|
|
30
|
-
priority_filter: number[] | null;
|
|
31
|
-
fallback_activities: string[] | null;
|
|
32
|
-
auto_assign_validation: boolean;
|
|
33
|
-
auto_assign_deployment: boolean;
|
|
34
|
-
}>;
|
|
35
|
-
}>('get_role_settings', { project_id });
|
|
36
|
-
|
|
37
|
-
if (!response.ok) {
|
|
38
|
-
return {
|
|
39
|
-
result: { error: response.error || 'Failed to get role settings' },
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return { result: response.data };
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const updateRoleSettings: Handler = async (args, _ctx) => {
|
|
47
|
-
const {
|
|
48
|
-
project_id,
|
|
49
|
-
role,
|
|
50
|
-
enabled,
|
|
51
|
-
display_name,
|
|
52
|
-
description,
|
|
53
|
-
priority_filter,
|
|
54
|
-
fallback_activities,
|
|
55
|
-
auto_assign_validation,
|
|
56
|
-
auto_assign_deployment,
|
|
57
|
-
} = args as {
|
|
58
|
-
project_id: string;
|
|
59
|
-
role: AgentRole;
|
|
60
|
-
enabled?: boolean;
|
|
61
|
-
display_name?: string;
|
|
62
|
-
description?: string;
|
|
63
|
-
priority_filter?: number[];
|
|
64
|
-
fallback_activities?: string[];
|
|
65
|
-
auto_assign_validation?: boolean;
|
|
66
|
-
auto_assign_deployment?: boolean;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
if (!project_id) {
|
|
70
|
-
return {
|
|
71
|
-
result: { error: 'project_id is required' },
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (!role) {
|
|
76
|
-
return {
|
|
77
|
-
result: { error: 'role is required' },
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const apiClient = getApiClient();
|
|
82
|
-
const response = await apiClient.proxy<{
|
|
83
|
-
success: boolean;
|
|
84
|
-
role: AgentRole;
|
|
85
|
-
}>('update_role_settings', {
|
|
86
|
-
project_id,
|
|
87
|
-
role,
|
|
88
|
-
enabled,
|
|
89
|
-
display_name,
|
|
90
|
-
description,
|
|
91
|
-
priority_filter,
|
|
92
|
-
fallback_activities,
|
|
93
|
-
auto_assign_validation,
|
|
94
|
-
auto_assign_deployment,
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
if (!response.ok) {
|
|
98
|
-
return {
|
|
99
|
-
result: { error: response.error || 'Failed to update role settings' },
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return { result: response.data };
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export const setSessionRole: Handler = async (args, ctx) => {
|
|
107
|
-
const { role, role_config } = args as {
|
|
108
|
-
role: AgentRole;
|
|
109
|
-
role_config?: Record<string, unknown>;
|
|
110
|
-
};
|
|
111
|
-
const { session, updateSession } = ctx;
|
|
112
|
-
|
|
113
|
-
if (!role) {
|
|
114
|
-
return {
|
|
115
|
-
result: { error: 'role is required' },
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Role is now open-ended - any role name accepted
|
|
120
|
-
|
|
121
|
-
// Update local session state
|
|
122
|
-
updateSession({ currentRole: role });
|
|
123
|
-
|
|
124
|
-
// If there's an active session, update it on the server too
|
|
125
|
-
if (session.currentSessionId) {
|
|
126
|
-
const apiClient = getApiClient();
|
|
127
|
-
const response = await apiClient.proxy<{
|
|
128
|
-
success: boolean;
|
|
129
|
-
session_id: string;
|
|
130
|
-
role: AgentRole;
|
|
131
|
-
}>('set_session_role', {
|
|
132
|
-
session_id: session.currentSessionId,
|
|
133
|
-
role,
|
|
134
|
-
role_config,
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
if (!response.ok) {
|
|
138
|
-
return {
|
|
139
|
-
result: { error: response.error || 'Failed to update session role' },
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
result: {
|
|
145
|
-
success: true,
|
|
146
|
-
session_id: session.currentSessionId,
|
|
147
|
-
role,
|
|
148
|
-
message: `Session role updated to ${role}. Task filtering and fallback suggestions will now be optimized for this role.`,
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return {
|
|
154
|
-
result: {
|
|
155
|
-
success: true,
|
|
156
|
-
role,
|
|
157
|
-
message: `Local role set to ${role}. Start a session to persist this role.`,
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
export const getAgentsByRole: Handler = async (args, _ctx) => {
|
|
163
|
-
const { project_id, counts_only = true } = args as { project_id: string; counts_only?: boolean };
|
|
164
|
-
|
|
165
|
-
if (!project_id) {
|
|
166
|
-
return {
|
|
167
|
-
result: { error: 'project_id is required' },
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
const apiClient = getApiClient();
|
|
172
|
-
|
|
173
|
-
// Type varies based on counts_only
|
|
174
|
-
if (counts_only) {
|
|
175
|
-
const response = await apiClient.proxy<{
|
|
176
|
-
agents_by_role: Record<AgentRole, number>;
|
|
177
|
-
total_active: number;
|
|
178
|
-
}>('get_agents_by_role', { project_id, counts_only: true });
|
|
179
|
-
|
|
180
|
-
if (!response.ok) {
|
|
181
|
-
return {
|
|
182
|
-
result: { error: response.error || 'Failed to get agents by role' },
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return { result: response.data };
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Full details mode
|
|
190
|
-
const response = await apiClient.proxy<{
|
|
191
|
-
agents_by_role: Record<AgentRole, Array<{
|
|
192
|
-
session_id: string;
|
|
193
|
-
agent_name: string;
|
|
194
|
-
status: string;
|
|
195
|
-
current_task_id: string | null;
|
|
196
|
-
current_task_title: string | null;
|
|
197
|
-
last_synced_at: string;
|
|
198
|
-
}>>;
|
|
199
|
-
total_active: number;
|
|
200
|
-
}>('get_agents_by_role', { project_id, counts_only: false });
|
|
201
|
-
|
|
202
|
-
if (!response.ok) {
|
|
203
|
-
return {
|
|
204
|
-
result: { error: response.error || 'Failed to get agents by role' },
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return { result: response.data };
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Role handlers registry
|
|
213
|
-
*/
|
|
214
|
-
export const roleHandlers: HandlerRegistry = {
|
|
215
|
-
get_role_settings: getRoleSettings,
|
|
216
|
-
update_role_settings: updateRoleSettings,
|
|
217
|
-
set_session_role: setSessionRole,
|
|
218
|
-
get_agents_by_role: getAgentsByRole,
|
|
219
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Role Management Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles agent role configuration and assignment:
|
|
5
|
+
* - get_role_settings: Get role configuration for a project
|
|
6
|
+
* - update_role_settings: Update role settings for a project
|
|
7
|
+
* - set_session_role: Set the role for the current session
|
|
8
|
+
* - get_agents_by_role: Get active agents grouped by their assigned roles
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Handler, HandlerRegistry, AgentRole } from './types.js';
|
|
12
|
+
import { getApiClient } from '../api-client.js';
|
|
13
|
+
|
|
14
|
+
export const getRoleSettings: Handler = async (args, _ctx) => {
|
|
15
|
+
const { project_id } = args as { project_id: string };
|
|
16
|
+
|
|
17
|
+
if (!project_id) {
|
|
18
|
+
return {
|
|
19
|
+
result: { error: 'project_id is required' },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const apiClient = getApiClient();
|
|
24
|
+
const response = await apiClient.proxy<{
|
|
25
|
+
roles: Array<{
|
|
26
|
+
role: AgentRole;
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
display_name: string | null;
|
|
29
|
+
description: string | null;
|
|
30
|
+
priority_filter: number[] | null;
|
|
31
|
+
fallback_activities: string[] | null;
|
|
32
|
+
auto_assign_validation: boolean;
|
|
33
|
+
auto_assign_deployment: boolean;
|
|
34
|
+
}>;
|
|
35
|
+
}>('get_role_settings', { project_id });
|
|
36
|
+
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
return {
|
|
39
|
+
result: { error: response.error || 'Failed to get role settings' },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return { result: response.data };
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const updateRoleSettings: Handler = async (args, _ctx) => {
|
|
47
|
+
const {
|
|
48
|
+
project_id,
|
|
49
|
+
role,
|
|
50
|
+
enabled,
|
|
51
|
+
display_name,
|
|
52
|
+
description,
|
|
53
|
+
priority_filter,
|
|
54
|
+
fallback_activities,
|
|
55
|
+
auto_assign_validation,
|
|
56
|
+
auto_assign_deployment,
|
|
57
|
+
} = args as {
|
|
58
|
+
project_id: string;
|
|
59
|
+
role: AgentRole;
|
|
60
|
+
enabled?: boolean;
|
|
61
|
+
display_name?: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
priority_filter?: number[];
|
|
64
|
+
fallback_activities?: string[];
|
|
65
|
+
auto_assign_validation?: boolean;
|
|
66
|
+
auto_assign_deployment?: boolean;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (!project_id) {
|
|
70
|
+
return {
|
|
71
|
+
result: { error: 'project_id is required' },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!role) {
|
|
76
|
+
return {
|
|
77
|
+
result: { error: 'role is required' },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const apiClient = getApiClient();
|
|
82
|
+
const response = await apiClient.proxy<{
|
|
83
|
+
success: boolean;
|
|
84
|
+
role: AgentRole;
|
|
85
|
+
}>('update_role_settings', {
|
|
86
|
+
project_id,
|
|
87
|
+
role,
|
|
88
|
+
enabled,
|
|
89
|
+
display_name,
|
|
90
|
+
description,
|
|
91
|
+
priority_filter,
|
|
92
|
+
fallback_activities,
|
|
93
|
+
auto_assign_validation,
|
|
94
|
+
auto_assign_deployment,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
return {
|
|
99
|
+
result: { error: response.error || 'Failed to update role settings' },
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return { result: response.data };
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export const setSessionRole: Handler = async (args, ctx) => {
|
|
107
|
+
const { role, role_config } = args as {
|
|
108
|
+
role: AgentRole;
|
|
109
|
+
role_config?: Record<string, unknown>;
|
|
110
|
+
};
|
|
111
|
+
const { session, updateSession } = ctx;
|
|
112
|
+
|
|
113
|
+
if (!role) {
|
|
114
|
+
return {
|
|
115
|
+
result: { error: 'role is required' },
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Role is now open-ended - any role name accepted
|
|
120
|
+
|
|
121
|
+
// Update local session state
|
|
122
|
+
updateSession({ currentRole: role });
|
|
123
|
+
|
|
124
|
+
// If there's an active session, update it on the server too
|
|
125
|
+
if (session.currentSessionId) {
|
|
126
|
+
const apiClient = getApiClient();
|
|
127
|
+
const response = await apiClient.proxy<{
|
|
128
|
+
success: boolean;
|
|
129
|
+
session_id: string;
|
|
130
|
+
role: AgentRole;
|
|
131
|
+
}>('set_session_role', {
|
|
132
|
+
session_id: session.currentSessionId,
|
|
133
|
+
role,
|
|
134
|
+
role_config,
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
return {
|
|
139
|
+
result: { error: response.error || 'Failed to update session role' },
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
result: {
|
|
145
|
+
success: true,
|
|
146
|
+
session_id: session.currentSessionId,
|
|
147
|
+
role,
|
|
148
|
+
message: `Session role updated to ${role}. Task filtering and fallback suggestions will now be optimized for this role.`,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
result: {
|
|
155
|
+
success: true,
|
|
156
|
+
role,
|
|
157
|
+
message: `Local role set to ${role}. Start a session to persist this role.`,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export const getAgentsByRole: Handler = async (args, _ctx) => {
|
|
163
|
+
const { project_id, counts_only = true } = args as { project_id: string; counts_only?: boolean };
|
|
164
|
+
|
|
165
|
+
if (!project_id) {
|
|
166
|
+
return {
|
|
167
|
+
result: { error: 'project_id is required' },
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const apiClient = getApiClient();
|
|
172
|
+
|
|
173
|
+
// Type varies based on counts_only
|
|
174
|
+
if (counts_only) {
|
|
175
|
+
const response = await apiClient.proxy<{
|
|
176
|
+
agents_by_role: Record<AgentRole, number>;
|
|
177
|
+
total_active: number;
|
|
178
|
+
}>('get_agents_by_role', { project_id, counts_only: true });
|
|
179
|
+
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
return {
|
|
182
|
+
result: { error: response.error || 'Failed to get agents by role' },
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return { result: response.data };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Full details mode
|
|
190
|
+
const response = await apiClient.proxy<{
|
|
191
|
+
agents_by_role: Record<AgentRole, Array<{
|
|
192
|
+
session_id: string;
|
|
193
|
+
agent_name: string;
|
|
194
|
+
status: string;
|
|
195
|
+
current_task_id: string | null;
|
|
196
|
+
current_task_title: string | null;
|
|
197
|
+
last_synced_at: string;
|
|
198
|
+
}>>;
|
|
199
|
+
total_active: number;
|
|
200
|
+
}>('get_agents_by_role', { project_id, counts_only: false });
|
|
201
|
+
|
|
202
|
+
if (!response.ok) {
|
|
203
|
+
return {
|
|
204
|
+
result: { error: response.error || 'Failed to get agents by role' },
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return { result: response.data };
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Role handlers registry
|
|
213
|
+
*/
|
|
214
|
+
export const roleHandlers: HandlerRegistry = {
|
|
215
|
+
get_role_settings: getRoleSettings,
|
|
216
|
+
update_role_settings: updateRoleSettings,
|
|
217
|
+
set_session_role: setSessionRole,
|
|
218
|
+
get_agents_by_role: getAgentsByRole,
|
|
219
|
+
};
|