@brainfile/cli 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +10 -0
  3. package/dist/cli.js +56 -8
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/add.js +5 -4
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/adr.d.ts.map +1 -1
  8. package/dist/commands/adr.js +17 -4
  9. package/dist/commands/adr.js.map +1 -1
  10. package/dist/commands/complete.d.ts +7 -5
  11. package/dist/commands/complete.d.ts.map +1 -1
  12. package/dist/commands/complete.js +141 -77
  13. package/dist/commands/complete.js.map +1 -1
  14. package/dist/commands/context.d.ts +19 -0
  15. package/dist/commands/context.d.ts.map +1 -0
  16. package/dist/commands/context.js +103 -0
  17. package/dist/commands/context.js.map +1 -0
  18. package/dist/commands/contract.d.ts.map +1 -1
  19. package/dist/commands/contract.js +34 -9
  20. package/dist/commands/contract.js.map +1 -1
  21. package/dist/commands/delete.d.ts.map +1 -1
  22. package/dist/commands/delete.js +19 -5
  23. package/dist/commands/delete.js.map +1 -1
  24. package/dist/commands/history.d.ts +18 -0
  25. package/dist/commands/history.d.ts.map +1 -0
  26. package/dist/commands/history.js +92 -0
  27. package/dist/commands/history.js.map +1 -0
  28. package/dist/commands/init.d.ts +0 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +19 -33
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/ledger-rebuild.d.ts +17 -0
  33. package/dist/commands/ledger-rebuild.d.ts.map +1 -0
  34. package/dist/commands/ledger-rebuild.js +287 -0
  35. package/dist/commands/ledger-rebuild.js.map +1 -0
  36. package/dist/commands/ledger.d.ts +20 -0
  37. package/dist/commands/ledger.d.ts.map +1 -0
  38. package/dist/commands/ledger.js +111 -0
  39. package/dist/commands/ledger.js.map +1 -0
  40. package/dist/commands/list.d.ts.map +1 -1
  41. package/dist/commands/list.js +5 -4
  42. package/dist/commands/list.js.map +1 -1
  43. package/dist/commands/log.js +2 -2
  44. package/dist/commands/log.js.map +1 -1
  45. package/dist/commands/mcp.d.ts.map +1 -1
  46. package/dist/commands/mcp.js +373 -6
  47. package/dist/commands/mcp.js.map +1 -1
  48. package/dist/commands/migrate-ledger.d.ts +17 -0
  49. package/dist/commands/migrate-ledger.d.ts.map +1 -0
  50. package/dist/commands/migrate-ledger.js +127 -0
  51. package/dist/commands/migrate-ledger.js.map +1 -0
  52. package/dist/commands/migrate.d.ts +5 -3
  53. package/dist/commands/migrate.d.ts.map +1 -1
  54. package/dist/commands/migrate.js +192 -90
  55. package/dist/commands/migrate.js.map +1 -1
  56. package/dist/commands/move.d.ts.map +1 -1
  57. package/dist/commands/move.js +16 -3
  58. package/dist/commands/move.js.map +1 -1
  59. package/dist/commands/patch.d.ts.map +1 -1
  60. package/dist/commands/patch.js +19 -10
  61. package/dist/commands/patch.js.map +1 -1
  62. package/dist/commands/show.js +5 -4
  63. package/dist/commands/show.js.map +1 -1
  64. package/dist/commands/stats.d.ts +20 -0
  65. package/dist/commands/stats.d.ts.map +1 -0
  66. package/dist/commands/stats.js +151 -0
  67. package/dist/commands/stats.js.map +1 -0
  68. package/dist/commands/tui.d.ts.map +1 -1
  69. package/dist/commands/tui.js +10 -0
  70. package/dist/commands/tui.js.map +1 -1
  71. package/dist/lib/contractRunner.js +1 -1
  72. package/dist/lib/contractRunner.js.map +1 -1
  73. package/dist/schemas/board.json +105 -18
  74. package/dist/utils/date-helpers.d.ts +20 -0
  75. package/dist/utils/date-helpers.d.ts.map +1 -0
  76. package/dist/utils/date-helpers.js +54 -0
  77. package/dist/utils/date-helpers.js.map +1 -0
  78. package/dist/utils/v2-detect.d.ts +5 -5
  79. package/dist/utils/v2-detect.d.ts.map +1 -1
  80. package/dist/utils/v2-detect.js +22 -19
  81. package/dist/utils/v2-detect.js.map +1 -1
  82. package/dist/utils/workspace-format.d.ts +25 -0
  83. package/dist/utils/workspace-format.d.ts.map +1 -0
  84. package/dist/utils/workspace-format.js +106 -0
  85. package/dist/utils/workspace-format.js.map +1 -0
  86. package/package.json +2 -2
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.migrateLedgerCommand = migrateLedgerCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const dist_1 = require("../../../core/dist");
44
+ const logger_1 = require("../utils/logger");
45
+ const cli_error_1 = require("../utils/cli-error");
46
+ const brainfile_path_1 = require("../utils/brainfile-path");
47
+ const v2_detect_1 = require("../utils/v2-detect");
48
+ function recordKey(record) {
49
+ return `${record.id}::${record.completedAt}`;
50
+ }
51
+ function loadExistingRecordKeys(ledgerPath, logsDir) {
52
+ if (!fs.existsSync(ledgerPath)) {
53
+ return new Set();
54
+ }
55
+ return new Set((0, dist_1.readLedger)(logsDir).map(recordKey));
56
+ }
57
+ /**
58
+ * Convert legacy logs/*.md entries into append-only ledger records.
59
+ */
60
+ function migrateLedgerCommand(options, logger = logger_1.defaultLogger) {
61
+ const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
62
+ if (!fs.existsSync(filePath)) {
63
+ throw (0, cli_error_1.fileNotFound)(filePath);
64
+ }
65
+ if (!(0, v2_detect_1.isV2)(filePath)) {
66
+ throw (0, cli_error_1.operationFailed)('migrate-ledger requires v2 per-task file architecture. Run: brainfile migrate');
67
+ }
68
+ const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
69
+ const logsDir = dirs.logsDir;
70
+ const ledgerPath = path.join(logsDir, 'ledger.jsonl');
71
+ const legacyDocs = (0, dist_1.readTasksDir)(logsDir).sort((a, b) => {
72
+ const left = a.task.completedAt || a.task.updatedAt || a.task.createdAt || '';
73
+ const right = b.task.completedAt || b.task.updatedAt || b.task.createdAt || '';
74
+ return left.localeCompare(right);
75
+ });
76
+ if (legacyDocs.length === 0) {
77
+ logger.log(chalk_1.default.yellow('No legacy markdown logs found to migrate.'));
78
+ return {
79
+ success: true,
80
+ migrated: 0,
81
+ skipped: 0,
82
+ removed: 0,
83
+ ledgerPath,
84
+ };
85
+ }
86
+ const existingKeys = loadExistingRecordKeys(ledgerPath, logsDir);
87
+ let migrated = 0;
88
+ let skipped = 0;
89
+ for (const doc of legacyDocs) {
90
+ const completedAt = doc.task.completedAt || doc.task.updatedAt || doc.task.createdAt || new Date().toISOString();
91
+ const record = (0, dist_1.buildLedgerRecord)(doc, doc.body, { completedAt });
92
+ const key = recordKey(record);
93
+ if (existingKeys.has(key)) {
94
+ skipped += 1;
95
+ continue;
96
+ }
97
+ (0, dist_1.appendLedgerRecord)(logsDir, record);
98
+ existingKeys.add(key);
99
+ migrated += 1;
100
+ }
101
+ let removed = 0;
102
+ if (options.clean) {
103
+ for (const doc of legacyDocs) {
104
+ if (!doc.filePath) {
105
+ continue;
106
+ }
107
+ if (fs.existsSync(doc.filePath)) {
108
+ fs.unlinkSync(doc.filePath);
109
+ removed += 1;
110
+ }
111
+ }
112
+ }
113
+ logger.log(chalk_1.default.green('Ledger migration complete.'));
114
+ logger.log('');
115
+ logger.log(chalk_1.default.gray(` Migrated: ${migrated}`));
116
+ logger.log(chalk_1.default.gray(` Skipped: ${skipped}`));
117
+ logger.log(chalk_1.default.gray(` Removed: ${removed}`));
118
+ logger.log(chalk_1.default.gray(` Ledger: ${ledgerPath}`));
119
+ return {
120
+ success: true,
121
+ migrated,
122
+ skipped,
123
+ removed,
124
+ ledgerPath,
125
+ };
126
+ }
127
+ //# sourceMappingURL=migrate-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-ledger.js","sourceRoot":"","sources":["../../src/commands/migrate-ledger.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  interface MigrateOptions {
2
2
  /** Migration root directory (defaults to cwd) */
3
3
  dir?: string;
4
+ /** Overwrite existing migration outputs (task files, backups) */
4
5
  force?: boolean;
5
- /** Convert v1 embedded tasks to v2 per-task files */
6
+ /** Deprecated alias; migration always targets v2 now */
6
7
  v2?: boolean;
8
+ /** Remove migrated logs/*.md files after ledger conversion */
9
+ clean?: boolean;
7
10
  }
8
11
  /**
9
- * Migrate a legacy `brainfile.md` in the project root to `.brainfile/brainfile.md`,
10
- * or convert v1 embedded tasks to v2 per-task file architecture.
12
+ * Migrate legacy workspace layouts to v2 (.brainfile/brainfile.md + board/ + logs/).
11
13
  */
12
14
  export declare function migrateCommand(options?: MigrateOptions): void;
13
15
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAQA,UAAU,cAAc;IACtB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,cAAmB,QAa1D"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAgBA,UAAU,cAAc;IACtB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,cAAmB,QAuB1D"}
@@ -41,105 +41,133 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const chalk_1 = __importDefault(require("chalk"));
43
43
  const core_1 = require("@brainfile/core");
44
- const dot_brainfile_1 = require("../utils/dot-brainfile");
45
44
  const core_2 = require("@brainfile/core");
45
+ const dist_1 = require("../../../core/dist");
46
+ const dot_brainfile_1 = require("../utils/dot-brainfile");
46
47
  const v2_detect_1 = require("../utils/v2-detect");
48
+ const workspace_format_1 = require("../utils/workspace-format");
47
49
  /**
48
- * Migrate a legacy `brainfile.md` in the project root to `.brainfile/brainfile.md`,
49
- * or convert v1 embedded tasks to v2 per-task file architecture.
50
+ * Migrate legacy workspace layouts to v2 (.brainfile/brainfile.md + board/ + logs/).
50
51
  */
51
52
  function migrateCommand(options = {}) {
52
53
  try {
53
- if (options.v2) {
54
- migrateToV2(options);
54
+ const rootDir = path.resolve(options.dir || process.cwd());
55
+ const probe = (0, workspace_format_1.probeWorkspaceFormat)(rootDir);
56
+ if (probe.format === 'empty') {
57
+ console.error(chalk_1.default.red('Error: No brainfile found to migrate.'));
58
+ console.log(chalk_1.default.gray(`Checked: ${probe.paths.rootBrainfilePath}`));
59
+ console.log(chalk_1.default.gray(`Checked: ${probe.paths.dotBrainfilePath}`));
60
+ process.exit(1);
55
61
  return;
56
62
  }
57
- // Original migration: root brainfile.md -> .brainfile/brainfile.md
58
- migrateToDirectory(options);
63
+ console.log(chalk_1.default.cyan('Migrating v1 v2...'));
64
+ const brainfilePath = migrateWorkspaceToV2(probe, options);
65
+ console.log('');
66
+ console.log(chalk_1.default.cyan('Converting logs to ledger...'));
67
+ convertLogsToLedger(brainfilePath, options);
59
68
  }
60
69
  catch (error) {
61
70
  console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : String(error));
62
71
  process.exit(1);
63
72
  }
64
73
  }
65
- /**
66
- * Original migration: move root brainfile.md into .brainfile/ directory.
67
- */
68
- function migrateToDirectory(options) {
69
- const rootDir = path.resolve(options.dir || process.cwd());
70
- const legacyPath = path.join(rootDir, 'brainfile.md');
71
- const dotDir = path.join(rootDir, '.brainfile');
72
- const targetPath = path.join(dotDir, 'brainfile.md');
73
- if (!fs.existsSync(legacyPath)) {
74
- console.error(chalk_1.default.red(`Error: File not found: ${legacyPath}`));
75
- console.log(chalk_1.default.gray('Nothing to migrate.'));
76
- process.exit(1);
74
+ function migrateWorkspaceToV2(probe, options) {
75
+ if (probe.format === 'v2') {
76
+ migrateBrainfileToV2(probe.paths.dotBrainfilePath, options);
77
+ return probe.paths.dotBrainfilePath;
77
78
  }
78
- if (fs.existsSync(targetPath) && !options.force) {
79
- console.error(chalk_1.default.red(`Error: Target already exists: ${targetPath}`));
80
- console.log(chalk_1.default.gray('Use --force to overwrite'));
81
- process.exit(1);
79
+ if (probe.format === 'legacy-root') {
80
+ migrateRootBrainfileToDotDir(probe, options);
81
+ migrateBrainfileToV2(probe.paths.dotBrainfilePath, options);
82
+ return probe.paths.dotBrainfilePath;
83
+ }
84
+ if (probe.format === 'legacy-dotbrainfile') {
85
+ migrateBrainfileToV2(probe.paths.dotBrainfilePath, options);
86
+ return probe.paths.dotBrainfilePath;
87
+ }
88
+ return migrateMixedWorkspace(probe, options);
89
+ }
90
+ function migrateMixedWorkspace(probe, options) {
91
+ const { presence, paths } = probe;
92
+ const hasFullV2 = presence.dotBrainfile && presence.boardDir && presence.logsDir;
93
+ if (hasFullV2) {
94
+ if (presence.rootBrainfile) {
95
+ const backupPath = backupAndRemoveLegacyRoot(paths.rootBrainfilePath, paths.dotDir);
96
+ console.log(chalk_1.default.yellow('Legacy root brainfile detected alongside v2 workspace.'));
97
+ console.log(chalk_1.default.gray(` Backed up root file to: ${backupPath}`));
98
+ }
99
+ (0, dot_brainfile_1.ensureDotBrainfileGitignore)(paths.dotBrainfilePath);
100
+ (0, dot_brainfile_1.removeLegacyStateFile)(paths.dotBrainfilePath);
101
+ console.log(chalk_1.default.green('Workspace is already v2. No task migration needed.'));
102
+ return paths.dotBrainfilePath;
103
+ }
104
+ if (presence.rootBrainfile && !presence.dotBrainfile) {
105
+ migrateRootBrainfileToDotDir(probe, options);
106
+ migrateBrainfileToV2(paths.dotBrainfilePath, options);
107
+ return paths.dotBrainfilePath;
108
+ }
109
+ if (presence.rootBrainfile && presence.dotBrainfile) {
110
+ const backupPath = backupAndRemoveLegacyRoot(paths.rootBrainfilePath, paths.dotDir);
111
+ console.log(chalk_1.default.yellow('Found both root and .brainfile brainfiles; using .brainfile/brainfile.md as source.'));
112
+ console.log(chalk_1.default.gray(` Backed up root file to: ${backupPath}`));
113
+ migrateBrainfileToV2(paths.dotBrainfilePath, options);
114
+ return paths.dotBrainfilePath;
115
+ }
116
+ if (presence.dotBrainfile) {
117
+ migrateBrainfileToV2(paths.dotBrainfilePath, options);
118
+ return paths.dotBrainfilePath;
119
+ }
120
+ throw new Error('Mixed workspace detected, but no migratable brainfile.md was found.');
121
+ }
122
+ function migrateRootBrainfileToDotDir(probe, options) {
123
+ const { rootBrainfilePath, dotDir, dotBrainfilePath } = probe.paths;
124
+ if (!fs.existsSync(rootBrainfilePath)) {
125
+ throw new Error(`File not found: ${rootBrainfilePath}`);
126
+ }
127
+ if (fs.existsSync(dotBrainfilePath) && !options.force) {
128
+ throw new Error(`Target already exists: ${dotBrainfilePath}. ` +
129
+ 'Run `brainfile migrate` again after resolving conflicts, or use --force.');
82
130
  }
83
131
  fs.mkdirSync(dotDir, { recursive: true });
84
- (0, dot_brainfile_1.ensureDotBrainfileGitignore)(targetPath);
85
- (0, dot_brainfile_1.removeLegacyStateFile)(targetPath);
86
- if (fs.existsSync(targetPath) && options.force) {
87
- fs.rmSync(targetPath, { force: true });
132
+ if (fs.existsSync(dotBrainfilePath) && options.force) {
133
+ fs.rmSync(dotBrainfilePath, { force: true });
88
134
  }
89
135
  // Prefer rename for exact preservation; fall back to copy+unlink on failure.
90
136
  try {
91
- fs.renameSync(legacyPath, targetPath);
137
+ fs.renameSync(rootBrainfilePath, dotBrainfilePath);
92
138
  }
93
139
  catch {
94
- const contents = fs.readFileSync(legacyPath);
95
- fs.writeFileSync(targetPath, contents);
96
- fs.rmSync(legacyPath, { force: true });
140
+ const contents = fs.readFileSync(rootBrainfilePath);
141
+ fs.writeFileSync(dotBrainfilePath, contents);
142
+ fs.rmSync(rootBrainfilePath, { force: true });
97
143
  }
98
- console.log(chalk_1.default.green('Brainfile migrated successfully!'));
99
- console.log('');
100
- console.log(chalk_1.default.gray(` Moved: ${legacyPath}`));
101
- console.log(chalk_1.default.gray(` To: ${targetPath}`));
102
- console.log('');
103
- console.log(chalk_1.default.gray('Next steps:'));
104
- console.log(chalk_1.default.gray(' - Your CLI/MCP commands will auto-detect the new location'));
105
- console.log(chalk_1.default.gray(' - Optionally commit `.brainfile/brainfile.md` to git'));
144
+ (0, dot_brainfile_1.ensureDotBrainfileGitignore)(dotBrainfilePath);
145
+ (0, dot_brainfile_1.removeLegacyStateFile)(dotBrainfilePath);
146
+ console.log(chalk_1.default.gray(`Moved: ${rootBrainfilePath} -> ${dotBrainfilePath}`));
106
147
  }
107
148
  /**
108
- * V2 migration: convert v1 board (embedded tasks in YAML) to v2 per-task files.
109
- *
110
- * - Reads all tasks from columns + archive in brainfile.md
111
- * - Writes each as an individual file in board/ (active) or logs/ (done/archived)
112
- * - Rewrites brainfile.md as config-only (columns without tasks)
113
- * - Non-destructive: backs up original brainfile.md first
149
+ * Convert a single legacy board file into v2 per-task files.
114
150
  */
115
- function migrateToV2(options) {
116
- const rootDir = path.resolve(options.dir || process.cwd());
117
- // Find the brainfile
118
- let brainfilePath;
119
- const dotPath = path.join(rootDir, '.brainfile', 'brainfile.md');
120
- const rootPath = path.join(rootDir, 'brainfile.md');
121
- if (fs.existsSync(dotPath)) {
122
- brainfilePath = dotPath;
123
- }
124
- else if (fs.existsSync(rootPath)) {
125
- brainfilePath = rootPath;
151
+ function migrateBrainfileToV2(brainfilePath, options) {
152
+ if (!fs.existsSync(brainfilePath)) {
153
+ throw new Error(`File not found: ${brainfilePath}`);
126
154
  }
127
- else {
128
- console.error(chalk_1.default.red('Error: No brainfile found to migrate.'));
129
- console.log(chalk_1.default.gray(`Checked: ${dotPath}`));
130
- console.log(chalk_1.default.gray(`Checked: ${rootPath}`));
131
- process.exit(1);
132
- return; // unreachable but for TS
133
- }
134
- // Parse the current brainfile
135
155
  const content = fs.readFileSync(brainfilePath, 'utf-8');
136
156
  const parsed = core_1.Brainfile.parseWithErrors(content);
137
157
  if (!parsed.board) {
138
- console.error(chalk_1.default.red(`Error: Failed to parse brainfile: ${parsed.error}`));
139
- process.exit(1);
140
- return;
158
+ throw new Error(`Failed to parse brainfile: ${parsed.error}`);
141
159
  }
142
160
  const board = parsed.board;
161
+ const dotDir = path.dirname(path.resolve(brainfilePath));
162
+ const hasBoardDir = fs.existsSync(path.join(dotDir, 'board'));
163
+ const hasLogsDir = fs.existsSync(path.join(dotDir, 'logs'));
164
+ const hasEmbeddedColumnTasks = board.columns.some((column) => (column.tasks?.length ?? 0) > 0);
165
+ const hasEmbeddedArchiveTasks = Array.isArray(board.archive)
166
+ && (board.archive?.length ?? 0) > 0;
167
+ if (hasBoardDir && hasLogsDir && !hasEmbeddedColumnTasks && !hasEmbeddedArchiveTasks) {
168
+ console.log(chalk_1.default.green('Already using v2 per-task file architecture.'));
169
+ return;
170
+ }
143
171
  // Back up original file
144
172
  const backupPath = brainfilePath + '.v1.bak';
145
173
  if (!fs.existsSync(backupPath) || options.force) {
@@ -151,22 +179,27 @@ function migrateToV2(options) {
151
179
  }
152
180
  // Ensure v2 directory structure
153
181
  const dirs = (0, v2_detect_1.ensureV2Dirs)(brainfilePath);
154
- let activeCount = 0;
155
- let logCount = 0;
156
- // Check for existing board/ files to avoid clobbering
182
+ // Validate/clear existing task files
157
183
  const existingTaskFiles = fs.existsSync(dirs.boardDir)
158
- ? fs.readdirSync(dirs.boardDir).filter(f => f.endsWith('.md'))
184
+ ? fs.readdirSync(dirs.boardDir).filter((f) => f.endsWith('.md'))
159
185
  : [];
160
186
  const existingLogFiles = fs.existsSync(dirs.logsDir)
161
- ? fs.readdirSync(dirs.logsDir).filter(f => f.endsWith('.md'))
187
+ ? fs.readdirSync(dirs.logsDir).filter((f) => f.endsWith('.md'))
162
188
  : [];
163
189
  if ((existingTaskFiles.length > 0 || existingLogFiles.length > 0) && !options.force) {
164
- console.error(chalk_1.default.red('Error: board/ or logs/ directory already contains files.'));
165
- console.log(chalk_1.default.gray('Use --force to overwrite.'));
166
- process.exit(1);
167
- return;
190
+ throw new Error('board/ or logs/ already contains task files. ' +
191
+ 'Use --force to replace existing .md files in those directories.');
168
192
  }
169
- // Determine which column IDs are "done"-like
193
+ if (options.force) {
194
+ for (const name of existingTaskFiles) {
195
+ fs.rmSync(path.join(dirs.boardDir, name), { force: true });
196
+ }
197
+ for (const name of existingLogFiles) {
198
+ fs.rmSync(path.join(dirs.logsDir, name), { force: true });
199
+ }
200
+ }
201
+ let activeCount = 0;
202
+ let logCount = 0;
170
203
  const doneColumnIds = new Set();
171
204
  for (const col of board.columns) {
172
205
  if (col.completionColumn ||
@@ -175,13 +208,12 @@ function migrateToV2(options) {
175
208
  doneColumnIds.add(col.id);
176
209
  }
177
210
  }
178
- // Write active tasks and done tasks to files
179
211
  for (const col of board.columns) {
180
212
  const isDone = doneColumnIds.has(col.id);
181
- for (let i = 0; i < col.tasks.length; i++) {
182
- const task = col.tasks[i];
213
+ const tasks = col.tasks || [];
214
+ for (let i = 0; i < tasks.length; i++) {
215
+ const task = tasks[i];
183
216
  if (isDone) {
184
- // Move to logs - remove column/position, add completedAt
185
217
  const logTask = {
186
218
  ...task,
187
219
  completedAt: task.completedAt || new Date().toISOString(),
@@ -193,7 +225,6 @@ function migrateToV2(options) {
193
225
  logCount++;
194
226
  }
195
227
  else {
196
- // Active task - add column and position
197
228
  const activeTask = {
198
229
  ...task,
199
230
  column: col.id,
@@ -205,8 +236,7 @@ function migrateToV2(options) {
205
236
  }
206
237
  }
207
238
  }
208
- // Write archived tasks to logs
209
- if (board.archive && board.archive.length > 0) {
239
+ if (Array.isArray(board.archive) && board.archive.length > 0) {
210
240
  for (const task of board.archive) {
211
241
  const logTask = {
212
242
  ...task,
@@ -219,21 +249,18 @@ function migrateToV2(options) {
219
249
  logCount++;
220
250
  }
221
251
  }
222
- // Rewrite brainfile.md as config-only (strip tasks from columns, remove archive)
223
252
  const configBoard = { ...board };
224
- configBoard.columns = board.columns.map(col => ({
253
+ configBoard.columns = board.columns.map((col) => ({
225
254
  id: col.id,
226
255
  title: col.title,
227
256
  ...(col.order !== undefined && { order: col.order }),
228
257
  ...(col.completionColumn && { completionColumn: col.completionColumn }),
229
- tasks: [], // empty tasks array for serialization compatibility
258
+ tasks: [],
230
259
  }));
231
260
  delete configBoard.archive;
232
- // Update schema to v2
233
261
  configBoard.schema = 'https://brainfile.md/v2/board.json';
234
262
  const configContent = core_1.Brainfile.serialize(configBoard);
235
263
  fs.writeFileSync(brainfilePath, configContent, 'utf-8');
236
- // Ensure .gitignore and remove legacy state file
237
264
  (0, dot_brainfile_1.ensureDotBrainfileGitignore)(brainfilePath);
238
265
  (0, dot_brainfile_1.removeLegacyStateFile)(brainfilePath);
239
266
  console.log(chalk_1.default.green('Migration to v2 complete!'));
@@ -242,7 +269,82 @@ function migrateToV2(options) {
242
269
  console.log(chalk_1.default.gray(` Completed/logs: ${logCount} files in logs/`));
243
270
  console.log(chalk_1.default.gray(` Board config: ${brainfilePath} (config-only)`));
244
271
  console.log(chalk_1.default.gray(` Backup: ${backupPath}`));
272
+ }
273
+ function backupAndRemoveLegacyRoot(rootBrainfilePath, dotDir) {
274
+ const backupPath = uniquePath(path.join(dotDir, 'brainfile.root.legacy.bak'));
275
+ fs.mkdirSync(dotDir, { recursive: true });
276
+ fs.copyFileSync(rootBrainfilePath, backupPath);
277
+ fs.rmSync(rootBrainfilePath, { force: true });
278
+ return backupPath;
279
+ }
280
+ function uniquePath(basePath) {
281
+ if (!fs.existsSync(basePath))
282
+ return basePath;
283
+ const ext = path.extname(basePath);
284
+ const stem = basePath.slice(0, basePath.length - ext.length);
285
+ let i = 1;
286
+ while (true) {
287
+ const candidate = `${stem}.${i}${ext}`;
288
+ if (!fs.existsSync(candidate))
289
+ return candidate;
290
+ i++;
291
+ }
292
+ }
293
+ function recordKey(record) {
294
+ return `${record.id}::${record.completedAt}`;
295
+ }
296
+ function loadExistingRecordKeys(ledgerPath, logsDir) {
297
+ if (!fs.existsSync(ledgerPath)) {
298
+ return new Set();
299
+ }
300
+ return new Set((0, dist_1.readLedger)(logsDir).map(recordKey));
301
+ }
302
+ function convertLogsToLedger(brainfilePath, options) {
303
+ const dirs = (0, v2_detect_1.ensureV2Dirs)(brainfilePath);
304
+ const logsDir = dirs.logsDir;
305
+ const ledgerPath = path.join(logsDir, 'ledger.jsonl');
306
+ const legacyDocs = (0, dist_1.readTasksDir)(logsDir).sort((a, b) => {
307
+ const left = a.task.completedAt || a.task.updatedAt || a.task.createdAt || '';
308
+ const right = b.task.completedAt || b.task.updatedAt || b.task.createdAt || '';
309
+ return left.localeCompare(right);
310
+ });
311
+ if (legacyDocs.length === 0) {
312
+ console.log(chalk_1.default.yellow('No legacy markdown logs found to migrate.'));
313
+ console.log(chalk_1.default.gray(` Ledger: ${ledgerPath}`));
314
+ return;
315
+ }
316
+ const existingKeys = loadExistingRecordKeys(ledgerPath, logsDir);
317
+ let migrated = 0;
318
+ let skipped = 0;
319
+ for (const doc of legacyDocs) {
320
+ const completedAt = doc.task.completedAt || doc.task.updatedAt || doc.task.createdAt || new Date().toISOString();
321
+ const record = (0, dist_1.buildLedgerRecord)(doc, doc.body, { completedAt });
322
+ const key = recordKey(record);
323
+ if (existingKeys.has(key)) {
324
+ skipped += 1;
325
+ continue;
326
+ }
327
+ (0, dist_1.appendLedgerRecord)(logsDir, record);
328
+ existingKeys.add(key);
329
+ migrated += 1;
330
+ }
331
+ let removed = 0;
332
+ if (options.clean) {
333
+ for (const doc of legacyDocs) {
334
+ if (!doc.filePath) {
335
+ continue;
336
+ }
337
+ if (fs.existsSync(doc.filePath)) {
338
+ fs.unlinkSync(doc.filePath);
339
+ removed += 1;
340
+ }
341
+ }
342
+ }
343
+ console.log(chalk_1.default.green('Ledger migration complete.'));
245
344
  console.log('');
246
- console.log(chalk_1.default.gray('All CLI commands now work with the per-task file architecture.'));
345
+ console.log(chalk_1.default.gray(` Migrated: ${migrated}`));
346
+ console.log(chalk_1.default.gray(` Skipped: ${skipped}`));
347
+ console.log(chalk_1.default.gray(` Removed: ${removed}`));
348
+ console.log(chalk_1.default.gray(` Ledger: ${ledgerPath}`));
247
349
  }
248
350
  //# sourceMappingURL=migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmF,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE1I,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAiB7D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAuBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,MAAsB,GAAG,UAAU,CAyG5F"}
1
+ {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmF,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE1I,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAgB7D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAuBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAiBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,MAAsB,GAAG,UAAU,CAyG5F"}
@@ -56,6 +56,18 @@ function isTaskCompletable(task, board) {
56
56
  const typeConfig = getBoardTypes(board)[taskType];
57
57
  return typeConfig?.completable !== false;
58
58
  }
59
+ function assertSafeTaskId(taskId) {
60
+ const trimmed = taskId.trim();
61
+ if (!trimmed || trimmed !== taskId) {
62
+ throw (0, cli_error_1.operationFailed)(`Invalid task ID: ${taskId}`);
63
+ }
64
+ if (taskId === '.' || taskId === '..') {
65
+ throw (0, cli_error_1.operationFailed)(`Invalid task ID: ${taskId}`);
66
+ }
67
+ if (path.isAbsolute(taskId) || /[\\/]/.test(taskId)) {
68
+ throw (0, cli_error_1.operationFailed)(`Invalid task ID: ${taskId}`);
69
+ }
70
+ }
59
71
  function moveCommand(options, logger = logger_1.defaultLogger) {
60
72
  // Validate required options
61
73
  if (!options.task) {
@@ -140,13 +152,14 @@ function moveCommand(options, logger = logger_1.defaultLogger) {
140
152
  };
141
153
  }
142
154
  function moveCommandV2(options, filePath, logger) {
155
+ assertSafeTaskId(options.task);
143
156
  const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
144
157
  const board = (0, v2_detect_1.readV2BoardConfig)(filePath);
145
- const taskPath = path.join(dirs.boardDir, (0, core_2.taskFileName)(options.task));
146
- const doc = (0, core_2.readTaskFile)(taskPath);
147
- if (!doc) {
158
+ const found = (0, v2_detect_1.findV2Task)(dirs, options.task, false);
159
+ if (!found || found.isLog) {
148
160
  throw (0, cli_error_1.taskNotFound)(options.task);
149
161
  }
162
+ const { doc, filePath: taskPath } = found;
150
163
  const task = doc.task;
151
164
  const sourceColumnId = task.column || '';
152
165
  // Find source and target columns from board config (title aliases still supported)