openpaean 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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/agent/chat.ink.d.ts +28 -0
  4. package/dist/agent/chat.ink.d.ts.map +1 -0
  5. package/dist/agent/chat.ink.js +57 -0
  6. package/dist/agent/chat.ink.js.map +1 -0
  7. package/dist/agent/chat.legacy.d.ts +25 -0
  8. package/dist/agent/chat.legacy.d.ts.map +1 -0
  9. package/dist/agent/chat.legacy.js +299 -0
  10. package/dist/agent/chat.legacy.js.map +1 -0
  11. package/dist/agent/cli-mode.d.ts +35 -0
  12. package/dist/agent/cli-mode.d.ts.map +1 -0
  13. package/dist/agent/cli-mode.js +69 -0
  14. package/dist/agent/cli-mode.js.map +1 -0
  15. package/dist/agent/completer.d.ts +39 -0
  16. package/dist/agent/completer.d.ts.map +1 -0
  17. package/dist/agent/completer.js +101 -0
  18. package/dist/agent/completer.js.map +1 -0
  19. package/dist/agent/index.d.ts +15 -0
  20. package/dist/agent/index.d.ts.map +1 -0
  21. package/dist/agent/index.js +11 -0
  22. package/dist/agent/index.js.map +1 -0
  23. package/dist/agent/renderer.d.ts +53 -0
  24. package/dist/agent/renderer.d.ts.map +1 -0
  25. package/dist/agent/renderer.js +133 -0
  26. package/dist/agent/renderer.js.map +1 -0
  27. package/dist/agent/service.d.ts +44 -0
  28. package/dist/agent/service.d.ts.map +1 -0
  29. package/dist/agent/service.js +192 -0
  30. package/dist/agent/service.js.map +1 -0
  31. package/dist/agent/spinner.d.ts +37 -0
  32. package/dist/agent/spinner.d.ts.map +1 -0
  33. package/dist/agent/spinner.js +200 -0
  34. package/dist/agent/spinner.js.map +1 -0
  35. package/dist/agent/types.d.ts +84 -0
  36. package/dist/agent/types.d.ts.map +1 -0
  37. package/dist/agent/types.js +6 -0
  38. package/dist/agent/types.js.map +1 -0
  39. package/dist/api/auth.d.ts +71 -0
  40. package/dist/api/auth.d.ts.map +1 -0
  41. package/dist/api/auth.js +261 -0
  42. package/dist/api/auth.js.map +1 -0
  43. package/dist/api/client.d.ts +37 -0
  44. package/dist/api/client.d.ts.map +1 -0
  45. package/dist/api/client.js +101 -0
  46. package/dist/api/client.js.map +1 -0
  47. package/dist/api/todo.d.ts +223 -0
  48. package/dist/api/todo.d.ts.map +1 -0
  49. package/dist/api/todo.js +196 -0
  50. package/dist/api/todo.js.map +1 -0
  51. package/dist/cli.d.ts +7 -0
  52. package/dist/cli.d.ts.map +1 -0
  53. package/dist/cli.js +55 -0
  54. package/dist/cli.js.map +1 -0
  55. package/dist/commands/agent.d.ts +16 -0
  56. package/dist/commands/agent.d.ts.map +1 -0
  57. package/dist/commands/agent.js +132 -0
  58. package/dist/commands/agent.js.map +1 -0
  59. package/dist/commands/context.d.ts +7 -0
  60. package/dist/commands/context.d.ts.map +1 -0
  61. package/dist/commands/context.js +155 -0
  62. package/dist/commands/context.js.map +1 -0
  63. package/dist/commands/login.d.ts +7 -0
  64. package/dist/commands/login.d.ts.map +1 -0
  65. package/dist/commands/login.js +109 -0
  66. package/dist/commands/login.js.map +1 -0
  67. package/dist/commands/logout.d.ts +7 -0
  68. package/dist/commands/logout.d.ts.map +1 -0
  69. package/dist/commands/logout.js +27 -0
  70. package/dist/commands/logout.js.map +1 -0
  71. package/dist/commands/serve.d.ts +7 -0
  72. package/dist/commands/serve.d.ts.map +1 -0
  73. package/dist/commands/serve.js +29 -0
  74. package/dist/commands/serve.js.map +1 -0
  75. package/dist/commands/tasks.d.ts +7 -0
  76. package/dist/commands/tasks.d.ts.map +1 -0
  77. package/dist/commands/tasks.js +277 -0
  78. package/dist/commands/tasks.js.map +1 -0
  79. package/dist/commands/validate.d.ts +7 -0
  80. package/dist/commands/validate.d.ts.map +1 -0
  81. package/dist/commands/validate.js +123 -0
  82. package/dist/commands/validate.js.map +1 -0
  83. package/dist/index.d.ts +15 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +23 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/mcp/client.d.ts +115 -0
  88. package/dist/mcp/client.d.ts.map +1 -0
  89. package/dist/mcp/client.js +439 -0
  90. package/dist/mcp/client.js.map +1 -0
  91. package/dist/mcp/resources.d.ts +14 -0
  92. package/dist/mcp/resources.d.ts.map +1 -0
  93. package/dist/mcp/resources.js +195 -0
  94. package/dist/mcp/resources.js.map +1 -0
  95. package/dist/mcp/server.d.ts +12 -0
  96. package/dist/mcp/server.d.ts.map +1 -0
  97. package/dist/mcp/server.js +82 -0
  98. package/dist/mcp/server.js.map +1 -0
  99. package/dist/mcp/tools.d.ts +14 -0
  100. package/dist/mcp/tools.d.ts.map +1 -0
  101. package/dist/mcp/tools.js +582 -0
  102. package/dist/mcp/tools.js.map +1 -0
  103. package/dist/ui/App.d.ts +15 -0
  104. package/dist/ui/App.d.ts.map +1 -0
  105. package/dist/ui/App.js +80 -0
  106. package/dist/ui/App.js.map +1 -0
  107. package/dist/ui/FullscreenApp.d.ts +16 -0
  108. package/dist/ui/FullscreenApp.d.ts.map +1 -0
  109. package/dist/ui/FullscreenApp.js +48 -0
  110. package/dist/ui/FullscreenApp.js.map +1 -0
  111. package/dist/ui/components/Header.d.ts +11 -0
  112. package/dist/ui/components/Header.d.ts.map +1 -0
  113. package/dist/ui/components/Header.js +6 -0
  114. package/dist/ui/components/Header.js.map +1 -0
  115. package/dist/ui/components/InputArea.d.ts +16 -0
  116. package/dist/ui/components/InputArea.d.ts.map +1 -0
  117. package/dist/ui/components/InputArea.js +109 -0
  118. package/dist/ui/components/InputArea.js.map +1 -0
  119. package/dist/ui/components/Spinner.d.ts +12 -0
  120. package/dist/ui/components/Spinner.d.ts.map +1 -0
  121. package/dist/ui/components/Spinner.js +8 -0
  122. package/dist/ui/components/Spinner.js.map +1 -0
  123. package/dist/ui/components/StreamingText.d.ts +13 -0
  124. package/dist/ui/components/StreamingText.d.ts.map +1 -0
  125. package/dist/ui/components/StreamingText.js +8 -0
  126. package/dist/ui/components/StreamingText.js.map +1 -0
  127. package/dist/ui/components/ToolCallIndicator.d.ts +14 -0
  128. package/dist/ui/components/ToolCallIndicator.d.ts.map +1 -0
  129. package/dist/ui/components/ToolCallIndicator.js +10 -0
  130. package/dist/ui/components/ToolCallIndicator.js.map +1 -0
  131. package/dist/ui/components/index.d.ts +9 -0
  132. package/dist/ui/components/index.d.ts.map +1 -0
  133. package/dist/ui/components/index.js +9 -0
  134. package/dist/ui/components/index.js.map +1 -0
  135. package/dist/ui/hooks/index.d.ts +6 -0
  136. package/dist/ui/hooks/index.d.ts.map +1 -0
  137. package/dist/ui/hooks/index.js +6 -0
  138. package/dist/ui/hooks/index.js.map +1 -0
  139. package/dist/ui/hooks/useAgentStream.d.ts +37 -0
  140. package/dist/ui/hooks/useAgentStream.d.ts.map +1 -0
  141. package/dist/ui/hooks/useAgentStream.js +122 -0
  142. package/dist/ui/hooks/useAgentStream.js.map +1 -0
  143. package/dist/ui/hooks/useCommands.d.ts +31 -0
  144. package/dist/ui/hooks/useCommands.d.ts.map +1 -0
  145. package/dist/ui/hooks/useCommands.js +108 -0
  146. package/dist/ui/hooks/useCommands.js.map +1 -0
  147. package/dist/ui/index.d.ts +7 -0
  148. package/dist/ui/index.d.ts.map +1 -0
  149. package/dist/ui/index.js +7 -0
  150. package/dist/ui/index.js.map +1 -0
  151. package/dist/utils/config.d.ts +70 -0
  152. package/dist/utils/config.d.ts.map +1 -0
  153. package/dist/utils/config.js +130 -0
  154. package/dist/utils/config.js.map +1 -0
  155. package/dist/utils/output.d.ts +79 -0
  156. package/dist/utils/output.d.ts.map +1 -0
  157. package/dist/utils/output.js +157 -0
  158. package/dist/utils/output.js.map +1 -0
  159. package/dist/utils/project.d.ts +29 -0
  160. package/dist/utils/project.d.ts.map +1 -0
  161. package/dist/utils/project.js +135 -0
  162. package/dist/utils/project.js.map +1 -0
  163. package/package.json +81 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * MCP Resources
3
+ * Define resources that AI agents can read
4
+ */
5
+ import { getTodoList, getPendingChanges, getSubtaskProgress } 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
+ const progress = getSubtaskProgress(t);
61
+ return {
62
+ id: t.id,
63
+ content: t.content,
64
+ description: t.description,
65
+ priority: t.priority,
66
+ status: t.status,
67
+ tags: t.tags,
68
+ dueDate: t.dueDate,
69
+ createdAt: t.createdAt,
70
+ // Subtask information
71
+ hasSubtasks: progress.total > 0,
72
+ subtaskCount: progress.total,
73
+ subtasksCompleted: progress.completed,
74
+ subtaskProgress: progress.percentage,
75
+ subtasks: t.checklist?.map(s => ({
76
+ id: s.id,
77
+ content: s.content,
78
+ completed: s.completed,
79
+ })) || [],
80
+ };
81
+ }),
82
+ count: pendingTasks.length,
83
+ retrievedAt: new Date().toISOString(),
84
+ };
85
+ }
86
+ case 'paean://tasks/completed': {
87
+ const response = await getTodoList({ status: 'completed' });
88
+ const completedTasks = response.data.items.slice(0, 10); // Last 10 completed
89
+ return {
90
+ project: project.name,
91
+ projectId,
92
+ tasks: completedTasks.map((t) => ({
93
+ id: t.id,
94
+ content: t.content,
95
+ priority: t.priority,
96
+ completedAt: t.updatedAt,
97
+ })),
98
+ count: completedTasks.length,
99
+ retrievedAt: new Date().toISOString(),
100
+ };
101
+ }
102
+ case 'paean://tasks/all': {
103
+ const response = await getTodoList();
104
+ return {
105
+ project: project.name,
106
+ projectId,
107
+ tasks: response.data.items,
108
+ stats: response.data.stats,
109
+ retrievedAt: new Date().toISOString(),
110
+ };
111
+ }
112
+ case 'paean://context': {
113
+ const todoResponse = await getTodoList();
114
+ const pendingChanges = await getPendingChanges();
115
+ const pendingTasks = todoResponse.data.items.filter((t) => t.status === 'pending' || t.status === 'in_progress');
116
+ const recentCompleted = todoResponse.data.items
117
+ .filter((t) => t.status === 'completed')
118
+ .slice(0, 5);
119
+ return {
120
+ project: {
121
+ name: project.name,
122
+ type: project.type,
123
+ path: project.path,
124
+ id: projectId,
125
+ gitBranch: project.gitBranch,
126
+ },
127
+ user: {
128
+ email: getConfigValue('email'),
129
+ },
130
+ tasks: {
131
+ pending: pendingTasks.map((t) => {
132
+ const progress = getSubtaskProgress(t);
133
+ return {
134
+ id: t.id,
135
+ content: t.content,
136
+ description: t.description,
137
+ priority: t.priority,
138
+ status: t.status,
139
+ tags: t.tags,
140
+ dueDate: t.dueDate,
141
+ sourceContext: t.sourceContext,
142
+ // Subtask information
143
+ hasSubtasks: progress.total > 0,
144
+ subtaskCount: progress.total,
145
+ subtasksCompleted: progress.completed,
146
+ subtaskProgress: progress.percentage,
147
+ subtasks: t.checklist?.map(s => ({
148
+ id: s.id,
149
+ content: s.content,
150
+ completed: s.completed,
151
+ })) || [],
152
+ };
153
+ }),
154
+ recentlyCompleted: recentCompleted.map((t) => ({
155
+ id: t.id,
156
+ content: t.content,
157
+ completedAt: t.updatedAt,
158
+ })),
159
+ stats: todoResponse.data.stats,
160
+ },
161
+ pendingChanges: pendingChanges.data.filter((c) => !c.isExpired).length,
162
+ instructions: {
163
+ onComplete: 'After completing a task, call the paean_complete_task tool with the task ID and a brief summary.',
164
+ onNewTask: 'If you discover additional work needed, call the paean_create_task tool. You can include subtasks array to break down complex tasks.',
165
+ onSubtaskComplete: 'After completing a subtask, call the paean_complete_subtask tool with the task ID and subtask ID.',
166
+ priority: 'Focus on high priority tasks first, then medium, then low.',
167
+ },
168
+ retrievedAt: new Date().toISOString(),
169
+ };
170
+ }
171
+ case 'paean://pending-changes': {
172
+ const response = await getPendingChanges();
173
+ return {
174
+ project: project.name,
175
+ projectId,
176
+ changes: response.data.map((c) => ({
177
+ id: c.id,
178
+ summary: c.summary,
179
+ status: c.status,
180
+ changeCount: c.changeCount,
181
+ operations: c.operationCounts,
182
+ sourceNote: c.sourceNoteTitle,
183
+ createdAt: c.createdAt,
184
+ isExpired: c.isExpired,
185
+ })),
186
+ count: response.data.length,
187
+ pendingCount: response.data.filter((c) => c.status === 'pending' && !c.isExpired).length,
188
+ retrievedAt: new Date().toISOString(),
189
+ };
190
+ }
191
+ default:
192
+ throw new Error(`Unknown resource: ${uri}`);
193
+ }
194
+ }
195
+ //# 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;AAgB/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CA4NpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAoXlB"}