@brainfile/cli 0.8.0 → 0.9.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.
- package/CHANGELOG.md +15 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +8 -24
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +8 -23
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +8 -23
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +4 -12
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +29 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/move.d.ts.map +1 -1
- package/dist/commands/move.js +12 -35
- package/dist/commands/move.js.map +1 -1
- package/dist/commands/patch.d.ts.map +1 -1
- package/dist/commands/patch.js +9 -27
- package/dist/commands/patch.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +10 -26
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/subtask.d.ts.map +1 -1
- package/dist/commands/subtask.js +16 -60
- package/dist/commands/subtask.js.map +1 -1
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +6 -701
- package/dist/commands/tui.js.map +1 -1
- package/dist/tui/BrainfileTUI.d.ts +4 -0
- package/dist/tui/BrainfileTUI.d.ts.map +1 -0
- package/dist/tui/BrainfileTUI.js +198 -0
- package/dist/tui/BrainfileTUI.js.map +1 -0
- package/dist/tui/actions.d.ts +49 -0
- package/dist/tui/actions.d.ts.map +1 -0
- package/dist/tui/actions.js +569 -0
- package/dist/tui/actions.js.map +1 -0
- package/dist/tui/components/ColumnTabs.d.ts +9 -0
- package/dist/tui/components/ColumnTabs.d.ts.map +1 -0
- package/dist/tui/components/ColumnTabs.js +30 -0
- package/dist/tui/components/ColumnTabs.js.map +1 -0
- package/dist/tui/components/Header.d.ts +12 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +24 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/HelpOverlay.d.ts +7 -0
- package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
- package/dist/tui/components/HelpOverlay.js +56 -0
- package/dist/tui/components/HelpOverlay.js.map +1 -0
- package/dist/tui/components/Overlays.d.ts +41 -0
- package/dist/tui/components/Overlays.d.ts.map +1 -0
- package/dist/tui/components/Overlays.js +127 -0
- package/dist/tui/components/Overlays.js.map +1 -0
- package/dist/tui/components/ProgressBar.d.ts +8 -0
- package/dist/tui/components/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/ProgressBar.js +35 -0
- package/dist/tui/components/ProgressBar.js.map +1 -0
- package/dist/tui/components/SearchBar.d.ts +7 -0
- package/dist/tui/components/SearchBar.d.ts.map +1 -0
- package/dist/tui/components/SearchBar.js +22 -0
- package/dist/tui/components/SearchBar.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +12 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +37 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/TaskCard.d.ts +19 -0
- package/dist/tui/components/TaskCard.d.ts.map +1 -0
- package/dist/tui/components/TaskCard.js +105 -0
- package/dist/tui/components/TaskCard.js.map +1 -0
- package/dist/tui/components/TaskList.d.ts +11 -0
- package/dist/tui/components/TaskList.d.ts.map +1 -0
- package/dist/tui/components/TaskList.js +56 -0
- package/dist/tui/components/TaskList.js.map +1 -0
- package/dist/tui/components/index.d.ts +19 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +26 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/hooks/index.d.ts +3 -0
- package/dist/tui/hooks/index.d.ts.map +1 -0
- package/dist/tui/hooks/index.js +8 -0
- package/dist/tui/hooks/index.js.map +1 -0
- package/dist/tui/hooks/useBrainfileLoader.d.ts +5 -0
- package/dist/tui/hooks/useBrainfileLoader.d.ts.map +1 -0
- package/dist/tui/hooks/useBrainfileLoader.js +171 -0
- package/dist/tui/hooks/useBrainfileLoader.js.map +1 -0
- package/dist/tui/hooks/useKeyboardNavigation.d.ts +16 -0
- package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -0
- package/dist/tui/hooks/useKeyboardNavigation.js +434 -0
- package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -0
- package/dist/tui/index.d.ts +9 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +36 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/theme.d.ts +113 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +132 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.d.ts +30 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +6 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/utils.d.ts +3 -0
- package/dist/tui/utils.d.ts.map +1 -0
- package/dist/tui/utils.js +31 -0
- package/dist/tui/utils.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +106 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +228 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.8.0] - 2025-11-25
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **MCP server auto-discovery** - Automatically finds workspace brainfile without hardcoded paths
|
|
14
|
+
- Checks `WORKSPACE_FOLDER_PATHS` env var (set by Cursor IDE)
|
|
15
|
+
- Falls back to git repository root detection
|
|
16
|
+
- Falls back to walking up directory tree from cwd
|
|
17
|
+
- Logs discovered path to stderr for debugging
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- **`brainfile init` schema URL** - Changed from `https://brainfile.md/v1` to `https://brainfile.md/v1/board.json` per protocol spec
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- Upgraded to @brainfile/core@^0.8.0 with `findNearestBrainfile()` support
|
|
24
|
+
|
|
10
25
|
## [0.7.1] - 2025-11-25
|
|
11
26
|
|
|
12
27
|
### Added
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,QAgG7C"}
|
package/dist/commands/add.js
CHANGED
|
@@ -41,33 +41,24 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const core_1 = require("@brainfile/core");
|
|
43
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
44
45
|
function addCommand(options) {
|
|
45
46
|
try {
|
|
46
47
|
// Validate required options
|
|
47
48
|
if (!options.title) {
|
|
48
|
-
|
|
49
|
-
console.log(chalk_1.default.gray('Usage: brainfile add --title "Task title" [options]'));
|
|
50
|
-
process.exit(1);
|
|
49
|
+
(0, errorHandler_1.missingRequiredError)('--title', 'brainfile add --title "Task title" [options]');
|
|
51
50
|
}
|
|
52
51
|
// Resolve file path
|
|
53
52
|
const filePath = path.resolve(options.file);
|
|
54
53
|
// Check if file exists
|
|
55
54
|
if (!fs.existsSync(filePath)) {
|
|
56
|
-
|
|
57
|
-
console.log('');
|
|
58
|
-
console.log(chalk_1.default.gray('To create a new brainfile, run:'));
|
|
59
|
-
console.log(chalk_1.default.cyan(' brainfile init'));
|
|
60
|
-
process.exit(1);
|
|
55
|
+
(0, errorHandler_1.fileNotFoundError)(filePath);
|
|
61
56
|
}
|
|
62
57
|
// Read and parse the file
|
|
63
58
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
64
59
|
const result = core_1.Brainfile.parseWithErrors(content);
|
|
65
60
|
if (!result.board) {
|
|
66
|
-
|
|
67
|
-
if (result.error) {
|
|
68
|
-
console.error(chalk_1.default.red(result.error));
|
|
69
|
-
}
|
|
70
|
-
process.exit(1);
|
|
61
|
+
(0, errorHandler_1.parseError)(result.error);
|
|
71
62
|
}
|
|
72
63
|
let board = result.board;
|
|
73
64
|
// Find the target column by ID or name
|
|
@@ -76,12 +67,7 @@ function addCommand(options) {
|
|
|
76
67
|
targetColumn = (0, core_1.findColumnByName)(board, options.column);
|
|
77
68
|
}
|
|
78
69
|
if (!targetColumn) {
|
|
79
|
-
|
|
80
|
-
console.log(chalk_1.default.gray('Available columns:'));
|
|
81
|
-
board.columns.forEach(col => {
|
|
82
|
-
console.log(chalk_1.default.gray(` - ${col.id} (${col.title})`));
|
|
83
|
-
});
|
|
84
|
-
process.exit(1);
|
|
70
|
+
(0, errorHandler_1.columnNotFoundError)(options.column, board);
|
|
85
71
|
}
|
|
86
72
|
// Build TaskInput with all provided fields
|
|
87
73
|
const taskInput = {
|
|
@@ -97,8 +83,7 @@ function addCommand(options) {
|
|
|
97
83
|
// Add task using core operation (immutable)
|
|
98
84
|
const addResult = (0, core_1.addTask)(board, targetColumn.id, taskInput);
|
|
99
85
|
if (!addResult.success) {
|
|
100
|
-
|
|
101
|
-
process.exit(1);
|
|
86
|
+
(0, errorHandler_1.operationError)(addResult.error);
|
|
102
87
|
}
|
|
103
88
|
board = addResult.board;
|
|
104
89
|
// Get the new task for display
|
|
@@ -109,7 +94,7 @@ function addCommand(options) {
|
|
|
109
94
|
const updatedContent = core_1.Brainfile.serialize(board);
|
|
110
95
|
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
111
96
|
// Success message
|
|
112
|
-
console.log(chalk_1.default.green('
|
|
97
|
+
console.log(chalk_1.default.green('Task added successfully!'));
|
|
113
98
|
console.log('');
|
|
114
99
|
console.log(chalk_1.default.gray(` ID: ${newTask.id}`));
|
|
115
100
|
console.log(chalk_1.default.gray(` Title: ${options.title}`));
|
|
@@ -137,8 +122,7 @@ function addCommand(options) {
|
|
|
137
122
|
}
|
|
138
123
|
}
|
|
139
124
|
catch (error) {
|
|
140
|
-
|
|
141
|
-
process.exit(1);
|
|
125
|
+
(0, errorHandler_1.handleError)(error);
|
|
142
126
|
}
|
|
143
127
|
}
|
|
144
128
|
//# sourceMappingURL=add.js.map
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAaA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,QAwDrD"}
|
package/dist/commands/archive.js
CHANGED
|
@@ -41,56 +41,42 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const core_1 = require("@brainfile/core");
|
|
43
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
44
45
|
function archiveCommand(options) {
|
|
45
46
|
try {
|
|
46
47
|
// Validate required options
|
|
47
48
|
if (!options.task) {
|
|
48
|
-
|
|
49
|
-
console.log(chalk_1.default.gray('Usage: brainfile archive --task <task-id>'));
|
|
50
|
-
process.exit(1);
|
|
49
|
+
(0, errorHandler_1.missingRequiredError)('--task', 'brainfile archive --task <task-id>');
|
|
51
50
|
}
|
|
52
51
|
// Resolve file path
|
|
53
52
|
const filePath = path.resolve(options.file);
|
|
54
53
|
// Check if file exists
|
|
55
54
|
if (!fs.existsSync(filePath)) {
|
|
56
|
-
|
|
57
|
-
process.exit(1);
|
|
55
|
+
(0, errorHandler_1.fileNotFoundError)(filePath);
|
|
58
56
|
}
|
|
59
57
|
// Read and parse the file
|
|
60
58
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
61
59
|
const result = core_1.Brainfile.parseWithErrors(content);
|
|
62
60
|
if (!result.board) {
|
|
63
|
-
|
|
64
|
-
if (result.error) {
|
|
65
|
-
console.error(chalk_1.default.red(result.error));
|
|
66
|
-
}
|
|
67
|
-
process.exit(1);
|
|
61
|
+
(0, errorHandler_1.parseError)(result.error);
|
|
68
62
|
}
|
|
69
63
|
const board = result.board;
|
|
70
64
|
// Find the task
|
|
71
65
|
const taskInfo = (0, core_1.findTaskById)(board, options.task);
|
|
72
66
|
if (!taskInfo) {
|
|
73
|
-
|
|
74
|
-
console.log(chalk_1.default.gray('\nAvailable tasks:'));
|
|
75
|
-
board.columns.forEach((col) => {
|
|
76
|
-
col.tasks.forEach((task) => {
|
|
77
|
-
console.log(chalk_1.default.gray(` - ${task.id}: ${task.title}`));
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
process.exit(1);
|
|
67
|
+
(0, errorHandler_1.taskNotFoundError)(options.task, board);
|
|
81
68
|
}
|
|
82
69
|
const { task, column } = taskInfo;
|
|
83
70
|
// Archive task using core operation
|
|
84
71
|
const archiveResult = (0, core_1.archiveTask)(board, column.id, options.task);
|
|
85
72
|
if (!archiveResult.success) {
|
|
86
|
-
|
|
87
|
-
process.exit(1);
|
|
73
|
+
(0, errorHandler_1.operationError)(archiveResult.error);
|
|
88
74
|
}
|
|
89
75
|
// Serialize and write back
|
|
90
76
|
const updatedContent = core_1.Brainfile.serialize(archiveResult.board);
|
|
91
77
|
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
92
78
|
// Success message
|
|
93
|
-
console.log(chalk_1.default.green('
|
|
79
|
+
console.log(chalk_1.default.green('Task archived successfully!'));
|
|
94
80
|
console.log('');
|
|
95
81
|
console.log(chalk_1.default.gray(` Task: ${task.id} - ${task.title}`));
|
|
96
82
|
console.log(chalk_1.default.gray(` From: ${column.title}`));
|
|
@@ -99,8 +85,7 @@ function archiveCommand(options) {
|
|
|
99
85
|
console.log(chalk_1.default.gray('Use "brainfile restore" to restore this task.'));
|
|
100
86
|
}
|
|
101
87
|
catch (error) {
|
|
102
|
-
|
|
103
|
-
process.exit(1);
|
|
88
|
+
(0, errorHandler_1.handleError)(error);
|
|
104
89
|
}
|
|
105
90
|
}
|
|
106
91
|
//# sourceMappingURL=archive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,wCAwDC;AA1ED,uCAAyB;AACzB,2CAA6B;AAC7B,0CAAuE;AACvE,kDAA0B;AAC1B,wDAO+B;AAO/B,SAAgB,cAAc,CAAC,OAAuB;IACpD,IAAI,CAAC;QACH,4BAA4B;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,IAAA,mCAAoB,EAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAC;QACvE,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5C,uBAAuB;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAA,gCAAiB,EAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,gBAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAA,yBAAU,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,gBAAgB;QAChB,MAAM,QAAQ,GAAG,IAAA,mBAAY,EAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAA,gCAAiB,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAElC,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAA,kBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAA,6BAAc,EAAC,aAAa,CAAC,KAAM,CAAC,CAAC;QACvC,CAAC;QAED,2BAA2B;QAC3B,MAAM,cAAc,GAAG,gBAAS,CAAC,SAAS,CAAC,aAAa,CAAC,KAAM,CAAC,CAAC;QACjE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAEpD,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAE3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,0BAAW,EAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAaA,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,QA+DnD"}
|
package/dist/commands/delete.js
CHANGED
|
@@ -41,43 +41,30 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const core_1 = require("@brainfile/core");
|
|
43
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
44
45
|
function deleteCommand(options) {
|
|
45
46
|
try {
|
|
46
47
|
// Validate required options
|
|
47
48
|
if (!options.task) {
|
|
48
|
-
|
|
49
|
-
console.log(chalk_1.default.gray('Usage: brainfile delete --task <task-id> [--force]'));
|
|
50
|
-
process.exit(1);
|
|
49
|
+
(0, errorHandler_1.missingRequiredError)('--task', 'brainfile delete --task <task-id> [--force]');
|
|
51
50
|
}
|
|
52
51
|
// Resolve file path
|
|
53
52
|
const filePath = path.resolve(options.file);
|
|
54
53
|
// Check if file exists
|
|
55
54
|
if (!fs.existsSync(filePath)) {
|
|
56
|
-
|
|
57
|
-
process.exit(1);
|
|
55
|
+
(0, errorHandler_1.fileNotFoundError)(filePath);
|
|
58
56
|
}
|
|
59
57
|
// Read and parse the file
|
|
60
58
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
61
59
|
const result = core_1.Brainfile.parseWithErrors(content);
|
|
62
60
|
if (!result.board) {
|
|
63
|
-
|
|
64
|
-
if (result.error) {
|
|
65
|
-
console.error(chalk_1.default.red(result.error));
|
|
66
|
-
}
|
|
67
|
-
process.exit(1);
|
|
61
|
+
(0, errorHandler_1.parseError)(result.error);
|
|
68
62
|
}
|
|
69
63
|
const board = result.board;
|
|
70
64
|
// Find the task
|
|
71
65
|
const taskInfo = (0, core_1.findTaskById)(board, options.task);
|
|
72
66
|
if (!taskInfo) {
|
|
73
|
-
|
|
74
|
-
console.log(chalk_1.default.gray('\nAvailable tasks:'));
|
|
75
|
-
board.columns.forEach((col) => {
|
|
76
|
-
col.tasks.forEach((task) => {
|
|
77
|
-
console.log(chalk_1.default.gray(` - ${task.id}: ${task.title}`));
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
process.exit(1);
|
|
67
|
+
(0, errorHandler_1.taskNotFoundError)(options.task, board);
|
|
81
68
|
}
|
|
82
69
|
const { task, column } = taskInfo;
|
|
83
70
|
// Warn if not using --force
|
|
@@ -92,21 +79,19 @@ function deleteCommand(options) {
|
|
|
92
79
|
// Delete task using core operation
|
|
93
80
|
const deleteResult = (0, core_1.deleteTask)(board, column.id, options.task);
|
|
94
81
|
if (!deleteResult.success) {
|
|
95
|
-
|
|
96
|
-
process.exit(1);
|
|
82
|
+
(0, errorHandler_1.operationError)(deleteResult.error);
|
|
97
83
|
}
|
|
98
84
|
// Serialize and write back
|
|
99
85
|
const updatedContent = core_1.Brainfile.serialize(deleteResult.board);
|
|
100
86
|
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
101
87
|
// Success message
|
|
102
|
-
console.log(chalk_1.default.green('
|
|
88
|
+
console.log(chalk_1.default.green('Task deleted successfully!'));
|
|
103
89
|
console.log('');
|
|
104
90
|
console.log(chalk_1.default.gray(` Task: ${task.id} - ${task.title}`));
|
|
105
91
|
console.log(chalk_1.default.gray(` Column: ${column.title}`));
|
|
106
92
|
}
|
|
107
93
|
catch (error) {
|
|
108
|
-
|
|
109
|
-
process.exit(1);
|
|
94
|
+
(0, errorHandler_1.handleError)(error);
|
|
110
95
|
}
|
|
111
96
|
}
|
|
112
97
|
//# sourceMappingURL=delete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,QAmE/C"}
|
package/dist/commands/list.js
CHANGED
|
@@ -41,27 +41,20 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const core_1 = require("@brainfile/core");
|
|
43
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
44
45
|
function listCommand(options) {
|
|
45
46
|
try {
|
|
46
47
|
// Resolve file path
|
|
47
48
|
const filePath = path.resolve(options.file);
|
|
48
49
|
// Check if file exists
|
|
49
50
|
if (!fs.existsSync(filePath)) {
|
|
50
|
-
|
|
51
|
-
console.log('');
|
|
52
|
-
console.log(chalk_1.default.gray('To create a new brainfile, run:'));
|
|
53
|
-
console.log(chalk_1.default.cyan(' brainfile init'));
|
|
54
|
-
process.exit(1);
|
|
51
|
+
(0, errorHandler_1.fileNotFoundError)(filePath);
|
|
55
52
|
}
|
|
56
53
|
// Read and parse the file
|
|
57
54
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
58
55
|
const result = core_1.Brainfile.parseWithErrors(content);
|
|
59
56
|
if (!result.board) {
|
|
60
|
-
|
|
61
|
-
if (result.error) {
|
|
62
|
-
console.error(chalk_1.default.red(result.error));
|
|
63
|
-
}
|
|
64
|
-
process.exit(1);
|
|
57
|
+
(0, errorHandler_1.parseError)(result.error);
|
|
65
58
|
}
|
|
66
59
|
const board = result.board;
|
|
67
60
|
// Filter columns if specified
|
|
@@ -101,8 +94,7 @@ function listCommand(options) {
|
|
|
101
94
|
console.log(chalk_1.default.gray(`Total tasks: ${totalTasks}`));
|
|
102
95
|
}
|
|
103
96
|
catch (error) {
|
|
104
|
-
|
|
105
|
-
process.exit(1);
|
|
97
|
+
(0, errorHandler_1.handleError)(error);
|
|
106
98
|
}
|
|
107
99
|
}
|
|
108
100
|
function displayTask(task) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAmCA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAiDD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAs/BnD"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -40,6 +40,7 @@ const zod_1 = require("zod");
|
|
|
40
40
|
const fs = __importStar(require("fs"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const core_1 = require("@brainfile/core");
|
|
43
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
43
44
|
function resolveBrainfile(filePath) {
|
|
44
45
|
return path.resolve(filePath);
|
|
45
46
|
}
|
|
@@ -144,7 +145,7 @@ async function mcpCommand(options) {
|
|
|
144
145
|
}
|
|
145
146
|
const server = new mcp_js_1.McpServer({
|
|
146
147
|
name: 'brainfile',
|
|
147
|
-
version: '0.
|
|
148
|
+
version: '0.8.1'
|
|
148
149
|
});
|
|
149
150
|
// List tasks tool
|
|
150
151
|
server.registerTool('list_tasks', {
|
|
@@ -382,8 +383,14 @@ async function mcpCommand(options) {
|
|
|
382
383
|
return { content: [{ type: 'text', text: `Error: ${moveResult.error}` }], isError: true };
|
|
383
384
|
}
|
|
384
385
|
writeBoard(filePath, moveResult.board);
|
|
386
|
+
// Check for incomplete subtasks warning when moving to done-like column
|
|
387
|
+
const warning = (0, errorHandler_1.mcpCheckIncompleteSubtasks)(taskInfo.task, targetColumn);
|
|
388
|
+
let message = `Task ${task} moved from "${taskInfo.column.title}" to "${targetColumn.title}"`;
|
|
389
|
+
if (warning) {
|
|
390
|
+
message += `\n\n${warning.warning}`;
|
|
391
|
+
}
|
|
385
392
|
return {
|
|
386
|
-
content: [{ type: 'text', text:
|
|
393
|
+
content: [{ type: 'text', text: message }]
|
|
387
394
|
};
|
|
388
395
|
});
|
|
389
396
|
// Patch task tool
|
|
@@ -719,6 +726,21 @@ async function mcpCommand(options) {
|
|
|
719
726
|
if (!targetColumn) {
|
|
720
727
|
return { content: [{ type: 'text', text: `Error: Column not found: ${column}` }], isError: true };
|
|
721
728
|
}
|
|
729
|
+
// Check for incomplete subtasks before move (for warning)
|
|
730
|
+
const tasksWithIncomplete = [];
|
|
731
|
+
for (const taskId of tasks) {
|
|
732
|
+
const taskInfo = (0, core_1.findTaskById)(board, taskId);
|
|
733
|
+
if (taskInfo) {
|
|
734
|
+
const warning = (0, errorHandler_1.mcpCheckIncompleteSubtasks)(taskInfo.task, targetColumn);
|
|
735
|
+
if (warning?.incompleteSubtasks) {
|
|
736
|
+
tasksWithIncomplete.push({
|
|
737
|
+
id: taskId,
|
|
738
|
+
incomplete: warning.incompleteSubtasks.incomplete.length,
|
|
739
|
+
total: warning.incompleteSubtasks.total
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
722
744
|
const bulkResult = (0, core_1.moveTasks)(board, tasks, targetColumn.id);
|
|
723
745
|
if (bulkResult.board) {
|
|
724
746
|
writeBoard(filePath, bulkResult.board);
|
|
@@ -729,6 +751,11 @@ async function mcpCommand(options) {
|
|
|
729
751
|
failureCount: bulkResult.failureCount,
|
|
730
752
|
results: bulkResult.results
|
|
731
753
|
};
|
|
754
|
+
// Add warning about incomplete subtasks if any
|
|
755
|
+
if (tasksWithIncomplete.length > 0) {
|
|
756
|
+
output.warning = `${tasksWithIncomplete.length} task(s) moved to "${targetColumn.title}" have incomplete subtasks`;
|
|
757
|
+
output.tasksWithIncompleteSubtasks = tasksWithIncomplete;
|
|
758
|
+
}
|
|
732
759
|
return {
|
|
733
760
|
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
734
761
|
isError: !bulkResult.success
|