octie-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 (162) hide show
  1. package/README.md +523 -0
  2. package/dist/cli/commands/approve.d.ts +27 -0
  3. package/dist/cli/commands/approve.d.ts.map +1 -0
  4. package/dist/cli/commands/approve.js +119 -0
  5. package/dist/cli/commands/approve.js.map +1 -0
  6. package/dist/cli/commands/batch.d.ts +15 -0
  7. package/dist/cli/commands/batch.d.ts.map +1 -0
  8. package/dist/cli/commands/batch.js +521 -0
  9. package/dist/cli/commands/batch.js.map +1 -0
  10. package/dist/cli/commands/create.d.ts +9 -0
  11. package/dist/cli/commands/create.d.ts.map +1 -0
  12. package/dist/cli/commands/create.js +321 -0
  13. package/dist/cli/commands/create.js.map +1 -0
  14. package/dist/cli/commands/delete.d.ts +9 -0
  15. package/dist/cli/commands/delete.d.ts.map +1 -0
  16. package/dist/cli/commands/delete.js +143 -0
  17. package/dist/cli/commands/delete.js.map +1 -0
  18. package/dist/cli/commands/export.d.ts +9 -0
  19. package/dist/cli/commands/export.d.ts.map +1 -0
  20. package/dist/cli/commands/export.js +66 -0
  21. package/dist/cli/commands/export.js.map +1 -0
  22. package/dist/cli/commands/find.d.ts +16 -0
  23. package/dist/cli/commands/find.d.ts.map +1 -0
  24. package/dist/cli/commands/find.js +252 -0
  25. package/dist/cli/commands/find.js.map +1 -0
  26. package/dist/cli/commands/get.d.ts +9 -0
  27. package/dist/cli/commands/get.d.ts.map +1 -0
  28. package/dist/cli/commands/get.js +74 -0
  29. package/dist/cli/commands/get.js.map +1 -0
  30. package/dist/cli/commands/graph.d.ts +9 -0
  31. package/dist/cli/commands/graph.d.ts.map +1 -0
  32. package/dist/cli/commands/graph.js +200 -0
  33. package/dist/cli/commands/graph.js.map +1 -0
  34. package/dist/cli/commands/import.d.ts +9 -0
  35. package/dist/cli/commands/import.d.ts.map +1 -0
  36. package/dist/cli/commands/import.js +807 -0
  37. package/dist/cli/commands/import.js.map +1 -0
  38. package/dist/cli/commands/init.d.ts +9 -0
  39. package/dist/cli/commands/init.d.ts.map +1 -0
  40. package/dist/cli/commands/init.js +57 -0
  41. package/dist/cli/commands/init.js.map +1 -0
  42. package/dist/cli/commands/list.d.ts +9 -0
  43. package/dist/cli/commands/list.d.ts.map +1 -0
  44. package/dist/cli/commands/list.js +175 -0
  45. package/dist/cli/commands/list.js.map +1 -0
  46. package/dist/cli/commands/merge.d.ts +9 -0
  47. package/dist/cli/commands/merge.d.ts.map +1 -0
  48. package/dist/cli/commands/merge.js +113 -0
  49. package/dist/cli/commands/merge.js.map +1 -0
  50. package/dist/cli/commands/serve.d.ts +9 -0
  51. package/dist/cli/commands/serve.d.ts.map +1 -0
  52. package/dist/cli/commands/serve.js +94 -0
  53. package/dist/cli/commands/serve.js.map +1 -0
  54. package/dist/cli/commands/update.d.ts +9 -0
  55. package/dist/cli/commands/update.d.ts.map +1 -0
  56. package/dist/cli/commands/update.js +423 -0
  57. package/dist/cli/commands/update.js.map +1 -0
  58. package/dist/cli/commands/wire.d.ts +15 -0
  59. package/dist/cli/commands/wire.d.ts.map +1 -0
  60. package/dist/cli/commands/wire.js +164 -0
  61. package/dist/cli/commands/wire.js.map +1 -0
  62. package/dist/cli/index.d.ts +7 -0
  63. package/dist/cli/index.d.ts.map +1 -0
  64. package/dist/cli/index.js +100 -0
  65. package/dist/cli/index.js.map +1 -0
  66. package/dist/cli/output/json.d.ts +16 -0
  67. package/dist/cli/output/json.d.ts.map +1 -0
  68. package/dist/cli/output/json.js +29 -0
  69. package/dist/cli/output/json.js.map +1 -0
  70. package/dist/cli/output/markdown.d.ts +15 -0
  71. package/dist/cli/output/markdown.d.ts.map +1 -0
  72. package/dist/cli/output/markdown.js +206 -0
  73. package/dist/cli/output/markdown.js.map +1 -0
  74. package/dist/cli/output/table.d.ts +23 -0
  75. package/dist/cli/output/table.d.ts.map +1 -0
  76. package/dist/cli/output/table.js +150 -0
  77. package/dist/cli/output/table.js.map +1 -0
  78. package/dist/cli/utils/helpers.d.ts +126 -0
  79. package/dist/cli/utils/helpers.d.ts.map +1 -0
  80. package/dist/cli/utils/helpers.js +325 -0
  81. package/dist/cli/utils/helpers.js.map +1 -0
  82. package/dist/core/graph/algorithms.d.ts +11 -0
  83. package/dist/core/graph/algorithms.d.ts.map +1 -0
  84. package/dist/core/graph/algorithms.js +14 -0
  85. package/dist/core/graph/algorithms.js.map +1 -0
  86. package/dist/core/graph/cycle.d.ts +155 -0
  87. package/dist/core/graph/cycle.d.ts.map +1 -0
  88. package/dist/core/graph/cycle.js +297 -0
  89. package/dist/core/graph/cycle.js.map +1 -0
  90. package/dist/core/graph/index.d.ts +223 -0
  91. package/dist/core/graph/index.d.ts.map +1 -0
  92. package/dist/core/graph/index.js +475 -0
  93. package/dist/core/graph/index.js.map +1 -0
  94. package/dist/core/graph/operations.d.ts +240 -0
  95. package/dist/core/graph/operations.d.ts.map +1 -0
  96. package/dist/core/graph/operations.js +503 -0
  97. package/dist/core/graph/operations.js.map +1 -0
  98. package/dist/core/graph/sort.d.ts +76 -0
  99. package/dist/core/graph/sort.d.ts.map +1 -0
  100. package/dist/core/graph/sort.js +254 -0
  101. package/dist/core/graph/sort.js.map +1 -0
  102. package/dist/core/graph/traversal.d.ts +122 -0
  103. package/dist/core/graph/traversal.d.ts.map +1 -0
  104. package/dist/core/graph/traversal.js +336 -0
  105. package/dist/core/graph/traversal.js.map +1 -0
  106. package/dist/core/models/task-node.d.ts +328 -0
  107. package/dist/core/models/task-node.d.ts.map +1 -0
  108. package/dist/core/models/task-node.js +1090 -0
  109. package/dist/core/models/task-node.js.map +1 -0
  110. package/dist/core/registry/index.d.ts +102 -0
  111. package/dist/core/registry/index.d.ts.map +1 -0
  112. package/dist/core/registry/index.js +249 -0
  113. package/dist/core/registry/index.js.map +1 -0
  114. package/dist/core/registry/root-guard.d.ts +19 -0
  115. package/dist/core/registry/root-guard.d.ts.map +1 -0
  116. package/dist/core/registry/root-guard.js +28 -0
  117. package/dist/core/registry/root-guard.js.map +1 -0
  118. package/dist/core/storage/atomic-write.d.ts +181 -0
  119. package/dist/core/storage/atomic-write.d.ts.map +1 -0
  120. package/dist/core/storage/atomic-write.js +379 -0
  121. package/dist/core/storage/atomic-write.js.map +1 -0
  122. package/dist/core/storage/file-store.d.ts +148 -0
  123. package/dist/core/storage/file-store.d.ts.map +1 -0
  124. package/dist/core/storage/file-store.js +423 -0
  125. package/dist/core/storage/file-store.js.map +1 -0
  126. package/dist/core/storage/indexer.d.ts +138 -0
  127. package/dist/core/storage/indexer.d.ts.map +1 -0
  128. package/dist/core/storage/indexer.js +350 -0
  129. package/dist/core/storage/indexer.js.map +1 -0
  130. package/dist/core/utils/status-helpers.d.ts +59 -0
  131. package/dist/core/utils/status-helpers.d.ts.map +1 -0
  132. package/dist/core/utils/status-helpers.js +149 -0
  133. package/dist/core/utils/status-helpers.js.map +1 -0
  134. package/dist/index.d.ts +10 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +10 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/types/index.d.ts +504 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +182 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/web/routes/graph.d.ts +17 -0
  143. package/dist/web/routes/graph.d.ts.map +1 -0
  144. package/dist/web/routes/graph.js +277 -0
  145. package/dist/web/routes/graph.js.map +1 -0
  146. package/dist/web/routes/projects.d.ts +14 -0
  147. package/dist/web/routes/projects.d.ts.map +1 -0
  148. package/dist/web/routes/projects.js +102 -0
  149. package/dist/web/routes/projects.js.map +1 -0
  150. package/dist/web/routes/tasks.d.ts +17 -0
  151. package/dist/web/routes/tasks.d.ts.map +1 -0
  152. package/dist/web/routes/tasks.js +538 -0
  153. package/dist/web/routes/tasks.js.map +1 -0
  154. package/dist/web/server.d.ts +121 -0
  155. package/dist/web/server.d.ts.map +1 -0
  156. package/dist/web/server.js +389 -0
  157. package/dist/web/server.js.map +1 -0
  158. package/dist/web-ui/assets/index-BB0qvF1y.css +1 -0
  159. package/dist/web-ui/assets/index-Vmm72oKY.js +34 -0
  160. package/dist/web-ui/index.html +14 -0
  161. package/dist/web-ui/vite.svg +1 -0
  162. package/package.json +94 -0
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Octie CLI - Graph-based task management system
4
+ * Main entry point for all CLI commands
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Octie CLI - Graph-based task management system
4
+ * Main entry point for all CLI commands
5
+ */
6
+ import { Command, CommanderError } from 'commander';
7
+ import { initCommand } from './commands/init.js';
8
+ import { createCommand } from './commands/create.js';
9
+ import { listCommand } from './commands/list.js';
10
+ import { getCommand } from './commands/get.js';
11
+ import { updateCommand } from './commands/update.js';
12
+ import { deleteCommand } from './commands/delete.js';
13
+ import { mergeCommand } from './commands/merge.js';
14
+ import { graphCommand } from './commands/graph.js';
15
+ import { exportCommand } from './commands/export.js';
16
+ import { importCommand } from './commands/import.js';
17
+ import { serveCommand } from './commands/serve.js';
18
+ import { findCommand } from './commands/find.js';
19
+ import { wireCommand } from './commands/wire.js';
20
+ import { registerApproveCommand } from './commands/approve.js';
21
+ // import { batchCommand } from './commands/batch.js';
22
+ import { formatError } from './utils/helpers.js';
23
+ import { verifyAndRegisterProject } from '../core/registry/root-guard.js';
24
+ // Version from package.json
25
+ const VERSION = '1.0.0';
26
+ /**
27
+ * Global error handler
28
+ * Provides consistent error formatting with suggestions and optional stack traces
29
+ */
30
+ function handleError(error) {
31
+ const verbose = process.env.DEBUG === 'true' || process.env.VERBOSE === 'true';
32
+ // Handle Commander's normal exits (--help, --version) - exit cleanly
33
+ if (error instanceof CommanderError) {
34
+ // Commander has already output the error via writeErr, just exit
35
+ process.exit(error.exitCode);
36
+ }
37
+ // Handle all other errors with our formatter
38
+ console.error(formatError(error, verbose));
39
+ process.exit(1);
40
+ }
41
+ /**
42
+ * Create and configure the CLI program
43
+ */
44
+ function createProgram() {
45
+ const program = new Command();
46
+ program
47
+ .name('octie')
48
+ .description('Graph-based task management system')
49
+ .version(VERSION, '-v, --version', 'Display version number')
50
+ .configureOutput({
51
+ writeErr: (str) => process.stderr.write(str),
52
+ writeOut: (str) => process.stdout.write(str),
53
+ });
54
+ // Global options
55
+ program
56
+ .option('-p, --project <path>', 'Path to Octie project directory')
57
+ .option('--format <format>', 'Output format: json, md, table', 'table')
58
+ .option('--verbose', 'Enable verbose output')
59
+ .option('--quiet', 'Suppress non-error output')
60
+ .configureHelp({
61
+ sortSubcommands: true,
62
+ showGlobalOptions: true,
63
+ });
64
+ // Error handling
65
+ program.exitOverride(handleError);
66
+ return program;
67
+ }
68
+ /**
69
+ * Main entry point
70
+ */
71
+ function main() {
72
+ // Run root guard - auto-register current project if valid
73
+ verifyAndRegisterProject();
74
+ const program = createProgram();
75
+ // Register commands
76
+ program.addCommand(initCommand);
77
+ program.addCommand(createCommand);
78
+ program.addCommand(listCommand);
79
+ program.addCommand(getCommand);
80
+ program.addCommand(updateCommand);
81
+ program.addCommand(deleteCommand);
82
+ program.addCommand(mergeCommand);
83
+ program.addCommand(graphCommand);
84
+ program.addCommand(exportCommand);
85
+ program.addCommand(importCommand);
86
+ program.addCommand(serveCommand);
87
+ program.addCommand(findCommand);
88
+ program.addCommand(wireCommand);
89
+ registerApproveCommand(program);
90
+ // program.addCommand(batchCommand);
91
+ // Parse arguments
92
+ program.parse(process.argv);
93
+ // Show help if no command provided
94
+ // if (!process.argv.slice(2).length) {
95
+ // program.outputHelp();
96
+ // }
97
+ }
98
+ // Run CLI
99
+ main();
100
+ //# 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,16 @@
1
+ /**
2
+ * JSON output formatters for tasks and projects
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ import type { TaskGraphStore } from '../../core/graph/index.js';
6
+ /**
7
+ * Format a single task as JSON
8
+ * Pretty-printed with 2-space indentation
9
+ */
10
+ export declare function formatTaskJSON(task: TaskNode): string;
11
+ /**
12
+ * Format entire project as JSON for storage
13
+ * Includes all task fields, edges array, indexes, metadata, and schema reference
14
+ */
15
+ export declare function formatProjectJSON(graph: TaskGraphStore): string;
16
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/cli/output/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAOhE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAU/D"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * JSON output formatters for tasks and projects
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ /**
6
+ * Schema reference for Octie project files
7
+ */
8
+ const OCTIE_SCHEMA = 'https://octie.dev/schemas/project-v1.json';
9
+ /**
10
+ * Format a single task as JSON
11
+ * Pretty-printed with 2-space indentation
12
+ */
13
+ export function formatTaskJSON(task) {
14
+ return JSON.stringify(task, null, 2);
15
+ }
16
+ /**
17
+ * Format entire project as JSON for storage
18
+ * Includes all task fields, edges array, indexes, metadata, and schema reference
19
+ */
20
+ export function formatProjectJSON(graph) {
21
+ const projectData = graph.toJSON();
22
+ // Add schema reference
23
+ const dataWithSchema = {
24
+ $schema: OCTIE_SCHEMA,
25
+ ...projectData
26
+ };
27
+ return JSON.stringify(dataWithSchema, null, 2);
28
+ }
29
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/cli/output/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG1D;;GAEG;AACH,MAAM,YAAY,GAAG,2CAA2C,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAqB;IACrD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEnC,uBAAuB;IACvB,MAAM,cAAc,GAAG;QACrB,OAAO,EAAE,YAAY;QACrB,GAAG,WAAW;KACf,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Markdown output formatters for tasks and projects
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ import type { TaskGraphStore } from '../../core/graph/index.js';
6
+ /**
7
+ * Format a single task as markdown
8
+ * Format: ## [ ] Title: Description
9
+ */
10
+ export declare function formatTaskMarkdown(task: TaskNode): string;
11
+ /**
12
+ * Format entire project as markdown for AI consumption
13
+ */
14
+ export declare function formatProjectMarkdown(graph: TaskGraphStore): string;
15
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/cli/output/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CA0HzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAgGnE"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Markdown output formatters for tasks and projects
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ import { formatStatus, formatPriority } from '../utils/helpers.js';
6
+ /**
7
+ * Format a single task as markdown
8
+ * Format: ## [ ] Title: Description
9
+ */
10
+ export function formatTaskMarkdown(task) {
11
+ const lines = [];
12
+ // Header with checkbox
13
+ const checkbox = task.status === 'completed' ? '[x]' : '[ ]';
14
+ const statusIndicator = formatStatus(task.status);
15
+ const priorityIndicator = formatPriority(task.priority);
16
+ lines.push(`## ${checkbox} ${task.title}`);
17
+ lines.push('');
18
+ lines.push(`**ID**: \`${task.id}\` | **Status**: ${statusIndicator} | **Priority**: ${priorityIndicator}`);
19
+ lines.push('');
20
+ // Description
21
+ lines.push('### Description');
22
+ lines.push(task.description);
23
+ lines.push('');
24
+ // Success Criteria
25
+ if (task.success_criteria.length > 0) {
26
+ lines.push('### Success Criteria');
27
+ for (const sc of task.success_criteria) {
28
+ const scCheckbox = sc.completed ? '[x]' : '[ ]';
29
+ // Export FULL UUID for import preservation (decoupled from GET display which uses short IDs)
30
+ const idDisplay = `\`${sc.id}\``;
31
+ lines.push(`- ${scCheckbox} ${sc.text} ${idDisplay}`);
32
+ if (sc.completed && sc.completed_at) {
33
+ lines.push(` - Completed: ${sc.completed_at}`);
34
+ }
35
+ }
36
+ lines.push('');
37
+ }
38
+ // Deliverables
39
+ if (task.deliverables.length > 0) {
40
+ lines.push('### Deliverables');
41
+ for (const d of task.deliverables) {
42
+ const dCheckbox = d.completed ? '[x]' : '[ ]';
43
+ const fileRef = d.file_path ? ` → \`${d.file_path}\`` : '';
44
+ // Export FULL UUID for import preservation (decoupled from GET display which uses short IDs)
45
+ const idDisplay = `\`${d.id}\``;
46
+ lines.push(`- ${dCheckbox} ${d.text}${fileRef} ${idDisplay}`);
47
+ }
48
+ lines.push('');
49
+ }
50
+ // Need Fix Items (blocking issues)
51
+ if (task.need_fix.length > 0) {
52
+ lines.push('### Need Fix');
53
+ for (const nf of task.need_fix) {
54
+ const nfCheckbox = nf.completed ? '[x]' : '[ ]';
55
+ const idDisplay = `\`${nf.id}\``;
56
+ const sourceDisplay = nf.source ? ` [${nf.source}]` : '';
57
+ const fileRef = nf.file_path ? ` → \`${nf.file_path}\`` : '';
58
+ lines.push(`- ${nfCheckbox} ${nf.text}${sourceDisplay}${fileRef} ${idDisplay}`);
59
+ }
60
+ lines.push('');
61
+ }
62
+ // Blockers (with #task-id format)
63
+ if (task.blockers.length > 0) {
64
+ lines.push('### Blockers');
65
+ for (const blockerId of task.blockers) {
66
+ lines.push(`- #${blockerId}`);
67
+ }
68
+ lines.push('');
69
+ }
70
+ // Dependencies (explanatory text - twin to blockers)
71
+ if (task.dependencies) {
72
+ lines.push('### Dependencies');
73
+ lines.push(task.dependencies);
74
+ lines.push('');
75
+ }
76
+ // Sub-items
77
+ if (task.sub_items.length > 0) {
78
+ lines.push('### Sub-items');
79
+ for (const subItemId of task.sub_items) {
80
+ lines.push(`- #${subItemId}`);
81
+ }
82
+ lines.push('');
83
+ }
84
+ // Related Files
85
+ if (task.related_files.length > 0) {
86
+ lines.push('### Related Files');
87
+ for (const file of task.related_files) {
88
+ lines.push(`- \`${file}\``);
89
+ }
90
+ lines.push('');
91
+ }
92
+ // C7 MCP Verifications
93
+ if (task.c7_verified.length > 0) {
94
+ lines.push('### Library Verifications');
95
+ for (const c7 of task.c7_verified) {
96
+ lines.push(`- ${c7.library_id} (verified: ${c7.verified_at})`);
97
+ if (c7.notes) {
98
+ lines.push(` - ${c7.notes}`);
99
+ }
100
+ }
101
+ lines.push('');
102
+ }
103
+ // Notes
104
+ if (task.notes) {
105
+ lines.push('### Notes');
106
+ lines.push(task.notes);
107
+ lines.push('');
108
+ }
109
+ // Timestamps
110
+ lines.push('---');
111
+ lines.push(`**Created**: ${task.created_at}`);
112
+ lines.push(`**Updated**: ${task.updated_at}`);
113
+ if (task.completed_at) {
114
+ lines.push(`**Completed**: ${task.completed_at}`);
115
+ }
116
+ return lines.join('\n');
117
+ }
118
+ /**
119
+ * Format entire project as markdown for AI consumption
120
+ */
121
+ export function formatProjectMarkdown(graph) {
122
+ const lines = [];
123
+ const metadata = graph.metadata;
124
+ const taskCount = graph.size;
125
+ // Project header
126
+ lines.push(`# ${metadata.project_name}`);
127
+ lines.push('');
128
+ lines.push(`**Version**: ${metadata.version}`);
129
+ lines.push(`**Tasks**: ${taskCount}`);
130
+ lines.push(`**Exported**: ${new Date().toISOString()}`);
131
+ lines.push('');
132
+ lines.push('---');
133
+ lines.push('');
134
+ // Tasks list summary
135
+ const tasks = graph.getAllTasks();
136
+ const rootTasks = graph.getRootTasks();
137
+ lines.push(`## Tasks Summary (${tasks.length} tasks)`);
138
+ lines.push('');
139
+ // Group by status
140
+ const byStatus = {
141
+ ready: [],
142
+ in_progress: [],
143
+ in_review: [],
144
+ blocked: [],
145
+ completed: [],
146
+ };
147
+ for (const task of tasks) {
148
+ const statusArray = byStatus[task.status];
149
+ if (statusArray) {
150
+ statusArray.push(task.id);
151
+ }
152
+ }
153
+ for (const [status, taskIds] of Object.entries(byStatus)) {
154
+ if (taskIds.length > 0) {
155
+ const statusLabel = formatStatus(status); // Type assertion for status
156
+ lines.push(`### ${statusLabel} (${taskIds.length})`);
157
+ for (const taskId of taskIds) {
158
+ const task = graph.getNode(taskId);
159
+ if (task) {
160
+ const checkbox = task.status === 'completed' ? '[x]' : '[ ]';
161
+ lines.push(`- ${checkbox} **${task.title}** (#${taskId})`);
162
+ }
163
+ }
164
+ lines.push('');
165
+ }
166
+ }
167
+ lines.push('---');
168
+ lines.push('');
169
+ // Root tasks (entry points)
170
+ lines.push(`## Root Tasks (${rootTasks.length} tasks with no blockers)`);
171
+ lines.push('');
172
+ for (const rootId of rootTasks) {
173
+ const task = graph.getNode(rootId);
174
+ if (task) {
175
+ const checkbox = task.status === 'completed' ? '[x]' : '[ ]';
176
+ lines.push(`- ${checkbox} **${task.title}** (#${rootId})`);
177
+ }
178
+ else {
179
+ lines.push(`- Missing task #${rootId}`);
180
+ }
181
+ }
182
+ lines.push('');
183
+ lines.push('---');
184
+ lines.push('');
185
+ // Full task details
186
+ lines.push(`## Task Details`);
187
+ lines.push('');
188
+ // Sort by topological order if possible, otherwise by created_at
189
+ let sortedTasks = [...tasks];
190
+ try {
191
+ // Try to get topological sort
192
+ // For now, sort by created_at
193
+ sortedTasks.sort((a, b) => a.created_at.localeCompare(b.created_at));
194
+ }
195
+ catch {
196
+ // Fall back to unsorted
197
+ }
198
+ for (const task of sortedTasks) {
199
+ lines.push(formatTaskMarkdown(task));
200
+ lines.push('');
201
+ lines.push('---');
202
+ lines.push('');
203
+ }
204
+ return lines.join('\n');
205
+ }
206
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/cli/output/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAExD,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,oBAAoB,eAAe,oBAAoB,iBAAiB,EAAE,CAAC,CAAC;IAC3G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,cAAc;IACd,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,mBAAmB;IACnB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAChD,6FAA6F;YAC7F,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,eAAe;IACf,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,6FAA6F;YAC7F,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,mCAAmC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAChD,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;YACjC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,GAAG,aAAa,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qDAAqD;IACrD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,YAAY;IACZ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,eAAe,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,QAAQ;IACR,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAqB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAE7B,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qBAAqB;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEvC,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,kBAAkB;IAClB,MAAM,QAAQ,GAA6B;QACzC,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;QACnE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAa,CAAC,CAAC,CAAC,4BAA4B;YAC7E,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,MAAM,IAAI,CAAC,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,MAAM,IAAI,CAAC,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iEAAiE;IACjE,IAAI,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,8BAA8B;QAC9B,8BAA8B;QAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Table output formatters for tasks
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ /**
6
+ * Format multiple tasks as a table
7
+ * Columns: ID, Status, Priority, Title, Blockers, Dependencies
8
+ *
9
+ * @param tasks - Array of tasks to format
10
+ * @param options - Formatting options
11
+ * @returns Formatted table string
12
+ */
13
+ export interface FormatTasksTableOptions {
14
+ compact?: boolean;
15
+ verbose?: boolean;
16
+ showId?: boolean;
17
+ }
18
+ export declare function formatTasksTable(tasks: TaskNode[], options?: FormatTasksTableOptions): string;
19
+ /**
20
+ * Format a single task as a detailed table view
21
+ */
22
+ export declare function formatTaskDetailTable(task: TaskNode): string;
23
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/cli/output/table.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAK1D;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAyER;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAiG5D"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Table output formatters for tasks
3
+ */
4
+ import { TaskNode } from '../../core/models/task-node.js';
5
+ import Table from 'cli-table3';
6
+ import { formatStatus, formatPriority, truncate } from '../utils/helpers.js';
7
+ import chalk from 'chalk';
8
+ export function formatTasksTable(tasks, options = {}) {
9
+ const { verbose = false, showId = false } = options;
10
+ // Handle empty task list
11
+ if (tasks.length === 0) {
12
+ return chalk.yellow('No tasks to display');
13
+ }
14
+ // Define table structure
15
+ const colWidths = showId ? [36, 15, 10, 40] : [10, 15, 10, 40];
16
+ const head = showId
17
+ ? [chalk.gray('ID'), chalk.gray('Status'), chalk.gray('Priority'), chalk.gray('Title')]
18
+ : [chalk.gray('ID'), chalk.gray('Status'), chalk.gray('Priority'), chalk.gray('Title')];
19
+ const table = new Table({
20
+ head: head.map(h => chalk.bold(h)),
21
+ colWidths,
22
+ wordWrap: true,
23
+ });
24
+ // Add rows
25
+ for (const task of tasks) {
26
+ const id = showId ? task.id : task.id.substring(0, 8);
27
+ const status = formatStatus(task.status);
28
+ const priority = formatPriority(task.priority);
29
+ const title = truncate(task.title, 40);
30
+ table.push([id, status, priority, title]);
31
+ // Verbose mode: add blockers and dependencies as additional rows
32
+ if (verbose) {
33
+ if (task.blockers.length > 0) {
34
+ table.push([
35
+ '',
36
+ chalk.gray('Blocked by:'),
37
+ '',
38
+ chalk.cyan(task.blockers.map(id => id.substring(0, 8)).join(', ')),
39
+ ]);
40
+ }
41
+ if (task.dependencies) {
42
+ table.push([
43
+ '',
44
+ chalk.gray('Dependencies:'),
45
+ '',
46
+ chalk.cyan(task.dependencies.substring(0, 40) + (task.dependencies.length > 40 ? '...' : '')),
47
+ ]);
48
+ }
49
+ }
50
+ }
51
+ let output = table.toString();
52
+ // Add summary
53
+ const completed = tasks.filter(t => t.status === 'completed').length;
54
+ const inProgress = tasks.filter(t => t.status === 'in_progress').length;
55
+ const inReview = tasks.filter(t => t.status === 'in_review').length;
56
+ const ready = tasks.filter(t => t.status === 'ready').length;
57
+ const blocked = tasks.filter(t => t.status === 'blocked').length;
58
+ output += '\n' + chalk.gray(`Total: ${tasks.length} task${tasks.length !== 1 ? 's' : ''}`);
59
+ if (verbose && tasks.length > 0) {
60
+ output += '\n' + chalk.gray(` ${chalk.green('✓')} ${completed} completed | ` +
61
+ `${chalk.blue('○')} ${inProgress} in progress | ` +
62
+ `${chalk.magenta('◎')} ${inReview} in review | ` +
63
+ `${chalk.cyan('○')} ${ready} ready | ` +
64
+ `${chalk.red('⊘')} ${blocked} blocked`);
65
+ }
66
+ return output;
67
+ }
68
+ /**
69
+ * Format a single task as a detailed table view
70
+ */
71
+ export function formatTaskDetailTable(task) {
72
+ const lines = [];
73
+ // Header
74
+ lines.push(chalk.bold(task.title));
75
+ lines.push(chalk.gray(`ID: ${task.id}`));
76
+ lines.push('');
77
+ // Basic info table
78
+ const infoTable = new Table({
79
+ colWidths: [15, 50],
80
+ wordWrap: true,
81
+ });
82
+ infoTable.push([chalk.gray('Status:'), formatStatus(task.status)], [chalk.gray('Priority:'), formatPriority(task.priority)], [chalk.gray('Created:'), task.created_at], [chalk.gray('Updated:'), task.updated_at]);
83
+ if (task.completed_at) {
84
+ infoTable.push([chalk.gray('Completed:'), task.completed_at]);
85
+ }
86
+ lines.push(infoTable.toString());
87
+ lines.push('');
88
+ // Description
89
+ lines.push(chalk.bold('Description:'));
90
+ lines.push(task.description);
91
+ lines.push('');
92
+ // Success criteria
93
+ if (task.success_criteria.length > 0) {
94
+ lines.push(chalk.bold('Success Criteria:'));
95
+ for (const sc of task.success_criteria) {
96
+ const symbol = sc.completed ? chalk.green('✓') : chalk.gray('○');
97
+ const idDisplay = chalk.gray(`(${sc.id.substring(0, 8)})`);
98
+ lines.push(` ${symbol} ${sc.text} ${idDisplay}`);
99
+ }
100
+ lines.push('');
101
+ }
102
+ // Deliverables
103
+ if (task.deliverables.length > 0) {
104
+ lines.push(chalk.bold('Deliverables:'));
105
+ for (const d of task.deliverables) {
106
+ const symbol = d.completed ? chalk.green('✓') : chalk.gray('○');
107
+ const fileRef = d.file_path ? chalk.gray(` (${d.file_path})`) : '';
108
+ const idDisplay = chalk.gray(`(${d.id.substring(0, 8)})`);
109
+ lines.push(` ${symbol} ${d.text}${fileRef} ${idDisplay}`);
110
+ }
111
+ lines.push('');
112
+ }
113
+ // Need Fix Items (blocking issues)
114
+ if (task.need_fix.length > 0) {
115
+ lines.push(chalk.bold('Need Fix:'));
116
+ for (const nf of task.need_fix) {
117
+ const symbol = nf.completed ? chalk.green('✓') : chalk.red('!');
118
+ const sourceDisplay = nf.source ? chalk.yellow(` [${nf.source}]`) : '';
119
+ const fileRef = nf.file_path ? chalk.gray(` (${nf.file_path})`) : '';
120
+ const idDisplay = chalk.gray(`(${nf.id.substring(0, 8)})`);
121
+ lines.push(` ${symbol} ${nf.text}${sourceDisplay}${fileRef} ${idDisplay}`);
122
+ }
123
+ lines.push('');
124
+ }
125
+ // Relationships
126
+ if (task.blockers.length > 0) {
127
+ lines.push(chalk.bold('Blocked by:'), chalk.cyan(task.blockers.join(', ')));
128
+ lines.push('');
129
+ }
130
+ if (task.dependencies) {
131
+ lines.push(chalk.bold('Dependencies:'), chalk.cyan(task.dependencies));
132
+ lines.push('');
133
+ }
134
+ // Related files
135
+ if (task.related_files.length > 0) {
136
+ lines.push(chalk.bold('Related Files:'));
137
+ for (const file of task.related_files) {
138
+ lines.push(` - ${chalk.cyan(file)}`);
139
+ }
140
+ lines.push('');
141
+ }
142
+ // Notes
143
+ if (task.notes) {
144
+ lines.push(chalk.bold('Notes:'));
145
+ lines.push(task.notes);
146
+ lines.push('');
147
+ }
148
+ return lines.join('\n');
149
+ }
150
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/cli/output/table.ts"],"names":[],"mappings":"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"}