@vibescope/mcp-server 0.4.4 → 0.4.5
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/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/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 +22 -0
- package/dist/api-client.js +15 -0
- package/dist/handlers/blockers.js +4 -0
- package/dist/handlers/chat.d.ts +21 -0
- package/dist/handlers/chat.js +59 -0
- package/dist/handlers/deployment.d.ts +3 -0
- package/dist/handlers/deployment.js +23 -0
- package/dist/handlers/discovery.js +1 -0
- package/dist/handlers/index.d.ts +1 -0
- package/dist/handlers/index.js +3 -0
- package/dist/handlers/session.js +7 -0
- package/dist/handlers/tasks.js +7 -0
- package/dist/handlers/tool-docs.js +7 -0
- package/dist/tools/deployment.js +13 -0
- package/docs/TOOLS.md +17 -3
- package/package.json +1 -1
- 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/deployment.ts +313 -0
- package/src/api-client/file-checkouts.ts +115 -0
- package/src/api-client/git-issues.ts +88 -0
- package/src/api-client/index.ts +179 -13
- package/src/api-client/organizations.ts +185 -0
- package/src/api-client/progress.ts +94 -0
- package/src/api-client/requests.ts +54 -0
- package/src/api-client/sprints.ts +227 -0
- package/src/api-client/subtasks.ts +57 -0
- package/src/api-client.test.ts +16 -19
- package/src/api-client.ts +34 -0
- package/src/handlers/__test-setup__.ts +4 -0
- package/src/handlers/blockers.ts +9 -0
- package/src/handlers/chat.test.ts +185 -0
- package/src/handlers/chat.ts +69 -0
- package/src/handlers/deployment.ts +29 -0
- package/src/handlers/discovery.ts +1 -0
- package/src/handlers/index.ts +3 -0
- package/src/handlers/session.ts +12 -0
- package/src/handlers/tasks.ts +12 -0
- package/src/handlers/tool-docs.ts +8 -0
- package/src/tools/deployment.ts +13 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sprints API Methods
|
|
3
|
+
*
|
|
4
|
+
* Methods for sprint management:
|
|
5
|
+
* - createSprint: Create a new sprint
|
|
6
|
+
* - updateSprint: Update sprint details
|
|
7
|
+
* - getSprint: Get a sprint with tasks
|
|
8
|
+
* - getSprints: List sprints for a project
|
|
9
|
+
* - deleteSprint: Delete a sprint
|
|
10
|
+
* - startSprint: Activate a sprint
|
|
11
|
+
* - completeSprint: Complete a sprint
|
|
12
|
+
* - addTaskToSprint: Add a task to a sprint
|
|
13
|
+
* - removeTaskFromSprint: Remove a task from a sprint
|
|
14
|
+
* - getSprintBacklog: Get tasks available to add to a sprint
|
|
15
|
+
* - getSprintVelocity: Get velocity metrics for completed sprints
|
|
16
|
+
*/
|
|
17
|
+
export function createSprintsMethods(proxy) {
|
|
18
|
+
return {
|
|
19
|
+
async createSprint(projectId, params) {
|
|
20
|
+
return proxy('create_sprint', {
|
|
21
|
+
project_id: projectId,
|
|
22
|
+
...params
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
async updateSprint(sprintId, updates) {
|
|
26
|
+
return proxy('update_sprint', {
|
|
27
|
+
sprint_id: sprintId,
|
|
28
|
+
...updates
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
async getSprint(sprintId, summaryOnly) {
|
|
32
|
+
return proxy('get_sprint', {
|
|
33
|
+
sprint_id: sprintId,
|
|
34
|
+
summary_only: summaryOnly
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
async getSprints(projectId, params) {
|
|
38
|
+
return proxy('get_sprints', {
|
|
39
|
+
project_id: projectId,
|
|
40
|
+
...params
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
async deleteSprint(sprintId) {
|
|
44
|
+
return proxy('delete_sprint', { sprint_id: sprintId });
|
|
45
|
+
},
|
|
46
|
+
async startSprint(sprintId) {
|
|
47
|
+
return proxy('start_sprint', { sprint_id: sprintId });
|
|
48
|
+
},
|
|
49
|
+
async completeSprint(sprintId, params) {
|
|
50
|
+
return proxy('complete_sprint', {
|
|
51
|
+
sprint_id: sprintId,
|
|
52
|
+
...params
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
async addTaskToSprint(sprintId, taskId, params) {
|
|
56
|
+
return proxy('add_task_to_sprint', {
|
|
57
|
+
sprint_id: sprintId,
|
|
58
|
+
task_id: taskId,
|
|
59
|
+
...params
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
async removeTaskFromSprint(sprintId, taskId) {
|
|
63
|
+
return proxy('remove_task_from_sprint', {
|
|
64
|
+
sprint_id: sprintId,
|
|
65
|
+
task_id: taskId
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
async getSprintBacklog(projectId, sprintId, params) {
|
|
69
|
+
return proxy('get_sprint_backlog', {
|
|
70
|
+
project_id: projectId,
|
|
71
|
+
sprint_id: sprintId,
|
|
72
|
+
...params
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
async getSprintVelocity(projectId, limit) {
|
|
76
|
+
return proxy('get_sprint_velocity', {
|
|
77
|
+
project_id: projectId,
|
|
78
|
+
limit
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subtasks API Methods
|
|
3
|
+
*
|
|
4
|
+
* Methods for subtask management:
|
|
5
|
+
* - addSubtask: Add a subtask to a parent task
|
|
6
|
+
* - getSubtasks: Get subtasks for a parent task
|
|
7
|
+
*/
|
|
8
|
+
import type { ApiResponse, ProxyFn } from './types.js';
|
|
9
|
+
export interface SubtasksMethods {
|
|
10
|
+
addSubtask(parentTaskId: string, params: {
|
|
11
|
+
title: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
priority?: number;
|
|
14
|
+
estimated_minutes?: number;
|
|
15
|
+
}, sessionId?: string): Promise<ApiResponse<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
subtask_id: string;
|
|
18
|
+
parent_task_id: string;
|
|
19
|
+
}>>;
|
|
20
|
+
getSubtasks(parentTaskId: string, status?: string): Promise<ApiResponse<{
|
|
21
|
+
subtasks: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
priority: number;
|
|
26
|
+
status: string;
|
|
27
|
+
progress_percentage?: number;
|
|
28
|
+
estimated_minutes?: number;
|
|
29
|
+
}>;
|
|
30
|
+
stats: {
|
|
31
|
+
total: number;
|
|
32
|
+
completed: number;
|
|
33
|
+
progress_percentage: number;
|
|
34
|
+
};
|
|
35
|
+
}>>;
|
|
36
|
+
}
|
|
37
|
+
export declare function createSubtasksMethods(proxy: ProxyFn): SubtasksMethods;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subtasks API Methods
|
|
3
|
+
*
|
|
4
|
+
* Methods for subtask management:
|
|
5
|
+
* - addSubtask: Add a subtask to a parent task
|
|
6
|
+
* - getSubtasks: Get subtasks for a parent task
|
|
7
|
+
*/
|
|
8
|
+
export function createSubtasksMethods(proxy) {
|
|
9
|
+
return {
|
|
10
|
+
async addSubtask(parentTaskId, params, sessionId) {
|
|
11
|
+
return proxy('add_subtask', {
|
|
12
|
+
parent_task_id: parentTaskId,
|
|
13
|
+
...params
|
|
14
|
+
}, sessionId ? { session_id: sessionId } : undefined);
|
|
15
|
+
},
|
|
16
|
+
async getSubtasks(parentTaskId, status) {
|
|
17
|
+
return proxy('get_subtasks', {
|
|
18
|
+
parent_task_id: parentTaskId,
|
|
19
|
+
status
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1427,6 +1427,13 @@ export declare class VibescopeApiClient {
|
|
|
1427
1427
|
completeDeploymentRequirement(requirementId: string): Promise<ApiResponse<{
|
|
1428
1428
|
success: boolean;
|
|
1429
1429
|
}>>;
|
|
1430
|
+
reorderDeploymentRequirements(projectId: string, params: {
|
|
1431
|
+
stage: string;
|
|
1432
|
+
requirement_ids: string[];
|
|
1433
|
+
}): Promise<ApiResponse<{
|
|
1434
|
+
success: boolean;
|
|
1435
|
+
reordered: number;
|
|
1436
|
+
}>>;
|
|
1430
1437
|
scheduleDeployment(projectId: string, params: {
|
|
1431
1438
|
scheduled_at: string;
|
|
1432
1439
|
schedule_type?: string;
|
|
@@ -1730,6 +1737,21 @@ export declare class VibescopeApiClient {
|
|
|
1730
1737
|
project_id: string;
|
|
1731
1738
|
agent_type: string;
|
|
1732
1739
|
}>>;
|
|
1740
|
+
sendProjectMessage(projectId: string, message: string, sessionId?: string): Promise<ApiResponse<{
|
|
1741
|
+
success: boolean;
|
|
1742
|
+
message_id: string;
|
|
1743
|
+
sent_at: string;
|
|
1744
|
+
}>>;
|
|
1745
|
+
getProjectMessages(projectId: string, limit?: number): Promise<ApiResponse<{
|
|
1746
|
+
messages: Array<{
|
|
1747
|
+
id: string;
|
|
1748
|
+
sender_type: string;
|
|
1749
|
+
sender_name: string | null;
|
|
1750
|
+
content: string;
|
|
1751
|
+
created_at: string;
|
|
1752
|
+
}>;
|
|
1753
|
+
count: number;
|
|
1754
|
+
}>>;
|
|
1733
1755
|
}
|
|
1734
1756
|
export declare function getApiClient(): VibescopeApiClient;
|
|
1735
1757
|
export declare function initApiClient(config: ApiClientConfig): VibescopeApiClient;
|
package/dist/api-client.js
CHANGED
|
@@ -863,6 +863,12 @@ export class VibescopeApiClient {
|
|
|
863
863
|
async completeDeploymentRequirement(requirementId) {
|
|
864
864
|
return this.proxy('complete_deployment_requirement', { requirement_id: requirementId });
|
|
865
865
|
}
|
|
866
|
+
async reorderDeploymentRequirements(projectId, params) {
|
|
867
|
+
return this.proxy('reorder_deployment_requirements', {
|
|
868
|
+
project_id: projectId,
|
|
869
|
+
...params,
|
|
870
|
+
});
|
|
871
|
+
}
|
|
866
872
|
async scheduleDeployment(projectId, params) {
|
|
867
873
|
return this.proxy('schedule_deployment', {
|
|
868
874
|
project_id: projectId,
|
|
@@ -1012,6 +1018,15 @@ export class VibescopeApiClient {
|
|
|
1012
1018
|
agent_type: agentType
|
|
1013
1019
|
});
|
|
1014
1020
|
}
|
|
1021
|
+
async sendProjectMessage(projectId, message, sessionId) {
|
|
1022
|
+
return this.proxy('send_project_message', { project_id: projectId, message }, sessionId ? { session_id: sessionId, persona: null, instance_id: '' } : undefined);
|
|
1023
|
+
}
|
|
1024
|
+
async getProjectMessages(projectId, limit) {
|
|
1025
|
+
return this.proxy('get_project_messages', {
|
|
1026
|
+
project_id: projectId,
|
|
1027
|
+
...(limit !== undefined && { limit }),
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1015
1030
|
}
|
|
1016
1031
|
// Singleton instance
|
|
1017
1032
|
let apiClient = null;
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { success, error } from './types.js';
|
|
11
11
|
import { parseArgs, uuidValidator, createEnumValidator, VALID_BLOCKER_STATUSES, } from '../validators.js';
|
|
12
12
|
import { getApiClient } from '../api-client.js';
|
|
13
|
+
import { autoPostActivity } from './chat.js';
|
|
13
14
|
// Argument schemas for type-safe parsing
|
|
14
15
|
const addBlockerSchema = {
|
|
15
16
|
project_id: { type: 'string', required: true, validate: uuidValidator },
|
|
@@ -42,6 +43,9 @@ export const addBlocker = async (args, ctx) => {
|
|
|
42
43
|
if (!response.ok) {
|
|
43
44
|
return error(response.error || 'Failed to add blocker');
|
|
44
45
|
}
|
|
46
|
+
// Auto-post blocker activity to project chat
|
|
47
|
+
const persona = ctx.session.currentPersona || 'Agent';
|
|
48
|
+
void autoPostActivity(project_id, `🚧 **${persona}** reported a blocker: ${description}`, ctx.session.currentSessionId);
|
|
45
49
|
return success(response.data);
|
|
46
50
|
};
|
|
47
51
|
export const resolveBlocker = async (args, _ctx) => {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat handlers
|
|
3
|
+
*
|
|
4
|
+
* Handlers for project chat tools:
|
|
5
|
+
* - send_project_message: Post a message to the project chat
|
|
6
|
+
* - get_project_messages: Read recent messages from project chat
|
|
7
|
+
*
|
|
8
|
+
* Also exports autoPostActivity — a fire-and-forget helper used by other
|
|
9
|
+
* handlers to log agent boot progress and key events to the chat window.
|
|
10
|
+
*/
|
|
11
|
+
import type { Handler, HandlerRegistry } from './types.js';
|
|
12
|
+
export declare const sendProjectMessage: Handler;
|
|
13
|
+
export declare const getProjectMessages: Handler;
|
|
14
|
+
/**
|
|
15
|
+
* Auto-post an agent activity message to the project chat.
|
|
16
|
+
*
|
|
17
|
+
* Fire-and-forget: errors are silently swallowed so auto-posting never
|
|
18
|
+
* interrupts or breaks the main tool response.
|
|
19
|
+
*/
|
|
20
|
+
export declare function autoPostActivity(projectId: string, message: string, sessionId?: string | null): Promise<void>;
|
|
21
|
+
export declare const chatHandlers: HandlerRegistry;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat handlers
|
|
3
|
+
*
|
|
4
|
+
* Handlers for project chat tools:
|
|
5
|
+
* - send_project_message: Post a message to the project chat
|
|
6
|
+
* - get_project_messages: Read recent messages from project chat
|
|
7
|
+
*
|
|
8
|
+
* Also exports autoPostActivity — a fire-and-forget helper used by other
|
|
9
|
+
* handlers to log agent boot progress and key events to the chat window.
|
|
10
|
+
*/
|
|
11
|
+
import { parseArgs, uuidValidator } from '../validators.js';
|
|
12
|
+
import { getApiClient } from '../api-client.js';
|
|
13
|
+
const sendProjectMessageSchema = {
|
|
14
|
+
project_id: { type: 'string', required: true, validate: uuidValidator },
|
|
15
|
+
message: { type: 'string', required: true },
|
|
16
|
+
};
|
|
17
|
+
const getProjectMessagesSchema = {
|
|
18
|
+
project_id: { type: 'string', required: true, validate: uuidValidator },
|
|
19
|
+
limit: { type: 'number' },
|
|
20
|
+
};
|
|
21
|
+
export const sendProjectMessage = async (args, ctx) => {
|
|
22
|
+
const { project_id, message } = parseArgs(args, sendProjectMessageSchema);
|
|
23
|
+
const api = getApiClient();
|
|
24
|
+
const response = await api.sendProjectMessage(project_id, message, ctx.session.currentSessionId || undefined);
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
return { result: { error: response.error || 'Failed to send message' }, isError: true };
|
|
27
|
+
}
|
|
28
|
+
return { result: response.data };
|
|
29
|
+
};
|
|
30
|
+
export const getProjectMessages = async (args, _ctx) => {
|
|
31
|
+
const { project_id, limit } = parseArgs(args, getProjectMessagesSchema);
|
|
32
|
+
const api = getApiClient();
|
|
33
|
+
const response = await api.getProjectMessages(project_id, limit);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
return { result: { error: response.error || 'Failed to fetch messages' }, isError: true };
|
|
36
|
+
}
|
|
37
|
+
return { result: response.data };
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Auto-post an agent activity message to the project chat.
|
|
41
|
+
*
|
|
42
|
+
* Fire-and-forget: errors are silently swallowed so auto-posting never
|
|
43
|
+
* interrupts or breaks the main tool response.
|
|
44
|
+
*/
|
|
45
|
+
export async function autoPostActivity(projectId, message, sessionId) {
|
|
46
|
+
if (!projectId)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const api = getApiClient();
|
|
50
|
+
await api.sendProjectMessage(projectId, message, sessionId ?? undefined);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Silently ignore — activity logging must never break main functionality
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export const chatHandlers = {
|
|
57
|
+
send_project_message: sendProjectMessage,
|
|
58
|
+
get_project_messages: getProjectMessages,
|
|
59
|
+
};
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - add_deployment_requirement
|
|
13
13
|
* - complete_deployment_requirement
|
|
14
14
|
* - get_deployment_requirements
|
|
15
|
+
* - get_deployment_requirements_stats
|
|
16
|
+
* - reorder_deployment_requirements
|
|
15
17
|
*/
|
|
16
18
|
import type { Handler, HandlerRegistry } from './types.js';
|
|
17
19
|
export declare const requestDeployment: Handler;
|
|
@@ -30,6 +32,7 @@ export declare const getDeploymentRequirements: Handler;
|
|
|
30
32
|
* More token-efficient than get_deployment_requirements when you just need to understand the overall state.
|
|
31
33
|
*/
|
|
32
34
|
export declare const getDeploymentRequirementsStats: Handler;
|
|
35
|
+
export declare const reorderDeploymentRequirements: Handler;
|
|
33
36
|
export declare const scheduleDeployment: Handler;
|
|
34
37
|
export declare const getScheduledDeployments: Handler;
|
|
35
38
|
export declare const updateScheduledDeployment: Handler;
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - add_deployment_requirement
|
|
13
13
|
* - complete_deployment_requirement
|
|
14
14
|
* - get_deployment_requirements
|
|
15
|
+
* - get_deployment_requirements_stats
|
|
16
|
+
* - reorder_deployment_requirements
|
|
15
17
|
*/
|
|
16
18
|
import { ValidationError, parseArgs, uuidValidator, createEnumValidator, } from '../validators.js';
|
|
17
19
|
import { getApiClient } from '../api-client.js';
|
|
@@ -251,6 +253,26 @@ export const getDeploymentRequirementsStats = async (args, ctx) => {
|
|
|
251
253
|
return { result: response.data };
|
|
252
254
|
};
|
|
253
255
|
// ============================================================================
|
|
256
|
+
// Reorder Deployment Requirements
|
|
257
|
+
// ============================================================================
|
|
258
|
+
const reorderDeploymentRequirementsSchema = {
|
|
259
|
+
project_id: { type: 'string', required: true, validate: uuidValidator },
|
|
260
|
+
stage: { type: 'string', required: true, validate: createEnumValidator(REQUIREMENT_STAGES) },
|
|
261
|
+
requirement_ids: { type: 'object', required: true },
|
|
262
|
+
};
|
|
263
|
+
export const reorderDeploymentRequirements = async (args, ctx) => {
|
|
264
|
+
const { project_id, stage, requirement_ids } = parseArgs(args, reorderDeploymentRequirementsSchema);
|
|
265
|
+
const apiClient = getApiClient();
|
|
266
|
+
const response = await apiClient.reorderDeploymentRequirements(project_id, {
|
|
267
|
+
stage,
|
|
268
|
+
requirement_ids: requirement_ids,
|
|
269
|
+
});
|
|
270
|
+
if (!response.ok) {
|
|
271
|
+
return { result: { error: response.error || 'Failed to reorder deployment requirements' }, isError: true };
|
|
272
|
+
}
|
|
273
|
+
return { result: response.data };
|
|
274
|
+
};
|
|
275
|
+
// ============================================================================
|
|
254
276
|
// Scheduled Deployments
|
|
255
277
|
// ============================================================================
|
|
256
278
|
export const scheduleDeployment = async (args, ctx) => {
|
|
@@ -387,6 +409,7 @@ export const deploymentHandlers = {
|
|
|
387
409
|
complete_deployment_requirement: completeDeploymentRequirement,
|
|
388
410
|
get_deployment_requirements: getDeploymentRequirements,
|
|
389
411
|
get_deployment_requirements_stats: getDeploymentRequirementsStats,
|
|
412
|
+
reorder_deployment_requirements: reorderDeploymentRequirements,
|
|
390
413
|
// Scheduled deployments
|
|
391
414
|
schedule_deployment: scheduleDeployment,
|
|
392
415
|
get_scheduled_deployments: getScheduledDeployments,
|
|
@@ -159,6 +159,7 @@ export const TOOL_CATEGORIES = {
|
|
|
159
159
|
{ name: 'complete_deployment_requirement', brief: 'Mark step done' },
|
|
160
160
|
{ name: 'get_deployment_requirements', brief: 'List pre-deploy steps' },
|
|
161
161
|
{ name: 'get_deployment_requirements_stats', brief: 'Get requirements statistics' },
|
|
162
|
+
{ name: 'reorder_deployment_requirements', brief: 'Reorder steps within a stage' },
|
|
162
163
|
{ name: 'schedule_deployment', brief: 'Schedule future deployment' },
|
|
163
164
|
{ name: 'get_scheduled_deployments', brief: 'List scheduled deployments' },
|
|
164
165
|
{ name: 'update_scheduled_deployment', brief: 'Update schedule config' },
|
package/dist/handlers/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export * from './roles.js';
|
|
|
29
29
|
export * from './connectors.js';
|
|
30
30
|
export * from './cloud-agents.js';
|
|
31
31
|
export * from './version.js';
|
|
32
|
+
export * from './chat.js';
|
|
32
33
|
import type { HandlerRegistry } from './types.js';
|
|
33
34
|
/**
|
|
34
35
|
* Build the complete handler registry from all modules
|
package/dist/handlers/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export * from './roles.js';
|
|
|
29
29
|
export * from './connectors.js';
|
|
30
30
|
export * from './cloud-agents.js';
|
|
31
31
|
export * from './version.js';
|
|
32
|
+
export * from './chat.js';
|
|
32
33
|
import { milestoneHandlers } from './milestones.js';
|
|
33
34
|
import { sessionHandlers } from './session.js';
|
|
34
35
|
import { ideaHandlers } from './ideas.js';
|
|
@@ -53,6 +54,7 @@ import { roleHandlers } from './roles.js';
|
|
|
53
54
|
import { connectorHandlers } from './connectors.js';
|
|
54
55
|
import { cloudAgentHandlers } from './cloud-agents.js';
|
|
55
56
|
import { versionHandlers } from './version.js';
|
|
57
|
+
import { chatHandlers } from './chat.js';
|
|
56
58
|
/**
|
|
57
59
|
* Build the complete handler registry from all modules
|
|
58
60
|
*/
|
|
@@ -82,5 +84,6 @@ export function buildHandlerRegistry() {
|
|
|
82
84
|
...connectorHandlers,
|
|
83
85
|
...cloudAgentHandlers,
|
|
84
86
|
...versionHandlers,
|
|
87
|
+
...chatHandlers,
|
|
85
88
|
};
|
|
86
89
|
}
|
package/dist/handlers/session.js
CHANGED
|
@@ -15,6 +15,7 @@ import { getApiClient } from '../api-client.js';
|
|
|
15
15
|
import { getAgentGuidelinesTemplate, getAgentGuidelinesSummary } from '../templates/agent-guidelines.js';
|
|
16
16
|
import { getFallbackHelpContent, getAvailableHelpTopics } from '../templates/help-content.js';
|
|
17
17
|
import { normalizeGitUrl } from '../utils.js';
|
|
18
|
+
import { autoPostActivity } from './chat.js';
|
|
18
19
|
/**
|
|
19
20
|
* Simple hash for content change detection.
|
|
20
21
|
*/
|
|
@@ -495,6 +496,12 @@ export const startWorkSession = async (args, ctx) => {
|
|
|
495
496
|
? `start_fallback_activity(project_id: "${data.project.id}", activity: "code_review")`
|
|
496
497
|
: 'signal_idle() — no tasks available and fallback activities are disabled.';
|
|
497
498
|
}
|
|
499
|
+
// Auto-post boot activity to project chat
|
|
500
|
+
if (data.project?.id) {
|
|
501
|
+
const persona = data.persona || 'Agent';
|
|
502
|
+
const nextTaskInfo = data.next_task ? ` Next task: **${data.next_task.title}**` : '';
|
|
503
|
+
void autoPostActivity(data.project.id, `🤖 **${persona}** started a work session.${nextTaskInfo}`, data.session_id);
|
|
504
|
+
}
|
|
498
505
|
return { result };
|
|
499
506
|
};
|
|
500
507
|
export const heartbeat = async (args, ctx) => {
|
package/dist/handlers/tasks.js
CHANGED
|
@@ -25,6 +25,7 @@ import os from 'os';
|
|
|
25
25
|
import { parseArgs, uuidValidator, taskStatusValidator, priorityValidator, progressValidator, minutesValidator, createEnumValidator, ValidationError, } from '../validators.js';
|
|
26
26
|
import { getApiClient } from '../api-client.js';
|
|
27
27
|
import { capPagination, PAGINATION_LIMITS } from '../utils.js';
|
|
28
|
+
import { autoPostActivity } from './chat.js';
|
|
28
29
|
// Auto-detect machine hostname for worktree tracking
|
|
29
30
|
const MACHINE_HOSTNAME = os.hostname();
|
|
30
31
|
// Valid task types
|
|
@@ -481,6 +482,12 @@ export const completeTask = async (args, ctx) => {
|
|
|
481
482
|
timing: 'Remove immediately after PR is created and complete_task is called',
|
|
482
483
|
};
|
|
483
484
|
}
|
|
485
|
+
// Auto-post completion activity to project chat
|
|
486
|
+
if (ctx.session.currentProjectId) {
|
|
487
|
+
const persona = ctx.session.currentPersona || 'Agent';
|
|
488
|
+
const summaryText = summary ? `: ${summary}` : '';
|
|
489
|
+
void autoPostActivity(ctx.session.currentProjectId, `✅ **${persona}** completed a task${summaryText}`, ctx.session.currentSessionId || undefined);
|
|
490
|
+
}
|
|
484
491
|
return { result };
|
|
485
492
|
};
|
|
486
493
|
export const deleteTask = async (args, ctx) => {
|
|
@@ -955,6 +955,13 @@ Get pending deployment requirements.
|
|
|
955
955
|
- project_id (required): Project UUID
|
|
956
956
|
- stage (optional): preparation, deployment, verification, or all
|
|
957
957
|
- status (optional): pending, completed, converted_to_task, or all (default: pending)`,
|
|
958
|
+
reorder_deployment_requirements: `# reorder_deployment_requirements
|
|
959
|
+
Reorder deployment requirements within a stage.
|
|
960
|
+
|
|
961
|
+
**Parameters:**
|
|
962
|
+
- project_id (required): Project UUID
|
|
963
|
+
- stage (required): preparation, deployment, or verification
|
|
964
|
+
- requirement_ids (required): Array of requirement UUIDs in desired order`,
|
|
958
965
|
// Knowledge base
|
|
959
966
|
query_knowledge_base: `# query_knowledge_base
|
|
960
967
|
Query aggregated project knowledge in a single call. Reduces token usage by combining multiple data sources.
|
package/dist/tools/deployment.js
CHANGED
|
@@ -262,6 +262,19 @@ export const deploymentTools = [
|
|
|
262
262
|
required: ['project_id'],
|
|
263
263
|
},
|
|
264
264
|
},
|
|
265
|
+
{
|
|
266
|
+
name: 'reorder_deployment_requirements',
|
|
267
|
+
description: `Reorder deployment requirements within a stage. Pass the requirement IDs in the desired order.`,
|
|
268
|
+
inputSchema: {
|
|
269
|
+
type: 'object',
|
|
270
|
+
properties: {
|
|
271
|
+
project_id: { type: 'string', description: 'Project UUID' },
|
|
272
|
+
stage: { type: 'string', enum: ['preparation', 'deployment', 'verification'], description: 'Deployment stage' },
|
|
273
|
+
requirement_ids: { type: 'array', items: { type: 'string' }, description: 'Ordered array of requirement UUIDs' },
|
|
274
|
+
},
|
|
275
|
+
required: ['project_id', 'stage', 'requirement_ids'],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
265
278
|
{
|
|
266
279
|
name: 'schedule_deployment',
|
|
267
280
|
description: `Schedule a deployment for a specific time. Supports one-time and recurring schedules with auto-trigger or manual trigger modes.`,
|
package/docs/TOOLS.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> Auto-generated from tool definitions. Do not edit manually.
|
|
4
4
|
>
|
|
5
|
-
> Generated: 2026-02-
|
|
5
|
+
> Generated: 2026-02-22
|
|
6
6
|
>
|
|
7
|
-
> Total tools:
|
|
7
|
+
> Total tools: 160
|
|
8
8
|
|
|
9
9
|
## Table of Contents
|
|
10
10
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- [ideas](#ideas) - Feature ideas tracking (6 tools)
|
|
19
19
|
- [findings](#findings) - Audit findings/knowledge base (6 tools)
|
|
20
20
|
- [validation](#validation) - Cross-agent task validation (3 tools)
|
|
21
|
-
- [deployment](#deployment) - Deployment coordination (
|
|
21
|
+
- [deployment](#deployment) - Deployment coordination (18 tools)
|
|
22
22
|
- [fallback](#fallback) - Background activities when idle (4 tools)
|
|
23
23
|
- [bodies_of_work](#bodies-of-work) - Group tasks into bodies of work (12 tools)
|
|
24
24
|
- [sprints](#sprints) - Time-bounded sprints with velocity tracking (11 tools)
|
|
@@ -1192,6 +1192,20 @@ Get aggregate statistics about deployment requirements for a project. Returns to
|
|
|
1192
1192
|
|
|
1193
1193
|
---
|
|
1194
1194
|
|
|
1195
|
+
### reorder_deployment_requirements
|
|
1196
|
+
|
|
1197
|
+
Reorder deployment requirements within a stage. Pass the requirement IDs in the desired order.
|
|
1198
|
+
|
|
1199
|
+
**Parameters:**
|
|
1200
|
+
|
|
1201
|
+
| Parameter | Type | Required | Description |
|
|
1202
|
+
|-----------|------|----------|-------------|
|
|
1203
|
+
| `project_id` | `string` | Yes | Project UUID |
|
|
1204
|
+
| `stage` | `"preparation" | "deployment" | "verification"` | Yes | Deployment stage |
|
|
1205
|
+
| `requirement_ids` | `string[]` | Yes | Ordered array of requirement UUIDs |
|
|
1206
|
+
|
|
1207
|
+
---
|
|
1208
|
+
|
|
1195
1209
|
### schedule_deployment
|
|
1196
1210
|
|
|
1197
1211
|
Schedule a deployment for a specific time. Supports one-time and recurring schedules with auto-trigger or manual trigger modes.
|