@brainfile/cli 0.12.3 → 0.12.5

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 (110) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cli.js +32 -9
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts +12 -3
  5. package/dist/commands/add.d.ts.map +1 -1
  6. package/dist/commands/add.js +83 -81
  7. package/dist/commands/add.js.map +1 -1
  8. package/dist/commands/archive.d.ts.map +1 -1
  9. package/dist/commands/archive.js +70 -47
  10. package/dist/commands/archive.js.map +1 -1
  11. package/dist/commands/contract.d.ts +20 -0
  12. package/dist/commands/contract.d.ts.map +1 -0
  13. package/dist/commands/contract.js +62 -0
  14. package/dist/commands/contract.js.map +1 -0
  15. package/dist/commands/hooks.d.ts +7 -6
  16. package/dist/commands/hooks.d.ts.map +1 -1
  17. package/dist/commands/hooks.js +130 -124
  18. package/dist/commands/hooks.js.map +1 -1
  19. package/dist/commands/lint.d.ts +9 -1
  20. package/dist/commands/lint.d.ts.map +1 -1
  21. package/dist/commands/lint.js +74 -77
  22. package/dist/commands/lint.js.map +1 -1
  23. package/dist/commands/list.d.ts +12 -3
  24. package/dist/commands/list.d.ts.map +1 -1
  25. package/dist/commands/list.js +59 -58
  26. package/dist/commands/list.js.map +1 -1
  27. package/dist/commands/mcp.d.ts.map +1 -1
  28. package/dist/commands/mcp.js +104 -17
  29. package/dist/commands/mcp.js.map +1 -1
  30. package/dist/commands/move.d.ts +9 -1
  31. package/dist/commands/move.d.ts.map +1 -1
  32. package/dist/commands/move.js +78 -64
  33. package/dist/commands/move.js.map +1 -1
  34. package/dist/commands/restore.d.ts.map +1 -1
  35. package/dist/commands/restore.js +15 -13
  36. package/dist/commands/restore.js.map +1 -1
  37. package/dist/commands/template.d.ts +7 -1
  38. package/dist/commands/template.d.ts.map +1 -1
  39. package/dist/commands/template.js +105 -124
  40. package/dist/commands/template.js.map +1 -1
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +5 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/lib/contractRunner.d.ts +54 -0
  46. package/dist/lib/contractRunner.d.ts.map +1 -0
  47. package/dist/lib/contractRunner.js +273 -0
  48. package/dist/lib/contractRunner.js.map +1 -0
  49. package/dist/tui/BrainfileTUI.d.ts.map +1 -1
  50. package/dist/tui/BrainfileTUI.js +7 -1
  51. package/dist/tui/BrainfileTUI.js.map +1 -1
  52. package/dist/tui/actions.d.ts +5 -0
  53. package/dist/tui/actions.d.ts.map +1 -1
  54. package/dist/tui/actions.js +122 -0
  55. package/dist/tui/actions.js.map +1 -1
  56. package/dist/tui/components/StackedTaskList.d.ts.map +1 -1
  57. package/dist/tui/components/StackedTaskList.js +4 -4
  58. package/dist/tui/components/StackedTaskList.js.map +1 -1
  59. package/dist/tui/components/TaskCard.d.ts +3 -1
  60. package/dist/tui/components/TaskCard.d.ts.map +1 -1
  61. package/dist/tui/components/TaskCard.js +33 -9
  62. package/dist/tui/components/TaskCard.js.map +1 -1
  63. package/dist/tui/components/TaskCardMeasure.d.ts +1 -1
  64. package/dist/tui/components/TaskCardMeasure.d.ts.map +1 -1
  65. package/dist/tui/components/TaskCardMeasure.js +11 -1
  66. package/dist/tui/components/TaskCardMeasure.js.map +1 -1
  67. package/dist/tui/components/TaskDetail.d.ts +14 -0
  68. package/dist/tui/components/TaskDetail.d.ts.map +1 -0
  69. package/dist/tui/components/TaskDetail.js +41 -0
  70. package/dist/tui/components/TaskDetail.js.map +1 -0
  71. package/dist/tui/components/TaskList.d.ts.map +1 -1
  72. package/dist/tui/components/TaskList.js +5 -4
  73. package/dist/tui/components/TaskList.js.map +1 -1
  74. package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -1
  75. package/dist/tui/hooks/useKeyboardNavigation.js +15 -9
  76. package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -1
  77. package/dist/utils/archive.d.ts +57 -0
  78. package/dist/utils/archive.d.ts.map +1 -0
  79. package/dist/utils/archive.js +304 -0
  80. package/dist/utils/archive.js.map +1 -0
  81. package/dist/utils/cli-error.d.ts +44 -0
  82. package/dist/utils/cli-error.d.ts.map +1 -0
  83. package/dist/utils/cli-error.js +85 -0
  84. package/dist/utils/cli-error.js.map +1 -0
  85. package/dist/utils/config.d.ts +30 -0
  86. package/dist/utils/config.d.ts.map +1 -1
  87. package/dist/utils/config.js +80 -0
  88. package/dist/utils/config.js.map +1 -1
  89. package/dist/utils/errorHandler.d.ts +2 -2
  90. package/dist/utils/errorHandler.d.ts.map +1 -1
  91. package/dist/utils/errorHandler.js +8 -13
  92. package/dist/utils/errorHandler.js.map +1 -1
  93. package/dist/utils/git-helper.d.ts +8 -4
  94. package/dist/utils/git-helper.d.ts.map +1 -1
  95. package/dist/utils/git-helper.js +12 -9
  96. package/dist/utils/git-helper.js.map +1 -1
  97. package/dist/utils/logger.d.ts +34 -0
  98. package/dist/utils/logger.d.ts.map +1 -0
  99. package/dist/utils/logger.js +56 -0
  100. package/dist/utils/logger.js.map +1 -0
  101. package/package.json +2 -2
  102. package/.aider/sessions/auto-save.json +0 -23
  103. package/.aider.chat.history.md +0 -81
  104. package/.aider.input.history +0 -12
  105. package/.aider.tags.cache.v8/cache.db +0 -0
  106. package/.aider.tags.cache.v8/cache.db-shm +0 -0
  107. package/.aider.tags.cache.v8/cache.db-wal +0 -0
  108. package/.claude/settings.json +0 -7
  109. package/brainfile.md +0 -102
  110. package/logo.png +0 -0
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ /**
3
+ * Archive utilities for Brainfile CLI
4
+ *
5
+ * Per protocol spec, archived tasks go to a separate brainfile-archive.md file,
6
+ * NOT to an inline archive array in the main brainfile.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.getArchivePath = getArchivePath;
45
+ exports.createEmptyArchiveBoard = createEmptyArchiveBoard;
46
+ exports.loadArchivedTasks = loadArchivedTasks;
47
+ exports.readArchiveBoard = readArchiveBoard;
48
+ exports.archiveTaskToFile = archiveTaskToFile;
49
+ exports.removeFromArchive = removeFromArchive;
50
+ exports.restoreFromArchive = restoreFromArchive;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const core_1 = require("@brainfile/core");
54
+ // ============================================================================
55
+ // Path Helpers
56
+ // ============================================================================
57
+ /**
58
+ * Get the archive file path for a given brainfile
59
+ * brainfile.md -> brainfile-archive.md
60
+ */
61
+ function getArchivePath(filePath) {
62
+ const dir = path.dirname(filePath);
63
+ const filename = path.basename(filePath);
64
+ const archiveFilename = filename.replace(/\.md$/, '-archive.md');
65
+ return path.join(dir, archiveFilename);
66
+ }
67
+ /**
68
+ * Create an empty archive board structure
69
+ */
70
+ function createEmptyArchiveBoard() {
71
+ return {
72
+ title: 'Archive',
73
+ columns: [],
74
+ archive: [],
75
+ };
76
+ }
77
+ // ============================================================================
78
+ // Read Operations
79
+ // ============================================================================
80
+ /**
81
+ * Load archived tasks from the separate archive file
82
+ */
83
+ function loadArchivedTasks(filePath) {
84
+ const archivePath = getArchivePath(filePath);
85
+ if (!fs.existsSync(archivePath)) {
86
+ return { tasks: [], archivePath };
87
+ }
88
+ try {
89
+ const archiveContent = fs.readFileSync(archivePath, 'utf-8');
90
+ const parseResult = core_1.Brainfile.parseWithErrors(archiveContent);
91
+ if (parseResult.board && Array.isArray(parseResult.board.archive)) {
92
+ return { tasks: parseResult.board.archive, archivePath };
93
+ }
94
+ return { tasks: [], archivePath };
95
+ }
96
+ catch (err) {
97
+ return {
98
+ tasks: [],
99
+ archivePath,
100
+ error: `Failed to read archive: ${err instanceof Error ? err.message : String(err)}`,
101
+ };
102
+ }
103
+ }
104
+ /**
105
+ * Read the archive board (full structure)
106
+ */
107
+ function readArchiveBoard(filePath) {
108
+ const archivePath = getArchivePath(filePath);
109
+ if (!fs.existsSync(archivePath)) {
110
+ return { board: null, archivePath };
111
+ }
112
+ try {
113
+ const archiveContent = fs.readFileSync(archivePath, 'utf-8');
114
+ const parseResult = core_1.Brainfile.parseWithErrors(archiveContent);
115
+ if (parseResult.board) {
116
+ return { board: parseResult.board, archivePath };
117
+ }
118
+ return { board: null, archivePath, error: parseResult.error };
119
+ }
120
+ catch (err) {
121
+ return {
122
+ board: null,
123
+ archivePath,
124
+ error: `Failed to read archive: ${err instanceof Error ? err.message : String(err)}`,
125
+ };
126
+ }
127
+ }
128
+ // ============================================================================
129
+ // Write Operations
130
+ // ============================================================================
131
+ /**
132
+ * Archive a task to the separate archive file
133
+ *
134
+ * 1. Removes task from main board
135
+ * 2. Adds task to brainfile-archive.md
136
+ */
137
+ function archiveTaskToFile(filePath, board, columnId, taskId) {
138
+ const taskInfo = board.columns.find((c) => c.id === columnId)?.tasks.find((t) => t.id === taskId);
139
+ if (!taskInfo) {
140
+ return { success: false, error: `Task ${taskId} not found in column ${columnId}` };
141
+ }
142
+ const task = taskInfo;
143
+ // Remove task from the main board
144
+ const result = (0, core_1.deleteTask)(board, columnId, taskId);
145
+ if (!result.success) {
146
+ return { success: false, error: result.error };
147
+ }
148
+ // Save the main board without the task
149
+ try {
150
+ const mainContent = core_1.Brainfile.serialize(result.board);
151
+ fs.writeFileSync(filePath, mainContent, 'utf-8');
152
+ }
153
+ catch (err) {
154
+ return {
155
+ success: false,
156
+ error: `Failed to write main file: ${err instanceof Error ? err.message : String(err)}`,
157
+ };
158
+ }
159
+ // Add task to separate archive file
160
+ const archivePath = getArchivePath(filePath);
161
+ let archiveBoard;
162
+ if (fs.existsSync(archivePath)) {
163
+ try {
164
+ const archiveContent = fs.readFileSync(archivePath, 'utf-8');
165
+ const parseResult = core_1.Brainfile.parseWithErrors(archiveContent);
166
+ archiveBoard = parseResult.board || createEmptyArchiveBoard();
167
+ }
168
+ catch {
169
+ archiveBoard = createEmptyArchiveBoard();
170
+ }
171
+ }
172
+ else {
173
+ archiveBoard = createEmptyArchiveBoard();
174
+ }
175
+ // Add task to archive (at beginning)
176
+ if (!archiveBoard.archive) {
177
+ archiveBoard.archive = [];
178
+ }
179
+ archiveBoard.archive.unshift(task);
180
+ // Save archive file
181
+ try {
182
+ const archiveContent = core_1.Brainfile.serialize(archiveBoard);
183
+ fs.writeFileSync(archivePath, archiveContent, 'utf-8');
184
+ }
185
+ catch (err) {
186
+ return {
187
+ success: false,
188
+ error: `Task removed from board but failed to write archive: ${err instanceof Error ? err.message : String(err)}`,
189
+ };
190
+ }
191
+ return { success: true, board: result.board, archiveBoard };
192
+ }
193
+ /**
194
+ * Remove a task from the archive file (after exporting to external service)
195
+ */
196
+ function removeFromArchive(filePath, taskId) {
197
+ const archivePath = getArchivePath(filePath);
198
+ if (!fs.existsSync(archivePath)) {
199
+ return { success: false, error: 'Archive file not found' };
200
+ }
201
+ let archiveBoard;
202
+ try {
203
+ const archiveContent = fs.readFileSync(archivePath, 'utf-8');
204
+ const parseResult = core_1.Brainfile.parseWithErrors(archiveContent);
205
+ if (!parseResult.board) {
206
+ return { success: false, error: 'Failed to parse archive file' };
207
+ }
208
+ archiveBoard = parseResult.board;
209
+ }
210
+ catch (err) {
211
+ return {
212
+ success: false,
213
+ error: `Failed to read archive: ${err instanceof Error ? err.message : String(err)}`,
214
+ };
215
+ }
216
+ // Remove task from archive
217
+ const originalLength = archiveBoard.archive?.length || 0;
218
+ archiveBoard.archive = (archiveBoard.archive || []).filter((t) => t.id !== taskId);
219
+ if (archiveBoard.archive.length === originalLength) {
220
+ return { success: false, error: `Task ${taskId} not found in archive` };
221
+ }
222
+ // Save updated archive
223
+ try {
224
+ const archiveContent = core_1.Brainfile.serialize(archiveBoard);
225
+ fs.writeFileSync(archivePath, archiveContent, 'utf-8');
226
+ }
227
+ catch (err) {
228
+ return {
229
+ success: false,
230
+ error: `Failed to write archive: ${err instanceof Error ? err.message : String(err)}`,
231
+ };
232
+ }
233
+ return { success: true, archiveBoard };
234
+ }
235
+ /**
236
+ * Restore a task from archive to a column in the main brainfile
237
+ */
238
+ function restoreFromArchive(filePath, taskId, toColumnId) {
239
+ const archivePath = getArchivePath(filePath);
240
+ // Read archive
241
+ if (!fs.existsSync(archivePath)) {
242
+ return { success: false, error: 'Archive file not found' };
243
+ }
244
+ let archiveBoard;
245
+ try {
246
+ const archiveContent = fs.readFileSync(archivePath, 'utf-8');
247
+ const parseResult = core_1.Brainfile.parseWithErrors(archiveContent);
248
+ if (!parseResult.board) {
249
+ return { success: false, error: 'Failed to parse archive file' };
250
+ }
251
+ archiveBoard = parseResult.board;
252
+ }
253
+ catch (err) {
254
+ return {
255
+ success: false,
256
+ error: `Failed to read archive: ${err instanceof Error ? err.message : String(err)}`,
257
+ };
258
+ }
259
+ // Find task in archive
260
+ const task = archiveBoard.archive?.find((t) => t.id === taskId);
261
+ if (!task) {
262
+ return { success: false, error: `Task ${taskId} not found in archive` };
263
+ }
264
+ // Read main brainfile
265
+ let board;
266
+ try {
267
+ const mainContent = fs.readFileSync(filePath, 'utf-8');
268
+ const parseResult = core_1.Brainfile.parseWithErrors(mainContent);
269
+ if (!parseResult.board) {
270
+ return { success: false, error: 'Failed to parse main brainfile' };
271
+ }
272
+ board = parseResult.board;
273
+ }
274
+ catch (err) {
275
+ return {
276
+ success: false,
277
+ error: `Failed to read main file: ${err instanceof Error ? err.message : String(err)}`,
278
+ };
279
+ }
280
+ // Find target column
281
+ const targetColumn = board.columns.find((c) => c.id === toColumnId);
282
+ if (!targetColumn) {
283
+ return { success: false, error: `Column ${toColumnId} not found` };
284
+ }
285
+ // Add task to column
286
+ targetColumn.tasks.push(task);
287
+ // Remove from archive
288
+ archiveBoard.archive = archiveBoard.archive.filter((t) => t.id !== taskId);
289
+ // Save both files
290
+ try {
291
+ const mainContent = core_1.Brainfile.serialize(board);
292
+ fs.writeFileSync(filePath, mainContent, 'utf-8');
293
+ const archiveContent = core_1.Brainfile.serialize(archiveBoard);
294
+ fs.writeFileSync(archivePath, archiveContent, 'utf-8');
295
+ }
296
+ catch (err) {
297
+ return {
298
+ success: false,
299
+ error: `Failed to save files: ${err instanceof Error ? err.message : String(err)}`,
300
+ };
301
+ }
302
+ return { success: true, board, archiveBoard };
303
+ }
304
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type ExitCodeType } from './errorHandler';
2
+ /**
3
+ * Custom error class for CLI errors.
4
+ * Thrown by commands to signal failure without calling process.exit directly.
5
+ * The CLI entry point catches this and handles exit codes.
6
+ */
7
+ export declare class CLIError extends Error {
8
+ readonly exitCode: ExitCodeType;
9
+ readonly details?: string;
10
+ constructor(message: string, exitCode?: ExitCodeType, details?: string);
11
+ }
12
+ /**
13
+ * Create a CLIError for file not found.
14
+ */
15
+ export declare function fileNotFound(filePath: string): CLIError;
16
+ /**
17
+ * Create a CLIError for parse errors.
18
+ */
19
+ export declare function parseFailure(error?: string): CLIError;
20
+ /**
21
+ * Create a CLIError for missing required options.
22
+ */
23
+ export declare function missingRequired(option: string, usage: string): CLIError;
24
+ /**
25
+ * Create a CLIError from a core operation failure.
26
+ */
27
+ export declare function operationFailed(error: string): CLIError;
28
+ /**
29
+ * Create a CLIError for column not found.
30
+ */
31
+ export declare function columnNotFound(columnId: string, availableColumns: string[]): CLIError;
32
+ /**
33
+ * Create a CLIError for task not found.
34
+ */
35
+ export declare function taskNotFound(taskId: string, availableTasks?: string[]): CLIError;
36
+ /**
37
+ * Create a CLIError for subtask not found.
38
+ */
39
+ export declare function subtaskNotFound(subtaskId: string, availableSubtasks?: string[]): CLIError;
40
+ /**
41
+ * Create a CLIError for validation errors.
42
+ */
43
+ export declare function validationError(message: string): CLIError;
44
+ //# sourceMappingURL=cli-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error.d.ts","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAC/B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAkC,EAAE,OAAO,CAAC,EAAE,MAAM;CAM9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAMvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAOrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAMvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,QAAQ,CAOrF;AACD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO,GAAG,QAAQ,CAMpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,EAAO,GAAG,QAAQ,CAM7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEzD"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLIError = void 0;
4
+ exports.fileNotFound = fileNotFound;
5
+ exports.parseFailure = parseFailure;
6
+ exports.missingRequired = missingRequired;
7
+ exports.operationFailed = operationFailed;
8
+ exports.columnNotFound = columnNotFound;
9
+ exports.taskNotFound = taskNotFound;
10
+ exports.subtaskNotFound = subtaskNotFound;
11
+ exports.validationError = validationError;
12
+ const errorHandler_1 = require("./errorHandler");
13
+ /**
14
+ * Custom error class for CLI errors.
15
+ * Thrown by commands to signal failure without calling process.exit directly.
16
+ * The CLI entry point catches this and handles exit codes.
17
+ */
18
+ class CLIError extends Error {
19
+ constructor(message, exitCode = errorHandler_1.ExitCode.USER_ERROR, details) {
20
+ super(message);
21
+ this.name = 'CLIError';
22
+ this.exitCode = exitCode;
23
+ this.details = details;
24
+ }
25
+ }
26
+ exports.CLIError = CLIError;
27
+ /**
28
+ * Create a CLIError for file not found.
29
+ */
30
+ function fileNotFound(filePath) {
31
+ return new CLIError(`File not found: ${filePath}`, errorHandler_1.ExitCode.USER_ERROR, 'To create a new brainfile, run: brainfile init');
32
+ }
33
+ /**
34
+ * Create a CLIError for parse errors.
35
+ */
36
+ function parseFailure(error) {
37
+ const msg = error ? `Failed to parse brainfile: ${error}` : 'Failed to parse brainfile';
38
+ return new CLIError(msg, errorHandler_1.ExitCode.USER_ERROR, 'To validate and fix syntax issues, run: brainfile lint --fix');
39
+ }
40
+ /**
41
+ * Create a CLIError for missing required options.
42
+ */
43
+ function missingRequired(option, usage) {
44
+ return new CLIError(`${option} is required`, errorHandler_1.ExitCode.USER_ERROR, `Usage: ${usage}`);
45
+ }
46
+ /**
47
+ * Create a CLIError from a core operation failure.
48
+ */
49
+ function operationFailed(error) {
50
+ return new CLIError(error, errorHandler_1.ExitCode.USER_ERROR);
51
+ }
52
+ /**
53
+ * Create a CLIError for column not found.
54
+ */
55
+ function columnNotFound(columnId, availableColumns) {
56
+ const listStr = availableColumns.join(', ');
57
+ return new CLIError(`Column not found: ${columnId}`, errorHandler_1.ExitCode.USER_ERROR, `Available columns: ${listStr}`);
58
+ }
59
+ /**
60
+ * Create a CLIError for task not found.
61
+ */
62
+ function taskNotFound(taskId, availableTasks = []) {
63
+ let details;
64
+ if (availableTasks.length > 0) {
65
+ details = `Available tasks:\n${availableTasks.map(t => ` - ${t}`).join('\n')}`;
66
+ }
67
+ return new CLIError(`Task not found: ${taskId}`, errorHandler_1.ExitCode.USER_ERROR, details);
68
+ }
69
+ /**
70
+ * Create a CLIError for subtask not found.
71
+ */
72
+ function subtaskNotFound(subtaskId, availableSubtasks = []) {
73
+ let details;
74
+ if (availableSubtasks.length > 0) {
75
+ details = `Available subtasks:\n${availableSubtasks.map(t => ` - ${t}`).join('\n')}`;
76
+ }
77
+ return new CLIError(`Subtask not found: ${subtaskId}`, errorHandler_1.ExitCode.USER_ERROR, details);
78
+ }
79
+ /**
80
+ * Create a CLIError for validation errors.
81
+ */
82
+ function validationError(message) {
83
+ return new CLIError(`Validation error: ${message}`, errorHandler_1.ExitCode.USER_ERROR);
84
+ }
85
+ //# sourceMappingURL=cli-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"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"}
@@ -86,4 +86,34 @@ export declare function setLinearConfig(linear: LinearConfig): void;
86
86
  * @returns The effective destination
87
87
  */
88
88
  export declare function getEffectiveArchiveDestination(brainfileDestination?: string): 'local' | 'github' | 'linear';
89
+ export interface ParsedDestination {
90
+ type: 'local' | 'github' | 'linear';
91
+ /** GitHub owner (from github:owner/repo) */
92
+ owner?: string;
93
+ /** GitHub repo (from github:owner/repo) */
94
+ repo?: string;
95
+ /** Linear team key (from linear:TEAM) */
96
+ teamKey?: string;
97
+ }
98
+ /**
99
+ * Parse an archive destination string
100
+ *
101
+ * Formats:
102
+ * - `local` → local archive
103
+ * - `github` → GitHub with config defaults
104
+ * - `github:owner/repo` → GitHub with explicit owner/repo
105
+ * - `linear` → Linear with config defaults
106
+ * - `linear:TEAM` → Linear with explicit team key
107
+ *
108
+ * @param destination - Destination string from brainfile.md or CLI
109
+ * @returns Parsed destination with type and optional target info
110
+ */
111
+ export declare function parseArchiveDestination(destination: string): ParsedDestination | null;
112
+ /**
113
+ * Get effective archive destination with full config resolution
114
+ *
115
+ * @param brainfileDestination - Destination from brainfile.md (may include target)
116
+ * @returns Fully resolved destination with type and target info
117
+ */
118
+ export declare function getEffectiveDestination(brainfileDestination?: string): ParsedDestination;
89
119
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAaD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAW5C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAMxD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAK/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAKlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAK1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAK1D;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAc/B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAaD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAW5C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAMxD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAK/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAKlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAK1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAK1D;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,oBAAoB,CAAC,EAAE,MAAM,GAC5B,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAc/B;AAMD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAsCrF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA6BxF"}
@@ -55,6 +55,8 @@ exports.setArchiveDefault = setArchiveDefault;
55
55
  exports.setGitHubConfig = setGitHubConfig;
56
56
  exports.setLinearConfig = setLinearConfig;
57
57
  exports.getEffectiveArchiveDestination = getEffectiveArchiveDestination;
58
+ exports.parseArchiveDestination = parseArchiveDestination;
59
+ exports.getEffectiveDestination = getEffectiveDestination;
58
60
  const fs = __importStar(require("fs"));
59
61
  const path = __importStar(require("path"));
60
62
  const os = __importStar(require("os"));
@@ -178,6 +180,84 @@ function getEffectiveArchiveDestination(brainfileDestination) {
178
180
  // Priority 3: fallback to local
179
181
  return 'local';
180
182
  }
183
+ /**
184
+ * Parse an archive destination string
185
+ *
186
+ * Formats:
187
+ * - `local` → local archive
188
+ * - `github` → GitHub with config defaults
189
+ * - `github:owner/repo` → GitHub with explicit owner/repo
190
+ * - `linear` → Linear with config defaults
191
+ * - `linear:TEAM` → Linear with explicit team key
192
+ *
193
+ * @param destination - Destination string from brainfile.md or CLI
194
+ * @returns Parsed destination with type and optional target info
195
+ */
196
+ function parseArchiveDestination(destination) {
197
+ if (!destination)
198
+ return null;
199
+ // Simple destinations
200
+ if (destination === 'local') {
201
+ return { type: 'local' };
202
+ }
203
+ if (destination === 'github') {
204
+ return { type: 'github' };
205
+ }
206
+ if (destination === 'linear') {
207
+ return { type: 'linear' };
208
+ }
209
+ // Extended format: github:owner/repo
210
+ if (destination.startsWith('github:')) {
211
+ const target = destination.slice(7); // Remove 'github:'
212
+ const parts = target.split('/');
213
+ if (parts.length === 2 && parts[0] && parts[1]) {
214
+ return { type: 'github', owner: parts[0], repo: parts[1] };
215
+ }
216
+ // Invalid format, treat as plain github
217
+ return { type: 'github' };
218
+ }
219
+ // Extended format: linear:TEAM
220
+ if (destination.startsWith('linear:')) {
221
+ const teamKey = destination.slice(7); // Remove 'linear:'
222
+ if (teamKey) {
223
+ return { type: 'linear', teamKey };
224
+ }
225
+ // Invalid format, treat as plain linear
226
+ return { type: 'linear' };
227
+ }
228
+ return null;
229
+ }
230
+ /**
231
+ * Get effective archive destination with full config resolution
232
+ *
233
+ * @param brainfileDestination - Destination from brainfile.md (may include target)
234
+ * @returns Fully resolved destination with type and target info
235
+ */
236
+ function getEffectiveDestination(brainfileDestination) {
237
+ // Priority 1: brainfile.md setting (may have inline target)
238
+ if (brainfileDestination) {
239
+ const parsed = parseArchiveDestination(brainfileDestination);
240
+ if (parsed) {
241
+ // Fill in missing config from global config
242
+ const config = getArchiveConfig();
243
+ if (parsed.type === 'github' && !parsed.owner) {
244
+ parsed.owner = config.github?.owner;
245
+ parsed.repo = config.github?.repo;
246
+ }
247
+ if (parsed.type === 'linear' && !parsed.teamKey) {
248
+ // We'll resolve teamKey to teamId later in the archive command
249
+ }
250
+ return parsed;
251
+ }
252
+ }
253
+ // Priority 2: config default
254
+ const config = getArchiveConfig();
255
+ if (config.default && isValidDestination(config.default)) {
256
+ return { type: config.default };
257
+ }
258
+ // Priority 3: fallback to local
259
+ return { type: 'local' };
260
+ }
181
261
  // ============================================================================
182
262
  // Helper Functions
183
263
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDH,oCAEC;AAKD,sCAEC;AAKD,0CAIC;AAMD,gCAWC;AAMD,gCAMC;AAMD,oCAKC;AAKD,4CAGC;AAKD,8CAKC;AAKD,0CAKC;AAKD,0CAKC;AASD,wEAgBC;AA6BD,0DAsCC;AAQD,0DA6BC;AArRD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAoCzB,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4CAA4C;QAC5C,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAuB;IAChD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC7D,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK,EAAE,wBAAwB;KACtC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAAiC;IAC5D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,WAA0C;IAC1E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC;IACrC,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAoB;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAoB;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,8BAA8B,CAC5C,oBAA6B;IAE7B,mCAAmC;IACnC,IAAI,oBAAoB,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrE,OAAO,oBAAqD,CAAC;IAC/D,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,gCAAgC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAgBD;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CAAC,WAAmB;IACzD,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,sBAAsB;IACtB,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;QACD,wCAAwC;QACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,+BAA+B;IAC/B,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACrC,CAAC;QACD,wCAAwC;QACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,oBAA6B;IACnE,4DAA4D;IAC5D,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,4CAA4C;YAC5C,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAElC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBACpC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YACpC,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAChD,+DAA+D;YACjE,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,gCAAgC;IAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAgC,MAAS,EAAE,MAAkB;IAC7E,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAEhC,IACE,WAAW,KAAK,IAAI;gBACpB,OAAO,WAAW,KAAK,QAAQ;gBAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,WAAW,KAAK,IAAI;gBACpB,OAAO,WAAW,KAAK,QAAQ;gBAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAA0C,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -40,10 +40,10 @@ export declare function checkIncompleteSubtasks(task: Task): IncompleteSubtasksR
40
40
  * Prints a warning about incomplete subtasks when moving to a done column.
41
41
  * Returns true if warning was printed.
42
42
  */
43
- export declare function warnIncompleteSubtasks(task: Task, targetColumn: {
43
+ export declare function getIncompleteSubtasksWarning(task: Task, targetColumn: {
44
44
  id: string;
45
45
  title: string;
46
- }): boolean;
46
+ }): string | null;
47
47
  /**
48
48
  * Handles file not found errors with actionable guidance.
49
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAU,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM3D,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAMlE,oBAAY,SAAS;IACnB,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;CACtC;AAaD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAI3E;AAMD,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,wBAAwB,CAiB5E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAoBT;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAMzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAShD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAcrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAOzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAczE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAGnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAGjD;AAMD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAKlD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C,UAAU,GAAG,SAAS,CAkBxB"}
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAU,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM3D,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAMlE,oBAAY,SAAS;IACnB,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;CACtC;AAaD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAI3E;AAMD,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,wBAAwB,CAiB5E;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,EACV,YAAY,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,GAAG,IAAI,CAef;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAMzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAShD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAcrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAOzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAczE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAGnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAGjD;AAMD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAKlD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C,UAAU,GAAG,SAAS,CAkBxB"}