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,37 @@
1
+ /**
2
+ * Paean API Client
3
+ * HTTP client for communicating with the Paean AI backend
4
+ */
5
+ import { type AxiosInstance } from 'axios';
6
+ export interface ApiError {
7
+ error: string;
8
+ message?: string;
9
+ statusCode?: number;
10
+ }
11
+ export interface ApiResponse<T> {
12
+ success: boolean;
13
+ data?: T;
14
+ error?: string;
15
+ message?: string;
16
+ }
17
+ /**
18
+ * Create an authenticated API client
19
+ */
20
+ export declare function createApiClient(): AxiosInstance;
21
+ /**
22
+ * Create an unauthenticated API client (for login flows)
23
+ */
24
+ export declare function createPublicApiClient(): AxiosInstance;
25
+ /**
26
+ * Get the authenticated API client singleton
27
+ */
28
+ export declare function getApiClient(): AxiosInstance;
29
+ /**
30
+ * Get the public API client singleton
31
+ */
32
+ export declare function getPublicApiClient(): AxiosInstance;
33
+ /**
34
+ * Reset the API clients (useful after login/logout)
35
+ */
36
+ export declare function resetApiClients(): void;
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAE,KAAK,aAAa,EAAmB,MAAM,OAAO,CAAC;AAGnE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAiD/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAiCrD;AAMD;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAK5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAKlD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Paean API Client
3
+ * HTTP client for communicating with the Paean AI backend
4
+ */
5
+ import axios from 'axios';
6
+ import { getToken, getApiUrl, clearAuth } from '../utils/config.js';
7
+ /**
8
+ * Create an authenticated API client
9
+ */
10
+ export function createApiClient() {
11
+ const client = axios.create({
12
+ baseURL: getApiUrl(),
13
+ timeout: 30000,
14
+ headers: {
15
+ 'Content-Type': 'application/json',
16
+ 'Accept': 'application/json',
17
+ 'User-Agent': 'Paean-CLI/0.1.0',
18
+ },
19
+ });
20
+ // Add auth token to requests
21
+ client.interceptors.request.use((config) => {
22
+ const token = getToken();
23
+ if (token) {
24
+ config.headers.Authorization = `Bearer ${token}`;
25
+ }
26
+ return config;
27
+ });
28
+ // Handle response errors
29
+ client.interceptors.response.use((response) => response, (error) => {
30
+ // Handle 401 Unauthorized - clear auth and prompt re-login
31
+ if (error.response?.status === 401) {
32
+ clearAuth();
33
+ }
34
+ // Extract error message
35
+ const errorMessage = error.response?.data?.error ||
36
+ error.response?.data?.message ||
37
+ error.message ||
38
+ 'An unknown error occurred';
39
+ // Create a more informative error
40
+ const enhancedError = new Error(errorMessage);
41
+ enhancedError.statusCode = error.response?.status;
42
+ enhancedError.isApiError = true;
43
+ return Promise.reject(enhancedError);
44
+ });
45
+ return client;
46
+ }
47
+ /**
48
+ * Create an unauthenticated API client (for login flows)
49
+ */
50
+ export function createPublicApiClient() {
51
+ const client = axios.create({
52
+ baseURL: getApiUrl(),
53
+ timeout: 30000,
54
+ headers: {
55
+ 'Content-Type': 'application/json',
56
+ 'Accept': 'application/json',
57
+ 'User-Agent': 'Paean-CLI/0.1.0',
58
+ },
59
+ });
60
+ // Handle response errors
61
+ client.interceptors.response.use((response) => response, (error) => {
62
+ const errorMessage = error.response?.data?.error ||
63
+ error.response?.data?.message ||
64
+ error.message ||
65
+ 'An unknown error occurred';
66
+ const enhancedError = new Error(errorMessage);
67
+ enhancedError.statusCode = error.response?.status;
68
+ enhancedError.isApiError = true;
69
+ return Promise.reject(enhancedError);
70
+ });
71
+ return client;
72
+ }
73
+ // Singleton instances
74
+ let apiClient = null;
75
+ let publicApiClient = null;
76
+ /**
77
+ * Get the authenticated API client singleton
78
+ */
79
+ export function getApiClient() {
80
+ if (!apiClient) {
81
+ apiClient = createApiClient();
82
+ }
83
+ return apiClient;
84
+ }
85
+ /**
86
+ * Get the public API client singleton
87
+ */
88
+ export function getPublicApiClient() {
89
+ if (!publicApiClient) {
90
+ publicApiClient = createPublicApiClient();
91
+ }
92
+ return publicApiClient;
93
+ }
94
+ /**
95
+ * Reset the API clients (useful after login/logout)
96
+ */
97
+ export function resetApiClients() {
98
+ apiClient = null;
99
+ publicApiClient = null;
100
+ }
101
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Todo API
3
+ * Wrapper for Paean AI todo/task management endpoints
4
+ */
5
+ export interface TodoItem {
6
+ id: string;
7
+ content: string;
8
+ priority: 'high' | 'medium' | 'low';
9
+ status: 'pending' | 'in_progress' | 'completed' | 'cancelled';
10
+ dueDate?: string;
11
+ tags?: string[];
12
+ sourceNoteHashKey?: string;
13
+ sourceContext?: string;
14
+ metadata?: Record<string, unknown>;
15
+ order?: number;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ }
19
+ export interface TodoListResponse {
20
+ success: boolean;
21
+ data: {
22
+ items: TodoItem[];
23
+ stats: {
24
+ total: number;
25
+ completed: number;
26
+ pending: number;
27
+ overdue?: number;
28
+ dueToday?: number;
29
+ };
30
+ lastProcessedAt?: string;
31
+ };
32
+ }
33
+ export interface PendingChange {
34
+ id: number;
35
+ status: 'pending' | 'accepted' | 'rejected' | 'partial';
36
+ summary: string;
37
+ changeCount: number;
38
+ operationCounts: {
39
+ add: number;
40
+ update: number;
41
+ complete: number;
42
+ delete: number;
43
+ };
44
+ sourceNoteHashKey?: string;
45
+ sourceNoteTitle?: string;
46
+ createdAt: string;
47
+ expiresAt: string;
48
+ isExpired: boolean;
49
+ }
50
+ export interface PendingChangesResponse {
51
+ success: boolean;
52
+ data: PendingChange[];
53
+ }
54
+ export interface TodoPreferences {
55
+ todoEnabled: boolean;
56
+ todoAutoProcess: boolean;
57
+ todoDefaultPriority: 'high' | 'medium' | 'low';
58
+ turboModeEnabled: boolean;
59
+ }
60
+ /**
61
+ * Get todo list with optional filters
62
+ */
63
+ export declare function getTodoList(options?: {
64
+ status?: 'all' | 'pending' | 'completed' | 'in_progress' | 'cancelled';
65
+ priority?: 'high' | 'medium' | 'low';
66
+ }): Promise<TodoListResponse>;
67
+ /**
68
+ * Get a specific todo item by ID
69
+ */
70
+ export declare function getTodoItem(id: string): Promise<{
71
+ success: boolean;
72
+ data: TodoItem;
73
+ }>;
74
+ /**
75
+ * Create a new todo item
76
+ */
77
+ export declare function createTodoItem(data: {
78
+ content: string;
79
+ priority?: 'high' | 'medium' | 'low';
80
+ status?: 'pending' | 'in_progress';
81
+ dueDate?: string;
82
+ tags?: string[];
83
+ sourceContext?: string;
84
+ }): Promise<{
85
+ success: boolean;
86
+ data: TodoItem;
87
+ }>;
88
+ /**
89
+ * Update a todo item
90
+ */
91
+ export declare function updateTodoItem(id: string, data: Partial<{
92
+ content: string;
93
+ priority: 'high' | 'medium' | 'low';
94
+ status: 'pending' | 'in_progress' | 'completed' | 'cancelled';
95
+ dueDate: string;
96
+ tags: string[];
97
+ order: number;
98
+ metadata: Record<string, unknown>;
99
+ }>): Promise<{
100
+ success: boolean;
101
+ data: TodoItem;
102
+ }>;
103
+ /**
104
+ * Complete a todo item
105
+ */
106
+ export declare function completeTodoItem(id: string, summary?: string): Promise<{
107
+ success: boolean;
108
+ data: TodoItem;
109
+ }>;
110
+ /**
111
+ * Reopen a completed/cancelled todo item
112
+ */
113
+ export declare function reopenTodoItem(id: string): Promise<{
114
+ success: boolean;
115
+ data: TodoItem;
116
+ }>;
117
+ /**
118
+ * Delete a todo item
119
+ */
120
+ export declare function deleteTodoItem(id: string): Promise<{
121
+ success: boolean;
122
+ }>;
123
+ /**
124
+ * Get pending changes from LLM analysis
125
+ */
126
+ export declare function getPendingChanges(status?: 'pending' | 'all'): Promise<PendingChangesResponse>;
127
+ /**
128
+ * Accept a pending change
129
+ */
130
+ export declare function acceptPendingChange(changeId: number): Promise<{
131
+ success: boolean;
132
+ }>;
133
+ /**
134
+ * Reject a pending change
135
+ */
136
+ export declare function rejectPendingChange(changeId: number, notes?: string): Promise<{
137
+ success: boolean;
138
+ }>;
139
+ /**
140
+ * Get todo preferences
141
+ */
142
+ export declare function getTodoPreferences(): Promise<{
143
+ success: boolean;
144
+ data: TodoPreferences;
145
+ }>;
146
+ /**
147
+ * Update todo preferences
148
+ */
149
+ export declare function updateTodoPreferences(prefs: Partial<TodoPreferences>): Promise<{
150
+ success: boolean;
151
+ data: TodoPreferences;
152
+ }>;
153
+ /**
154
+ * Analyze content for todos (manual trigger)
155
+ */
156
+ export declare function analyzeTodos(content: string, options?: {
157
+ context?: string;
158
+ autoAccept?: boolean;
159
+ }): Promise<{
160
+ success: boolean;
161
+ data: {
162
+ pendingChangeId?: number;
163
+ changes?: unknown[];
164
+ summary?: string;
165
+ };
166
+ }>;
167
+ //# sourceMappingURL=todo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../src/api/todo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Todo API
3
+ * Wrapper for Paean AI todo/task management endpoints
4
+ */
5
+ import { getApiClient } from './client.js';
6
+ /**
7
+ * Get todo list with optional filters
8
+ */
9
+ export async function getTodoList(options) {
10
+ const client = getApiClient();
11
+ const params = new URLSearchParams();
12
+ if (options?.status && options.status !== 'all') {
13
+ params.append('status', options.status);
14
+ }
15
+ if (options?.priority) {
16
+ params.append('priority', options.priority);
17
+ }
18
+ const response = await client.get(`/todo?${params.toString()}`);
19
+ return response.data;
20
+ }
21
+ /**
22
+ * Get a specific todo item by ID
23
+ */
24
+ export async function getTodoItem(id) {
25
+ const list = await getTodoList();
26
+ const item = list.data.items.find((i) => i.id === id);
27
+ if (!item) {
28
+ throw new Error(`Todo item not found: ${id}`);
29
+ }
30
+ return { success: true, data: item };
31
+ }
32
+ /**
33
+ * Create a new todo item
34
+ */
35
+ export async function createTodoItem(data) {
36
+ const client = getApiClient();
37
+ const response = await client.post('/todo/items', data);
38
+ return response.data;
39
+ }
40
+ /**
41
+ * Update a todo item
42
+ */
43
+ export async function updateTodoItem(id, data) {
44
+ const client = getApiClient();
45
+ const response = await client.put(`/todo/items/${id}`, data);
46
+ return response.data;
47
+ }
48
+ /**
49
+ * Complete a todo item
50
+ */
51
+ export async function completeTodoItem(id, summary) {
52
+ const client = getApiClient();
53
+ // First complete the item
54
+ const response = await client.post(`/todo/items/${id}/complete`);
55
+ // If summary provided, add it to metadata
56
+ if (summary && response.data.success) {
57
+ await updateTodoItem(id, {
58
+ metadata: {
59
+ ...response.data.data.metadata,
60
+ completionSummary: summary,
61
+ completedAt: new Date().toISOString(),
62
+ },
63
+ });
64
+ }
65
+ return response.data;
66
+ }
67
+ /**
68
+ * Reopen a completed/cancelled todo item
69
+ */
70
+ export async function reopenTodoItem(id) {
71
+ const client = getApiClient();
72
+ const response = await client.post(`/todo/items/${id}/reopen`);
73
+ return response.data;
74
+ }
75
+ /**
76
+ * Delete a todo item
77
+ */
78
+ export async function deleteTodoItem(id) {
79
+ const client = getApiClient();
80
+ const response = await client.delete(`/todo/items/${id}`);
81
+ return response.data;
82
+ }
83
+ /**
84
+ * Get pending changes from LLM analysis
85
+ */
86
+ export async function getPendingChanges(status = 'pending') {
87
+ const client = getApiClient();
88
+ const response = await client.get(`/todo/pending?status=${status}`);
89
+ return response.data;
90
+ }
91
+ /**
92
+ * Accept a pending change
93
+ */
94
+ export async function acceptPendingChange(changeId) {
95
+ const client = getApiClient();
96
+ const response = await client.post(`/todo/pending/${changeId}/accept`);
97
+ return response.data;
98
+ }
99
+ /**
100
+ * Reject a pending change
101
+ */
102
+ export async function rejectPendingChange(changeId, notes) {
103
+ const client = getApiClient();
104
+ const response = await client.post(`/todo/pending/${changeId}/reject`, {
105
+ notes,
106
+ });
107
+ return response.data;
108
+ }
109
+ /**
110
+ * Get todo preferences
111
+ */
112
+ export async function getTodoPreferences() {
113
+ const client = getApiClient();
114
+ const response = await client.get('/todo/preferences');
115
+ return response.data;
116
+ }
117
+ /**
118
+ * Update todo preferences
119
+ */
120
+ export async function updateTodoPreferences(prefs) {
121
+ const client = getApiClient();
122
+ const response = await client.put('/todo/preferences', prefs);
123
+ return response.data;
124
+ }
125
+ /**
126
+ * Analyze content for todos (manual trigger)
127
+ */
128
+ export async function analyzeTodos(content, options) {
129
+ const client = getApiClient();
130
+ const response = await client.post('/todo/analyze', {
131
+ content,
132
+ context: options?.context,
133
+ autoAccept: options?.autoAccept,
134
+ });
135
+ return response.data;
136
+ }
137
+ //# sourceMappingURL=todo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.js","sourceRoot":"","sources":["../../src/api/todo.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Paean CLI
4
+ * Command-line interface for Paean AI task management
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/cli.js ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Paean CLI
4
+ * Command-line interface for Paean AI task management
5
+ */
6
+ import { Command } from 'commander';
7
+ import { loginCommand } from './commands/login.js';
8
+ import { logoutCommand } from './commands/logout.js';
9
+ import { tasksCommand } from './commands/tasks.js';
10
+ import { contextCommand } from './commands/context.js';
11
+ import { serveCommand } from './commands/serve.js';
12
+ import { validateCommand } from './commands/validate.js';
13
+ import { getConfigPath } from './utils/config.js';
14
+ const program = new Command();
15
+ program
16
+ .name('paean')
17
+ .description('Paean AI CLI - Connect local development with Paean AI cloud')
18
+ .version('0.1.0')
19
+ .option('--config', 'Show config file path')
20
+ .action((options) => {
21
+ if (options.config) {
22
+ console.log(getConfigPath());
23
+ return;
24
+ }
25
+ program.help();
26
+ });
27
+ // Register commands
28
+ program.addCommand(loginCommand);
29
+ program.addCommand(logoutCommand);
30
+ program.addCommand(tasksCommand);
31
+ program.addCommand(contextCommand);
32
+ program.addCommand(serveCommand);
33
+ program.addCommand(validateCommand);
34
+ // Parse arguments
35
+ program.parse();
36
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC3C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAEpC,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Context Command
3
+ * Generate context file for AI agents
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const contextCommand: Command;
7
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,cAAc,SA+EvB,CAAC"}