dyson-swarm-cli 1.0.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 (77) hide show
  1. package/dist/__tests__/help.test.d.ts +2 -0
  2. package/dist/__tests__/help.test.d.ts.map +1 -0
  3. package/dist/__tests__/help.test.js +42 -0
  4. package/dist/__tests__/help.test.js.map +1 -0
  5. package/dist/commands/__tests__/assign.test.d.ts +2 -0
  6. package/dist/commands/__tests__/assign.test.d.ts.map +1 -0
  7. package/dist/commands/__tests__/assign.test.js +47 -0
  8. package/dist/commands/__tests__/assign.test.js.map +1 -0
  9. package/dist/commands/__tests__/create.test.d.ts +2 -0
  10. package/dist/commands/__tests__/create.test.d.ts.map +1 -0
  11. package/dist/commands/__tests__/create.test.js +98 -0
  12. package/dist/commands/__tests__/create.test.js.map +1 -0
  13. package/dist/commands/__tests__/delete.test.d.ts +2 -0
  14. package/dist/commands/__tests__/delete.test.d.ts.map +1 -0
  15. package/dist/commands/__tests__/delete.test.js +46 -0
  16. package/dist/commands/__tests__/delete.test.js.map +1 -0
  17. package/dist/commands/__tests__/get.test.d.ts +2 -0
  18. package/dist/commands/__tests__/get.test.d.ts.map +1 -0
  19. package/dist/commands/__tests__/get.test.js +67 -0
  20. package/dist/commands/__tests__/get.test.js.map +1 -0
  21. package/dist/commands/__tests__/list.test.d.ts +2 -0
  22. package/dist/commands/__tests__/list.test.d.ts.map +1 -0
  23. package/dist/commands/__tests__/list.test.js +74 -0
  24. package/dist/commands/__tests__/list.test.js.map +1 -0
  25. package/dist/commands/__tests__/status.test.d.ts +2 -0
  26. package/dist/commands/__tests__/status.test.d.ts.map +1 -0
  27. package/dist/commands/__tests__/status.test.js +71 -0
  28. package/dist/commands/__tests__/status.test.js.map +1 -0
  29. package/dist/commands/__tests__/unassign.test.d.ts +2 -0
  30. package/dist/commands/__tests__/unassign.test.d.ts.map +1 -0
  31. package/dist/commands/__tests__/unassign.test.js +47 -0
  32. package/dist/commands/__tests__/unassign.test.js.map +1 -0
  33. package/dist/commands/__tests__/update.test.d.ts +2 -0
  34. package/dist/commands/__tests__/update.test.d.ts.map +1 -0
  35. package/dist/commands/__tests__/update.test.js +88 -0
  36. package/dist/commands/__tests__/update.test.js.map +1 -0
  37. package/dist/commands/assign.d.ts +3 -0
  38. package/dist/commands/assign.d.ts.map +1 -0
  39. package/dist/commands/assign.js +26 -0
  40. package/dist/commands/assign.js.map +1 -0
  41. package/dist/commands/create.d.ts +3 -0
  42. package/dist/commands/create.d.ts.map +1 -0
  43. package/dist/commands/create.js +38 -0
  44. package/dist/commands/create.js.map +1 -0
  45. package/dist/commands/delete.d.ts +3 -0
  46. package/dist/commands/delete.d.ts.map +1 -0
  47. package/dist/commands/delete.js +29 -0
  48. package/dist/commands/delete.js.map +1 -0
  49. package/dist/commands/get.d.ts +3 -0
  50. package/dist/commands/get.d.ts.map +1 -0
  51. package/dist/commands/get.js +39 -0
  52. package/dist/commands/get.js.map +1 -0
  53. package/dist/commands/list.d.ts +3 -0
  54. package/dist/commands/list.d.ts.map +1 -0
  55. package/dist/commands/list.js +51 -0
  56. package/dist/commands/list.js.map +1 -0
  57. package/dist/commands/status.d.ts +3 -0
  58. package/dist/commands/status.d.ts.map +1 -0
  59. package/dist/commands/status.js +29 -0
  60. package/dist/commands/status.js.map +1 -0
  61. package/dist/commands/unassign.d.ts +3 -0
  62. package/dist/commands/unassign.d.ts.map +1 -0
  63. package/dist/commands/unassign.js +25 -0
  64. package/dist/commands/unassign.js.map +1 -0
  65. package/dist/commands/update.d.ts +3 -0
  66. package/dist/commands/update.d.ts.map +1 -0
  67. package/dist/commands/update.js +42 -0
  68. package/dist/commands/update.js.map +1 -0
  69. package/dist/help.d.ts +2 -0
  70. package/dist/help.d.ts.map +1 -0
  71. package/dist/help.js +38 -0
  72. package/dist/help.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +31 -0
  76. package/dist/index.js.map +1 -0
  77. package/package.json +40 -0
@@ -0,0 +1,88 @@
1
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
2
+ import { updateAction } from '../update.js';
3
+ // Mock the TaskManager
4
+ const mockUpdateTask = vi.fn();
5
+ vi.mock("dyson-swarm", () => ({
6
+ TaskManager: vi.fn().mockImplementation(() => ({
7
+ updateTask: mockUpdateTask,
8
+ })),
9
+ }));
10
+ // Mock console
11
+ const mockConsoleLog = vi.spyOn(console, 'log').mockImplementation(() => { });
12
+ const mockConsoleError = vi.spyOn(console, 'error').mockImplementation(() => { });
13
+ // Mock process.exit
14
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
15
+ throw new Error('process.exit called');
16
+ });
17
+ describe('update command', () => {
18
+ beforeEach(() => {
19
+ vi.clearAllMocks();
20
+ });
21
+ it('should update task title', async () => {
22
+ const mockTask = {
23
+ id: 'task-1',
24
+ frontmatter: { title: 'New Title' },
25
+ status: 'open',
26
+ };
27
+ mockUpdateTask.mockResolvedValue(mockTask);
28
+ await updateAction('task-1', { title: 'New Title' });
29
+ expect(mockUpdateTask).toHaveBeenCalledWith('task-1', { title: 'New Title' });
30
+ expect(mockConsoleLog).toHaveBeenCalledWith('Updated task: task-1');
31
+ expect(mockConsoleLog).toHaveBeenCalledWith('Title: New Title');
32
+ });
33
+ it('should update task description', async () => {
34
+ const mockTask = {
35
+ id: 'task-1',
36
+ frontmatter: { title: 'Task' },
37
+ status: 'open',
38
+ description: 'New description',
39
+ };
40
+ mockUpdateTask.mockResolvedValue(mockTask);
41
+ await updateAction('task-1', { description: 'New description' });
42
+ expect(mockUpdateTask).toHaveBeenCalledWith('task-1', { description: 'New description' });
43
+ });
44
+ it('should update task assignee', async () => {
45
+ const mockTask = {
46
+ id: 'task-1',
47
+ frontmatter: { title: 'Task', assignee: 'jane.doe' },
48
+ status: 'in-progress',
49
+ };
50
+ mockUpdateTask.mockResolvedValue(mockTask);
51
+ await updateAction('task-1', { assignee: 'jane.doe' });
52
+ expect(mockUpdateTask).toHaveBeenCalledWith('task-1', { assignee: 'jane.doe' });
53
+ expect(mockConsoleLog).toHaveBeenCalledWith('Assignee: jane.doe');
54
+ });
55
+ it('should update multiple fields', async () => {
56
+ const mockTask = {
57
+ id: 'task-1',
58
+ frontmatter: { title: 'New Title', assignee: 'john.doe' },
59
+ status: 'in-progress',
60
+ description: 'New description',
61
+ };
62
+ mockUpdateTask.mockResolvedValue(mockTask);
63
+ await updateAction('task-1', { title: 'New Title', description: 'New description', assignee: 'john.doe' });
64
+ expect(mockUpdateTask).toHaveBeenCalledWith('task-1', {
65
+ title: 'New Title',
66
+ description: 'New description',
67
+ assignee: 'john.doe',
68
+ });
69
+ });
70
+ it('should reject when no updates specified', async () => {
71
+ await expect(updateAction('task-1', {})).rejects.toThrow('process.exit called');
72
+ expect(mockConsoleError).toHaveBeenCalledWith('No updates specified. Use --title, --description, or --assignee.');
73
+ expect(mockExit).toHaveBeenCalledWith(1);
74
+ });
75
+ it('should handle task not found', async () => {
76
+ mockUpdateTask.mockResolvedValue(null);
77
+ await expect(updateAction('task-1', { title: 'New Title' })).rejects.toThrow('process.exit called');
78
+ expect(mockConsoleError).toHaveBeenCalledWith('Task not found: task-1');
79
+ expect(mockExit).toHaveBeenCalledWith(1);
80
+ });
81
+ it('should handle errors', async () => {
82
+ mockUpdateTask.mockRejectedValue(new Error('Database error'));
83
+ await expect(updateAction('task-1', { title: 'New Title' })).rejects.toThrow('process.exit called');
84
+ expect(mockConsoleError).toHaveBeenCalledWith('Failed to update task:', 'Database error');
85
+ expect(mockExit).toHaveBeenCalledWith(1);
86
+ });
87
+ });
88
+ //# sourceMappingURL=update.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/update.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function assignAction(taskId: string, assignee: string): Promise<void>;
2
+ export declare const assignCommand: any;
3
+ //# sourceMappingURL=assign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAkBlE;AAED,eAAO,MAAM,aAAa,EAAE,GAKwE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function assignAction(taskId, assignee) {
4
+ const taskManager = new TaskManager();
5
+ try {
6
+ const task = await taskManager.assignTask(taskId, assignee);
7
+ if (!task) {
8
+ console.error(`Task not found: ${taskId}`);
9
+ process.exit(1);
10
+ }
11
+ console.log(`Assigned task ${task.id} to: ${task.frontmatter.assignee}`);
12
+ console.log(`Title: ${task.frontmatter.title}`);
13
+ console.log(`Status: ${task.status}`);
14
+ }
15
+ catch (error) {
16
+ console.error("Failed to assign task:", error instanceof Error ? error.message : error);
17
+ process.exit(1);
18
+ }
19
+ }
20
+ export const assignCommand = new Command()
21
+ .name("assign")
22
+ .description("Assign a task to someone.")
23
+ .argument("<taskId>", "The id of the task to add an assignee to.")
24
+ .argument("<assignee>", "The assignee to assign the task to.")
25
+ .action(async (_options, taskId, assignee) => assignAction(taskId, assignee));
26
+ //# sourceMappingURL=assign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,QAAgB;IACjE,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAQ,IAAI,OAAO,EAAE;KAC5C,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,UAAU,EAAE,2CAA2C,CAAC;KACjE,QAAQ,CAAC,YAAY,EAAE,qCAAqC,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,QAAa,EAAE,MAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function createAction(options: any): Promise<void>;
2
+ export declare const createCommand: any;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,OAAO,EAAE,GAAG,iBA4B9C;AAED,eAAO,MAAM,aAAa,EAAE,GAML,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function createAction(options) {
4
+ const taskManager = new TaskManager();
5
+ const subtasks = options.subtasks?.map((title) => ({
6
+ title,
7
+ description: "",
8
+ }));
9
+ try {
10
+ const task = await taskManager.createTask({
11
+ title: options.title,
12
+ description: options.description,
13
+ assignee: options.assignee,
14
+ subtasks,
15
+ });
16
+ console.log(`Created task: ${task.id}`);
17
+ console.log(`Title: ${task.frontmatter.title}`);
18
+ console.log(`Status: ${task.status}`);
19
+ if (task.frontmatter.assignee) {
20
+ console.log(`Assignee: ${task.frontmatter.assignee}`);
21
+ }
22
+ if (task.subtasks && task.subtasks.length > 0) {
23
+ console.log(`Subtasks: ${task.subtasks.length}`);
24
+ }
25
+ }
26
+ catch (error) {
27
+ console.error("Failed to create task:", error instanceof Error ? error.message : error);
28
+ process.exit(1);
29
+ }
30
+ }
31
+ export const createCommand = new Command()
32
+ .description("Create a new task.")
33
+ .option("-t, --title <title>", "Task title.", { required: true })
34
+ .option("-d, --description <description>", "Task description.", { required: true })
35
+ .option("-a, --assignee <assignee>", "Assignee username.")
36
+ .option("-s, --subtasks <subtasks...>", "Subtask titles, can be specified multiple times.")
37
+ .action(createAction);
38
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAY;IAC7C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;QACzD,KAAK;QACL,WAAW,EAAE,EAAE;KAChB,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAQ,IAAI,OAAO,EAAE;KAC5C,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,qBAAqB,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAChE,MAAM,CAAC,iCAAiC,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAClF,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,8BAA8B,EAAE,kDAAkD,CAAC;KAC1F,MAAM,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function deleteAction(taskId: string, options: any): Promise<void>;
2
+ export declare const deleteCommand: any;
3
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAsB9D;AAED,eAAO,MAAM,aAAa,EAAE,GAKoD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function deleteAction(taskId, options) {
4
+ const taskManager = new TaskManager();
5
+ if (!options.force) {
6
+ console.log(`Are you sure you want to delete task ${taskId}?`);
7
+ console.log("Use --force to skip this confirmation.");
8
+ process.exit(1);
9
+ }
10
+ try {
11
+ const deleted = await taskManager.deleteTask(taskId);
12
+ if (!deleted) {
13
+ console.error(`Task not found: ${taskId}`);
14
+ process.exit(1);
15
+ }
16
+ console.log(`Deleted task: ${taskId}`);
17
+ }
18
+ catch (error) {
19
+ console.error("Failed to delete task:", error instanceof Error ? error.message : error);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ export const deleteCommand = new Command()
24
+ .name("delete")
25
+ .description("Delete a task.")
26
+ .argument("<taskId>", "The id of the task to delete.")
27
+ .option("-f, --force", "Force deletion without confirmation.")
28
+ .action(async (options, taskId) => deleteAction(taskId, options));
29
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,OAAY;IAC7D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,wCAAwC,MAAM,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAQ,IAAI,OAAO,EAAE;KAC5C,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gBAAgB,CAAC;KAC7B,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;KACrD,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function getAction(taskId: string): Promise<void>;
2
+ export declare const getCommand: any;
3
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,iBAiC7C;AAED,eAAO,MAAM,UAAU,EAAE,GAI4C,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function getAction(taskId) {
4
+ const taskManager = new TaskManager();
5
+ try {
6
+ const task = await taskManager.getTask(taskId);
7
+ if (!task) {
8
+ console.error(`Task not found: ${taskId}`);
9
+ process.exit(1);
10
+ }
11
+ console.log(`ID: ${task.id}`);
12
+ console.log(`Title: ${task.frontmatter.title}`);
13
+ console.log(`Status: ${task.status}`);
14
+ if (task.frontmatter.assignee) {
15
+ console.log(`Assignee: ${task.frontmatter.assignee}`);
16
+ }
17
+ console.log(`\nDescription:`);
18
+ console.log(task.description);
19
+ if (task.subtasks && task.subtasks.length > 0) {
20
+ console.log(`\nSubtasks:`);
21
+ for (const subtask of task.subtasks) {
22
+ console.log(` - ${subtask.frontmatter.title} (${subtask.status})`);
23
+ if (subtask.description) {
24
+ console.log(` ${subtask.description}`);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error("Failed to get task:", error instanceof Error ? error.message : error);
31
+ process.exit(1);
32
+ }
33
+ }
34
+ export const getCommand = new Command()
35
+ .name("get")
36
+ .description("Get a specific task by ID.")
37
+ .argument("<taskId>", "The id of the task to get.")
38
+ .action(async (_options, taskId) => getAction(taskId));
39
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAQ,IAAI,OAAO,EAAE;KACzC,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,QAAa,EAAE,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function listAction(options: any): Promise<void>;
2
+ export declare const listCommand: any;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAAC,OAAO,EAAE,GAAG,iBA+C5C;AAED,eAAO,MAAM,WAAW,EAAE,GAML,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function listAction(options) {
4
+ const taskManager = new TaskManager();
5
+ try {
6
+ const filter = {};
7
+ if (options.status) {
8
+ if (!["open", "in-progress", "closed"].includes(options.status)) {
9
+ console.error("Invalid status. Must be one of: open, in-progress, closed");
10
+ process.exit(1);
11
+ }
12
+ filter.status = options.status;
13
+ }
14
+ if (options.assignee) {
15
+ filter.assignee = options.assignee;
16
+ }
17
+ if (options.hasSubtasks !== undefined) {
18
+ filter.hasSubtasks = options.hasSubtasks;
19
+ }
20
+ const tasks = await taskManager.listTasks(filter);
21
+ if (tasks.length === 0) {
22
+ console.log("No tasks found.");
23
+ return;
24
+ }
25
+ console.log(`Found ${tasks.length} task(s):\n`);
26
+ for (const task of tasks) {
27
+ console.log(`ID: ${task.id}`);
28
+ console.log(`Title: ${task.frontmatter.title}`);
29
+ console.log(`Status: ${task.status}`);
30
+ if (task.frontmatter.assignee) {
31
+ console.log(`Assignee: ${task.frontmatter.assignee}`);
32
+ }
33
+ if (task.subtasks && task.subtasks.length > 0) {
34
+ console.log(`Subtasks: ${task.subtasks.length}`);
35
+ }
36
+ console.log("---");
37
+ }
38
+ }
39
+ catch (error) {
40
+ console.error("Failed to list tasks:", error instanceof Error ? error.message : error);
41
+ process.exit(1);
42
+ }
43
+ }
44
+ export const listCommand = new Command()
45
+ .description("List tasks with optional filters.")
46
+ .option("-s, --status <status>", "Filter by status (open, in-progress, closed).")
47
+ .option("-a, --assignee <assignee>", "Filter by assignee.")
48
+ .option("--has-subtasks", "Filter tasks that have subtasks.")
49
+ .option("--no-subtasks", "Filter tasks that have no subtasks.")
50
+ .action(listAction);
51
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAY;IAC3C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChE,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACrC,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC3C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;QAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAQ,IAAI,OAAO,EAAE;KAC1C,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,uBAAuB,EAAE,+CAA+C,CAAC;KAChF,MAAM,CAAC,2BAA2B,EAAE,qBAAqB,CAAC;KAC1D,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;KAC9D,MAAM,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function statusAction(taskId: string, status: string): Promise<void>;
2
+ export declare const statusCommand: any;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAsBhE;AAED,eAAO,MAAM,aAAa,EAAE,GAKoE,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function statusAction(taskId, status) {
4
+ const taskManager = new TaskManager();
5
+ if (!["open", "in-progress", "closed"].includes(status)) {
6
+ console.error("Invalid status. Must be one of: open, in-progress, closed");
7
+ process.exit(1);
8
+ }
9
+ try {
10
+ const task = await taskManager.changeTaskStatus(taskId, status);
11
+ if (!task) {
12
+ console.error(`Task not found: ${taskId}`);
13
+ process.exit(1);
14
+ }
15
+ console.log(`Changed status of task ${task.id} to: ${task.status}`);
16
+ console.log(`Title: ${task.frontmatter.title}`);
17
+ }
18
+ catch (error) {
19
+ console.error("Failed to change task status:", error instanceof Error ? error.message : error);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ export const statusCommand = new Command()
24
+ .name("status")
25
+ .description("Change the status of a task.")
26
+ .argument("<taskId>", "The id of the task to update.")
27
+ .argument("<status>", "The new status (open, in-progress, or closed).")
28
+ .action(async (_options, taskId, status) => statusAction(taskId, status));
29
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc;IAC/D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAA2C,CAAC,CAAC;QAErG,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAQ,IAAI,OAAO,EAAE;KAC5C,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;KACrD,QAAQ,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,QAAa,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function unassignAction(taskId: string): Promise<void>;
2
+ export declare const unassignCommand: any;
3
+ //# sourceMappingURL=unassign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unassign.d.ts","sourceRoot":"","sources":["../../src/commands/unassign.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,iBAkBlD;AAED,eAAO,MAAM,eAAe,EAAE,GAI4C,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function unassignAction(taskId) {
4
+ const taskManager = new TaskManager();
5
+ try {
6
+ const task = await taskManager.unassignTask(taskId);
7
+ if (!task) {
8
+ console.error(`Task not found: ${taskId}`);
9
+ process.exit(1);
10
+ }
11
+ console.log(`Unassigned task: ${task.id}`);
12
+ console.log(`Title: ${task.frontmatter.title}`);
13
+ console.log(`Status: ${task.status}`);
14
+ }
15
+ catch (error) {
16
+ console.error("Failed to unassign task:", error instanceof Error ? error.message : error);
17
+ process.exit(1);
18
+ }
19
+ }
20
+ export const unassignCommand = new Command()
21
+ .name("unassign")
22
+ .description("Unassign a task.")
23
+ .argument("<taskId>", "The id of the task to unassign.")
24
+ .action(async (_options, taskId) => unassignAction(taskId));
25
+ //# sourceMappingURL=unassign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unassign.js","sourceRoot":"","sources":["../../src/commands/unassign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAQ,IAAI,OAAO,EAAE;KAC9C,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,QAAQ,CAAC,UAAU,EAAE,iCAAiC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,QAAa,EAAE,MAAc,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function updateAction(taskId: string, options: any): Promise<void>;
2
+ export declare const updateCommand: any;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAgC9D;AAED,eAAO,MAAM,aAAa,EAAE,GAOoD,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { Command } from "@cliffy/command";
2
+ import { TaskManager } from "dyson-swarm";
3
+ export async function updateAction(taskId, options) {
4
+ const taskManager = new TaskManager();
5
+ try {
6
+ const updateOptions = {};
7
+ if (options.title)
8
+ updateOptions.title = options.title;
9
+ if (options.description)
10
+ updateOptions.description = options.description;
11
+ if (options.assignee)
12
+ updateOptions.assignee = options.assignee;
13
+ if (Object.keys(updateOptions).length === 0) {
14
+ console.error("No updates specified. Use --title, --description, or --assignee.");
15
+ process.exit(1);
16
+ }
17
+ const task = await taskManager.updateTask(taskId, updateOptions);
18
+ if (!task) {
19
+ console.error(`Task not found: ${taskId}`);
20
+ process.exit(1);
21
+ }
22
+ console.log(`Updated task: ${task.id}`);
23
+ console.log(`Title: ${task.frontmatter.title}`);
24
+ console.log(`Status: ${task.status}`);
25
+ if (task.frontmatter.assignee) {
26
+ console.log(`Assignee: ${task.frontmatter.assignee}`);
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error("Failed to update task:", error instanceof Error ? error.message : error);
31
+ process.exit(1);
32
+ }
33
+ }
34
+ export const updateCommand = new Command()
35
+ .name("update")
36
+ .description("Update a task.")
37
+ .argument("<taskId>", "The id of the task to update.")
38
+ .option("-t, --title <title>", "New title.")
39
+ .option("-d, --description <description>", "New description.")
40
+ .option("-a, --assignee <assignee>", "New assignee.")
41
+ .action(async (options, taskId) => updateAction(taskId, options));
42
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,OAAY;IAC7D,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,aAAa,GAAQ,EAAE,CAAC;QAE9B,IAAI,OAAO,CAAC,KAAK;YAAE,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,IAAI,OAAO,CAAC,WAAW;YAAE,aAAa,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACzE,IAAI,OAAO,CAAC,QAAQ;YAAE,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEhE,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAQ,IAAI,OAAO,EAAE;KAC5C,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gBAAgB,CAAC;KAC7B,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;KACrD,MAAM,CAAC,qBAAqB,EAAE,YAAY,CAAC;KAC3C,MAAM,CAAC,iCAAiC,EAAE,kBAAkB,CAAC;KAC7D,MAAM,CAAC,2BAA2B,EAAE,eAAe,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,MAAc,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC"}
package/dist/help.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function generateHelp(command: any): string;
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CA2CjD"}
package/dist/help.js ADDED
@@ -0,0 +1,38 @@
1
+ import { Table } from "@cliffy/table";
2
+ export function generateHelp(command) {
3
+ const lines = [];
4
+ lines.push(`Usage: ${command.getName()} [options] [command]`);
5
+ lines.push("");
6
+ lines.push(command.getDescription() || "");
7
+ const allCommands = command.getCommands();
8
+ if (allCommands.length > 0) {
9
+ lines.push("");
10
+ lines.push("Commands:");
11
+ const cmdRows = [];
12
+ for (const cmd of allCommands) {
13
+ const name = cmd.getName();
14
+ const args = cmd.getArguments()
15
+ .map((arg) => arg.optional ? `[${arg.name}]` : `<${arg.name}>`)
16
+ .join(" ");
17
+ cmdRows.push([` ${name} ${args}`, cmd.getDescription()]);
18
+ const arguments_ = cmd.getArguments();
19
+ for (const arg of arguments_) {
20
+ const argStr = arg.optional ? `[${arg.name}]` : `<${arg.name}>`;
21
+ const description = arg.description ? ` ${arg.description}` : "";
22
+ const requiredText = arg.optional ? "(Optional)" : "(Required)";
23
+ cmdRows.push([` ${argStr}`, requiredText + (description || "")]);
24
+ }
25
+ const opts = cmd.getOptions();
26
+ for (const opt of opts) {
27
+ const flags = Array.isArray(opt.flags) ? opt.flags.join(", ") : (opt.flags || "");
28
+ const desc = opt.description || "";
29
+ cmdRows.push([` ${flags}`, desc]);
30
+ }
31
+ cmdRows.push(["", ""]);
32
+ }
33
+ cmdRows.pop();
34
+ lines.push(Table.from(cmdRows).padding(1).toString());
35
+ }
36
+ return lines.join("\n");
37
+ }
38
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "@cliffy/command";
3
+ import { createCommand } from "./commands/create.js";
4
+ import { listCommand } from "./commands/list.js";
5
+ import { getCommand } from "./commands/get.js";
6
+ import { updateCommand } from "./commands/update.js";
7
+ import { statusCommand } from "./commands/status.js";
8
+ import { assignCommand } from "./commands/assign.js";
9
+ import { unassignCommand } from "./commands/unassign.js";
10
+ import { deleteCommand } from "./commands/delete.js";
11
+ import { generateHelp } from "./help.js";
12
+ await new Command()
13
+ .help(function () {
14
+ return generateHelp(this);
15
+ })
16
+ .name("swarm")
17
+ .action(function () {
18
+ this.showHelp();
19
+ })
20
+ .description("A markdown-based issue tracking system CLI")
21
+ .version("1.0.0")
22
+ .command("create", createCommand)
23
+ .command("list", listCommand)
24
+ .command("get", getCommand)
25
+ .command("update", updateCommand)
26
+ .command("status", statusCommand)
27
+ .command("assign", assignCommand)
28
+ .command("unassign", unassignCommand)
29
+ .command("delete", deleteCommand)
30
+ .parse();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,IAAI,OAAO,EAAE;KAChB,IAAI,CAAC;IACJ,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;KACD,IAAI,CAAC,OAAO,CAAC;KACb,MAAM,CAAC;IACN,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,CAAC,CAAC;KACD,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,CAAC;KAChB,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;KAChC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;KAC5B,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;KAC1B,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;KAChC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;KAChC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;KAChC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC;KACpC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;KAChC,KAAK,EAAE,CAAC"}