brainfile 0.18.1 → 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/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
|
@@ -2,14 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Complete command - move a task from board/ to logs/, set completedAt.
|
|
4
4
|
*
|
|
5
|
-
* In v2 per-task file architecture:
|
|
6
5
|
* - Moves .brainfile/board/task-X.md to .brainfile/logs/task-X.md
|
|
7
6
|
* - Adds completedAt timestamp to frontmatter
|
|
8
7
|
* - Removes column and position fields
|
|
9
8
|
*
|
|
10
|
-
* In v1 (embedded tasks):
|
|
11
|
-
* - Moves task to the first completion column (done) and adds completedAt
|
|
12
|
-
*
|
|
13
9
|
* @packageDocumentation
|
|
14
10
|
*/
|
|
15
11
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -50,14 +46,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
46
|
};
|
|
51
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
48
|
exports.completeCommand = completeCommand;
|
|
53
|
-
const fs = __importStar(require("fs"));
|
|
54
49
|
const path = __importStar(require("path"));
|
|
55
50
|
const chalk_1 = __importDefault(require("chalk"));
|
|
56
|
-
const core_1 = require("@brainfile/core");
|
|
57
51
|
const logger_1 = require("../utils/logger");
|
|
58
52
|
const cli_error_1 = require("../utils/cli-error");
|
|
59
53
|
const brainfile_path_1 = require("../utils/brainfile-path");
|
|
60
|
-
const
|
|
54
|
+
const v2_only_1 = require("../utils/v2-only");
|
|
55
|
+
const core_1 = require("@brainfile/core");
|
|
61
56
|
const v2_detect_1 = require("../utils/v2-detect");
|
|
62
57
|
function assertSafeTaskId(taskId) {
|
|
63
58
|
const trimmed = taskId.trim();
|
|
@@ -71,100 +66,6 @@ function assertSafeTaskId(taskId) {
|
|
|
71
66
|
throw (0, cli_error_1.operationFailed)(`Invalid task ID: ${taskId}`);
|
|
72
67
|
}
|
|
73
68
|
}
|
|
74
|
-
function appendBodySection(body, section) {
|
|
75
|
-
const trimmed = body.trimEnd();
|
|
76
|
-
if (!trimmed) {
|
|
77
|
-
return `${section}\n`;
|
|
78
|
-
}
|
|
79
|
-
return `${trimmed}\n\n${section}\n`;
|
|
80
|
-
}
|
|
81
|
-
function extractEpicChildTaskIds(task) {
|
|
82
|
-
const rawSubtasks = task.subtasks;
|
|
83
|
-
if (!Array.isArray(rawSubtasks)) {
|
|
84
|
-
return [];
|
|
85
|
-
}
|
|
86
|
-
const childIds = [];
|
|
87
|
-
for (const subtask of rawSubtasks) {
|
|
88
|
-
if (typeof subtask === 'string' && subtask.trim() !== '') {
|
|
89
|
-
childIds.push(subtask.trim());
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (subtask && typeof subtask === 'object') {
|
|
93
|
-
const candidateId = subtask.id;
|
|
94
|
-
if (typeof candidateId === 'string' && candidateId.trim() !== '') {
|
|
95
|
-
childIds.push(candidateId.trim());
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return [...new Set(childIds)];
|
|
100
|
-
}
|
|
101
|
-
function resolveChildTaskStates(childIds, boardDir, logsDir) {
|
|
102
|
-
if (childIds.length === 0) {
|
|
103
|
-
return [];
|
|
104
|
-
}
|
|
105
|
-
const activeDocs = (0, core_2.readTasksDir)(boardDir);
|
|
106
|
-
const completedDocs = (0, core_2.readTasksDir)(logsDir);
|
|
107
|
-
const activeById = new Map();
|
|
108
|
-
for (const doc of activeDocs) {
|
|
109
|
-
if (!activeById.has(doc.task.id)) {
|
|
110
|
-
activeById.set(doc.task.id, doc.task.title);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const completedById = new Map();
|
|
114
|
-
for (const doc of completedDocs) {
|
|
115
|
-
if (!completedById.has(doc.task.id)) {
|
|
116
|
-
completedById.set(doc.task.id, doc.task.title);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return childIds.map((childId) => {
|
|
120
|
-
const activeTitle = activeById.get(childId);
|
|
121
|
-
if (activeTitle) {
|
|
122
|
-
return { id: childId, title: activeTitle, status: 'active' };
|
|
123
|
-
}
|
|
124
|
-
const completedTitle = completedById.get(childId);
|
|
125
|
-
if (completedTitle) {
|
|
126
|
-
return { id: childId, title: completedTitle, status: 'completed' };
|
|
127
|
-
}
|
|
128
|
-
return { id: childId, title: 'Unknown task reference', status: 'missing' };
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
function resolveParentLinkedChildStates(epicId, boardDir, logsDir) {
|
|
132
|
-
const activeChildren = (0, core_2.readTasksDir)(boardDir)
|
|
133
|
-
.filter((doc) => doc.task.parentId === epicId)
|
|
134
|
-
.map((doc) => ({ id: doc.task.id, title: doc.task.title, status: 'active' }));
|
|
135
|
-
const completedChildren = (0, core_2.readTasksDir)(logsDir)
|
|
136
|
-
.filter((doc) => doc.task.parentId === epicId)
|
|
137
|
-
.map((doc) => ({ id: doc.task.id, title: doc.task.title, status: 'completed' }));
|
|
138
|
-
return [...activeChildren, ...completedChildren];
|
|
139
|
-
}
|
|
140
|
-
function resolveEpicChildStates(task, boardDir, logsDir) {
|
|
141
|
-
const linkedByParentId = resolveParentLinkedChildStates(task.id, boardDir, logsDir);
|
|
142
|
-
if (linkedByParentId.length > 0) {
|
|
143
|
-
return linkedByParentId;
|
|
144
|
-
}
|
|
145
|
-
const childIds = extractEpicChildTaskIds(task);
|
|
146
|
-
return resolveChildTaskStates(childIds, boardDir, logsDir);
|
|
147
|
-
}
|
|
148
|
-
function buildChildTasksSection(childTasks) {
|
|
149
|
-
if (childTasks.length === 0) {
|
|
150
|
-
return '## Child Tasks\nNo child tasks recorded.';
|
|
151
|
-
}
|
|
152
|
-
const totalChildren = childTasks.length;
|
|
153
|
-
const completedChildren = childTasks.filter((child) => child.status === 'completed').length;
|
|
154
|
-
const lines = [
|
|
155
|
-
'## Child Tasks',
|
|
156
|
-
`Summary: ${completedChildren}/${totalChildren} children completed.`,
|
|
157
|
-
];
|
|
158
|
-
for (const child of childTasks) {
|
|
159
|
-
const statusLabel = child.status === 'completed'
|
|
160
|
-
? 'completed'
|
|
161
|
-
: child.status === 'active'
|
|
162
|
-
? 'incomplete'
|
|
163
|
-
: 'missing';
|
|
164
|
-
lines.push(`- ${child.id}: ${child.title} (${statusLabel})`);
|
|
165
|
-
}
|
|
166
|
-
return lines.join('\n');
|
|
167
|
-
}
|
|
168
69
|
/**
|
|
169
70
|
* Complete a task - move to logs with completedAt timestamp.
|
|
170
71
|
* Throws CLIError on failure.
|
|
@@ -174,14 +75,8 @@ function completeCommand(options, logger = logger_1.defaultLogger) {
|
|
|
174
75
|
throw (0, cli_error_1.missingRequired)('--task', 'brainfile complete --task <task-id> [--file <path>] [--force]');
|
|
175
76
|
}
|
|
176
77
|
const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
if ((0, v2_detect_1.isV2)(filePath)) {
|
|
181
|
-
return completeV2(filePath, options.task, options.force === true, logger);
|
|
182
|
-
}
|
|
183
|
-
const completedAt = new Date().toISOString();
|
|
184
|
-
return completeV1(filePath, options.task, completedAt, logger);
|
|
78
|
+
(0, v2_only_1.assertV2Brainfile)(filePath);
|
|
79
|
+
return completeV2(filePath, options.task, options.force === true, logger);
|
|
185
80
|
}
|
|
186
81
|
function completeV2(filePath, taskId, force, logger) {
|
|
187
82
|
assertSafeTaskId(taskId);
|
|
@@ -192,36 +87,22 @@ function completeV2(filePath, taskId, force, logger) {
|
|
|
192
87
|
}
|
|
193
88
|
const { doc, filePath: taskPath } = found;
|
|
194
89
|
const task = doc.task;
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const childStates = resolveEpicChildStates(task, dirs.boardDir, dirs.logsDir);
|
|
199
|
-
const incompleteChildren = childStates.filter((child) => child.status === 'active');
|
|
200
|
-
if (incompleteChildren.length > 0 && !force) {
|
|
90
|
+
const result = (0, core_1.completeTaskFile)(taskPath, dirs.logsDir, { legacyMode: true, force });
|
|
91
|
+
if (!result.success) {
|
|
92
|
+
if (result.incompleteChildren?.length) {
|
|
201
93
|
logger.warn(chalk_1.default.yellow(`Epic ${taskId} has incomplete child tasks:`));
|
|
202
|
-
for (const child of incompleteChildren) {
|
|
94
|
+
for (const child of result.incompleteChildren) {
|
|
203
95
|
logger.warn(chalk_1.default.yellow(` - ${child.id}: ${child.title}`));
|
|
204
96
|
}
|
|
205
97
|
logger.warn(chalk_1.default.yellow('Aborting completion. Re-run with --force to override.'));
|
|
206
|
-
throw (0, cli_error_1.operationFailed)(`Epic ${taskId} has ${incompleteChildren.length} incomplete child task(s). Use --force to override.`);
|
|
207
|
-
}
|
|
208
|
-
if (incompleteChildren.length > 0 && force) {
|
|
209
|
-
logger.warn(chalk_1.default.yellow(`Completing epic ${taskId} with --force despite ${incompleteChildren.length} incomplete child task(s).`));
|
|
98
|
+
throw (0, cli_error_1.operationFailed)(`Epic ${taskId} has ${result.incompleteChildren.length} incomplete child task(s). Use --force to override.`);
|
|
210
99
|
}
|
|
211
|
-
|
|
212
|
-
completedBody = appendBodySection(doc.body, childTasksSection);
|
|
100
|
+
throw (0, cli_error_1.operationFailed)(result.error || `Failed to complete task: ${taskId}`);
|
|
213
101
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
// Ensure logs directory exists
|
|
219
|
-
fs.mkdirSync(dirs.logsDir, { recursive: true });
|
|
220
|
-
// Write to logs directory
|
|
221
|
-
const logPath = path.join(dirs.logsDir, (0, core_2.taskFileName)(taskId));
|
|
222
|
-
(0, core_2.writeTaskFile)(logPath, completedTask, completedBody);
|
|
223
|
-
// Remove from tasks directory
|
|
224
|
-
fs.unlinkSync(taskPath);
|
|
102
|
+
if (result.incompleteChildren?.length) {
|
|
103
|
+
logger.warn(chalk_1.default.yellow(`Completing epic ${taskId} with --force despite ${result.incompleteChildren.length} incomplete child task(s).`));
|
|
104
|
+
}
|
|
105
|
+
const completedAt = result.task?.completedAt ?? new Date().toISOString();
|
|
225
106
|
logger.log(chalk_1.default.green('Task completed!'));
|
|
226
107
|
logger.log('');
|
|
227
108
|
logger.log(chalk_1.default.gray(` Task: ${taskId} - ${task.title}`));
|
|
@@ -229,39 +110,4 @@ function completeV2(filePath, taskId, force, logger) {
|
|
|
229
110
|
logger.log(chalk_1.default.gray(` Moved to: logs/${taskId}.md`));
|
|
230
111
|
return { success: true, taskId, completedAt };
|
|
231
112
|
}
|
|
232
|
-
function completeV1(filePath, taskId, completedAt, logger) {
|
|
233
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
234
|
-
const parsed = core_1.Brainfile.parseWithErrors(content);
|
|
235
|
-
if (!parsed.board) {
|
|
236
|
-
throw (0, cli_error_1.operationFailed)(parsed.error || 'Failed to parse brainfile');
|
|
237
|
-
}
|
|
238
|
-
let board = parsed.board;
|
|
239
|
-
const taskInfo = (0, core_1.findTaskById)(board, taskId);
|
|
240
|
-
if (!taskInfo) {
|
|
241
|
-
throw (0, cli_error_1.taskNotFound)(taskId);
|
|
242
|
-
}
|
|
243
|
-
// Find or determine done column
|
|
244
|
-
const doneColumn = (0, core_1.findCompletionColumn)(board) || board.columns.find(c => /^(done|completed?|finished|closed)$/i.test(c.id) ||
|
|
245
|
-
/^(done|completed?|finished|closed)$/i.test(c.title));
|
|
246
|
-
if (!doneColumn) {
|
|
247
|
-
throw (0, cli_error_1.operationFailed)('No completion column found. Add a column with id "done" or set completionColumn: true');
|
|
248
|
-
}
|
|
249
|
-
// Move to done column if not already there
|
|
250
|
-
if (taskInfo.column.id !== doneColumn.id) {
|
|
251
|
-
const moveResult = (0, core_1.moveTask)(board, taskId, taskInfo.column.id, doneColumn.id, doneColumn.tasks.length);
|
|
252
|
-
if (!moveResult.success) {
|
|
253
|
-
throw (0, cli_error_1.operationFailed)(moveResult.error);
|
|
254
|
-
}
|
|
255
|
-
board = moveResult.board;
|
|
256
|
-
}
|
|
257
|
-
// Write back
|
|
258
|
-
const updatedContent = core_1.Brainfile.serialize(board);
|
|
259
|
-
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
260
|
-
logger.log(chalk_1.default.green('Task completed!'));
|
|
261
|
-
logger.log('');
|
|
262
|
-
logger.log(chalk_1.default.gray(` Task: ${taskId} - ${taskInfo.task.title}`));
|
|
263
|
-
logger.log(chalk_1.default.gray(` CompletedAt: ${completedAt}`));
|
|
264
|
-
logger.log(chalk_1.default.gray(` Column: ${doneColumn.title}`));
|
|
265
|
-
return { success: true, taskId, completedAt };
|
|
266
|
-
}
|
|
267
113
|
//# sourceMappingURL=complete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/commands/contract.ts"],"names":[],"mappings":"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"}
|