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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +296 -0
  3. package/dist/api/auth.d.ts +71 -0
  4. package/dist/api/auth.d.ts.map +1 -0
  5. package/dist/api/auth.js +257 -0
  6. package/dist/api/auth.js.map +1 -0
  7. package/dist/api/client.d.ts +37 -0
  8. package/dist/api/client.d.ts.map +1 -0
  9. package/dist/api/client.js +101 -0
  10. package/dist/api/client.js.map +1 -0
  11. package/dist/api/todo.d.ts +167 -0
  12. package/dist/api/todo.d.ts.map +1 -0
  13. package/dist/api/todo.js +137 -0
  14. package/dist/api/todo.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +36 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/commands/context.d.ts +7 -0
  20. package/dist/commands/context.d.ts.map +1 -0
  21. package/dist/commands/context.js +155 -0
  22. package/dist/commands/context.js.map +1 -0
  23. package/dist/commands/login.d.ts +7 -0
  24. package/dist/commands/login.d.ts.map +1 -0
  25. package/dist/commands/login.js +108 -0
  26. package/dist/commands/login.js.map +1 -0
  27. package/dist/commands/logout.d.ts +7 -0
  28. package/dist/commands/logout.d.ts.map +1 -0
  29. package/dist/commands/logout.js +27 -0
  30. package/dist/commands/logout.js.map +1 -0
  31. package/dist/commands/serve.d.ts +7 -0
  32. package/dist/commands/serve.d.ts.map +1 -0
  33. package/dist/commands/serve.js +29 -0
  34. package/dist/commands/serve.js.map +1 -0
  35. package/dist/commands/tasks.d.ts +7 -0
  36. package/dist/commands/tasks.d.ts.map +1 -0
  37. package/dist/commands/tasks.js +276 -0
  38. package/dist/commands/tasks.js.map +1 -0
  39. package/dist/commands/validate.d.ts +7 -0
  40. package/dist/commands/validate.d.ts.map +1 -0
  41. package/dist/commands/validate.js +123 -0
  42. package/dist/commands/validate.js.map +1 -0
  43. package/dist/index.d.ts +13 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +19 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mcp/resources.d.ts +14 -0
  48. package/dist/mcp/resources.d.ts.map +1 -0
  49. package/dist/mcp/resources.js +166 -0
  50. package/dist/mcp/resources.js.map +1 -0
  51. package/dist/mcp/server.d.ts +12 -0
  52. package/dist/mcp/server.d.ts.map +1 -0
  53. package/dist/mcp/server.js +82 -0
  54. package/dist/mcp/server.js.map +1 -0
  55. package/dist/mcp/tools.d.ts +14 -0
  56. package/dist/mcp/tools.d.ts.map +1 -0
  57. package/dist/mcp/tools.js +341 -0
  58. package/dist/mcp/tools.js.map +1 -0
  59. package/dist/utils/config.d.ts +69 -0
  60. package/dist/utils/config.d.ts.map +1 -0
  61. package/dist/utils/config.js +129 -0
  62. package/dist/utils/config.js.map +1 -0
  63. package/dist/utils/output.d.ts +79 -0
  64. package/dist/utils/output.d.ts.map +1 -0
  65. package/dist/utils/output.js +157 -0
  66. package/dist/utils/output.js.map +1 -0
  67. package/dist/utils/project.d.ts +29 -0
  68. package/dist/utils/project.d.ts.map +1 -0
  69. package/dist/utils/project.js +135 -0
  70. package/dist/utils/project.js.map +1 -0
  71. package/package.json +72 -0
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Tasks Command
3
+ * View and manage todo tasks
4
+ */
5
+ import { Command } from 'commander';
6
+ import { getTodoList, createTodoItem, completeTodoItem, updateTodoItem, deleteTodoItem, getPendingChanges, acceptPendingChange, rejectPendingChange, } from '../api/todo.js';
7
+ import { isAuthenticated } from '../utils/config.js';
8
+ import * as output from '../utils/output.js';
9
+ export const tasksCommand = new Command('tasks')
10
+ .description('View and manage tasks')
11
+ .option('--json', 'Output in JSON format')
12
+ .option('--status <status>', 'Filter by status (pending, completed, in_progress, cancelled, all)')
13
+ .option('--priority <priority>', 'Filter by priority (high, medium, low)')
14
+ .action(async (options) => {
15
+ requireAuth();
16
+ const spin = output.spinner('Fetching tasks...').start();
17
+ try {
18
+ const response = await getTodoList({
19
+ status: options.status,
20
+ priority: options.priority,
21
+ });
22
+ spin.stop();
23
+ if (options.json) {
24
+ output.json(response.data);
25
+ return;
26
+ }
27
+ const { items, stats } = response.data;
28
+ output.header('Tasks');
29
+ // Show stats
30
+ output.tableRow('Total', String(stats.total), 15);
31
+ output.tableRow('Pending', String(stats.pending), 15);
32
+ output.tableRow('Completed', String(stats.completed), 15);
33
+ if (stats.overdue) {
34
+ output.tableRow('Overdue', output.colors.error(String(stats.overdue)), 15);
35
+ }
36
+ if (stats.dueToday) {
37
+ output.tableRow('Due Today', output.colors.warning(String(stats.dueToday)), 15);
38
+ }
39
+ output.newline();
40
+ if (items.length === 0) {
41
+ output.dim('No tasks found.');
42
+ return;
43
+ }
44
+ // Group by status
45
+ const pending = items.filter((t) => t.status === 'pending' || t.status === 'in_progress');
46
+ const completed = items.filter((t) => t.status === 'completed');
47
+ if (pending.length > 0) {
48
+ output.info(`Pending (${pending.length}):`);
49
+ for (const task of pending) {
50
+ printTask(task);
51
+ }
52
+ output.newline();
53
+ }
54
+ if (completed.length > 0 && (!options.status || options.status === 'all')) {
55
+ output.dim(`Recently Completed (${Math.min(completed.length, 5)}):`);
56
+ for (const task of completed.slice(0, 5)) {
57
+ printTask(task);
58
+ }
59
+ }
60
+ }
61
+ catch (error) {
62
+ spin.stop();
63
+ handleError(error);
64
+ }
65
+ });
66
+ // Subcommand: tasks add
67
+ tasksCommand
68
+ .command('add <content>')
69
+ .description('Create a new task')
70
+ .option('-p, --priority <priority>', 'Priority (high, medium, low)', 'medium')
71
+ .option('-t, --tags <tags>', 'Comma-separated tags')
72
+ .option('--json', 'Output in JSON format')
73
+ .action(async (content, options) => {
74
+ requireAuth();
75
+ const spin = output.spinner('Creating task...').start();
76
+ try {
77
+ const response = await createTodoItem({
78
+ content,
79
+ priority: options.priority,
80
+ tags: options.tags ? options.tags.split(',').map((t) => t.trim()) : undefined,
81
+ });
82
+ spin.stop();
83
+ if (options.json) {
84
+ output.json(response.data);
85
+ return;
86
+ }
87
+ output.success('Task created');
88
+ printTask(response.data);
89
+ }
90
+ catch (error) {
91
+ spin.stop();
92
+ handleError(error);
93
+ }
94
+ });
95
+ // Subcommand: tasks complete
96
+ tasksCommand
97
+ .command('complete <id>')
98
+ .description('Mark a task as completed')
99
+ .option('-s, --summary <summary>', 'Completion summary')
100
+ .option('--json', 'Output in JSON format')
101
+ .action(async (id, options) => {
102
+ requireAuth();
103
+ const spin = output.spinner('Completing task...').start();
104
+ try {
105
+ const response = await completeTodoItem(id, options.summary);
106
+ spin.stop();
107
+ if (options.json) {
108
+ output.json(response.data);
109
+ return;
110
+ }
111
+ output.success('Task completed');
112
+ printTask(response.data);
113
+ }
114
+ catch (error) {
115
+ spin.stop();
116
+ handleError(error);
117
+ }
118
+ });
119
+ // Subcommand: tasks update
120
+ tasksCommand
121
+ .command('update <id>')
122
+ .description('Update a task')
123
+ .option('-c, --content <content>', 'New content')
124
+ .option('-p, --priority <priority>', 'Priority (high, medium, low)')
125
+ .option('-s, --status <status>', 'Status (pending, in_progress)')
126
+ .option('--json', 'Output in JSON format')
127
+ .action(async (id, options) => {
128
+ requireAuth();
129
+ const updates = {};
130
+ if (options.content)
131
+ updates.content = options.content;
132
+ if (options.priority)
133
+ updates.priority = options.priority;
134
+ if (options.status)
135
+ updates.status = options.status;
136
+ if (Object.keys(updates).length === 0) {
137
+ output.error('No updates specified. Use --content, --priority, or --status.');
138
+ process.exit(1);
139
+ }
140
+ const spin = output.spinner('Updating task...').start();
141
+ try {
142
+ const response = await updateTodoItem(id, updates);
143
+ spin.stop();
144
+ if (options.json) {
145
+ output.json(response.data);
146
+ return;
147
+ }
148
+ output.success('Task updated');
149
+ printTask(response.data);
150
+ }
151
+ catch (error) {
152
+ spin.stop();
153
+ handleError(error);
154
+ }
155
+ });
156
+ // Subcommand: tasks delete
157
+ tasksCommand
158
+ .command('delete <id>')
159
+ .description('Delete a task')
160
+ .action(async (id) => {
161
+ requireAuth();
162
+ const spin = output.spinner('Deleting task...').start();
163
+ try {
164
+ await deleteTodoItem(id);
165
+ spin.stop();
166
+ output.success('Task deleted');
167
+ }
168
+ catch (error) {
169
+ spin.stop();
170
+ handleError(error);
171
+ }
172
+ });
173
+ // Subcommand: tasks pending
174
+ tasksCommand
175
+ .command('pending')
176
+ .description('View pending AI-suggested changes')
177
+ .option('--json', 'Output in JSON format')
178
+ .option('--all', 'Show all changes including processed ones')
179
+ .action(async (options) => {
180
+ requireAuth();
181
+ const spin = output.spinner('Fetching pending changes...').start();
182
+ try {
183
+ const response = await getPendingChanges(options.all ? 'all' : 'pending');
184
+ spin.stop();
185
+ if (options.json) {
186
+ output.json(response.data);
187
+ return;
188
+ }
189
+ if (response.data.length === 0) {
190
+ output.info('No pending changes.');
191
+ return;
192
+ }
193
+ output.header('Pending Changes');
194
+ for (const change of response.data) {
195
+ output.newline();
196
+ output.info(`#${change.id} - ${change.summary}`);
197
+ output.tableRow('Status', change.status, 15);
198
+ output.tableRow('Changes', String(change.changeCount), 15);
199
+ output.tableRow('Operations', `+${change.operationCounts.add} ~${change.operationCounts.update} ✓${change.operationCounts.complete}`, 15);
200
+ if (change.sourceNoteTitle) {
201
+ output.tableRow('Source', output.truncate(change.sourceNoteTitle, 40), 15);
202
+ }
203
+ output.tableRow('Created', output.formatDate(change.createdAt), 15);
204
+ if (change.isExpired) {
205
+ output.dim(' (expired)');
206
+ }
207
+ }
208
+ output.newline();
209
+ output.dim('Use "paean tasks accept <id>" or "paean tasks reject <id>" to process.');
210
+ }
211
+ catch (error) {
212
+ spin.stop();
213
+ handleError(error);
214
+ }
215
+ });
216
+ // Subcommand: tasks accept
217
+ tasksCommand
218
+ .command('accept <changeId>')
219
+ .description('Accept a pending change')
220
+ .action(async (changeId) => {
221
+ requireAuth();
222
+ const spin = output.spinner('Accepting change...').start();
223
+ try {
224
+ await acceptPendingChange(parseInt(changeId, 10));
225
+ spin.stop();
226
+ output.success('Change accepted');
227
+ }
228
+ catch (error) {
229
+ spin.stop();
230
+ handleError(error);
231
+ }
232
+ });
233
+ // Subcommand: tasks reject
234
+ tasksCommand
235
+ .command('reject <changeId>')
236
+ .description('Reject a pending change')
237
+ .option('-n, --notes <notes>', 'Rejection notes')
238
+ .action(async (changeId, options) => {
239
+ requireAuth();
240
+ const spin = output.spinner('Rejecting change...').start();
241
+ try {
242
+ await rejectPendingChange(parseInt(changeId, 10), options.notes);
243
+ spin.stop();
244
+ output.success('Change rejected');
245
+ }
246
+ catch (error) {
247
+ spin.stop();
248
+ handleError(error);
249
+ }
250
+ });
251
+ // Helper functions
252
+ function requireAuth() {
253
+ if (!isAuthenticated()) {
254
+ output.error('Not authenticated. Please run "paean login" first.');
255
+ process.exit(1);
256
+ }
257
+ }
258
+ function printTask(task) {
259
+ const status = output.formatStatus(task.status);
260
+ const priority = output.formatPriority(task.priority);
261
+ const content = output.truncate(task.content, 60);
262
+ output.listItem(`${output.colors.dim(`[${task.id.slice(0, 8)}]`)} ${content}`);
263
+ output.dim(` ${status} | ${priority}`);
264
+ if (task.tags && task.tags.length > 0) {
265
+ output.dim(` Tags: ${task.tags.join(', ')}`);
266
+ }
267
+ if (task.dueDate) {
268
+ output.dim(` Due: ${output.formatDate(task.dueDate)}`);
269
+ }
270
+ }
271
+ function handleError(error) {
272
+ const message = error instanceof Error ? error.message : 'Unknown error';
273
+ output.error(message);
274
+ process.exit(1);
275
+ }
276
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,mBAAmB,EAAE,oEAAoE,CAAC;KACjG,MAAM,CAAC,uBAAuB,EAAE,wCAAwC,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvB,aAAa;QACb,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QAC1F,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACrE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,wBAAwB;AACxB,YAAY;KACT,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,EAAE,QAAQ,CAAC;KAC7E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAO,EAAE,EAAE;IACzC,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,OAAO;YACP,QAAQ,EAAE,OAAO,CAAC,QAAqC;YACvD,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SACtF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,6BAA6B;AAC7B,YAAY;KACT,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;KACvD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAO,EAAE,EAAE;IACpC,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,YAAY;KACT,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,yBAAyB,EAAE,aAAa,CAAC;KAChD,MAAM,CAAC,2BAA2B,EAAE,8BAA8B,CAAC;KACnE,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;KAChE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAO,EAAE,EAAE;IACpC,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEpD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,YAAY;KACT,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;IAC3B,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,YAAY;KACT,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,OAAO,EAAE,2CAA2C,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,QAAQ,CACb,YAAY,EACZ,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EACtG,EAAE,CACH,CAAC;YACF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,YAAY;KACT,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;IACjC,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,YAAY;KACT,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,OAAO,EAAE,EAAE;IAC1C,WAAW,EAAE,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,SAAS,WAAW;IAClB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/E,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,MAAM,QAAQ,EAAE,CAAC,CAAC;IAE5C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Validate Command
3
+ * Check if current changes satisfy pending tasks
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const validateCommand: Command;
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,eAAe,SAiFxB,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Validate Command
3
+ * Check if current changes satisfy pending tasks
4
+ */
5
+ import { Command } from 'commander';
6
+ import { getTodoList, completeTodoItem } from '../api/todo.js';
7
+ import { isAuthenticated } from '../utils/config.js';
8
+ import { detectProject } from '../utils/project.js';
9
+ import * as output from '../utils/output.js';
10
+ export const validateCommand = new Command('validate')
11
+ .description('Check if current changes satisfy pending tasks')
12
+ .option('--auto-complete', 'Automatically mark validated tasks as complete')
13
+ .option('--json', 'Output validation results as JSON')
14
+ .action(async (options) => {
15
+ if (!isAuthenticated()) {
16
+ output.error('Not authenticated. Please run "paean login" first.');
17
+ process.exit(1);
18
+ }
19
+ const spin = output.spinner('Validating tasks...').start();
20
+ try {
21
+ const project = detectProject();
22
+ const todoResponse = await getTodoList({ status: 'pending' });
23
+ spin.stop();
24
+ const pendingTasks = todoResponse.data.items.filter((t) => t.status === 'pending' || t.status === 'in_progress');
25
+ if (pendingTasks.length === 0) {
26
+ output.success('No pending tasks to validate.');
27
+ return;
28
+ }
29
+ output.header('Task Validation');
30
+ output.dim(`Project: ${project.name}`);
31
+ output.newline();
32
+ const validationResults = [];
33
+ // For each pending task, check if it might be complete
34
+ // This is a basic check - more sophisticated validation could be added
35
+ for (const task of pendingTasks) {
36
+ const result = await validateTask(task, project);
37
+ validationResults.push(result);
38
+ const icon = result.validated ? output.colors.success('✓') : output.colors.dim('○');
39
+ output.listItem(`${icon} ${output.truncate(task.content, 50)}`);
40
+ output.dim(` ${result.reason}`);
41
+ if (result.validated && options.autoComplete) {
42
+ try {
43
+ await completeTodoItem(task.id, result.reason);
44
+ output.success(` → Marked as complete`);
45
+ }
46
+ catch (error) {
47
+ output.error(` → Failed to mark complete`);
48
+ }
49
+ }
50
+ output.newline();
51
+ }
52
+ if (options.json) {
53
+ output.json(validationResults);
54
+ return;
55
+ }
56
+ // Summary
57
+ const validatedCount = validationResults.filter((r) => r.validated).length;
58
+ output.newline();
59
+ output.tableRow('Total Tasks', String(pendingTasks.length), 20);
60
+ output.tableRow('Validated', String(validatedCount), 20);
61
+ output.tableRow('Remaining', String(pendingTasks.length - validatedCount), 20);
62
+ if (validatedCount > 0 && !options.autoComplete) {
63
+ output.newline();
64
+ output.dim('Use --auto-complete to automatically mark validated tasks as complete.');
65
+ }
66
+ }
67
+ catch (error) {
68
+ spin.stop();
69
+ const message = error instanceof Error ? error.message : 'Unknown error';
70
+ output.error(`Validation failed: ${message}`);
71
+ process.exit(1);
72
+ }
73
+ });
74
+ async function validateTask(task, _project) {
75
+ // Basic validation logic
76
+ // In a more sophisticated implementation, this could:
77
+ // 1. Check git diff for related changes
78
+ // 2. Run tests
79
+ // 3. Check for specific file patterns
80
+ // 4. Use AI to analyze changes
81
+ // For now, we do basic keyword matching and status checks
82
+ const content = task.content.toLowerCase();
83
+ // Check if task appears to be documentation-related
84
+ if (content.includes('document') || content.includes('readme') || content.includes('doc')) {
85
+ // Could check if README was modified
86
+ return {
87
+ task,
88
+ validated: false,
89
+ reason: 'Documentation tasks require manual verification',
90
+ };
91
+ }
92
+ // Check if task is a bug fix
93
+ if (content.includes('fix') || content.includes('bug') || content.includes('error')) {
94
+ return {
95
+ task,
96
+ validated: false,
97
+ reason: 'Bug fixes require testing to validate',
98
+ };
99
+ }
100
+ // Check if task is about adding a feature
101
+ if (content.includes('add') || content.includes('implement') || content.includes('create')) {
102
+ return {
103
+ task,
104
+ validated: false,
105
+ reason: 'Feature additions require code review',
106
+ };
107
+ }
108
+ // If task is in_progress, it might be partially done
109
+ if (task.status === 'in_progress') {
110
+ return {
111
+ task,
112
+ validated: false,
113
+ reason: 'Task is still in progress',
114
+ };
115
+ }
116
+ // Default: cannot automatically validate
117
+ return {
118
+ task,
119
+ validated: false,
120
+ reason: 'Requires manual verification',
121
+ };
122
+ }
123
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Paean CLI - Public API
3
+ * Export functions for programmatic usage
4
+ */
5
+ export { createApiClient, getApiClient, getPublicApiClient } from './api/client.js';
6
+ export { qrLogin, browserLogin, getCurrentUser, validateToken, logout, type LoginResponse, type UserInfo, } from './api/auth.js';
7
+ export { getTodoList, getTodoItem, createTodoItem, updateTodoItem, completeTodoItem, reopenTodoItem, deleteTodoItem, getPendingChanges, acceptPendingChange, rejectPendingChange, getTodoPreferences, updateTodoPreferences, analyzeTodos, type TodoItem, type TodoListResponse, type PendingChange, type TodoPreferences, } from './api/todo.js';
8
+ export { getConfig, getConfigValue, setConfigValue, setConfig, isAuthenticated, getToken, getApiUrl, getWebUrl, storeAuth, clearAuth, getConfigPath, type PaeanConfig, } from './utils/config.js';
9
+ export { detectProject, getProjectId, isInProject, type ProjectContext, } from './utils/project.js';
10
+ export { startMcpServer, type McpServerOptions } from './mcp/server.js';
11
+ export { getMcpResources, readMcpResource } from './mcp/resources.js';
12
+ export { getMcpTools, executeMcpTool } from './mcp/tools.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Paean CLI - Public API
3
+ * Export functions for programmatic usage
4
+ */
5
+ // API Client
6
+ export { createApiClient, getApiClient, getPublicApiClient } from './api/client.js';
7
+ // Authentication
8
+ export { qrLogin, browserLogin, getCurrentUser, validateToken, logout, } from './api/auth.js';
9
+ // Todo API
10
+ export { getTodoList, getTodoItem, createTodoItem, updateTodoItem, completeTodoItem, reopenTodoItem, deleteTodoItem, getPendingChanges, acceptPendingChange, rejectPendingChange, getTodoPreferences, updateTodoPreferences, analyzeTodos, } from './api/todo.js';
11
+ // Configuration
12
+ export { getConfig, getConfigValue, setConfigValue, setConfig, isAuthenticated, getToken, getApiUrl, getWebUrl, storeAuth, clearAuth, getConfigPath, } from './utils/config.js';
13
+ // Project detection
14
+ export { detectProject, getProjectId, isInProject, } from './utils/project.js';
15
+ // MCP Server
16
+ export { startMcpServer } from './mcp/server.js';
17
+ export { getMcpResources, readMcpResource } from './mcp/resources.js';
18
+ export { getMcpTools, executeMcpTool } from './mcp/tools.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,iBAAiB;AACjB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,GAGP,MAAM,eAAe,CAAC;AAEvB,WAAW;AACX,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,GAKb,MAAM,eAAe,CAAC;AAEvB,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MCP Resources
3
+ * Define resources that AI agents can read
4
+ */
5
+ import { type Resource } from '@modelcontextprotocol/sdk/types.js';
6
+ /**
7
+ * Get available MCP resources
8
+ */
9
+ export declare function getMcpResources(): Promise<Resource[]>;
10
+ /**
11
+ * Read a specific MCP resource
12
+ */
13
+ export declare function readMcpResource(uri: string): Promise<unknown>;
14
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAKnE;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAmC3D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmInE"}