brainfile 0.18.0 → 0.19.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/README.md +4 -4
- package/dist/__tests__/helpers/mcp.d.ts +34 -0
- package/dist/__tests__/helpers/mcp.d.ts.map +1 -0
- package/dist/__tests__/helpers/mcp.js +37 -0
- package/dist/__tests__/helpers/mcp.js.map +1 -0
- package/dist/chunk-I5SJHUZK.mjs +52 -0
- package/dist/chunk-YTFLC673.mjs +12089 -0
- package/dist/cli.js +8 -479
- package/dist/cli.mjs +41194 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +28 -37
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/archive.d.ts +3 -2
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +16 -205
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/complete.d.ts +0 -4
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +14 -168
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/contract.d.ts.map +1 -1
- package/dist/commands/contract.js +66 -331
- package/dist/commands/contract.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +13 -55
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -54
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/log.js +2 -8
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +22 -17
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +4 -3
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/move.d.ts.map +1 -1
- package/dist/commands/move.js +31 -126
- package/dist/commands/move.js.map +1 -1
- package/dist/commands/patch.d.ts.map +1 -1
- package/dist/commands/patch.js +22 -92
- package/dist/commands/patch.js.map +1 -1
- package/dist/commands/plan.d.ts +61 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +205 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +20 -146
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +5 -126
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/subtask.d.ts.map +1 -1
- package/dist/commands/subtask.js +19 -135
- package/dist/commands/subtask.js.map +1 -1
- package/dist/commands/types.d.ts +2 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +8 -30
- package/dist/commands/types.js.map +1 -1
- package/dist/devtools-NE5M3KPM.mjs +92 -0
- package/dist/lib/contractRunner.d.ts.map +1 -1
- package/dist/lib/contractRunner.js +19 -205
- package/dist/lib/contractRunner.js.map +1 -1
- package/dist/mcp/helpers.d.ts +11 -16
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +9 -46
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/tools/contract_tool.d.ts +1 -1
- package/dist/mcp/tools/contract_tool.d.ts.map +1 -1
- package/dist/mcp/tools/contract_tool.js +23 -175
- package/dist/mcp/tools/contract_tool.js.map +1 -1
- package/dist/mcp/tools/get_task_tool.d.ts +1 -1
- package/dist/mcp/tools/get_task_tool.d.ts.map +1 -1
- package/dist/mcp/tools/get_task_tool.js +15 -34
- package/dist/mcp/tools/get_task_tool.js.map +1 -1
- package/dist/mcp/tools/list_tasks_tool.d.ts +1 -1
- package/dist/mcp/tools/list_tasks_tool.d.ts.map +1 -1
- package/dist/mcp/tools/list_tasks_tool.js +11 -48
- package/dist/mcp/tools/list_tasks_tool.js.map +1 -1
- package/dist/mcp/tools/search_tool.d.ts +1 -1
- package/dist/mcp/tools/search_tool.d.ts.map +1 -1
- package/dist/mcp/tools/search_tool.js +17 -98
- package/dist/mcp/tools/search_tool.js.map +1 -1
- package/dist/mcp/tools/subtask_tool.d.ts +1 -1
- package/dist/mcp/tools/subtask_tool.d.ts.map +1 -1
- package/dist/mcp/tools/subtask_tool.js +49 -224
- package/dist/mcp/tools/subtask_tool.js.map +1 -1
- package/dist/mcp/tools/task_add_tool.d.ts +1 -1
- package/dist/mcp/tools/task_add_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_add_tool.js +58 -154
- package/dist/mcp/tools/task_add_tool.js.map +1 -1
- package/dist/mcp/tools/task_complete_tool.d.ts +1 -1
- package/dist/mcp/tools/task_complete_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_complete_tool.js +28 -124
- package/dist/mcp/tools/task_complete_tool.js.map +1 -1
- package/dist/mcp/tools/task_delete_tool.d.ts +1 -1
- package/dist/mcp/tools/task_delete_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_delete_tool.js +14 -33
- package/dist/mcp/tools/task_delete_tool.js.map +1 -1
- package/dist/mcp/tools/task_move_tool.d.ts +1 -1
- package/dist/mcp/tools/task_move_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_move_tool.js +44 -150
- package/dist/mcp/tools/task_move_tool.js.map +1 -1
- package/dist/mcp/tools/task_patch_tool.d.ts +1 -1
- package/dist/mcp/tools/task_patch_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_patch_tool.js +37 -113
- package/dist/mcp/tools/task_patch_tool.js.map +1 -1
- package/dist/open-ZGSQIGEH.mjs +542 -0
- package/dist/tui-P56H4X7N.mjs +23715 -0
- package/dist/utils/dot-brainfile.d.ts +0 -4
- package/dist/utils/dot-brainfile.d.ts.map +1 -1
- package/dist/utils/dot-brainfile.js +0 -17
- package/dist/utils/dot-brainfile.js.map +1 -1
- package/dist/utils/errorHandler.d.ts +7 -11
- package/dist/utils/errorHandler.d.ts.map +1 -1
- package/dist/utils/errorHandler.js +8 -19
- package/dist/utils/errorHandler.js.map +1 -1
- package/package.json +24 -16
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -6
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -79
- package/dist/commands/tui.js.map +0 -1
- package/dist/tui/BrainfileTUI.d.ts +0 -4
- package/dist/tui/BrainfileTUI.d.ts.map +0 -1
- package/dist/tui/BrainfileTUI.js +0 -272
- package/dist/tui/BrainfileTUI.js.map +0 -1
- package/dist/tui/actions.d.ts +0 -84
- package/dist/tui/actions.d.ts.map +0 -1
- package/dist/tui/actions.js +0 -1251
- package/dist/tui/actions.js.map +0 -1
- package/dist/tui/components/ColumnTabs.d.ts +0 -9
- package/dist/tui/components/ColumnTabs.d.ts.map +0 -1
- package/dist/tui/components/ColumnTabs.js +0 -34
- package/dist/tui/components/ColumnTabs.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -15
- package/dist/tui/components/Header.d.ts.map +0 -1
- package/dist/tui/components/Header.js +0 -48
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/HelpOverlay.d.ts +0 -9
- package/dist/tui/components/HelpOverlay.d.ts.map +0 -1
- package/dist/tui/components/HelpOverlay.js +0 -116
- package/dist/tui/components/HelpOverlay.js.map +0 -1
- package/dist/tui/components/LogsPanel.d.ts +0 -16
- package/dist/tui/components/LogsPanel.d.ts.map +0 -1
- package/dist/tui/components/LogsPanel.js +0 -115
- package/dist/tui/components/LogsPanel.js.map +0 -1
- package/dist/tui/components/MainPanelTabs.d.ts +0 -10
- package/dist/tui/components/MainPanelTabs.d.ts.map +0 -1
- package/dist/tui/components/MainPanelTabs.js +0 -56
- package/dist/tui/components/MainPanelTabs.js.map +0 -1
- package/dist/tui/components/ManualBorder.d.ts +0 -42
- package/dist/tui/components/ManualBorder.d.ts.map +0 -1
- package/dist/tui/components/ManualBorder.js +0 -56
- package/dist/tui/components/ManualBorder.js.map +0 -1
- package/dist/tui/components/Overlays.d.ts +0 -41
- package/dist/tui/components/Overlays.d.ts.map +0 -1
- package/dist/tui/components/Overlays.js +0 -127
- package/dist/tui/components/Overlays.js.map +0 -1
- package/dist/tui/components/ProgressBar.d.ts +0 -8
- package/dist/tui/components/ProgressBar.d.ts.map +0 -1
- package/dist/tui/components/ProgressBar.js +0 -35
- package/dist/tui/components/ProgressBar.js.map +0 -1
- package/dist/tui/components/RulesPanel.d.ts +0 -25
- package/dist/tui/components/RulesPanel.d.ts.map +0 -1
- package/dist/tui/components/RulesPanel.js +0 -139
- package/dist/tui/components/RulesPanel.js.map +0 -1
- package/dist/tui/components/SearchBar.d.ts +0 -8
- package/dist/tui/components/SearchBar.d.ts.map +0 -1
- package/dist/tui/components/SearchBar.js +0 -38
- package/dist/tui/components/SearchBar.js.map +0 -1
- package/dist/tui/components/StackedTaskList.d.ts +0 -27
- package/dist/tui/components/StackedTaskList.d.ts.map +0 -1
- package/dist/tui/components/StackedTaskList.js +0 -120
- package/dist/tui/components/StackedTaskList.js.map +0 -1
- package/dist/tui/components/StatusBar.d.ts +0 -14
- package/dist/tui/components/StatusBar.d.ts.map +0 -1
- package/dist/tui/components/StatusBar.js +0 -42
- package/dist/tui/components/StatusBar.js.map +0 -1
- package/dist/tui/components/TaskCard.d.ts +0 -25
- package/dist/tui/components/TaskCard.d.ts.map +0 -1
- package/dist/tui/components/TaskCard.js +0 -221
- package/dist/tui/components/TaskCard.js.map +0 -1
- package/dist/tui/components/TaskCardMeasure.d.ts +0 -31
- package/dist/tui/components/TaskCardMeasure.d.ts.map +0 -1
- package/dist/tui/components/TaskCardMeasure.js +0 -133
- package/dist/tui/components/TaskCardMeasure.js.map +0 -1
- package/dist/tui/components/TaskDetail.d.ts +0 -13
- package/dist/tui/components/TaskDetail.d.ts.map +0 -1
- package/dist/tui/components/TaskDetail.js +0 -64
- package/dist/tui/components/TaskDetail.js.map +0 -1
- package/dist/tui/components/TaskList.d.ts +0 -12
- package/dist/tui/components/TaskList.d.ts.map +0 -1
- package/dist/tui/components/TaskList.js +0 -75
- package/dist/tui/components/TaskList.js.map +0 -1
- package/dist/tui/components/index.d.ts +0 -31
- package/dist/tui/components/index.d.ts.map +0 -1
- package/dist/tui/components/index.js +0 -43
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/hooks/index.d.ts +0 -3
- package/dist/tui/hooks/index.d.ts.map +0 -1
- package/dist/tui/hooks/index.js +0 -8
- package/dist/tui/hooks/index.js.map +0 -1
- package/dist/tui/hooks/useBrainfileLoader.d.ts +0 -5
- package/dist/tui/hooks/useBrainfileLoader.d.ts.map +0 -1
- package/dist/tui/hooks/useBrainfileLoader.js +0 -237
- package/dist/tui/hooks/useBrainfileLoader.js.map +0 -1
- package/dist/tui/hooks/useKeyboardNavigation.d.ts +0 -20
- package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +0 -1
- package/dist/tui/hooks/useKeyboardNavigation.js +0 -806
- package/dist/tui/hooks/useKeyboardNavigation.js.map +0 -1
- package/dist/tui/index.d.ts +0 -10
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js +0 -38
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/theme.d.ts +0 -119
- package/dist/tui/theme.d.ts.map +0 -1
- package/dist/tui/theme.js +0 -138
- package/dist/tui/theme.js.map +0 -1
- package/dist/tui/types.d.ts +0 -53
- package/dist/tui/types.d.ts.map +0 -1
- package/dist/tui/types.js +0 -12
- package/dist/tui/types.js.map +0 -1
- package/dist/tui/utils.d.ts +0 -24
- package/dist/tui/utils.d.ts.map +0 -1
- package/dist/tui/utils.js +0 -161
- package/dist/tui/utils.js.map +0 -1
- package/dist/utils/board-types.d.ts +0 -13
- package/dist/utils/board-types.d.ts.map +0 -1
- package/dist/utils/board-types.js +0 -7
- package/dist/utils/board-types.js.map +0 -1
- package/dist/utils/contractSpec.d.ts +0 -13
- package/dist/utils/contractSpec.d.ts.map +0 -1
- package/dist/utils/contractSpec.js +0 -61
- package/dist/utils/contractSpec.js.map +0 -1
- package/dist/utils/strict-validation.d.ts +0 -8
- package/dist/utils/strict-validation.d.ts.map +0 -1
- package/dist/utils/strict-validation.js +0 -41
- package/dist/utils/strict-validation.js.map +0 -1
package/dist/commands/move.js
CHANGED
|
@@ -34,28 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.moveCommand = moveCommand;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
37
|
const path = __importStar(require("path"));
|
|
39
|
-
const core_1 = require("@brainfile/core");
|
|
40
38
|
const cli_error_1 = require("../utils/cli-error");
|
|
41
39
|
const logger_1 = require("../utils/logger");
|
|
42
40
|
const errorHandler_1 = require("../utils/errorHandler");
|
|
43
41
|
const brainfile_path_1 = require("../utils/brainfile-path");
|
|
44
|
-
const
|
|
45
|
-
const
|
|
42
|
+
const v2_only_1 = require("../utils/v2-only");
|
|
43
|
+
const core_1 = require("@brainfile/core");
|
|
46
44
|
const v2_detect_1 = require("../utils/v2-detect");
|
|
47
|
-
function getBoardTypes(board) {
|
|
48
|
-
const rawTypes = board.types;
|
|
49
|
-
return rawTypes && typeof rawTypes === 'object' ? rawTypes : {};
|
|
50
|
-
}
|
|
51
|
-
function isTaskCompletable(task, board) {
|
|
52
|
-
const taskType = task.type || 'task';
|
|
53
|
-
if (taskType === 'task') {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
const typeConfig = getBoardTypes(board)[taskType];
|
|
57
|
-
return typeConfig?.completable !== false;
|
|
58
|
-
}
|
|
59
45
|
function assertSafeTaskId(taskId) {
|
|
60
46
|
const trimmed = taskId.trim();
|
|
61
47
|
if (!trimmed || trimmed !== taskId) {
|
|
@@ -78,139 +64,58 @@ function moveCommand(options, logger = logger_1.defaultLogger) {
|
|
|
78
64
|
}
|
|
79
65
|
// Resolve file path
|
|
80
66
|
const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
throw (0, cli_error_1.fileNotFound)(filePath);
|
|
84
|
-
}
|
|
85
|
-
// V2 per-task file architecture
|
|
86
|
-
if ((0, v2_detect_1.isV2)(filePath)) {
|
|
87
|
-
return moveCommandV2(options, filePath, logger);
|
|
88
|
-
}
|
|
89
|
-
// Read and parse the file
|
|
90
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
91
|
-
const result = core_1.Brainfile.parseWithErrors(content);
|
|
92
|
-
if (!result.board) {
|
|
93
|
-
throw (0, cli_error_1.parseFailure)(result.error);
|
|
94
|
-
}
|
|
95
|
-
let board = result.board;
|
|
96
|
-
// Find the task using core query function
|
|
97
|
-
const taskInfo = (0, core_1.findTaskById)(board, options.task);
|
|
98
|
-
if (!taskInfo) {
|
|
99
|
-
// Collect available tasks for error details
|
|
100
|
-
const availableTasks = [];
|
|
101
|
-
board.columns.forEach(col => {
|
|
102
|
-
col.tasks.forEach(t => availableTasks.push(`${t.id}: ${t.title}`));
|
|
103
|
-
});
|
|
104
|
-
throw (0, cli_error_1.taskNotFound)(options.task, availableTasks);
|
|
105
|
-
}
|
|
106
|
-
const { task: foundTask, column: sourceColumn } = taskInfo;
|
|
107
|
-
// Find the target column by ID or name
|
|
108
|
-
let targetColumn = (0, core_1.findColumnById)(board, options.column);
|
|
109
|
-
if (!targetColumn) {
|
|
110
|
-
targetColumn = (0, core_1.findColumnByName)(board, options.column);
|
|
111
|
-
}
|
|
112
|
-
if (!targetColumn) {
|
|
113
|
-
const availableColumns = board.columns.map(c => `${c.id} (${c.title})`);
|
|
114
|
-
throw (0, cli_error_1.columnNotFound)(options.column, availableColumns);
|
|
115
|
-
}
|
|
116
|
-
// Check if already in target column
|
|
117
|
-
if (sourceColumn.id === targetColumn.id) {
|
|
118
|
-
logger.warn(`Task ${options.task} is already in column "${targetColumn.title}"`);
|
|
119
|
-
return {
|
|
120
|
-
success: true,
|
|
121
|
-
movedTask: foundTask,
|
|
122
|
-
sourceColumn,
|
|
123
|
-
targetColumn
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
// Move task using core operation (immutable)
|
|
127
|
-
const moveResult = (0, core_1.moveTask)(board, options.task, sourceColumn.id, targetColumn.id, targetColumn.tasks.length // Move to end of target column
|
|
128
|
-
);
|
|
129
|
-
if (!moveResult.success) {
|
|
130
|
-
throw (0, cli_error_1.operationFailed)(moveResult.error);
|
|
131
|
-
}
|
|
132
|
-
// Serialize and write back
|
|
133
|
-
const updatedContent = core_1.Brainfile.serialize(moveResult.board);
|
|
134
|
-
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
135
|
-
// Success message
|
|
136
|
-
logger.log('Task moved successfully!');
|
|
137
|
-
logger.log('');
|
|
138
|
-
logger.log(` Task: ${foundTask.id} - ${foundTask.title}`);
|
|
139
|
-
logger.log(` From: ${sourceColumn.title}`);
|
|
140
|
-
logger.log(` To: ${targetColumn.title}`);
|
|
141
|
-
// Soft error: warn about incomplete subtasks when moving to done-like column
|
|
142
|
-
const warning = (0, errorHandler_1.getIncompleteSubtasksWarning)(foundTask, targetColumn);
|
|
143
|
-
if (warning) {
|
|
144
|
-
logger.warn('');
|
|
145
|
-
logger.warn(warning);
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
success: true,
|
|
149
|
-
movedTask: foundTask,
|
|
150
|
-
sourceColumn,
|
|
151
|
-
targetColumn
|
|
152
|
-
};
|
|
67
|
+
(0, v2_only_1.assertV2Brainfile)(filePath);
|
|
68
|
+
return moveCommandV2(options, filePath, logger);
|
|
153
69
|
}
|
|
154
70
|
function moveCommandV2(options, filePath, logger) {
|
|
155
71
|
assertSafeTaskId(options.task);
|
|
156
72
|
const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
|
|
157
|
-
const
|
|
73
|
+
const boardFile = (0, core_1.readBoardConfig)(filePath);
|
|
74
|
+
if (!boardFile) {
|
|
75
|
+
throw (0, cli_error_1.operationFailed)(`Failed to parse brainfile: ${filePath}`);
|
|
76
|
+
}
|
|
77
|
+
const board = boardFile.config;
|
|
158
78
|
const found = (0, v2_detect_1.findV2Task)(dirs, options.task, false);
|
|
159
79
|
if (!found || found.isLog) {
|
|
160
80
|
throw (0, cli_error_1.taskNotFound)(options.task);
|
|
161
81
|
}
|
|
162
|
-
const { doc
|
|
82
|
+
const { doc } = found;
|
|
163
83
|
const task = doc.task;
|
|
164
84
|
const sourceColumnId = task.column || '';
|
|
165
|
-
//
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
85
|
+
// Source column is presentation-only (title aliases still supported)
|
|
86
|
+
const sourceConfigColumn = board.columns.find(c => c.id === sourceColumnId);
|
|
87
|
+
const sourceColumn = sourceConfigColumn
|
|
88
|
+
? { ...sourceConfigColumn, tasks: [] }
|
|
89
|
+
: { id: sourceColumnId, title: sourceColumnId, tasks: [] };
|
|
90
|
+
const result = (0, core_1.moveTaskFileToColumn)(dirs, board, options.task, options.column);
|
|
91
|
+
if (!result.success || !result.column) {
|
|
92
|
+
// Column resolution failures are validation errors; everything else is an operation failure.
|
|
93
|
+
if (result.error && result.error.startsWith('Column ')) {
|
|
94
|
+
throw new cli_error_1.CLIError(result.error);
|
|
95
|
+
}
|
|
96
|
+
throw (0, cli_error_1.operationFailed)(result.error || `Failed to move task: ${options.task}`);
|
|
176
97
|
}
|
|
177
|
-
const targetColumn =
|
|
178
|
-
|
|
98
|
+
const targetColumn = { ...result.column, tasks: [] };
|
|
99
|
+
const movedTask = result.task ?? task;
|
|
100
|
+
if (result.noop) {
|
|
179
101
|
logger.warn(`Task ${options.task} is already in column "${targetColumn.title}"`);
|
|
180
102
|
return {
|
|
181
103
|
success: true,
|
|
182
|
-
movedTask
|
|
183
|
-
sourceColumn
|
|
104
|
+
movedTask,
|
|
105
|
+
sourceColumn,
|
|
184
106
|
targetColumn
|
|
185
107
|
};
|
|
186
108
|
}
|
|
187
|
-
// Calculate new position (append to end)
|
|
188
|
-
const targetTasks = (0, core_2.readTasksDir)(dirs.boardDir)
|
|
189
|
-
.filter(t => t.task.column === targetColumn.id);
|
|
190
|
-
const newPosition = targetTasks.length;
|
|
191
|
-
// Update task
|
|
192
|
-
task.column = targetColumn.id;
|
|
193
|
-
task.position = newPosition;
|
|
194
|
-
(0, core_2.writeTaskFile)(taskPath, task, doc.body);
|
|
195
|
-
const shouldAutoComplete = targetColumn.completionColumn === true && isTaskCompletable(task, board);
|
|
196
|
-
let movedTask = task;
|
|
197
|
-
if (shouldAutoComplete) {
|
|
198
|
-
const completeResult = (0, core_2.completeTaskFile)(taskPath, dirs.logsDir);
|
|
199
|
-
if (!completeResult.success || !completeResult.task) {
|
|
200
|
-
throw (0, cli_error_1.operationFailed)(completeResult.error || `Failed to complete task: ${task.id}`);
|
|
201
|
-
}
|
|
202
|
-
movedTask = completeResult.task;
|
|
203
|
-
}
|
|
204
109
|
logger.log('Task moved successfully!');
|
|
205
110
|
logger.log('');
|
|
206
111
|
logger.log(` Task: ${task.id} - ${task.title}`);
|
|
207
|
-
logger.log(` From: ${sourceColumn
|
|
112
|
+
logger.log(` From: ${sourceColumn.title}`);
|
|
208
113
|
logger.log(` To: ${targetColumn.title}`);
|
|
209
|
-
if (
|
|
114
|
+
if (result.autoCompleted) {
|
|
210
115
|
logger.log(' Status: Completed (moved to logs/)');
|
|
211
116
|
}
|
|
212
117
|
// Soft error: warn about incomplete subtasks when moving to done-like column
|
|
213
|
-
const warning = (0, errorHandler_1.getIncompleteSubtasksWarning)(
|
|
118
|
+
const warning = (0, errorHandler_1.getIncompleteSubtasksWarning)(movedTask, targetColumn);
|
|
214
119
|
if (warning) {
|
|
215
120
|
logger.warn('');
|
|
216
121
|
logger.warn(warning);
|
|
@@ -218,7 +123,7 @@ function moveCommandV2(options, filePath, logger) {
|
|
|
218
123
|
return {
|
|
219
124
|
success: true,
|
|
220
125
|
movedTask,
|
|
221
|
-
sourceColumn
|
|
126
|
+
sourceColumn,
|
|
222
127
|
targetColumn
|
|
223
128
|
};
|
|
224
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/commands/patch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/commands/patch.ts"],"names":[],"mappings":"AAcA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmBD,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,QAwGjD"}
|
package/dist/commands/patch.js
CHANGED
|
@@ -37,13 +37,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.patchCommand = patchCommand;
|
|
40
|
-
const fs = __importStar(require("fs"));
|
|
41
40
|
const path = __importStar(require("path"));
|
|
42
|
-
const core_1 = require("@brainfile/core");
|
|
43
41
|
const chalk_1 = __importDefault(require("chalk"));
|
|
44
42
|
const errorHandler_1 = require("../utils/errorHandler");
|
|
45
43
|
const brainfile_path_1 = require("../utils/brainfile-path");
|
|
46
|
-
const
|
|
44
|
+
const v2_only_1 = require("../utils/v2-only");
|
|
45
|
+
const core_1 = require("@brainfile/core");
|
|
47
46
|
const v2_detect_1 = require("../utils/v2-detect");
|
|
48
47
|
function isUnsafeTaskId(taskId) {
|
|
49
48
|
const trimmed = taskId.trim();
|
|
@@ -73,10 +72,7 @@ function patchCommand(options) {
|
|
|
73
72
|
}
|
|
74
73
|
// Resolve file path
|
|
75
74
|
const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
|
|
76
|
-
|
|
77
|
-
if (!fs.existsSync(filePath)) {
|
|
78
|
-
(0, errorHandler_1.fileNotFoundError)(filePath);
|
|
79
|
-
}
|
|
75
|
+
(0, v2_only_1.assertV2Brainfile)(filePath);
|
|
80
76
|
// Build patch and changes for display
|
|
81
77
|
const patch = {};
|
|
82
78
|
const changes = [];
|
|
@@ -126,92 +122,26 @@ function patchCommand(options) {
|
|
|
126
122
|
patch.dueDate = null;
|
|
127
123
|
changes.push('dueDate → removed');
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
else {
|
|
149
|
-
task.description = patch.description;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (patch.priority !== undefined) {
|
|
153
|
-
if (patch.priority === null) {
|
|
154
|
-
delete task.priority;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
task.priority = patch.priority;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
if (patch.tags !== undefined) {
|
|
161
|
-
if (patch.tags === null) {
|
|
162
|
-
delete task.tags;
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
task.tags = patch.tags;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (patch.assignee !== undefined) {
|
|
169
|
-
if (patch.assignee === null) {
|
|
170
|
-
delete task.assignee;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
task.assignee = patch.assignee;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
if (patch.dueDate !== undefined) {
|
|
177
|
-
if (patch.dueDate === null) {
|
|
178
|
-
delete task.dueDate;
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
task.dueDate = patch.dueDate;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
task.updatedAt = new Date().toISOString();
|
|
185
|
-
(0, core_2.writeTaskFile)(taskPath, task, doc.body);
|
|
186
|
-
console.log(chalk_1.default.green('Task updated successfully!'));
|
|
187
|
-
console.log('');
|
|
188
|
-
console.log(chalk_1.default.gray(` Task: ${options.task}`));
|
|
189
|
-
changes.forEach(change => {
|
|
190
|
-
console.log(chalk_1.default.gray(` ${change}`));
|
|
191
|
-
});
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
// V1: Read and parse the file
|
|
195
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
196
|
-
const result = core_1.Brainfile.parseWithErrors(content);
|
|
197
|
-
if (!result.board) {
|
|
198
|
-
(0, errorHandler_1.parseError)(result.error);
|
|
199
|
-
}
|
|
200
|
-
let board = result.board;
|
|
201
|
-
// Find the task
|
|
202
|
-
const taskInfo = (0, core_1.findTaskById)(board, options.task);
|
|
203
|
-
if (!taskInfo) {
|
|
204
|
-
(0, errorHandler_1.taskNotFoundError)(options.task, board);
|
|
205
|
-
}
|
|
206
|
-
// Patch task using core operation
|
|
207
|
-
const patchResult = (0, core_1.patchTask)(board, options.task, patch);
|
|
208
|
-
if (!patchResult.success) {
|
|
209
|
-
(0, errorHandler_1.operationError)(patchResult.error);
|
|
125
|
+
if (isUnsafeTaskId(options.task)) {
|
|
126
|
+
(0, errorHandler_1.operationError)(`Invalid task ID: ${options.task}`);
|
|
127
|
+
}
|
|
128
|
+
const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
|
|
129
|
+
const found = (0, v2_detect_1.findV2Task)(dirs, options.task, false);
|
|
130
|
+
if (!found || found.isLog) {
|
|
131
|
+
(0, errorHandler_1.operationError)(`Task not found: ${options.task}`);
|
|
132
|
+
}
|
|
133
|
+
const { filePath: taskPath } = found;
|
|
134
|
+
const result = (0, core_1.patchTaskFile)(taskPath, {
|
|
135
|
+
title: patch.title,
|
|
136
|
+
description: patch.description,
|
|
137
|
+
priority: patch.priority,
|
|
138
|
+
tags: patch.tags,
|
|
139
|
+
assignee: patch.assignee,
|
|
140
|
+
dueDate: patch.dueDate,
|
|
141
|
+
});
|
|
142
|
+
if (!result.success) {
|
|
143
|
+
(0, errorHandler_1.operationError)(result.error || `Failed to update task: ${options.task}`);
|
|
210
144
|
}
|
|
211
|
-
// Serialize and write back
|
|
212
|
-
const updatedContent = core_1.Brainfile.serialize(patchResult.board);
|
|
213
|
-
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
214
|
-
// Success message
|
|
215
145
|
console.log(chalk_1.default.green('Task updated successfully!'));
|
|
216
146
|
console.log('');
|
|
217
147
|
console.log(chalk_1.default.gray(` Task: ${options.task}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/commands/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/commands/patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan command group — first-class plan documents.
|
|
3
|
+
*
|
|
4
|
+
* Plans are ordinary board documents with `type: plan`, so they inherit every
|
|
5
|
+
* core V2 operation (add/move/patch/search/list) for free. These commands are
|
|
6
|
+
* thin conveniences over those core functions.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { type TaskOperationResult } from '@brainfile/core';
|
|
11
|
+
import { type Logger } from '../utils/logger';
|
|
12
|
+
export declare const PLAN_COMMAND_HELP: string;
|
|
13
|
+
export interface PlanAddOptions {
|
|
14
|
+
file: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
column?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
tags?: string;
|
|
19
|
+
parent?: string;
|
|
20
|
+
status?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PlanAddResult {
|
|
23
|
+
success: true;
|
|
24
|
+
taskId: string;
|
|
25
|
+
columnId: string;
|
|
26
|
+
}
|
|
27
|
+
export interface PlanListOptions {
|
|
28
|
+
file: string;
|
|
29
|
+
status?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface PlanListResult {
|
|
32
|
+
success: true;
|
|
33
|
+
totalPlans: number;
|
|
34
|
+
}
|
|
35
|
+
export interface PlanShowOptions {
|
|
36
|
+
file: string;
|
|
37
|
+
plan?: string;
|
|
38
|
+
json?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface PlanLinkOptions {
|
|
41
|
+
file: string;
|
|
42
|
+
plan?: string;
|
|
43
|
+
task?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a new plan document.
|
|
47
|
+
*/
|
|
48
|
+
export declare function planAddCommand(options: PlanAddOptions, logger?: Logger): PlanAddResult;
|
|
49
|
+
/**
|
|
50
|
+
* List plan documents, optionally filtered by their free-form status.
|
|
51
|
+
*/
|
|
52
|
+
export declare function planListCommand(options: PlanListOptions, logger?: Logger): PlanListResult;
|
|
53
|
+
/**
|
|
54
|
+
* Show a single plan document's metadata and body.
|
|
55
|
+
*/
|
|
56
|
+
export declare function planShowCommand(options: PlanShowOptions, logger?: Logger): void;
|
|
57
|
+
/**
|
|
58
|
+
* Link a task to a plan by pointing the task's parentId at the plan.
|
|
59
|
+
*/
|
|
60
|
+
export declare function planLinkCommand(options: PlanLinkOptions, logger?: Logger): TaskOperationResult;
|
|
61
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAQL,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAM7D,eAAO,MAAM,iBAAiB,QAkBnB,CAAC;AAKZ,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,GAAE,MAAsB,GAAG,aAAa,CA6DrG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,GAAE,MAAsB,GAAG,cAAc,CA4BxG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,GAAE,MAAsB,GAAG,IAAI,CAkD9F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,GAAE,MAAsB,GAAG,mBAAmB,CA8B7G"}
|