@dobbyai/mcp-external 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +527 -0
- package/dist/connectors/claude-desktop.d.ts +26 -0
- package/dist/connectors/claude-desktop.d.ts.map +1 -0
- package/dist/connectors/claude-desktop.js +133 -0
- package/dist/connectors/claude-desktop.js.map +1 -0
- package/dist/connectors/cursor.d.ts +25 -0
- package/dist/connectors/cursor.d.ts.map +1 -0
- package/dist/connectors/cursor.js +115 -0
- package/dist/connectors/cursor.js.map +1 -0
- package/dist/connectors/index.d.ts +11 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +11 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/setup.d.ts +12 -0
- package/dist/connectors/setup.d.ts.map +1 -0
- package/dist/connectors/setup.js +230 -0
- package/dist/connectors/setup.js.map +1 -0
- package/dist/connectors/vscode.d.ts +25 -0
- package/dist/connectors/vscode.d.ts.map +1 -0
- package/dist/connectors/vscode.js +63 -0
- package/dist/connectors/vscode.js.map +1 -0
- package/dist/connectors/windsurf.d.ts +25 -0
- package/dist/connectors/windsurf.d.ts.map +1 -0
- package/dist/connectors/windsurf.js +115 -0
- package/dist/connectors/windsurf.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +185 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dobby-client.d.ts +195 -0
- package/dist/lib/dobby-client.d.ts.map +1 -0
- package/dist/lib/dobby-client.js +219 -0
- package/dist/lib/dobby-client.js.map +1 -0
- package/dist/prompts/index.d.ts +25 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +208 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +27 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +182 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/tools/approvals.d.ts +104 -0
- package/dist/tools/approvals.d.ts.map +1 -0
- package/dist/tools/approvals.js +164 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/index.d.ts +260 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +215 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/messages.d.ts +68 -0
- package/dist/tools/messages.d.ts.map +1 -0
- package/dist/tools/messages.js +105 -0
- package/dist/tools/messages.js.map +1 -0
- package/dist/tools/tasks.d.ts +180 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +344 -0
- package/dist/tools/tasks.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources
|
|
3
|
+
*
|
|
4
|
+
* Read-only data sources that can be accessed by clients.
|
|
5
|
+
* Resources use URI schemes like tasks://list, approvals://pending
|
|
6
|
+
*/
|
|
7
|
+
// ============================================
|
|
8
|
+
// Resource Definitions
|
|
9
|
+
// ============================================
|
|
10
|
+
export const resourceDefinitions = [
|
|
11
|
+
{
|
|
12
|
+
uri: 'tasks://list',
|
|
13
|
+
name: 'All Tasks',
|
|
14
|
+
description: 'List of all tasks in the current tenant',
|
|
15
|
+
mimeType: 'application/json',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
uri: 'tasks://pending',
|
|
19
|
+
name: 'Pending Tasks',
|
|
20
|
+
description: 'Tasks waiting to be started',
|
|
21
|
+
mimeType: 'application/json',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
uri: 'tasks://in-progress',
|
|
25
|
+
name: 'In Progress Tasks',
|
|
26
|
+
description: 'Tasks currently being worked on by agents',
|
|
27
|
+
mimeType: 'application/json',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
uri: 'tasks://completed',
|
|
31
|
+
name: 'Completed Tasks',
|
|
32
|
+
description: 'Successfully completed tasks',
|
|
33
|
+
mimeType: 'application/json',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
uri: 'approvals://pending',
|
|
37
|
+
name: 'Pending Approvals',
|
|
38
|
+
description: 'Approval requests waiting for your response',
|
|
39
|
+
mimeType: 'application/json',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
// ============================================
|
|
43
|
+
// Resource Templates (Dynamic URIs)
|
|
44
|
+
// ============================================
|
|
45
|
+
export const resourceTemplates = [
|
|
46
|
+
{
|
|
47
|
+
uriTemplate: 'tasks://{task_id}',
|
|
48
|
+
name: 'Task Details',
|
|
49
|
+
description: 'Detailed information about a specific task',
|
|
50
|
+
mimeType: 'application/json',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
uriTemplate: 'tasks://{task_id}/messages',
|
|
54
|
+
name: 'Task Messages',
|
|
55
|
+
description: 'Conversation messages for a specific task',
|
|
56
|
+
mimeType: 'application/json',
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
// ============================================
|
|
60
|
+
// Resource Handler
|
|
61
|
+
// ============================================
|
|
62
|
+
export async function handleResourceRead(uri, client) {
|
|
63
|
+
const url = new URL(uri);
|
|
64
|
+
const scheme = url.protocol.replace(':', '');
|
|
65
|
+
const path = url.pathname.replace('//', '');
|
|
66
|
+
switch (scheme) {
|
|
67
|
+
case 'tasks': {
|
|
68
|
+
return handleTasksResource(path, client);
|
|
69
|
+
}
|
|
70
|
+
case 'approvals': {
|
|
71
|
+
return handleApprovalsResource(path, client);
|
|
72
|
+
}
|
|
73
|
+
default:
|
|
74
|
+
throw new Error(`Unknown resource scheme: ${scheme}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ============================================
|
|
78
|
+
// Tasks Resources
|
|
79
|
+
// ============================================
|
|
80
|
+
async function handleTasksResource(path, client) {
|
|
81
|
+
// Handle list/filtered lists
|
|
82
|
+
if (path === 'list' || path === '') {
|
|
83
|
+
const tasks = await client.listTasks({ limit: 100 });
|
|
84
|
+
return {
|
|
85
|
+
contents: [
|
|
86
|
+
{
|
|
87
|
+
uri: 'tasks://list',
|
|
88
|
+
mimeType: 'application/json',
|
|
89
|
+
text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (path === 'pending') {
|
|
95
|
+
const tasks = await client.listTasks({ status: 'pending' });
|
|
96
|
+
return {
|
|
97
|
+
contents: [
|
|
98
|
+
{
|
|
99
|
+
uri: 'tasks://pending',
|
|
100
|
+
mimeType: 'application/json',
|
|
101
|
+
text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (path === 'in-progress') {
|
|
107
|
+
const tasks = await client.listTasks({ status: 'in_progress' });
|
|
108
|
+
return {
|
|
109
|
+
contents: [
|
|
110
|
+
{
|
|
111
|
+
uri: 'tasks://in-progress',
|
|
112
|
+
mimeType: 'application/json',
|
|
113
|
+
text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (path === 'completed') {
|
|
119
|
+
const tasks = await client.listTasks({ status: 'completed' });
|
|
120
|
+
return {
|
|
121
|
+
contents: [
|
|
122
|
+
{
|
|
123
|
+
uri: 'tasks://completed',
|
|
124
|
+
mimeType: 'application/json',
|
|
125
|
+
text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// Handle specific task: tasks://{task_id}
|
|
131
|
+
const parts = path.split('/');
|
|
132
|
+
const taskId = parts[0];
|
|
133
|
+
if (parts.length === 1) {
|
|
134
|
+
// Get task details
|
|
135
|
+
const task = await client.getTask(taskId);
|
|
136
|
+
if (!task) {
|
|
137
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
contents: [
|
|
141
|
+
{
|
|
142
|
+
uri: `tasks://${taskId}`,
|
|
143
|
+
mimeType: 'application/json',
|
|
144
|
+
text: JSON.stringify(task, null, 2),
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (parts[1] === 'messages') {
|
|
150
|
+
// Get task messages
|
|
151
|
+
const messages = await client.getMessages(taskId);
|
|
152
|
+
return {
|
|
153
|
+
contents: [
|
|
154
|
+
{
|
|
155
|
+
uri: `tasks://${taskId}/messages`,
|
|
156
|
+
mimeType: 'application/json',
|
|
157
|
+
text: JSON.stringify({ messages, count: messages.length }, null, 2),
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
throw new Error(`Unknown tasks resource path: ${path}`);
|
|
163
|
+
}
|
|
164
|
+
// ============================================
|
|
165
|
+
// Approvals Resources
|
|
166
|
+
// ============================================
|
|
167
|
+
async function handleApprovalsResource(path, client) {
|
|
168
|
+
if (path === 'pending' || path === '') {
|
|
169
|
+
const approvals = await client.getPendingApprovals();
|
|
170
|
+
return {
|
|
171
|
+
contents: [
|
|
172
|
+
{
|
|
173
|
+
uri: 'approvals://pending',
|
|
174
|
+
mimeType: 'application/json',
|
|
175
|
+
text: JSON.stringify({ approvals, count: approvals.length }, null, 2),
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
throw new Error(`Unknown approvals resource path: ${path}`);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Workflow Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for handling approval requests (Human-in-the-Loop).
|
|
5
|
+
*/
|
|
6
|
+
import { DobbyClient } from '../lib/dobby-client.js';
|
|
7
|
+
export declare const approvalTools: {
|
|
8
|
+
get_pending_approvals: {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object";
|
|
13
|
+
properties: {};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
approve_task: {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object";
|
|
21
|
+
properties: {
|
|
22
|
+
approval_id: {
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
note: {
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
required: string[];
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
reject_task: {
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
inputSchema: {
|
|
38
|
+
type: "object";
|
|
39
|
+
properties: {
|
|
40
|
+
approval_id: {
|
|
41
|
+
type: string;
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
reason: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
required: string[];
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
request_changes: {
|
|
53
|
+
name: string;
|
|
54
|
+
description: string;
|
|
55
|
+
inputSchema: {
|
|
56
|
+
type: "object";
|
|
57
|
+
properties: {
|
|
58
|
+
approval_id: {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
changes: {
|
|
63
|
+
type: string;
|
|
64
|
+
description: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
required: string[];
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export declare function handleGetPendingApprovals(client: DobbyClient): Promise<{
|
|
72
|
+
content: {
|
|
73
|
+
type: "text";
|
|
74
|
+
text: string;
|
|
75
|
+
}[];
|
|
76
|
+
}>;
|
|
77
|
+
export declare function handleApproveTask(client: DobbyClient, args: {
|
|
78
|
+
approval_id: string;
|
|
79
|
+
note?: string;
|
|
80
|
+
}): Promise<{
|
|
81
|
+
content: {
|
|
82
|
+
type: "text";
|
|
83
|
+
text: string;
|
|
84
|
+
}[];
|
|
85
|
+
}>;
|
|
86
|
+
export declare function handleRejectTask(client: DobbyClient, args: {
|
|
87
|
+
approval_id: string;
|
|
88
|
+
reason?: string;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
content: {
|
|
91
|
+
type: "text";
|
|
92
|
+
text: string;
|
|
93
|
+
}[];
|
|
94
|
+
}>;
|
|
95
|
+
export declare function handleRequestChanges(client: DobbyClient, args: {
|
|
96
|
+
approval_id: string;
|
|
97
|
+
changes: string;
|
|
98
|
+
}): Promise<{
|
|
99
|
+
content: {
|
|
100
|
+
type: "text";
|
|
101
|
+
text: string;
|
|
102
|
+
}[];
|
|
103
|
+
}>;
|
|
104
|
+
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEzB,CAAC;AAMF,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW;;;;;GAyClE;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;;;GAYF;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;;;;GAYF;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;GAgBF"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Workflow Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for handling approval requests (Human-in-the-Loop).
|
|
5
|
+
*/
|
|
6
|
+
// ============================================
|
|
7
|
+
// Tool Definitions
|
|
8
|
+
// ============================================
|
|
9
|
+
export const approvalTools = {
|
|
10
|
+
// Get pending approvals
|
|
11
|
+
get_pending_approvals: {
|
|
12
|
+
name: 'get_pending_approvals',
|
|
13
|
+
description: 'Get all pending approval requests that need your attention',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
// Approve a task/request (triggers automatic PR merge)
|
|
20
|
+
approve_task: {
|
|
21
|
+
name: 'approve_task',
|
|
22
|
+
description: 'Approve a pending approval request. The agent will automatically merge the PR and complete the task.',
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
approval_id: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: 'The approval ID to approve',
|
|
29
|
+
},
|
|
30
|
+
note: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Optional note to include with the approval',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: ['approval_id'],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
// Reject a task/request (triggers automatic retry with feedback)
|
|
39
|
+
reject_task: {
|
|
40
|
+
name: 'reject_task',
|
|
41
|
+
description: 'Reject a pending approval request. The agent will automatically retry and address your feedback.',
|
|
42
|
+
inputSchema: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
properties: {
|
|
45
|
+
approval_id: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'The approval ID to reject',
|
|
48
|
+
},
|
|
49
|
+
reason: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Feedback explaining what changes are needed (the agent will use this to improve)',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
required: ['approval_id'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
// Request changes
|
|
58
|
+
request_changes: {
|
|
59
|
+
name: 'request_changes',
|
|
60
|
+
description: 'Request changes to a pending approval (PR needs modifications)',
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
properties: {
|
|
64
|
+
approval_id: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'The approval ID',
|
|
67
|
+
},
|
|
68
|
+
changes: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
description: 'Description of the changes needed',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
required: ['approval_id', 'changes'],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
// ============================================
|
|
78
|
+
// Tool Handlers
|
|
79
|
+
// ============================================
|
|
80
|
+
export async function handleGetPendingApprovals(client) {
|
|
81
|
+
const approvals = await client.getPendingApprovals();
|
|
82
|
+
if (approvals.length === 0) {
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: 'text',
|
|
87
|
+
text: '⨠No pending approvals! All caught up.',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const approvalList = approvals
|
|
93
|
+
.map((approval, i) => {
|
|
94
|
+
const typeEmoji = {
|
|
95
|
+
pr_create: 'š',
|
|
96
|
+
pr_merge: 'š',
|
|
97
|
+
deploy: 'š',
|
|
98
|
+
destructive: 'ā ļø',
|
|
99
|
+
}[approval.approval_type] || 'ā';
|
|
100
|
+
const timeSince = getTimeSince(new Date(approval.created_at));
|
|
101
|
+
return `${i + 1}. ${typeEmoji} **${approval.approval_type.replace('_', ' ').toUpperCase()}**
|
|
102
|
+
ID: \`${approval.id}\`
|
|
103
|
+
Task: \`${approval.task_id}\`
|
|
104
|
+
${approval.description}
|
|
105
|
+
ā° Waiting: ${timeSince}`;
|
|
106
|
+
})
|
|
107
|
+
.join('\n\n');
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: 'text',
|
|
112
|
+
text: `# š Pending Approvals (${approvals.length})\n\n${approvalList}\n\n---\nUse \`approve_task\` or \`reject_task\` to respond.`,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export async function handleApproveTask(client, args) {
|
|
118
|
+
const result = await client.approveTask(args.approval_id, args.note);
|
|
119
|
+
return {
|
|
120
|
+
content: [
|
|
121
|
+
{
|
|
122
|
+
type: 'text',
|
|
123
|
+
text: `ā
**Approved!** ${args.approval_id}${args.note ? `\n\nNote: "${args.note}"` : ''}\n\nš The agent is now merging the PR automatically. Use \`get_task_timeline\` to track progress.`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export async function handleRejectTask(client, args) {
|
|
129
|
+
const result = await client.rejectTask(args.approval_id, args.reason);
|
|
130
|
+
return {
|
|
131
|
+
content: [
|
|
132
|
+
{
|
|
133
|
+
type: 'text',
|
|
134
|
+
text: `ā **Rejected!** ${args.approval_id}${args.reason ? `\n\nš¬ Feedback: "${args.reason}"` : ''}\n\nš The agent is now retrying and will address your feedback. Use \`get_task_timeline\` to track progress.`,
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export async function handleRequestChanges(client, args) {
|
|
140
|
+
// For now, this is implemented as a rejection with feedback
|
|
141
|
+
await client.rejectTask(args.approval_id, `Changes requested: ${args.changes}`);
|
|
142
|
+
return {
|
|
143
|
+
content: [
|
|
144
|
+
{
|
|
145
|
+
type: 'text',
|
|
146
|
+
text: `š Changes requested for: ${args.approval_id}\n\n"${args.changes}"\n\nThe agent will make the requested modifications.`,
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// ============================================
|
|
152
|
+
// Helpers
|
|
153
|
+
// ============================================
|
|
154
|
+
function getTimeSince(date) {
|
|
155
|
+
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
156
|
+
if (seconds < 60)
|
|
157
|
+
return `${seconds} seconds ago`;
|
|
158
|
+
if (seconds < 3600)
|
|
159
|
+
return `${Math.floor(seconds / 60)} minutes ago`;
|
|
160
|
+
if (seconds < 86400)
|
|
161
|
+
return `${Math.floor(seconds / 3600)} hours ago`;
|
|
162
|
+
return `${Math.floor(seconds / 86400)} days ago`;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"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"}
|