paean 0.1.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/LICENSE +21 -0
- package/README.md +296 -0
- package/dist/api/auth.d.ts +71 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +257 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/client.d.ts +37 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +101 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/todo.d.ts +167 -0
- package/dist/api/todo.d.ts.map +1 -0
- package/dist/api/todo.js +137 -0
- package/dist/api/todo.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +36 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/context.d.ts +7 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +155 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/login.d.ts +7 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +108 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +27 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +29 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/tasks.d.ts +7 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +276 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +123 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/resources.d.ts +14 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +166 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +82 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +341 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/utils/config.d.ts +69 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +129 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/output.d.ts +79 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +157 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/project.d.ts +29 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +135 -0
- package/dist/utils/project.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources
|
|
3
|
+
* Define resources that AI agents can read
|
|
4
|
+
*/
|
|
5
|
+
import { getTodoList, getPendingChanges } from '../api/todo.js';
|
|
6
|
+
import { detectProject, getProjectId } from '../utils/project.js';
|
|
7
|
+
import { getConfigValue } from '../utils/config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get available MCP resources
|
|
10
|
+
*/
|
|
11
|
+
export async function getMcpResources() {
|
|
12
|
+
const project = detectProject();
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
uri: 'paean://tasks/pending',
|
|
16
|
+
name: 'Pending Tasks',
|
|
17
|
+
description: `Current pending tasks for ${project.name}`,
|
|
18
|
+
mimeType: 'application/json',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
uri: 'paean://tasks/completed',
|
|
22
|
+
name: 'Completed Tasks',
|
|
23
|
+
description: 'Recently completed tasks',
|
|
24
|
+
mimeType: 'application/json',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
uri: 'paean://tasks/all',
|
|
28
|
+
name: 'All Tasks',
|
|
29
|
+
description: 'All tasks with full details',
|
|
30
|
+
mimeType: 'application/json',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
uri: 'paean://context',
|
|
34
|
+
name: 'Project Context',
|
|
35
|
+
description: 'Full project context including tasks and metadata',
|
|
36
|
+
mimeType: 'application/json',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
uri: 'paean://pending-changes',
|
|
40
|
+
name: 'Pending Changes',
|
|
41
|
+
description: 'AI-suggested task changes awaiting review',
|
|
42
|
+
mimeType: 'application/json',
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Read a specific MCP resource
|
|
48
|
+
*/
|
|
49
|
+
export async function readMcpResource(uri) {
|
|
50
|
+
const project = detectProject();
|
|
51
|
+
const projectId = getProjectId(project);
|
|
52
|
+
switch (uri) {
|
|
53
|
+
case 'paean://tasks/pending': {
|
|
54
|
+
const response = await getTodoList();
|
|
55
|
+
const pendingTasks = response.data.items.filter((t) => t.status === 'pending' || t.status === 'in_progress');
|
|
56
|
+
return {
|
|
57
|
+
project: project.name,
|
|
58
|
+
projectId,
|
|
59
|
+
tasks: pendingTasks.map((t) => ({
|
|
60
|
+
id: t.id,
|
|
61
|
+
content: t.content,
|
|
62
|
+
priority: t.priority,
|
|
63
|
+
status: t.status,
|
|
64
|
+
tags: t.tags,
|
|
65
|
+
dueDate: t.dueDate,
|
|
66
|
+
createdAt: t.createdAt,
|
|
67
|
+
})),
|
|
68
|
+
count: pendingTasks.length,
|
|
69
|
+
retrievedAt: new Date().toISOString(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
case 'paean://tasks/completed': {
|
|
73
|
+
const response = await getTodoList({ status: 'completed' });
|
|
74
|
+
const completedTasks = response.data.items.slice(0, 10); // Last 10 completed
|
|
75
|
+
return {
|
|
76
|
+
project: project.name,
|
|
77
|
+
projectId,
|
|
78
|
+
tasks: completedTasks.map((t) => ({
|
|
79
|
+
id: t.id,
|
|
80
|
+
content: t.content,
|
|
81
|
+
priority: t.priority,
|
|
82
|
+
completedAt: t.updatedAt,
|
|
83
|
+
})),
|
|
84
|
+
count: completedTasks.length,
|
|
85
|
+
retrievedAt: new Date().toISOString(),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
case 'paean://tasks/all': {
|
|
89
|
+
const response = await getTodoList();
|
|
90
|
+
return {
|
|
91
|
+
project: project.name,
|
|
92
|
+
projectId,
|
|
93
|
+
tasks: response.data.items,
|
|
94
|
+
stats: response.data.stats,
|
|
95
|
+
retrievedAt: new Date().toISOString(),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
case 'paean://context': {
|
|
99
|
+
const todoResponse = await getTodoList();
|
|
100
|
+
const pendingChanges = await getPendingChanges();
|
|
101
|
+
const pendingTasks = todoResponse.data.items.filter((t) => t.status === 'pending' || t.status === 'in_progress');
|
|
102
|
+
const recentCompleted = todoResponse.data.items
|
|
103
|
+
.filter((t) => t.status === 'completed')
|
|
104
|
+
.slice(0, 5);
|
|
105
|
+
return {
|
|
106
|
+
project: {
|
|
107
|
+
name: project.name,
|
|
108
|
+
type: project.type,
|
|
109
|
+
path: project.path,
|
|
110
|
+
id: projectId,
|
|
111
|
+
gitBranch: project.gitBranch,
|
|
112
|
+
},
|
|
113
|
+
user: {
|
|
114
|
+
email: getConfigValue('email'),
|
|
115
|
+
},
|
|
116
|
+
tasks: {
|
|
117
|
+
pending: pendingTasks.map((t) => ({
|
|
118
|
+
id: t.id,
|
|
119
|
+
content: t.content,
|
|
120
|
+
priority: t.priority,
|
|
121
|
+
status: t.status,
|
|
122
|
+
tags: t.tags,
|
|
123
|
+
dueDate: t.dueDate,
|
|
124
|
+
sourceContext: t.sourceContext,
|
|
125
|
+
})),
|
|
126
|
+
recentlyCompleted: recentCompleted.map((t) => ({
|
|
127
|
+
id: t.id,
|
|
128
|
+
content: t.content,
|
|
129
|
+
completedAt: t.updatedAt,
|
|
130
|
+
})),
|
|
131
|
+
stats: todoResponse.data.stats,
|
|
132
|
+
},
|
|
133
|
+
pendingChanges: pendingChanges.data.filter((c) => !c.isExpired).length,
|
|
134
|
+
instructions: {
|
|
135
|
+
onComplete: 'After completing a task, call the paean_complete_task tool with the task ID and a brief summary.',
|
|
136
|
+
onNewTask: 'If you discover additional work needed, call the paean_create_task tool.',
|
|
137
|
+
priority: 'Focus on high priority tasks first, then medium, then low.',
|
|
138
|
+
},
|
|
139
|
+
retrievedAt: new Date().toISOString(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
case 'paean://pending-changes': {
|
|
143
|
+
const response = await getPendingChanges();
|
|
144
|
+
return {
|
|
145
|
+
project: project.name,
|
|
146
|
+
projectId,
|
|
147
|
+
changes: response.data.map((c) => ({
|
|
148
|
+
id: c.id,
|
|
149
|
+
summary: c.summary,
|
|
150
|
+
status: c.status,
|
|
151
|
+
changeCount: c.changeCount,
|
|
152
|
+
operations: c.operationCounts,
|
|
153
|
+
sourceNote: c.sourceNoteTitle,
|
|
154
|
+
createdAt: c.createdAt,
|
|
155
|
+
isExpired: c.isExpired,
|
|
156
|
+
})),
|
|
157
|
+
count: response.data.length,
|
|
158
|
+
pendingCount: response.data.filter((c) => c.status === 'pending' && !c.isExpired).length,
|
|
159
|
+
retrievedAt: new Date().toISOString(),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
default:
|
|
163
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server
|
|
3
|
+
* Model Context Protocol server for AI agent integration
|
|
4
|
+
*/
|
|
5
|
+
export interface McpServerOptions {
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Start the MCP server
|
|
10
|
+
*/
|
|
11
|
+
export declare function startMcpServer(options?: McpServerOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFlF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server
|
|
3
|
+
* Model Context Protocol server for AI agent integration
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
7
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import { getMcpResources, readMcpResource } from './resources.js';
|
|
9
|
+
import { getMcpTools, executeMcpTool } from './tools.js';
|
|
10
|
+
/**
|
|
11
|
+
* Start the MCP server
|
|
12
|
+
*/
|
|
13
|
+
export async function startMcpServer(options = {}) {
|
|
14
|
+
const server = new Server({
|
|
15
|
+
name: 'paean',
|
|
16
|
+
version: '0.1.0',
|
|
17
|
+
}, {
|
|
18
|
+
capabilities: {
|
|
19
|
+
resources: {},
|
|
20
|
+
tools: {},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
// Debug logging
|
|
24
|
+
const debug = (message, ...args) => {
|
|
25
|
+
if (options.debug) {
|
|
26
|
+
console.error(`[MCP Debug] ${message}`, ...args);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
// Handle list resources request
|
|
30
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
31
|
+
debug('Listing resources');
|
|
32
|
+
const resources = await getMcpResources();
|
|
33
|
+
return { resources };
|
|
34
|
+
});
|
|
35
|
+
// Handle read resource request
|
|
36
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
37
|
+
debug('Reading resource:', request.params.uri);
|
|
38
|
+
const content = await readMcpResource(request.params.uri);
|
|
39
|
+
return {
|
|
40
|
+
contents: [
|
|
41
|
+
{
|
|
42
|
+
uri: request.params.uri,
|
|
43
|
+
mimeType: 'application/json',
|
|
44
|
+
text: JSON.stringify(content, null, 2),
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
// Handle list tools request
|
|
50
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
51
|
+
debug('Listing tools');
|
|
52
|
+
const tools = getMcpTools();
|
|
53
|
+
return { tools };
|
|
54
|
+
});
|
|
55
|
+
// Handle call tool request
|
|
56
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
57
|
+
debug('Calling tool:', request.params.name, request.params.arguments);
|
|
58
|
+
const result = await executeMcpTool(request.params.name, request.params.arguments);
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: JSON.stringify(result, null, 2),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
// Error handling
|
|
69
|
+
server.onerror = (error) => {
|
|
70
|
+
console.error('[MCP Error]', error);
|
|
71
|
+
};
|
|
72
|
+
// Connect to stdio transport
|
|
73
|
+
const transport = new StdioServerTransport();
|
|
74
|
+
await server.connect(transport);
|
|
75
|
+
debug('MCP server started');
|
|
76
|
+
// Keep server running
|
|
77
|
+
process.on('SIGINT', () => {
|
|
78
|
+
debug('Shutting down MCP server');
|
|
79
|
+
process.exit(0);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools
|
|
3
|
+
* Define tools that AI agents can execute
|
|
4
|
+
*/
|
|
5
|
+
import { type Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get available MCP tools
|
|
8
|
+
*/
|
|
9
|
+
export declare function getMcpTools(): Tool[];
|
|
10
|
+
/**
|
|
11
|
+
* Execute an MCP tool
|
|
12
|
+
*/
|
|
13
|
+
export declare function executeMcpTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
14
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAW/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CAkIpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAkNlB"}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools
|
|
3
|
+
* Define tools that AI agents can execute
|
|
4
|
+
*/
|
|
5
|
+
import { completeTodoItem, createTodoItem, updateTodoItem, getTodoList, acceptPendingChange, rejectPendingChange, } from '../api/todo.js';
|
|
6
|
+
import { detectProject, getProjectId } from '../utils/project.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get available MCP tools
|
|
9
|
+
*/
|
|
10
|
+
export function getMcpTools() {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
name: 'paean_complete_task',
|
|
14
|
+
description: 'Mark a task as completed. Call this after successfully completing a task.',
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
taskId: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'The ID of the task to complete',
|
|
21
|
+
},
|
|
22
|
+
summary: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'A brief summary of what was done to complete the task',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
required: ['taskId'],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'paean_create_task',
|
|
32
|
+
description: 'Create a new task. Use this when you discover additional work that needs to be done.',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
content: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'The task description',
|
|
39
|
+
},
|
|
40
|
+
priority: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
enum: ['high', 'medium', 'low'],
|
|
43
|
+
description: 'Task priority level',
|
|
44
|
+
},
|
|
45
|
+
tags: {
|
|
46
|
+
type: 'array',
|
|
47
|
+
items: { type: 'string' },
|
|
48
|
+
description: 'Optional tags to categorize the task',
|
|
49
|
+
},
|
|
50
|
+
sourceContext: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Context about why this task was created',
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
required: ['content'],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'paean_update_task',
|
|
60
|
+
description: 'Update an existing task (status, priority, or content)',
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
properties: {
|
|
64
|
+
taskId: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'The ID of the task to update',
|
|
67
|
+
},
|
|
68
|
+
status: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
enum: ['pending', 'in_progress'],
|
|
71
|
+
description: 'New task status',
|
|
72
|
+
},
|
|
73
|
+
priority: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
enum: ['high', 'medium', 'low'],
|
|
76
|
+
description: 'New task priority',
|
|
77
|
+
},
|
|
78
|
+
content: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Updated task content',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ['taskId'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'paean_list_tasks',
|
|
88
|
+
description: 'List tasks with optional filtering',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
status: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
enum: ['all', 'pending', 'in_progress', 'completed'],
|
|
95
|
+
description: 'Filter by task status',
|
|
96
|
+
},
|
|
97
|
+
priority: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
enum: ['high', 'medium', 'low'],
|
|
100
|
+
description: 'Filter by priority',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'paean_accept_change',
|
|
107
|
+
description: 'Accept a pending AI-suggested change',
|
|
108
|
+
inputSchema: {
|
|
109
|
+
type: 'object',
|
|
110
|
+
properties: {
|
|
111
|
+
changeId: {
|
|
112
|
+
type: 'number',
|
|
113
|
+
description: 'The ID of the pending change to accept',
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
required: ['changeId'],
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'paean_reject_change',
|
|
121
|
+
description: 'Reject a pending AI-suggested change',
|
|
122
|
+
inputSchema: {
|
|
123
|
+
type: 'object',
|
|
124
|
+
properties: {
|
|
125
|
+
changeId: {
|
|
126
|
+
type: 'number',
|
|
127
|
+
description: 'The ID of the pending change to reject',
|
|
128
|
+
},
|
|
129
|
+
reason: {
|
|
130
|
+
type: 'string',
|
|
131
|
+
description: 'Reason for rejecting the change',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
required: ['changeId'],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Execute an MCP tool
|
|
141
|
+
*/
|
|
142
|
+
export async function executeMcpTool(toolName, args) {
|
|
143
|
+
const project = detectProject();
|
|
144
|
+
const projectId = getProjectId(project);
|
|
145
|
+
switch (toolName) {
|
|
146
|
+
case 'paean_complete_task': {
|
|
147
|
+
const taskId = args.taskId;
|
|
148
|
+
const summary = args.summary;
|
|
149
|
+
if (!taskId) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: 'taskId is required',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
const result = await completeTodoItem(taskId, summary);
|
|
157
|
+
return {
|
|
158
|
+
success: true,
|
|
159
|
+
message: 'Task completed successfully',
|
|
160
|
+
task: {
|
|
161
|
+
id: result.data.id,
|
|
162
|
+
content: result.data.content,
|
|
163
|
+
status: result.data.status,
|
|
164
|
+
},
|
|
165
|
+
project: project.name,
|
|
166
|
+
projectId,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
error: error instanceof Error ? error.message : 'Failed to complete task',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
case 'paean_create_task': {
|
|
177
|
+
const content = args.content;
|
|
178
|
+
const priority = args.priority || 'medium';
|
|
179
|
+
const tags = args.tags;
|
|
180
|
+
const sourceContext = args.sourceContext;
|
|
181
|
+
if (!content) {
|
|
182
|
+
return {
|
|
183
|
+
success: false,
|
|
184
|
+
error: 'content is required',
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const result = await createTodoItem({
|
|
189
|
+
content,
|
|
190
|
+
priority,
|
|
191
|
+
tags,
|
|
192
|
+
sourceContext,
|
|
193
|
+
});
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
message: 'Task created successfully',
|
|
197
|
+
task: {
|
|
198
|
+
id: result.data.id,
|
|
199
|
+
content: result.data.content,
|
|
200
|
+
priority: result.data.priority,
|
|
201
|
+
status: result.data.status,
|
|
202
|
+
},
|
|
203
|
+
project: project.name,
|
|
204
|
+
projectId,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: error instanceof Error ? error.message : 'Failed to create task',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
case 'paean_update_task': {
|
|
215
|
+
const taskId = args.taskId;
|
|
216
|
+
const updates = {};
|
|
217
|
+
if (args.status)
|
|
218
|
+
updates.status = args.status;
|
|
219
|
+
if (args.priority)
|
|
220
|
+
updates.priority = args.priority;
|
|
221
|
+
if (args.content)
|
|
222
|
+
updates.content = args.content;
|
|
223
|
+
if (!taskId) {
|
|
224
|
+
return {
|
|
225
|
+
success: false,
|
|
226
|
+
error: 'taskId is required',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
if (Object.keys(updates).length === 0) {
|
|
230
|
+
return {
|
|
231
|
+
success: false,
|
|
232
|
+
error: 'At least one update field is required (status, priority, or content)',
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
const result = await updateTodoItem(taskId, updates);
|
|
237
|
+
return {
|
|
238
|
+
success: true,
|
|
239
|
+
message: 'Task updated successfully',
|
|
240
|
+
task: {
|
|
241
|
+
id: result.data.id,
|
|
242
|
+
content: result.data.content,
|
|
243
|
+
priority: result.data.priority,
|
|
244
|
+
status: result.data.status,
|
|
245
|
+
},
|
|
246
|
+
project: project.name,
|
|
247
|
+
projectId,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return {
|
|
252
|
+
success: false,
|
|
253
|
+
error: error instanceof Error ? error.message : 'Failed to update task',
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
case 'paean_list_tasks': {
|
|
258
|
+
const status = args.status;
|
|
259
|
+
const priority = args.priority;
|
|
260
|
+
try {
|
|
261
|
+
const result = await getTodoList({
|
|
262
|
+
status: status,
|
|
263
|
+
priority: priority,
|
|
264
|
+
});
|
|
265
|
+
return {
|
|
266
|
+
success: true,
|
|
267
|
+
tasks: result.data.items.map((t) => ({
|
|
268
|
+
id: t.id,
|
|
269
|
+
content: t.content,
|
|
270
|
+
priority: t.priority,
|
|
271
|
+
status: t.status,
|
|
272
|
+
tags: t.tags,
|
|
273
|
+
dueDate: t.dueDate,
|
|
274
|
+
})),
|
|
275
|
+
stats: result.data.stats,
|
|
276
|
+
project: project.name,
|
|
277
|
+
projectId,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
return {
|
|
282
|
+
success: false,
|
|
283
|
+
error: error instanceof Error ? error.message : 'Failed to list tasks',
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
case 'paean_accept_change': {
|
|
288
|
+
const changeId = args.changeId;
|
|
289
|
+
if (!changeId) {
|
|
290
|
+
return {
|
|
291
|
+
success: false,
|
|
292
|
+
error: 'changeId is required',
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
try {
|
|
296
|
+
await acceptPendingChange(changeId);
|
|
297
|
+
return {
|
|
298
|
+
success: true,
|
|
299
|
+
message: 'Change accepted successfully',
|
|
300
|
+
changeId,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
return {
|
|
305
|
+
success: false,
|
|
306
|
+
error: error instanceof Error ? error.message : 'Failed to accept change',
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
case 'paean_reject_change': {
|
|
311
|
+
const changeId = args.changeId;
|
|
312
|
+
const reason = args.reason;
|
|
313
|
+
if (!changeId) {
|
|
314
|
+
return {
|
|
315
|
+
success: false,
|
|
316
|
+
error: 'changeId is required',
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
await rejectPendingChange(changeId, reason);
|
|
321
|
+
return {
|
|
322
|
+
success: true,
|
|
323
|
+
message: 'Change rejected successfully',
|
|
324
|
+
changeId,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
return {
|
|
329
|
+
success: false,
|
|
330
|
+
error: error instanceof Error ? error.message : 'Failed to reject change',
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
default:
|
|
335
|
+
return {
|
|
336
|
+
success: false,
|
|
337
|
+
error: `Unknown tool: ${toolName}`,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|