@legdev/tkxr 1.1.11

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 (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/commands/comments.d.ts +10 -0
  4. package/dist/cli/commands/comments.d.ts.map +1 -0
  5. package/dist/cli/commands/comments.js +81 -0
  6. package/dist/cli/commands/comments.js.map +1 -0
  7. package/dist/cli/commands/create.d.ts +11 -0
  8. package/dist/cli/commands/create.d.ts.map +1 -0
  9. package/dist/cli/commands/create.js +74 -0
  10. package/dist/cli/commands/create.js.map +1 -0
  11. package/dist/cli/commands/delete.d.ts +7 -0
  12. package/dist/cli/commands/delete.d.ts.map +1 -0
  13. package/dist/cli/commands/delete.js +61 -0
  14. package/dist/cli/commands/delete.js.map +1 -0
  15. package/dist/cli/commands/list.d.ts +16 -0
  16. package/dist/cli/commands/list.d.ts.map +1 -0
  17. package/dist/cli/commands/list.js +239 -0
  18. package/dist/cli/commands/list.js.map +1 -0
  19. package/dist/cli/commands/mcp.d.ts +8 -0
  20. package/dist/cli/commands/mcp.d.ts.map +1 -0
  21. package/dist/cli/commands/mcp.js +52 -0
  22. package/dist/cli/commands/mcp.js.map +1 -0
  23. package/dist/cli/commands/serve.d.ts +8 -0
  24. package/dist/cli/commands/serve.d.ts.map +1 -0
  25. package/dist/cli/commands/serve.js +505 -0
  26. package/dist/cli/commands/serve.js.map +1 -0
  27. package/dist/cli/commands/show.d.ts +7 -0
  28. package/dist/cli/commands/show.d.ts.map +1 -0
  29. package/dist/cli/commands/show.js +84 -0
  30. package/dist/cli/commands/show.js.map +1 -0
  31. package/dist/cli/commands/sprint.d.ts +11 -0
  32. package/dist/cli/commands/sprint.d.ts.map +1 -0
  33. package/dist/cli/commands/sprint.js +114 -0
  34. package/dist/cli/commands/sprint.js.map +1 -0
  35. package/dist/cli/commands/sprints.d.ts +10 -0
  36. package/dist/cli/commands/sprints.d.ts.map +1 -0
  37. package/dist/cli/commands/sprints.js +64 -0
  38. package/dist/cli/commands/sprints.js.map +1 -0
  39. package/dist/cli/commands/status.d.ts +6 -0
  40. package/dist/cli/commands/status.d.ts.map +1 -0
  41. package/dist/cli/commands/status.js +48 -0
  42. package/dist/cli/commands/status.js.map +1 -0
  43. package/dist/cli/commands/user.d.ts +8 -0
  44. package/dist/cli/commands/user.d.ts.map +1 -0
  45. package/dist/cli/commands/user.js +61 -0
  46. package/dist/cli/commands/user.js.map +1 -0
  47. package/dist/cli/commands/users.d.ts +7 -0
  48. package/dist/cli/commands/users.d.ts.map +1 -0
  49. package/dist/cli/commands/users.js +28 -0
  50. package/dist/cli/commands/users.js.map +1 -0
  51. package/dist/cli/commands/version.d.ts +7 -0
  52. package/dist/cli/commands/version.d.ts.map +1 -0
  53. package/dist/cli/commands/version.js +94 -0
  54. package/dist/cli/commands/version.js.map +1 -0
  55. package/dist/cli/index.d.ts +3 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +146 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/core/notifier.d.ts +51 -0
  60. package/dist/core/notifier.d.ts.map +1 -0
  61. package/dist/core/notifier.js +118 -0
  62. package/dist/core/notifier.js.map +1 -0
  63. package/dist/core/storage.d.ts +41 -0
  64. package/dist/core/storage.d.ts.map +1 -0
  65. package/dist/core/storage.js +383 -0
  66. package/dist/core/storage.js.map +1 -0
  67. package/dist/core/test_getAllTickets.d.ts +2 -0
  68. package/dist/core/test_getAllTickets.d.ts.map +1 -0
  69. package/dist/core/test_getAllTickets.js +7 -0
  70. package/dist/core/test_getAllTickets.js.map +1 -0
  71. package/dist/core/types.d.ts +67 -0
  72. package/dist/core/types.d.ts.map +1 -0
  73. package/dist/core/types.js +2 -0
  74. package/dist/core/types.js.map +1 -0
  75. package/dist/index.d.ts +3 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +3 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/mcp/server.d.ts +25 -0
  80. package/dist/mcp/server.d.ts.map +1 -0
  81. package/dist/mcp/server.js +489 -0
  82. package/dist/mcp/server.js.map +1 -0
  83. package/dist/web/_app/immutable/assets/0.47dd68fd.css +1 -0
  84. package/dist/web/_app/immutable/assets/2.3f11c9a4.css +1 -0
  85. package/dist/web/_app/immutable/assets/_layout.47e0a118.css +1 -0
  86. package/dist/web/_app/immutable/assets/_page.3f11c9a4.css +1 -0
  87. package/dist/web/_app/immutable/chunks/index.23b89654.js +1 -0
  88. package/dist/web/_app/immutable/chunks/index.f094d695.js +1 -0
  89. package/dist/web/_app/immutable/chunks/scheduler.81694808.js +1 -0
  90. package/dist/web/_app/immutable/chunks/singletons.9c246a72.js +1 -0
  91. package/dist/web/_app/immutable/chunks/stores.48058fce.js +1 -0
  92. package/dist/web/_app/immutable/entry/app.fea83d45.js +1 -0
  93. package/dist/web/_app/immutable/entry/start.3fd90366.js +3 -0
  94. package/dist/web/_app/immutable/nodes/0.e605bf9a.js +1 -0
  95. package/dist/web/_app/immutable/nodes/1.e3ce54f6.js +1 -0
  96. package/dist/web/_app/immutable/nodes/2.04dfac64.js +13 -0
  97. package/dist/web/_app/version.json +1 -0
  98. package/dist/web/favicon.png +3 -0
  99. package/dist/web/favicon.svg +10 -0
  100. package/dist/web/index.html +37 -0
  101. package/package.json +60 -0
@@ -0,0 +1,383 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { nanoid } from 'nanoid';
4
+ export class ProjectStorage {
5
+ ticketsDir;
6
+ commentsDir;
7
+ sprintsPath;
8
+ usersPath;
9
+ constructor(basePath = './tkxr') {
10
+ this.ticketsDir = path.resolve(basePath, 'tickets');
11
+ this.commentsDir = path.resolve(basePath, 'comments');
12
+ this.sprintsPath = path.resolve(basePath, 'sprints.json');
13
+ this.usersPath = path.resolve(basePath, 'users.json');
14
+ }
15
+ generateId(type) {
16
+ const prefix = type.substring(0, 3);
17
+ const id = nanoid(8);
18
+ return `${prefix}-${id}`;
19
+ }
20
+ // User CRUD
21
+ async createUser(username, displayName, options = {}) {
22
+ const now = new Date();
23
+ const user = {
24
+ id: this.generateId('user'),
25
+ username,
26
+ displayName,
27
+ createdAt: now,
28
+ updatedAt: now,
29
+ ...options,
30
+ };
31
+ const users = await this.getUsers();
32
+ users.push(user);
33
+ await fs.writeFile(this.usersPath, JSON.stringify(users, null, 2), 'utf8');
34
+ return user;
35
+ }
36
+ async getUsers() {
37
+ try {
38
+ const content = await fs.readFile(this.usersPath, 'utf8');
39
+ const users = JSON.parse(content);
40
+ return users.map((u) => ({
41
+ ...u,
42
+ createdAt: new Date(u.createdAt),
43
+ updatedAt: new Date(u.updatedAt),
44
+ }));
45
+ }
46
+ catch (error) {
47
+ if (error.code === 'ENOENT') {
48
+ return [];
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ async deleteUser(userId) {
54
+ const users = await this.getUsers();
55
+ const index = users.findIndex(u => u.id === userId);
56
+ if (index === -1)
57
+ return false;
58
+ users.splice(index, 1);
59
+ await fs.writeFile(this.usersPath, JSON.stringify(users, null, 2), 'utf8');
60
+ return true;
61
+ }
62
+ async updateUser(id, updates) {
63
+ const users = await this.getUsers();
64
+ const user = users.find(u => u.id === id);
65
+ if (!user)
66
+ return null;
67
+ Object.assign(user, updates);
68
+ user.updatedAt = new Date();
69
+ await fs.writeFile(this.usersPath, JSON.stringify(users, null, 2), 'utf8');
70
+ return user;
71
+ }
72
+ // Sprint CRUD
73
+ async createSprint(name, options = {}) {
74
+ const now = new Date();
75
+ const sprint = {
76
+ id: this.generateId('sprint'),
77
+ name,
78
+ status: 'planning',
79
+ createdAt: now,
80
+ updatedAt: now,
81
+ ...options,
82
+ };
83
+ const sprints = await this.getSprints();
84
+ sprints.push(sprint);
85
+ await fs.writeFile(this.sprintsPath, JSON.stringify(sprints, null, 2), 'utf8');
86
+ return sprint;
87
+ }
88
+ async getSprints() {
89
+ try {
90
+ const content = await fs.readFile(this.sprintsPath, 'utf8');
91
+ const sprints = JSON.parse(content);
92
+ return sprints.map((s) => ({
93
+ ...s,
94
+ createdAt: new Date(s.createdAt),
95
+ updatedAt: new Date(s.updatedAt),
96
+ startDate: s.startDate ? new Date(s.startDate) : undefined,
97
+ endDate: s.endDate ? new Date(s.endDate) : undefined,
98
+ }));
99
+ }
100
+ catch (error) {
101
+ if (error.code === 'ENOENT') {
102
+ return [];
103
+ }
104
+ throw error;
105
+ }
106
+ }
107
+ async updateSprintStatus(id, status) {
108
+ const sprints = await this.getSprints();
109
+ const sprint = sprints.find(s => s.id === id);
110
+ if (!sprint)
111
+ return null;
112
+ sprint.status = status;
113
+ sprint.updatedAt = new Date();
114
+ await fs.writeFile(this.sprintsPath, JSON.stringify(sprints, null, 2), 'utf8');
115
+ return sprint;
116
+ }
117
+ async updateSprint(id, updates) {
118
+ const sprints = await this.getSprints();
119
+ const sprint = sprints.find(s => s.id === id);
120
+ if (!sprint)
121
+ return null;
122
+ Object.assign(sprint, updates);
123
+ sprint.updatedAt = new Date();
124
+ await fs.writeFile(this.sprintsPath, JSON.stringify(sprints, null, 2), 'utf8');
125
+ return sprint;
126
+ }
127
+ async deleteSprint(sprintId) {
128
+ const sprints = await this.getSprints();
129
+ const index = sprints.findIndex(s => s.id === sprintId);
130
+ if (index === -1)
131
+ return false;
132
+ sprints.splice(index, 1);
133
+ await fs.writeFile(this.sprintsPath, JSON.stringify(sprints, null, 2), 'utf8');
134
+ return true;
135
+ }
136
+ // Ticket CRUD (NDJSON)
137
+ async getTicketChunkFiles() {
138
+ try {
139
+ const files = await fs.readdir(this.ticketsDir);
140
+ return files.filter(f => f.endsWith('.ndjson'));
141
+ }
142
+ catch (error) {
143
+ if (error.code === 'ENOENT') {
144
+ await fs.mkdir(this.ticketsDir, { recursive: true });
145
+ return [];
146
+ }
147
+ throw error;
148
+ }
149
+ }
150
+ async createTicket(type, title, options = {}) {
151
+ const now = new Date();
152
+ const ticket = {
153
+ id: this.generateId(type),
154
+ type,
155
+ title,
156
+ status: 'todo',
157
+ createdAt: now,
158
+ updatedAt: now,
159
+ ...options,
160
+ };
161
+ const chunkFiles = await this.getTicketChunkFiles();
162
+ let chunkFile = chunkFiles[chunkFiles.length - 1];
163
+ if (!chunkFile) {
164
+ chunkFile = 'tickets-0001.ndjson';
165
+ }
166
+ const chunkPath = path.join(this.ticketsDir, chunkFile);
167
+ let count = 0;
168
+ try {
169
+ const content = await fs.readFile(chunkPath, 'utf8');
170
+ count = content.split('\n').filter(line => line.trim()).length;
171
+ }
172
+ catch (error) { }
173
+ if (count >= 1000) {
174
+ const nextNum = chunkFiles.length + 1;
175
+ chunkFile = `tickets-${String(nextNum).padStart(4, '0')}.ndjson`;
176
+ await fs.writeFile(path.join(this.ticketsDir, chunkFile), '', 'utf8');
177
+ }
178
+ await fs.appendFile(path.join(this.ticketsDir, chunkFile), JSON.stringify(ticket) + '\n', 'utf8');
179
+ return ticket;
180
+ }
181
+ async getAllTickets() {
182
+ const chunkFiles = await this.getTicketChunkFiles();
183
+ let tickets = [];
184
+ for (const file of chunkFiles) {
185
+ const content = await fs.readFile(path.join(this.ticketsDir, file), 'utf8');
186
+ const lines = content.split('\n').filter(line => line.trim());
187
+ tickets = tickets.concat(lines.map(line => {
188
+ const t = JSON.parse(line);
189
+ return {
190
+ ...t,
191
+ createdAt: new Date(t.createdAt),
192
+ updatedAt: new Date(t.updatedAt),
193
+ };
194
+ }));
195
+ }
196
+ return tickets;
197
+ }
198
+ async getTicketsByType(type) {
199
+ const tickets = await this.getAllTickets();
200
+ return tickets.filter(t => t.type === type);
201
+ }
202
+ // Comment CRUD (NDJSON)
203
+ async getCommentChunkFiles() {
204
+ try {
205
+ const files = await fs.readdir(this.commentsDir);
206
+ return files.filter(f => f.endsWith('.ndjson'));
207
+ }
208
+ catch (error) {
209
+ if (error.code === 'ENOENT') {
210
+ await fs.mkdir(this.commentsDir, { recursive: true });
211
+ return [];
212
+ }
213
+ throw error;
214
+ }
215
+ }
216
+ async createComment(ticketId, author, content) {
217
+ const now = new Date();
218
+ const comment = {
219
+ id: this.generateId('comment'),
220
+ ticketId,
221
+ author,
222
+ content,
223
+ createdAt: now,
224
+ updatedAt: now,
225
+ };
226
+ const chunkFiles = await this.getCommentChunkFiles();
227
+ let chunkFile = chunkFiles[chunkFiles.length - 1];
228
+ if (!chunkFile) {
229
+ chunkFile = 'comments-0001.ndjson';
230
+ }
231
+ const chunkPath = path.join(this.commentsDir, chunkFile);
232
+ let count = 0;
233
+ try {
234
+ const content = await fs.readFile(chunkPath, 'utf8');
235
+ count = content.split('\n').filter(line => line.trim()).length;
236
+ }
237
+ catch (error) { }
238
+ if (count >= 1000) {
239
+ const nextNum = chunkFiles.length + 1;
240
+ chunkFile = `comments-${String(nextNum).padStart(4, '0')}.ndjson`;
241
+ await fs.writeFile(path.join(this.commentsDir, chunkFile), '', 'utf8');
242
+ }
243
+ await fs.appendFile(path.join(this.commentsDir, chunkFile), JSON.stringify(comment) + '\n', 'utf8');
244
+ return comment;
245
+ }
246
+ async getComments(ticketId) {
247
+ const chunkFiles = await this.getCommentChunkFiles();
248
+ let comments = [];
249
+ for (const file of chunkFiles) {
250
+ const content = await fs.readFile(path.join(this.commentsDir, file), 'utf8');
251
+ const lines = content.split('\n').filter(line => line.trim());
252
+ comments = comments.concat(lines.map(line => {
253
+ const c = JSON.parse(line);
254
+ return {
255
+ ...c,
256
+ createdAt: new Date(c.createdAt),
257
+ updatedAt: new Date(c.updatedAt),
258
+ };
259
+ }));
260
+ }
261
+ return comments.filter(c => c.ticketId === ticketId);
262
+ }
263
+ // Find ticket by ID
264
+ async findTicket(ticketId) {
265
+ const tickets = await this.getAllTickets();
266
+ const ticket = tickets.find(t => t.id === ticketId);
267
+ return ticket ? { ticket } : null;
268
+ }
269
+ // Find entity by ID
270
+ async findEntity(id) {
271
+ const tickets = await this.getAllTickets();
272
+ const ticket = tickets.find(t => t.id === id);
273
+ if (ticket)
274
+ return { entity: ticket, type: ticket.type === 'task' ? 'tasks' : 'bugs' };
275
+ const sprints = await this.getSprints();
276
+ const sprint = sprints.find(s => s.id === id);
277
+ if (sprint)
278
+ return { entity: sprint, type: 'sprints' };
279
+ const users = await this.getUsers();
280
+ const user = users.find(u => u.id === id);
281
+ if (user)
282
+ return { entity: user, type: 'users' };
283
+ return null;
284
+ }
285
+ // Delete comment by ID
286
+ async deleteComment(commentId) {
287
+ const chunkFiles = await this.getCommentChunkFiles();
288
+ let found = false;
289
+ for (const file of chunkFiles) {
290
+ const filePath = path.join(this.commentsDir, file);
291
+ const content = await fs.readFile(filePath, 'utf8');
292
+ const lines = content.split('\n').filter(line => line.trim());
293
+ const filtered = lines.filter(line => {
294
+ const c = JSON.parse(line);
295
+ if (c.id === commentId) {
296
+ found = true;
297
+ return false;
298
+ }
299
+ return true;
300
+ });
301
+ await fs.writeFile(filePath, filtered.map(l => l + '\n').join(''), 'utf8');
302
+ if (found)
303
+ break;
304
+ }
305
+ return found;
306
+ }
307
+ // Delete entity by type and ID
308
+ async deleteEntity(entityType, id) {
309
+ switch (entityType) {
310
+ case 'tasks':
311
+ case 'bugs':
312
+ return this.deleteTicket(id);
313
+ case 'sprints':
314
+ return this.deleteSprint(id);
315
+ case 'users':
316
+ return this.deleteUser(id);
317
+ case 'comments':
318
+ return this.deleteComment(id);
319
+ default:
320
+ return false;
321
+ }
322
+ }
323
+ // Delete ticket by ID
324
+ async deleteTicket(ticketId) {
325
+ const chunkFiles = await this.getTicketChunkFiles();
326
+ let found = false;
327
+ for (const file of chunkFiles) {
328
+ const filePath = path.join(this.ticketsDir, file);
329
+ const content = await fs.readFile(filePath, 'utf8');
330
+ const lines = content.split('\n').filter(line => line.trim());
331
+ const filtered = lines.filter(line => {
332
+ const t = JSON.parse(line);
333
+ if (t.id === ticketId) {
334
+ found = true;
335
+ return false;
336
+ }
337
+ return true;
338
+ });
339
+ await fs.writeFile(filePath, filtered.map(l => l + '\n').join(''), 'utf8');
340
+ if (found)
341
+ break;
342
+ }
343
+ return found;
344
+ }
345
+ // Update ticket by ID
346
+ async updateTicket(id, updates) {
347
+ const chunkFiles = await this.getTicketChunkFiles();
348
+ let updatedTicket = null;
349
+ for (const file of chunkFiles) {
350
+ const filePath = path.join(this.ticketsDir, file);
351
+ const content = await fs.readFile(filePath, 'utf8');
352
+ const lines = content.split('\n').filter(line => line.trim());
353
+ const newLines = lines.map(line => {
354
+ const t = JSON.parse(line);
355
+ if (t.id === id) {
356
+ updatedTicket = { ...t, ...updates, updatedAt: new Date() };
357
+ return JSON.stringify(updatedTicket);
358
+ }
359
+ return line;
360
+ });
361
+ await fs.writeFile(filePath, newLines.map(l => l + '\n').join(''), 'utf8');
362
+ if (updatedTicket)
363
+ break;
364
+ }
365
+ return updatedTicket;
366
+ }
367
+ // Update ticket status
368
+ async updateTicketStatus(id, status) {
369
+ return this.updateTicket(id, { status });
370
+ }
371
+ // Get archived sprints (stub)
372
+ async getArchivedSprints() {
373
+ return [];
374
+ }
375
+ // loadProject (no-op for JSON)
376
+ async loadProject() {
377
+ return;
378
+ }
379
+ }
380
+ export const createStorage = async () => {
381
+ return new ProjectStorage();
382
+ };
383
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/core/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test_getAllTickets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_getAllTickets.d.ts","sourceRoot":"","sources":["../../src/core/test_getAllTickets.js"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { ProjectStorage } from './storage';
2
+ (async () => {
3
+ const storage = new ProjectStorage();
4
+ const tickets = await storage.getAllTickets();
5
+ console.log('Tickets:', tickets);
6
+ })();
7
+ //# sourceMappingURL=test_getAllTickets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_getAllTickets.js","sourceRoot":"","sources":["../../src/core/test_getAllTickets.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,67 @@
1
+ export type TicketType = 'task' | 'bug';
2
+ export type SprintStatus = 'planning' | 'active' | 'completed';
3
+ export type TicketStatus = 'todo' | 'progress' | 'done';
4
+ export interface BaseEntity {
5
+ id: string;
6
+ createdAt: Date;
7
+ updatedAt: Date;
8
+ }
9
+ export interface User extends BaseEntity {
10
+ username: string;
11
+ displayName: string;
12
+ email?: string;
13
+ }
14
+ export interface Sprint extends BaseEntity {
15
+ name: string;
16
+ description?: string;
17
+ status: SprintStatus;
18
+ startDate?: Date;
19
+ endDate?: Date;
20
+ goal?: string;
21
+ }
22
+ export interface Ticket extends BaseEntity {
23
+ type: TicketType;
24
+ title: string;
25
+ description?: string;
26
+ status: TicketStatus;
27
+ assignee?: string;
28
+ sprint?: string;
29
+ estimate?: number;
30
+ labels?: string[];
31
+ priority?: 'low' | 'medium' | 'high' | 'critical';
32
+ }
33
+ export interface TicketComment extends BaseEntity {
34
+ ticketId: string;
35
+ author: string;
36
+ content: string;
37
+ }
38
+ export interface ProjectConfig {
39
+ name: string;
40
+ defaultSprint?: string;
41
+ users: User[];
42
+ settings: {
43
+ useStoryPoints: boolean;
44
+ defaultPriority: Ticket['priority'];
45
+ allowedLabels?: string[];
46
+ };
47
+ }
48
+ export interface ProjectData {
49
+ version: string;
50
+ project: {
51
+ name: string;
52
+ created: Date;
53
+ updated: Date;
54
+ };
55
+ users: User[];
56
+ sprints: Sprint[];
57
+ tickets: Ticket[];
58
+ comments: TicketComment[];
59
+ }
60
+ export interface ArchivedSprintData {
61
+ version: string;
62
+ sprint: Sprint;
63
+ tickets: Ticket[];
64
+ comments: TicketComment[];
65
+ archivedAt: Date;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AACxC,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC/D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,IAAK,SAAQ,UAAU;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,IAAI,CAAC;QACd,OAAO,EAAE,IAAI,CAAC;KACf,CAAC;IACF,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,IAAI,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './core/types.js';
2
+ export { ProjectStorage } from './core/storage.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './core/types.js';
2
+ export { ProjectStorage } from './core/storage.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TKXR MCP Server - Allows AI to manage tickets through CLI commands
4
+ */
5
+ declare class TKXRMCPServer {
6
+ private server;
7
+ private workingDir;
8
+ constructor(workingDir?: string);
9
+ private setupHandlers;
10
+ private runCLI;
11
+ private listTickets;
12
+ private createTicket;
13
+ private updateTicketStatus;
14
+ private deleteTicket;
15
+ private listUsers;
16
+ private createUser;
17
+ private listSprints;
18
+ private createSprint;
19
+ private updateSprintStatus;
20
+ private listComments;
21
+ private addComment;
22
+ run(): Promise<void>;
23
+ }
24
+ export { TKXRMCPServer };
25
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAuBA;;GAEG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAiB/B,OAAO,CAAC,aAAa;YAwRP,MAAM;YAWN,WAAW;YAgBX,YAAY;YAmBZ,kBAAkB;YAalB,YAAY;YAaZ,SAAS;YAaT,UAAU;YAeV,WAAW;YAeX,YAAY;YAgBZ,kBAAkB;YAalB,YAAY;YAaZ,UAAU;IAalB,GAAG;CAIV;AAcD,OAAO,EAAE,aAAa,EAAE,CAAC"}