@stephendolan/omnifocus-cli 1.2.4 → 1.3.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 (53) hide show
  1. package/dist/index.js +1302 -20
  2. package/dist/index.js.map +1 -1
  3. package/package.json +10 -8
  4. package/dist/commands/inbox.d.ts +0 -3
  5. package/dist/commands/inbox.d.ts.map +0 -1
  6. package/dist/commands/inbox.js +0 -22
  7. package/dist/commands/inbox.js.map +0 -1
  8. package/dist/commands/perspective.d.ts +0 -3
  9. package/dist/commands/perspective.d.ts.map +0 -1
  10. package/dist/commands/perspective.js +0 -22
  11. package/dist/commands/perspective.js.map +0 -1
  12. package/dist/commands/project.d.ts +0 -3
  13. package/dist/commands/project.d.ts.map +0 -1
  14. package/dist/commands/project.js +0 -87
  15. package/dist/commands/project.js.map +0 -1
  16. package/dist/commands/search.d.ts +0 -3
  17. package/dist/commands/search.d.ts.map +0 -1
  18. package/dist/commands/search.js +0 -13
  19. package/dist/commands/search.js.map +0 -1
  20. package/dist/commands/tag.d.ts +0 -3
  21. package/dist/commands/tag.d.ts.map +0 -1
  22. package/dist/commands/tag.js +0 -68
  23. package/dist/commands/tag.js.map +0 -1
  24. package/dist/commands/task.d.ts +0 -3
  25. package/dist/commands/task.d.ts.map +0 -1
  26. package/dist/commands/task.js +0 -101
  27. package/dist/commands/task.js.map +0 -1
  28. package/dist/index.d.ts +0 -3
  29. package/dist/index.d.ts.map +0 -1
  30. package/dist/lib/__tests__/display.test.d.ts +0 -2
  31. package/dist/lib/__tests__/display.test.d.ts.map +0 -1
  32. package/dist/lib/__tests__/display.test.js +0 -93
  33. package/dist/lib/__tests__/display.test.js.map +0 -1
  34. package/dist/lib/command-utils.d.ts +0 -4
  35. package/dist/lib/command-utils.d.ts.map +0 -1
  36. package/dist/lib/command-utils.js +0 -22
  37. package/dist/lib/command-utils.js.map +0 -1
  38. package/dist/lib/display.d.ts +0 -21
  39. package/dist/lib/display.d.ts.map +0 -1
  40. package/dist/lib/display.js +0 -294
  41. package/dist/lib/display.js.map +0 -1
  42. package/dist/lib/omnifocus.d.ts +0 -38
  43. package/dist/lib/omnifocus.d.ts.map +0 -1
  44. package/dist/lib/omnifocus.js +0 -860
  45. package/dist/lib/omnifocus.js.map +0 -1
  46. package/dist/lib/output.d.ts +0 -6
  47. package/dist/lib/output.d.ts.map +0 -1
  48. package/dist/lib/output.js +0 -12
  49. package/dist/lib/output.js.map +0 -1
  50. package/dist/types.d.ts +0 -164
  51. package/dist/types.d.ts.map +0 -1
  52. package/dist/types.js +0 -2
  53. package/dist/types.js.map +0 -1
@@ -1,101 +0,0 @@
1
- import { Command } from 'commander';
2
- import { outputJson } from '../lib/output.js';
3
- import { executeOmniFocusCommand } from '../lib/command-utils.js';
4
- export function createTaskCommand() {
5
- const command = new Command('task');
6
- command.description('Manage OmniFocus tasks');
7
- command
8
- .command('list')
9
- .alias('ls')
10
- .description('List tasks')
11
- .option('-f, --flagged', 'Show only flagged tasks')
12
- .option('-p, --project <name>', 'Filter by project')
13
- .option('-t, --tag <name>', 'Filter by tag')
14
- .option('-c, --completed', 'Include completed tasks')
15
- .action(async (options) => {
16
- await executeOmniFocusCommand('Loading tasks...', (of) => {
17
- const filters = {
18
- includeCompleted: options.completed,
19
- ...(options.flagged && { flagged: true }),
20
- ...(options.project && { project: options.project }),
21
- ...(options.tag && { tag: options.tag }),
22
- };
23
- return of.listTasks(filters);
24
- }, (tasks) => outputJson(tasks), 'Failed to load tasks');
25
- });
26
- command
27
- .command('create <name>')
28
- .description('Create a new task')
29
- .option('-p, --project <name>', 'Assign to project')
30
- .option('--note <text>', 'Add note')
31
- .option('-t, --tag <tags...>', 'Add tags')
32
- .option('-d, --due <date>', 'Set due date (ISO format)')
33
- .option('-D, --defer <date>', 'Set defer date (ISO format)')
34
- .option('-f, --flagged', 'Flag the task')
35
- .option('-e, --estimate <minutes>', 'Estimated time in minutes', parseInt)
36
- .action(async (name, options) => {
37
- await executeOmniFocusCommand('Creating task...', (of) => of.createTask({
38
- name,
39
- note: options.note,
40
- project: options.project,
41
- tags: options.tag,
42
- due: options.due,
43
- defer: options.defer,
44
- flagged: options.flagged,
45
- estimatedMinutes: options.estimate,
46
- }), (task) => outputJson(task), 'Failed to create task');
47
- });
48
- command
49
- .command('update <idOrName>')
50
- .description('Update an existing task')
51
- .option('-n, --name <name>', 'New name')
52
- .option('--note <text>', 'New note')
53
- .option('-p, --project <name>', 'Move to project')
54
- .option('-t, --tag <tags...>', 'Replace tags')
55
- .option('-d, --due <date>', 'Set due date (ISO format)')
56
- .option('-D, --defer <date>', 'Set defer date (ISO format)')
57
- .option('-f, --flag', 'Flag the task')
58
- .option('-F, --unflag', 'Unflag the task')
59
- .option('-c, --complete', 'Mark as completed')
60
- .option('-C, --incomplete', 'Mark as incomplete')
61
- .option('-e, --estimate <minutes>', 'Estimated time in minutes', parseInt)
62
- .action(async (idOrName, options) => {
63
- await executeOmniFocusCommand('Updating task...', (of) => {
64
- const updates = {
65
- ...(options.name && { name: options.name }),
66
- ...(options.note !== undefined && { note: options.note }),
67
- ...(options.project && { project: options.project }),
68
- ...(options.tag && { tags: options.tag }),
69
- ...(options.due !== undefined && { due: options.due }),
70
- ...(options.defer !== undefined && { defer: options.defer }),
71
- ...(options.flag && { flagged: true }),
72
- ...(options.unflag && { flagged: false }),
73
- ...(options.complete && { completed: true }),
74
- ...(options.incomplete && { completed: false }),
75
- ...(options.estimate !== undefined && { estimatedMinutes: options.estimate }),
76
- };
77
- return of.updateTask(idOrName, updates);
78
- }, (task) => outputJson(task), 'Failed to update task');
79
- });
80
- command
81
- .command('delete <idOrName>')
82
- .alias('rm')
83
- .description('Delete a task')
84
- .action(async (idOrName) => {
85
- await executeOmniFocusCommand('Deleting task...', (of) => of.deleteTask(idOrName), () => outputJson({ message: 'Task deleted successfully' }), 'Failed to delete task');
86
- });
87
- command
88
- .command('view <idOrName>')
89
- .description('View task details')
90
- .action(async (idOrName) => {
91
- await executeOmniFocusCommand('Loading task...', (of) => of.getTask(idOrName), (task) => outputJson(task), 'Failed to load task');
92
- });
93
- command
94
- .command('stats')
95
- .description('Show task statistics')
96
- .action(async () => {
97
- await executeOmniFocusCommand('Analyzing tasks...', (of) => of.getTaskStats(), (stats) => outputJson(stats), 'Failed to analyze tasks');
98
- });
99
- return command;
100
- }
101
- //# sourceMappingURL=task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=display.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/display.test.ts"],"names":[],"mappings":""}
@@ -1,93 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { formatEstimate, isTaskOverdue, formatTags, pluralize } from '../display.js';
3
- describe('formatEstimate', () => {
4
- it('formats minutes only', () => {
5
- expect(formatEstimate(30)).toBe('30m');
6
- expect(formatEstimate(0)).toBe('0m');
7
- expect(formatEstimate(59)).toBe('59m');
8
- });
9
- it('formats hours and minutes', () => {
10
- expect(formatEstimate(60)).toBe('1h 0m');
11
- expect(formatEstimate(90)).toBe('1h 30m');
12
- expect(formatEstimate(120)).toBe('2h 0m');
13
- expect(formatEstimate(135)).toBe('2h 15m');
14
- });
15
- it('handles large values', () => {
16
- expect(formatEstimate(480)).toBe('8h 0m');
17
- expect(formatEstimate(525)).toBe('8h 45m');
18
- });
19
- });
20
- describe('isTaskOverdue', () => {
21
- const baseTask = {
22
- id: 'test-id',
23
- name: 'Test Task',
24
- completed: false,
25
- flagged: false,
26
- tags: [],
27
- note: null,
28
- project: null,
29
- due: null,
30
- defer: null,
31
- estimatedMinutes: null,
32
- completionDate: null,
33
- added: null,
34
- modified: null,
35
- };
36
- it('returns false when task has no due date', () => {
37
- expect(isTaskOverdue(baseTask)).toBe(false);
38
- });
39
- it('returns false when task is completed', () => {
40
- const completedTask = {
41
- ...baseTask,
42
- completed: true,
43
- due: '2020-01-01T00:00:00Z',
44
- };
45
- expect(isTaskOverdue(completedTask)).toBe(false);
46
- });
47
- it('returns true when due date is in the past', () => {
48
- const overdueTask = {
49
- ...baseTask,
50
- due: '2020-01-01T00:00:00Z',
51
- };
52
- expect(isTaskOverdue(overdueTask)).toBe(true);
53
- });
54
- it('returns false when due date is in the future', () => {
55
- const futureTask = {
56
- ...baseTask,
57
- due: '2099-12-31T23:59:59Z',
58
- };
59
- expect(isTaskOverdue(futureTask)).toBe(false);
60
- });
61
- });
62
- describe('formatTags', () => {
63
- it('formats empty array', () => {
64
- expect(formatTags([])).toBe('');
65
- });
66
- it('formats single tag with hashtag prefix', () => {
67
- expect(formatTags(['work'])).toBe('#work');
68
- });
69
- it('formats multiple tags with default space separator', () => {
70
- expect(formatTags(['work', 'urgent', 'home'])).toBe('#work #urgent #home');
71
- });
72
- it('formats with custom separator', () => {
73
- expect(formatTags(['work', 'urgent'], ', ')).toBe('#work, #urgent');
74
- });
75
- });
76
- describe('pluralize', () => {
77
- it('uses singular form for count of 1', () => {
78
- expect(pluralize(1, 'task')).toBe('1 task');
79
- expect(pluralize(1, 'project')).toBe('1 project');
80
- });
81
- it('uses plural form for count of 0', () => {
82
- expect(pluralize(0, 'task')).toBe('0 tasks');
83
- });
84
- it('uses plural form for count greater than 1', () => {
85
- expect(pluralize(2, 'task')).toBe('2 tasks');
86
- expect(pluralize(100, 'project')).toBe('100 projects');
87
- });
88
- it('supports custom plural form', () => {
89
- expect(pluralize(2, 'child', 'children')).toBe('2 children');
90
- expect(pluralize(1, 'child', 'children')).toBe('1 child');
91
- });
92
- });
93
- //# sourceMappingURL=display.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/display.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { OmniFocus } from './omnifocus.js';
2
- export declare function executeCommand<T>(loadingMessage: string, action: () => Promise<T>, onSuccess?: (result: T) => void, failureMessage?: string): Promise<T>;
3
- export declare function executeOmniFocusCommand<T>(loadingMessage: string, action: (of: OmniFocus) => Promise<T>, onSuccess?: (result: T) => void, failureMessage?: string): Promise<T>;
4
- //# sourceMappingURL=command-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-utils.d.ts","sourceRoot":"","sources":["../../src/lib/command-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,cAAc,CAAC,CAAC,EACpC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,EAC/B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EACrC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,EAC/B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,CAAC,CAAC,CAGZ"}
@@ -1,22 +0,0 @@
1
- import ora from 'ora';
2
- import chalk from 'chalk';
3
- import { OmniFocus } from './omnifocus.js';
4
- export async function executeCommand(loadingMessage, action, onSuccess, failureMessage) {
5
- const spinner = ora(loadingMessage).start();
6
- try {
7
- const result = await action();
8
- spinner.stop();
9
- onSuccess?.(result);
10
- return result;
11
- }
12
- catch (error) {
13
- spinner.fail(failureMessage || 'Command failed');
14
- console.error(chalk.red(error.message));
15
- throw error;
16
- }
17
- }
18
- export async function executeOmniFocusCommand(loadingMessage, action, onSuccess, failureMessage) {
19
- const of = new OmniFocus();
20
- return executeCommand(loadingMessage, () => action(of), onSuccess, failureMessage);
21
- }
22
- //# sourceMappingURL=command-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-utils.js","sourceRoot":"","sources":["../../src/lib/command-utils.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,MAAwB,EACxB,SAA+B,EAC/B,cAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,cAAsB,EACtB,MAAqC,EACrC,SAA+B,EAC/B,cAAuB;IAEvB,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAC3B,OAAO,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACrF,CAAC"}
@@ -1,21 +0,0 @@
1
- import type { Task, Project, Perspective, Tag, TagStats, TaskStats, ProjectStats } from '../types.js';
2
- export declare function displaySuccessMessage(message: string): void;
3
- export declare function displayWithSuccessMessage<T extends Task | Project | Tag>(message: string, entity: T, displayFn: (entity: T) => void): void;
4
- export declare function displayPerspectiveList(perspectives: Perspective[]): void;
5
- export declare function formatEstimate(minutes: number): string;
6
- export declare function isTaskOverdue(task: Task): boolean;
7
- export declare function formatTags(tags: string[], separator?: string): string;
8
- export declare function pluralize(count: number, singular: string, plural?: string): string;
9
- export declare function displayTask(task: Task, verbose?: boolean): void;
10
- export declare function displayTaskList(tasks: Task[], verbose?: boolean): void;
11
- export declare function displayProject(project: Project, verbose?: boolean): void;
12
- export declare function displayProjectList(projects: Project[], verbose?: boolean): void;
13
- export declare function displayTaskDetails(task: Task): void;
14
- export declare function displayProjectDetails(project: Project): void;
15
- export declare function displayTag(tag: Tag, verbose?: boolean): void;
16
- export declare function displayTagList(tags: Tag[], verbose?: boolean): void;
17
- export declare function displayTagStats(stats: TagStats): void;
18
- export declare function displayTaskStats(stats: TaskStats): void;
19
- export declare function displayProjectStats(stats: ProjectStats): void;
20
- export declare function displayTagDetails(tag: Tag): void;
21
- //# sourceMappingURL=display.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/lib/display.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQtG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,IAAI,GAAG,OAAO,GAAG,GAAG,EACtE,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAC7B,IAAI,CAIN;AAMD,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAKxE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAGjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAE1E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,MAAM,CAE1F;AAgCD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,UAAQ,GAAG,IAAI,CAuC7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI,CAEpE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,IAAI,CA8BtE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CA0CnD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B5D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,UAAQ,GAAG,IAAI,CA0B1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI,CAEjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CA0BrD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAoBvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAmB7D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAoChD"}
@@ -1,294 +0,0 @@
1
- import chalk from 'chalk';
2
- import { format, formatDistanceToNow } from 'date-fns';
3
- const PROJECT_STATUS_COLORS = {
4
- 'active': chalk.green,
5
- 'on hold': chalk.yellow,
6
- 'dropped': chalk.red,
7
- };
8
- export function displaySuccessMessage(message) {
9
- console.log(chalk.green(`✓ ${message}`));
10
- }
11
- export function displayWithSuccessMessage(message, entity, displayFn) {
12
- displaySuccessMessage(message);
13
- console.log();
14
- displayFn(entity);
15
- }
16
- function displayPerspective(perspective) {
17
- console.log(` ${chalk.cyan('▶')} ${chalk.bold(perspective.name)}`);
18
- }
19
- export function displayPerspectiveList(perspectives) {
20
- displayList(perspectives, 'perspective', displayPerspective);
21
- if (perspectives.length > 0) {
22
- console.log();
23
- }
24
- }
25
- export function formatEstimate(minutes) {
26
- const hours = Math.floor(minutes / 60);
27
- const mins = minutes % 60;
28
- return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;
29
- }
30
- export function isTaskOverdue(task) {
31
- if (!task.due || task.completed)
32
- return false;
33
- return new Date(task.due) < new Date();
34
- }
35
- export function formatTags(tags, separator = ' ') {
36
- return tags.map(t => `#${t}`).join(separator);
37
- }
38
- export function pluralize(count, singular, plural = `${singular}s`) {
39
- return `${count} ${count === 1 ? singular : plural}`;
40
- }
41
- function displayMetric(label, value, valueColor) {
42
- const formattedValue = valueColor ? valueColor(value.toString()) : value.toString();
43
- console.log(chalk.gray(label.padEnd(25)) + formattedValue);
44
- }
45
- function displayTopList(title, items, countKey, color = chalk.cyan) {
46
- if (items.length === 0)
47
- return;
48
- console.log();
49
- console.log(chalk.bold(title));
50
- items.forEach(item => {
51
- console.log(` ${color(item.name)} ${chalk.gray(`(${item[countKey]} ${countKey})`)}`);
52
- });
53
- }
54
- function displayList(items, itemName, displayFn, verbose = false) {
55
- if (items.length === 0) {
56
- console.log(chalk.gray(`No ${itemName}s found`));
57
- return;
58
- }
59
- console.log(chalk.bold(`\nFound ${pluralize(items.length, itemName)}:\n`));
60
- items.forEach(item => displayFn(item, verbose));
61
- }
62
- export function displayTask(task, verbose = false) {
63
- const parts = [];
64
- parts.push(task.flagged ? chalk.yellow('⭐') : ' ');
65
- parts.push(task.completed ? chalk.green('✓') : chalk.gray('○'));
66
- parts.push(chalk.bold(task.name));
67
- if (task.project) {
68
- parts.push(chalk.cyan(`[${task.project}]`));
69
- }
70
- if (task.tags.length > 0) {
71
- parts.push(chalk.magenta(formatTags(task.tags)));
72
- }
73
- if (task.due) {
74
- const dueDate = new Date(task.due);
75
- const dateStr = formatDistanceToNow(dueDate, { addSuffix: true });
76
- parts.push(isTaskOverdue(task) ? chalk.red(`due ${dateStr}`) : chalk.gray(`due ${dateStr}`));
77
- }
78
- if (task.estimatedMinutes) {
79
- parts.push(chalk.gray(`[${formatEstimate(task.estimatedMinutes)}]`));
80
- }
81
- console.log(parts.join(' '));
82
- if (verbose) {
83
- if (task.note) {
84
- console.log(chalk.gray(` Note: ${task.note}`));
85
- }
86
- console.log(chalk.gray(` ID: ${task.id}`));
87
- if (task.defer) {
88
- console.log(chalk.gray(` Defer: ${format(new Date(task.defer), 'PPP')}`));
89
- }
90
- if (task.completionDate) {
91
- console.log(chalk.gray(` Completed: ${format(new Date(task.completionDate), 'PPP')}`));
92
- }
93
- }
94
- }
95
- export function displayTaskList(tasks, verbose = false) {
96
- displayList(tasks, 'task', displayTask, verbose);
97
- }
98
- export function displayProject(project, verbose = false) {
99
- const parts = [];
100
- const statusColor = PROJECT_STATUS_COLORS[project.status] || chalk.white;
101
- parts.push(statusColor('●'));
102
- parts.push(chalk.bold(project.name));
103
- parts.push(chalk.gray(`(${project.remainingCount}/${project.taskCount})`));
104
- if (project.sequential) {
105
- parts.push(chalk.blue('[sequential]'));
106
- }
107
- if (project.folder) {
108
- parts.push(chalk.cyan(`[${project.folder}]`));
109
- }
110
- if (project.tags.length > 0) {
111
- parts.push(chalk.magenta(formatTags(project.tags)));
112
- }
113
- console.log(parts.join(' '));
114
- if (verbose) {
115
- if (project.note) {
116
- console.log(chalk.gray(` Note: ${project.note}`));
117
- }
118
- console.log(chalk.gray(` ID: ${project.id}`));
119
- console.log(chalk.gray(` Status: ${project.status}`));
120
- }
121
- }
122
- export function displayProjectList(projects, verbose = false) {
123
- displayList(projects, 'project', displayProject, verbose);
124
- }
125
- export function displayTaskDetails(task) {
126
- console.log();
127
- console.log(chalk.bold.underline(task.name));
128
- console.log();
129
- console.log(chalk.gray('ID: ') + task.id);
130
- console.log(chalk.gray('Status: ') + (task.completed ? chalk.green('✓ Completed') : chalk.yellow('○ Incomplete')));
131
- console.log(chalk.gray('Flagged: ') + (task.flagged ? chalk.yellow('⭐ Yes') : 'No'));
132
- if (task.project) {
133
- console.log(chalk.gray('Project: ') + chalk.cyan(task.project));
134
- }
135
- if (task.tags.length > 0) {
136
- console.log(chalk.gray('Tags: ') + chalk.magenta(formatTags(task.tags, ', ')));
137
- }
138
- if (task.defer) {
139
- console.log(chalk.gray('Defer: ') + format(new Date(task.defer), 'PPP p'));
140
- }
141
- if (task.due) {
142
- const dueDate = new Date(task.due);
143
- const isOverdue = isTaskOverdue(task);
144
- console.log(chalk.gray('Due: ') + (isOverdue ? chalk.red(format(dueDate, 'PPP p')) : format(dueDate, 'PPP p')));
145
- }
146
- if (task.estimatedMinutes) {
147
- console.log(chalk.gray('Estimate: ') + formatEstimate(task.estimatedMinutes));
148
- }
149
- if (task.completionDate) {
150
- console.log(chalk.gray('Completed:') + format(new Date(task.completionDate), 'PPP p'));
151
- }
152
- if (task.note) {
153
- console.log();
154
- console.log(chalk.bold('Note:'));
155
- console.log(task.note);
156
- }
157
- console.log();
158
- }
159
- export function displayProjectDetails(project) {
160
- console.log();
161
- console.log(chalk.bold.underline(project.name));
162
- console.log();
163
- const statusColor = PROJECT_STATUS_COLORS[project.status] || chalk.white;
164
- console.log(chalk.gray('ID: ') + project.id);
165
- console.log(chalk.gray('Status: ') + statusColor(project.status));
166
- console.log(chalk.gray('Type: ') + (project.sequential ? chalk.blue('Sequential') : 'Parallel'));
167
- console.log(chalk.gray('Tasks: ') + `${project.remainingCount} remaining / ${project.taskCount} total`);
168
- if (project.folder) {
169
- console.log(chalk.gray('Folder: ') + chalk.cyan(project.folder));
170
- }
171
- if (project.tags.length > 0) {
172
- console.log(chalk.gray('Tags: ') + chalk.magenta(formatTags(project.tags, ', ')));
173
- }
174
- if (project.note) {
175
- console.log();
176
- console.log(chalk.bold('Note:'));
177
- console.log(project.note);
178
- }
179
- console.log();
180
- }
181
- export function displayTag(tag, verbose = false) {
182
- const parts = [];
183
- parts.push(tag.active ? chalk.green('●') : chalk.gray('○'));
184
- parts.push(chalk.bold(tag.name));
185
- parts.push(chalk.gray(`(${tag.taskCount} tasks, ${tag.remainingTaskCount} remaining)`));
186
- if (tag.lastActivity) {
187
- const activityDate = new Date(tag.lastActivity);
188
- const dateStr = formatDistanceToNow(activityDate, { addSuffix: true });
189
- parts.push(chalk.cyan(`active ${dateStr}`));
190
- }
191
- else {
192
- parts.push(chalk.gray('never used'));
193
- }
194
- console.log(parts.join(' '));
195
- if (verbose) {
196
- console.log(chalk.gray(` ID: ${tag.id}`));
197
- if (tag.added) {
198
- console.log(chalk.gray(` Created: ${format(new Date(tag.added), 'PPP')}`));
199
- }
200
- if (tag.modified) {
201
- console.log(chalk.gray(` Modified: ${format(new Date(tag.modified), 'PPP')}`));
202
- }
203
- }
204
- }
205
- export function displayTagList(tags, verbose = false) {
206
- displayList(tags, 'tag', displayTag, verbose);
207
- }
208
- export function displayTagStats(stats) {
209
- console.log();
210
- console.log(chalk.bold.underline('Tag Usage Statistics'));
211
- console.log();
212
- displayMetric('Total Tags:', stats.totalTags, chalk.bold);
213
- displayMetric('Active Tags:', stats.activeTags, chalk.green);
214
- displayMetric('Tags with Tasks:', stats.tagsWithTasks, chalk.cyan);
215
- displayMetric('Unused Tags:', stats.unusedTags, chalk.yellow);
216
- displayMetric('Avg Tasks per Tag:', stats.avgTasksPerTag.toFixed(1));
217
- displayTopList('Most Used Tags:', stats.mostUsedTags, 'taskCount', chalk.cyan);
218
- displayTopList('Least Used Tags:', stats.leastUsedTags, 'taskCount', chalk.magenta);
219
- if (stats.staleTags.length > 0) {
220
- console.log();
221
- console.log(chalk.bold('Stale Tags (no activity in 30+ days):'));
222
- stats.staleTags.slice(0, 10).forEach(t => {
223
- console.log(` ${chalk.red(t.name)} ${chalk.gray(`(${t.daysSinceActivity} days)`)}`);
224
- });
225
- if (stats.staleTags.length > 10) {
226
- console.log(chalk.gray(` ... and ${stats.staleTags.length - 10} more`));
227
- }
228
- }
229
- console.log();
230
- }
231
- export function displayTaskStats(stats) {
232
- console.log();
233
- console.log(chalk.bold.underline('Task Statistics'));
234
- console.log();
235
- displayMetric('Total Tasks:', stats.totalTasks, chalk.bold);
236
- displayMetric('Active Tasks:', stats.activeTasks, chalk.yellow);
237
- displayMetric('Completed Tasks:', stats.completedTasks, chalk.green);
238
- displayMetric('Flagged Tasks:', stats.flaggedTasks, chalk.cyan);
239
- displayMetric('Overdue Tasks:', stats.overdueActiveTasks, chalk.red);
240
- displayMetric('Completion Rate:', `${stats.completionRate}%`);
241
- if (stats.avgEstimatedMinutes !== null) {
242
- displayMetric('Avg Estimate:', `${formatEstimate(stats.avgEstimatedMinutes)} (${stats.tasksWithEstimates} tasks)`);
243
- }
244
- displayTopList('Top Projects by Task Count:', stats.tasksByProject, 'taskCount', chalk.cyan);
245
- displayTopList('Top Tags by Task Count:', stats.tasksByTag, 'taskCount', chalk.magenta);
246
- console.log();
247
- }
248
- export function displayProjectStats(stats) {
249
- console.log();
250
- console.log(chalk.bold.underline('Project Statistics'));
251
- console.log();
252
- displayMetric('Total Projects:', stats.totalProjects, chalk.bold);
253
- displayMetric('Active Projects:', stats.activeProjects, chalk.green);
254
- displayMetric('On Hold Projects:', stats.onHoldProjects, chalk.yellow);
255
- displayMetric('Dropped Projects:', stats.droppedProjects, chalk.red);
256
- displayMetric('Sequential Projects:', stats.sequentialProjects, chalk.blue);
257
- displayMetric('Parallel Projects:', stats.parallelProjects);
258
- displayMetric('Avg Tasks per Project:', stats.avgTasksPerProject.toFixed(1));
259
- displayMetric('Avg Remaining per Proj:', stats.avgRemainingPerProject.toFixed(1));
260
- displayMetric('Avg Completion Rate:', `${stats.avgCompletionRate}%`);
261
- displayTopList('Projects with Most Tasks:', stats.projectsWithMostTasks, 'taskCount', chalk.cyan);
262
- displayTopList('Projects with Most Remaining Work:', stats.projectsWithMostRemaining, 'remainingCount', chalk.yellow);
263
- console.log();
264
- }
265
- export function displayTagDetails(tag) {
266
- console.log();
267
- console.log(chalk.bold.underline(tag.name));
268
- console.log();
269
- const statusColor = tag.status === 'active' ? chalk.green :
270
- tag.status === 'on hold' ? chalk.yellow : chalk.red;
271
- console.log(chalk.gray('ID: ') + tag.id);
272
- console.log(chalk.gray('Status: ') + statusColor(tag.status));
273
- console.log(chalk.gray('Tasks: ') + `${tag.remainingTaskCount} remaining / ${tag.taskCount} total`);
274
- console.log(chalk.gray('Allows Next Action:') + (tag.allowsNextAction ? 'Yes' : 'No'));
275
- if (tag.parent) {
276
- console.log(chalk.gray('Parent: ') + chalk.cyan(tag.parent));
277
- }
278
- if (tag.children.length > 0) {
279
- console.log(chalk.gray('Children: ') + chalk.cyan(tag.children.join(', ')));
280
- }
281
- if (tag.added) {
282
- console.log(chalk.gray('Created: ') + format(new Date(tag.added), 'PPP p'));
283
- }
284
- if (tag.modified) {
285
- console.log(chalk.gray('Modified: ') + format(new Date(tag.modified), 'PPP p'));
286
- }
287
- if (tag.lastActivity) {
288
- const activityDate = new Date(tag.lastActivity);
289
- const dateStr = formatDistanceToNow(activityDate, { addSuffix: true });
290
- console.log(chalk.gray('Last Activity: ') + `${format(activityDate, 'PPP p')} (${dateStr})`);
291
- }
292
- console.log();
293
- }
294
- //# sourceMappingURL=display.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/lib/display.ts"],"names":[],"mappings":"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"}