@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.
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/commands/comments.d.ts +10 -0
- package/dist/cli/commands/comments.d.ts.map +1 -0
- package/dist/cli/commands/comments.js +81 -0
- package/dist/cli/commands/comments.js.map +1 -0
- package/dist/cli/commands/create.d.ts +11 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +74 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +7 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +61 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/list.d.ts +16 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +239 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +8 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +52 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +8 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +505 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/show.d.ts +7 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +84 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/sprint.d.ts +11 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -0
- package/dist/cli/commands/sprint.js +114 -0
- package/dist/cli/commands/sprint.js.map +1 -0
- package/dist/cli/commands/sprints.d.ts +10 -0
- package/dist/cli/commands/sprints.d.ts.map +1 -0
- package/dist/cli/commands/sprints.js +64 -0
- package/dist/cli/commands/sprints.js.map +1 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +48 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/user.d.ts +8 -0
- package/dist/cli/commands/user.d.ts.map +1 -0
- package/dist/cli/commands/user.js +61 -0
- package/dist/cli/commands/user.js.map +1 -0
- package/dist/cli/commands/users.d.ts +7 -0
- package/dist/cli/commands/users.d.ts.map +1 -0
- package/dist/cli/commands/users.js +28 -0
- package/dist/cli/commands/users.js.map +1 -0
- package/dist/cli/commands/version.d.ts +7 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +94 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/notifier.d.ts +51 -0
- package/dist/core/notifier.d.ts.map +1 -0
- package/dist/core/notifier.js +118 -0
- package/dist/core/notifier.js.map +1 -0
- package/dist/core/storage.d.ts +41 -0
- package/dist/core/storage.d.ts.map +1 -0
- package/dist/core/storage.js +383 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/test_getAllTickets.d.ts +2 -0
- package/dist/core/test_getAllTickets.d.ts.map +1 -0
- package/dist/core/test_getAllTickets.js +7 -0
- package/dist/core/test_getAllTickets.js.map +1 -0
- package/dist/core/types.d.ts +67 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +25 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +489 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/web/_app/immutable/assets/0.47dd68fd.css +1 -0
- package/dist/web/_app/immutable/assets/2.3f11c9a4.css +1 -0
- package/dist/web/_app/immutable/assets/_layout.47e0a118.css +1 -0
- package/dist/web/_app/immutable/assets/_page.3f11c9a4.css +1 -0
- package/dist/web/_app/immutable/chunks/index.23b89654.js +1 -0
- package/dist/web/_app/immutable/chunks/index.f094d695.js +1 -0
- package/dist/web/_app/immutable/chunks/scheduler.81694808.js +1 -0
- package/dist/web/_app/immutable/chunks/singletons.9c246a72.js +1 -0
- package/dist/web/_app/immutable/chunks/stores.48058fce.js +1 -0
- package/dist/web/_app/immutable/entry/app.fea83d45.js +1 -0
- package/dist/web/_app/immutable/entry/start.3fd90366.js +3 -0
- package/dist/web/_app/immutable/nodes/0.e605bf9a.js +1 -0
- package/dist/web/_app/immutable/nodes/1.e3ce54f6.js +1 -0
- package/dist/web/_app/immutable/nodes/2.04dfac64.js +13 -0
- package/dist/web/_app/version.json +1 -0
- package/dist/web/favicon.png +3 -0
- package/dist/web/favicon.svg +10 -0
- package/dist/web/index.html +37 -0
- package/package.json +60 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import minimist from 'minimist';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { createTicket } from './commands/create.js';
|
|
8
|
+
import { listTickets } from './commands/list.js';
|
|
9
|
+
import { showTicket } from './commands/show.js';
|
|
10
|
+
import { deleteTicket } from './commands/delete.js';
|
|
11
|
+
import { updateTicketStatus } from './commands/status.js';
|
|
12
|
+
import { startServer } from './commands/serve.js';
|
|
13
|
+
import { listUsers } from './commands/users.js';
|
|
14
|
+
import { manageUser } from './commands/user.js';
|
|
15
|
+
import { listSprints } from './commands/sprints.js';
|
|
16
|
+
import { manageSprint } from './commands/sprint.js';
|
|
17
|
+
import { startMCPServer } from './commands/mcp.js';
|
|
18
|
+
import { manageComments } from './commands/comments.js';
|
|
19
|
+
import { manageVersion } from './commands/version.js';
|
|
20
|
+
const commands = {
|
|
21
|
+
create: createTicket,
|
|
22
|
+
list: listTickets,
|
|
23
|
+
show: showTicket,
|
|
24
|
+
delete: deleteTicket,
|
|
25
|
+
status: updateTicketStatus,
|
|
26
|
+
serve: startServer,
|
|
27
|
+
users: listUsers,
|
|
28
|
+
user: manageUser,
|
|
29
|
+
sprints: listSprints,
|
|
30
|
+
sprint: manageSprint,
|
|
31
|
+
comments: manageComments,
|
|
32
|
+
mcp: startMCPServer,
|
|
33
|
+
version: manageVersion,
|
|
34
|
+
new: createTicket, // Alias for create
|
|
35
|
+
};
|
|
36
|
+
function showHelp() {
|
|
37
|
+
console.log(chalk.blue.bold('tkxr - In-repo ticket management system'));
|
|
38
|
+
console.log();
|
|
39
|
+
console.log(chalk.green('Usage:'));
|
|
40
|
+
console.log(' tkxr <command> [options]');
|
|
41
|
+
console.log();
|
|
42
|
+
console.log(chalk.green('Ticket Commands:'));
|
|
43
|
+
console.log(' create <type> <title> Create a new ticket (task, bug)');
|
|
44
|
+
console.log(' new <type> <title> Alias for create');
|
|
45
|
+
console.log(' list [type] List tickets (optionally filter by type)');
|
|
46
|
+
console.log(' show <id> Show detailed ticket information');
|
|
47
|
+
console.log(' Options:');
|
|
48
|
+
console.log(' --search, -s <term> Search tickets by title, description, or ID');
|
|
49
|
+
console.log(' --sort-by <field> Sort by: title, status, priority, created, updated');
|
|
50
|
+
console.log(' --order <order> Sort order: asc, desc (default: desc)');
|
|
51
|
+
console.log(' --status <status> Filter by status: todo, progress, done');
|
|
52
|
+
console.log(' --assignee <id> Filter by assignee ID');
|
|
53
|
+
console.log(' --sprint <id> Filter by sprint ID');
|
|
54
|
+
console.log(' --verbose, -v Show assignee and sprint names');
|
|
55
|
+
console.log(' delete <id> Delete a ticket');
|
|
56
|
+
console.log(' status <id> <status> Update ticket status (todo, progress, done)');
|
|
57
|
+
console.log(' comments <id> List comments for a ticket');
|
|
58
|
+
console.log(' comments <id> --add Add a comment to a ticket');
|
|
59
|
+
console.log(' --author <author-id> Author of the comment (user ID or username)');
|
|
60
|
+
console.log(' --content <text> Comment content');
|
|
61
|
+
console.log();
|
|
62
|
+
console.log(chalk.green('User Commands:'));
|
|
63
|
+
console.log(' users List all users');
|
|
64
|
+
console.log(' user create <username> <name> Create a new user');
|
|
65
|
+
console.log();
|
|
66
|
+
console.log(chalk.green('Sprint Commands:'));
|
|
67
|
+
console.log(' sprints List all sprints');
|
|
68
|
+
console.log(' sprint create <name> Create a new sprint');
|
|
69
|
+
console.log(' sprint status <id> <status> Update sprint status');
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(chalk.green('Server Commands:'));
|
|
72
|
+
console.log(' serve Start web interface server');
|
|
73
|
+
console.log(' Options:');
|
|
74
|
+
console.log(' --port <number> Server port (default: 8080)');
|
|
75
|
+
console.log(' --host <string> Server host (default: localhost)');
|
|
76
|
+
console.log(' mcp Start MCP server for AI integration');
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(chalk.green('Version Commands:'));
|
|
79
|
+
console.log(' version Show current version');
|
|
80
|
+
console.log(' version --bump <type> Bump version (patch, minor, major)');
|
|
81
|
+
console.log();
|
|
82
|
+
console.log(chalk.green('Examples:'));
|
|
83
|
+
console.log(' tkxr new task "Fix login bug"');
|
|
84
|
+
console.log(' tkxr new bug "Dashboard crash"');
|
|
85
|
+
console.log(' tkxr user create johndoe "John Doe"');
|
|
86
|
+
console.log(' tkxr sprint create "Sprint 1"');
|
|
87
|
+
console.log(' tkxr sprint status spr-123 active');
|
|
88
|
+
console.log(' tkxr list tasks');
|
|
89
|
+
console.log(' tkxr list --search "login"');
|
|
90
|
+
console.log(' tkxr list --sort-by priority --order desc');
|
|
91
|
+
console.log(' tkxr list --status progress --sort-by created');
|
|
92
|
+
console.log(' tkxr status task-123 done');
|
|
93
|
+
console.log(' tkxr comments tas-123');
|
|
94
|
+
console.log(' tkxr comments tas-123 --add --author johndoe --content "Fixed the issue"');
|
|
95
|
+
console.log(' tkxr serve --port 3000');
|
|
96
|
+
console.log(' tkxr mcp');
|
|
97
|
+
}
|
|
98
|
+
function showVersion() {
|
|
99
|
+
try {
|
|
100
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
101
|
+
const __dirname = dirname(__filename);
|
|
102
|
+
const packageJsonPath = join(__dirname, '../../package.json');
|
|
103
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
104
|
+
console.log(`tkxr v${packageJson.version}`);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.log('tkxr v1.0.0'); // Fallback version
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function main() {
|
|
111
|
+
const args = minimist(process.argv.slice(2));
|
|
112
|
+
if (args.help || args.h) {
|
|
113
|
+
showHelp();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (args.version || args.v) {
|
|
117
|
+
showVersion();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const command = args._[0];
|
|
121
|
+
if (!command) {
|
|
122
|
+
console.log(chalk.red('Error: No command specified'));
|
|
123
|
+
console.log('Run "tkxr --help" for usage information');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const commandFn = commands[command];
|
|
127
|
+
if (!commandFn) {
|
|
128
|
+
console.log(chalk.red(`Error: Unknown command "${command}"`));
|
|
129
|
+
console.log('Run "tkxr --help" for available commands');
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
await commandFn(args);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.log(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Handle uncaught errors
|
|
141
|
+
process.on('unhandledRejection', (error) => {
|
|
142
|
+
console.log(chalk.red(`Unhandled error: ${error}`));
|
|
143
|
+
process.exit(1);
|
|
144
|
+
});
|
|
145
|
+
main();
|
|
146
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple notification client for sending updates from CLI to web server
|
|
3
|
+
*/
|
|
4
|
+
export declare class NotificationClient {
|
|
5
|
+
private serverUrl;
|
|
6
|
+
private timeout;
|
|
7
|
+
constructor(serverUrl?: string, timeout?: number);
|
|
8
|
+
/**
|
|
9
|
+
* Update the server URL (useful when server starts on different port)
|
|
10
|
+
*/
|
|
11
|
+
setServerUrl(url: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Attempt to notify the web server of a change
|
|
14
|
+
* Fails silently if server is not running
|
|
15
|
+
*/
|
|
16
|
+
private notify;
|
|
17
|
+
/**
|
|
18
|
+
* Notify server that a ticket was created
|
|
19
|
+
*/
|
|
20
|
+
notifyTicketCreated(ticket: any): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Notify server that a ticket was updated
|
|
23
|
+
*/
|
|
24
|
+
notifyTicketUpdated(ticket: any): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Notify server that a ticket was deleted
|
|
27
|
+
*/
|
|
28
|
+
notifyTicketDeleted(id: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Notify server that a sprint was created
|
|
31
|
+
*/
|
|
32
|
+
notifySprintCreated(sprint: any): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Notify server that a sprint was updated
|
|
35
|
+
*/
|
|
36
|
+
notifySprintUpdated(sprint: any): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Notify server that a user was created
|
|
39
|
+
*/
|
|
40
|
+
notifyUserCreated(user: any): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Notify server that a comment was created
|
|
43
|
+
*/
|
|
44
|
+
notifyCommentCreated(comment: any): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Notify server that a comment was deleted
|
|
47
|
+
*/
|
|
48
|
+
notifyCommentDeleted(commentId: string, ticketId: string): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
export declare const notifier: NotificationClient;
|
|
51
|
+
//# sourceMappingURL=notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/core/notifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;gBADP,SAAS,GAAE,MAAgC,EAC3C,OAAO,GAAE,MAAa;IAGhC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI/B;;;OAGG;YACW,MAAM;IA4BpB;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/E;AAwBD,eAAO,MAAM,QAAQ,oBAAgD,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple notification client for sending updates from CLI to web server
|
|
3
|
+
*/
|
|
4
|
+
export class NotificationClient {
|
|
5
|
+
serverUrl;
|
|
6
|
+
timeout;
|
|
7
|
+
constructor(serverUrl = 'http://localhost:8080', timeout = 5000 // Increased timeout
|
|
8
|
+
) {
|
|
9
|
+
this.serverUrl = serverUrl;
|
|
10
|
+
this.timeout = timeout;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Update the server URL (useful when server starts on different port)
|
|
14
|
+
*/
|
|
15
|
+
setServerUrl(url) {
|
|
16
|
+
this.serverUrl = url;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Attempt to notify the web server of a change
|
|
20
|
+
* Fails silently if server is not running
|
|
21
|
+
*/
|
|
22
|
+
async notify(endpoint, data) {
|
|
23
|
+
try {
|
|
24
|
+
const controller = new AbortController();
|
|
25
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
26
|
+
const response = await fetch(`${this.serverUrl}${endpoint}`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: {
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
},
|
|
31
|
+
body: data ? JSON.stringify(data) : undefined,
|
|
32
|
+
signal: controller.signal,
|
|
33
|
+
});
|
|
34
|
+
clearTimeout(timeoutId);
|
|
35
|
+
// Don't throw on HTTP errors, just log for debugging
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
console.log(`⚠️ Notification failed: ${response.status} - ${endpoint}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(`✓ Notification sent successfully: ${endpoint}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
// Silently fail - server might not be running
|
|
45
|
+
console.log(`⚠️ Server notification failed for ${endpoint}:`, error instanceof Error ? error.message : 'Unknown error');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Notify server that a ticket was created
|
|
50
|
+
*/
|
|
51
|
+
async notifyTicketCreated(ticket) {
|
|
52
|
+
await this.notify('/api/cli-notifications/ticket-created', ticket);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Notify server that a ticket was updated
|
|
56
|
+
*/
|
|
57
|
+
async notifyTicketUpdated(ticket) {
|
|
58
|
+
await this.notify('/api/cli-notifications/ticket-updated', ticket);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Notify server that a ticket was deleted
|
|
62
|
+
*/
|
|
63
|
+
async notifyTicketDeleted(id) {
|
|
64
|
+
await this.notify('/api/cli-notifications/ticket-deleted', { id });
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Notify server that a sprint was created
|
|
68
|
+
*/
|
|
69
|
+
async notifySprintCreated(sprint) {
|
|
70
|
+
await this.notify('/api/cli-notifications/sprint-created', sprint);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Notify server that a sprint was updated
|
|
74
|
+
*/
|
|
75
|
+
async notifySprintUpdated(sprint) {
|
|
76
|
+
await this.notify('/api/cli-notifications/sprint-updated', sprint);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Notify server that a user was created
|
|
80
|
+
*/
|
|
81
|
+
async notifyUserCreated(user) {
|
|
82
|
+
await this.notify('/api/cli-notifications/user-created', user);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Notify server that a comment was created
|
|
86
|
+
*/
|
|
87
|
+
async notifyCommentCreated(comment) {
|
|
88
|
+
await this.notify('/api/cli-notifications/comment-created', comment);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Notify server that a comment was deleted
|
|
92
|
+
*/
|
|
93
|
+
async notifyCommentDeleted(commentId, ticketId) {
|
|
94
|
+
await this.notify('/api/cli-notifications/comment-deleted', { id: commentId, ticketId });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
import { existsSync, readFileSync } from 'fs';
|
|
98
|
+
/**
|
|
99
|
+
* Try to read server config from .tkxr-server file
|
|
100
|
+
*/
|
|
101
|
+
function getDefaultServerUrl() {
|
|
102
|
+
try {
|
|
103
|
+
const configPath = './.tkxr-server';
|
|
104
|
+
if (existsSync(configPath)) {
|
|
105
|
+
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
106
|
+
return config.url || `http://localhost:${config.port || 8080}`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
// Ignore errors, fall back to defaults
|
|
111
|
+
console.debug('Could not read server config:', error);
|
|
112
|
+
}
|
|
113
|
+
// Fallback to environment or default
|
|
114
|
+
return process.env.TKXR_SERVER_URL || `http://localhost:${process.env.TKXR_PORT || 8080}`;
|
|
115
|
+
}
|
|
116
|
+
// Global instance - can be reconfigured at runtime
|
|
117
|
+
export const notifier = new NotificationClient(getDefaultServerUrl());
|
|
118
|
+
//# sourceMappingURL=notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../src/core/notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Ticket, Sprint, User, TicketType, TicketComment } from './types.js';
|
|
2
|
+
export declare class ProjectStorage {
|
|
3
|
+
private ticketsDir;
|
|
4
|
+
private commentsDir;
|
|
5
|
+
private sprintsPath;
|
|
6
|
+
private usersPath;
|
|
7
|
+
constructor(basePath?: string);
|
|
8
|
+
private generateId;
|
|
9
|
+
createUser(username: string, displayName: string, options?: Partial<User>): Promise<User>;
|
|
10
|
+
getUsers(): Promise<User[]>;
|
|
11
|
+
deleteUser(userId: string): Promise<boolean>;
|
|
12
|
+
updateUser(id: string, updates: Partial<Pick<User, 'username' | 'displayName' | 'email'>>): Promise<User | null>;
|
|
13
|
+
createSprint(name: string, options?: Partial<Sprint>): Promise<Sprint>;
|
|
14
|
+
getSprints(): Promise<Sprint[]>;
|
|
15
|
+
updateSprintStatus(id: string, status: Sprint['status']): Promise<Sprint | null>;
|
|
16
|
+
updateSprint(id: string, updates: Partial<Pick<Sprint, 'name' | 'description' | 'goal'>>): Promise<Sprint | null>;
|
|
17
|
+
deleteSprint(sprintId: string): Promise<boolean>;
|
|
18
|
+
private getTicketChunkFiles;
|
|
19
|
+
createTicket(type: TicketType, title: string, options?: Partial<Ticket>): Promise<Ticket>;
|
|
20
|
+
getAllTickets(): Promise<Ticket[]>;
|
|
21
|
+
getTicketsByType(type: TicketType): Promise<Ticket[]>;
|
|
22
|
+
private getCommentChunkFiles;
|
|
23
|
+
createComment(ticketId: string, author: string, content: string): Promise<TicketComment>;
|
|
24
|
+
getComments(ticketId: string): Promise<TicketComment[]>;
|
|
25
|
+
findTicket(ticketId: string): Promise<{
|
|
26
|
+
ticket: Ticket;
|
|
27
|
+
} | null>;
|
|
28
|
+
findEntity(id: string): Promise<{
|
|
29
|
+
entity: any;
|
|
30
|
+
type: string;
|
|
31
|
+
} | null>;
|
|
32
|
+
deleteComment(commentId: string): Promise<boolean>;
|
|
33
|
+
deleteEntity(entityType: string, id: string): Promise<boolean>;
|
|
34
|
+
deleteTicket(ticketId: string): Promise<boolean>;
|
|
35
|
+
updateTicket(id: string, updates: Partial<Ticket>): Promise<Ticket | null>;
|
|
36
|
+
updateTicketStatus(id: string, status: Ticket['status']): Promise<Ticket | null>;
|
|
37
|
+
getArchivedSprints(): Promise<string[]>;
|
|
38
|
+
loadProject(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare const createStorage: () => Promise<ProjectStorage>;
|
|
41
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/core/storage.ts"],"names":[],"mappings":"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"}
|