@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
@@ -43,8 +43,20 @@ const core_1 = require("@brainfile/core");
43
43
  const chalk_1 = __importDefault(require("chalk"));
44
44
  const errorHandler_1 = require("../utils/errorHandler");
45
45
  const brainfile_path_1 = require("../utils/brainfile-path");
46
- const core_2 = require("@brainfile/core");
47
46
  const v2_detect_1 = require("../utils/v2-detect");
47
+ function isUnsafeTaskId(taskId) {
48
+ const trimmed = taskId.trim();
49
+ if (!trimmed || trimmed !== taskId) {
50
+ return true;
51
+ }
52
+ if (taskId === '.' || taskId === '..') {
53
+ return true;
54
+ }
55
+ if (path.isAbsolute(taskId)) {
56
+ return true;
57
+ }
58
+ return /[\\/]/.test(taskId);
59
+ }
48
60
  function deleteCommand(options) {
49
61
  try {
50
62
  // Validate required options
@@ -59,13 +71,15 @@ function deleteCommand(options) {
59
71
  }
60
72
  // V2 per-task file architecture
61
73
  if ((0, v2_detect_1.isV2)(filePath)) {
74
+ if (isUnsafeTaskId(options.task)) {
75
+ (0, errorHandler_1.operationError)(`Invalid task ID: ${options.task}`);
76
+ }
62
77
  const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
63
- const taskPath = path.join(dirs.boardDir, (0, core_2.taskFileName)(options.task));
64
- const doc = (0, core_2.readTaskFile)(taskPath);
65
- if (!doc) {
78
+ const found = (0, v2_detect_1.findV2Task)(dirs, options.task, false);
79
+ if (!found || found.isLog) {
66
80
  (0, errorHandler_1.operationError)(`Task not found: ${options.task}`);
67
- return; // unreachable but for TS
68
81
  }
82
+ const { doc, filePath: taskPath } = found;
69
83
  const task = doc.task;
70
84
  if (!options.force) {
71
85
  console.log(chalk_1.default.yellow('Warning: This will permanently delete the task.'));
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type LedgerRecord } from '../../../core/dist';
2
+ import { type Logger } from '../utils/logger';
3
+ export interface HistoryOptions {
4
+ file: string;
5
+ filePath: string;
6
+ last?: number;
7
+ since?: string;
8
+ }
9
+ export interface HistoryResult {
10
+ success: true;
11
+ count: number;
12
+ records: LedgerRecord[];
13
+ }
14
+ /**
15
+ * Show completion history for a file path from ledger records.
16
+ */
17
+ export declare function historyCommand(options: HistoryOptions, logger?: Logger): HistoryResult;
18
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAM7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AA0BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,GAAE,MAAsB,GAAG,aAAa,CA2BrG"}
@@ -0,0 +1,92 @@
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.historyCommand = historyCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const dist_1 = require("../../../core/dist");
43
+ const logger_1 = require("../utils/logger");
44
+ const cli_error_1 = require("../utils/cli-error");
45
+ const brainfile_path_1 = require("../utils/brainfile-path");
46
+ const v2_detect_1 = require("../utils/v2-detect");
47
+ const date_helpers_1 = require("../utils/date-helpers");
48
+ function displayHistory(filePath, records, logger) {
49
+ logger.log('');
50
+ logger.log(chalk_1.default.bold(`History for ${filePath} (${records.length})`));
51
+ logger.log(chalk_1.default.gray('─'.repeat(60)));
52
+ if (records.length === 0) {
53
+ logger.log(chalk_1.default.gray(' No matching history entries found.'));
54
+ logger.log('');
55
+ return;
56
+ }
57
+ for (const record of records) {
58
+ logger.log(` ${chalk_1.default.gray(`[${record.id}]`)} ${chalk_1.default.white(record.title)}`);
59
+ logger.log(` ${chalk_1.default.gray('Completed:')} ${record.completedAt} ${chalk_1.default.gray('Cycle:')} ${record.cycleTimeHours.toFixed(2)}h`);
60
+ if (record.assignee) {
61
+ logger.log(` ${chalk_1.default.gray('Assignee:')} ${record.assignee}`);
62
+ }
63
+ logger.log(` ${chalk_1.default.gray('Summary:')} ${record.summary}`);
64
+ logger.log('');
65
+ }
66
+ }
67
+ /**
68
+ * Show completion history for a file path from ledger records.
69
+ */
70
+ function historyCommand(options, logger = logger_1.defaultLogger) {
71
+ const targetFile = options.filePath?.trim();
72
+ if (!targetFile) {
73
+ throw (0, cli_error_1.validationError)('history requires a non-empty <file-path> argument');
74
+ }
75
+ const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
76
+ if (!fs.existsSync(filePath)) {
77
+ throw (0, cli_error_1.fileNotFound)(filePath);
78
+ }
79
+ if (!(0, v2_detect_1.isV2)(filePath)) {
80
+ throw (0, cli_error_1.operationFailed)('History command requires v2 per-task file architecture. Run: brainfile migrate');
81
+ }
82
+ const dateRange = (0, date_helpers_1.buildDateRange)(options.since);
83
+ const limit = (0, date_helpers_1.parsePositiveInt)(options.last, '--last');
84
+ const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
85
+ const records = (0, dist_1.getFileHistory)(dirs.logsDir, targetFile, {
86
+ limit,
87
+ dateRange,
88
+ });
89
+ displayHistory(targetFile, records, logger);
90
+ return { success: true, count: records.length, records };
91
+ }
92
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  interface InitOptions {
2
2
  file?: string;
3
3
  force?: boolean;
4
- v2?: boolean;
5
4
  }
6
5
  export declare function initCommand(options: InitOptions): void;
7
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsDA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,QA+C/C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6BA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,QA2D/C"}
@@ -41,31 +41,7 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const chalk_1 = __importDefault(require("chalk"));
43
43
  const dot_brainfile_1 = require("../utils/dot-brainfile");
44
- const DEFAULT_BRAINFILE_V1 = `---
45
- schema: https://brainfile.md/v1/board.json
46
- title: My Project
47
- agent:
48
- instructions:
49
- - Modify only the YAML frontmatter
50
- - Preserve all IDs
51
- - Keep ordering
52
- - Make minimal changes
53
- columns:
54
- - id: todo
55
- title: To Do
56
- tasks: []
57
- - id: in-progress
58
- title: In Progress
59
- tasks: []
60
- - id: done
61
- title: Done
62
- tasks: []
63
- ---
64
-
65
- # My Project
66
-
67
- Add your project description here.
68
- `;
44
+ const workspace_format_1 = require("../utils/workspace-format");
69
45
  const DEFAULT_BRAINFILE_V2 = `---
70
46
  schema: https://brainfile.md/v2/board.json
71
47
  title: My Project
@@ -90,29 +66,39 @@ Add your project description here.
90
66
  `;
91
67
  function initCommand(options) {
92
68
  try {
93
- // Default to the new directory structure
94
69
  const filePath = path.resolve(options.file || path.join('.brainfile', 'brainfile.md'));
95
70
  const dotDir = path.dirname(filePath);
71
+ const workspaceRoot = (0, workspace_format_1.workspaceRootFromBrainfilePath)(filePath);
72
+ const probe = (0, workspace_format_1.probeWorkspaceFormat)(workspaceRoot);
73
+ if (probe.format === 'legacy-root' || probe.format === 'legacy-dotbrainfile' || probe.format === 'mixed') {
74
+ console.error(chalk_1.default.yellow('Legacy brainfile layout detected.'));
75
+ console.log(chalk_1.default.gray('Run ') + chalk_1.default.cyan('brainfile migrate') + chalk_1.default.gray(' before running init.'));
76
+ process.exit(1);
77
+ }
78
+ if (probe.format === 'v2' && fs.existsSync(filePath) && !options.force) {
79
+ // Idempotent init for already-migrated workspaces
80
+ (0, dot_brainfile_1.ensureDotBrainfileGitignore)(filePath);
81
+ (0, dot_brainfile_1.removeLegacyStateFile)(filePath);
82
+ fs.mkdirSync(path.join(dotDir, 'board'), { recursive: true });
83
+ fs.mkdirSync(path.join(dotDir, 'logs'), { recursive: true });
84
+ console.log(chalk_1.default.green('Brainfile already initialized (v2).'));
85
+ console.log(chalk_1.default.gray(` ${filePath}`));
86
+ return;
87
+ }
96
88
  // Ensure `.brainfile/.gitignore` exists
97
89
  (0, dot_brainfile_1.ensureDotBrainfileGitignore)(filePath);
98
- // Check if file already exists
99
90
  if (fs.existsSync(filePath) && !options.force) {
100
91
  console.error(chalk_1.default.red(`Error: File already exists: ${filePath}`));
101
92
  console.log(chalk_1.default.gray('Use --force to overwrite'));
102
93
  process.exit(1);
103
94
  }
104
95
  fs.mkdirSync(dotDir, { recursive: true });
105
- // Always create board/ and logs/ directories (v2 structure)
106
96
  const boardDir = path.join(dotDir, 'board');
107
97
  const logsDir = path.join(dotDir, 'logs');
108
98
  fs.mkdirSync(boardDir, { recursive: true });
109
99
  fs.mkdirSync(logsDir, { recursive: true });
110
- // Write the default brainfile (v2 format by default now)
111
- const template = options.v2 === false ? DEFAULT_BRAINFILE_V1 : DEFAULT_BRAINFILE_V2;
112
- fs.writeFileSync(filePath, template, 'utf-8');
113
- // Remove legacy state file if present
100
+ fs.writeFileSync(filePath, DEFAULT_BRAINFILE_V2, 'utf-8');
114
101
  (0, dot_brainfile_1.removeLegacyStateFile)(filePath);
115
- // Success message
116
102
  console.log(chalk_1.default.green('Brainfile initialized successfully!'));
117
103
  console.log('');
118
104
  console.log(chalk_1.default.gray(` Created: ${filePath}`));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type LedgerRecord } from '../../../core/dist';
2
+ import { type Logger } from '../utils/logger';
3
+ export interface LedgerRebuildOptions {
4
+ file: string;
5
+ }
6
+ export interface LedgerRebuildResult {
7
+ success: true;
8
+ rebuilt: number;
9
+ skipped: number;
10
+ ledgerPath: string;
11
+ records: LedgerRecord[];
12
+ }
13
+ /**
14
+ * Rebuild `logs/ledger.jsonl` from git history.
15
+ */
16
+ export declare function ledgerRebuildCommand(options: LedgerRebuildOptions, logger?: Logger): LedgerRebuildResult;
17
+ //# sourceMappingURL=ledger-rebuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-rebuild.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-rebuild.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAQ7D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAqQD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,GAAE,MAAsB,GAC7B,mBAAmB,CAoDrB"}
@@ -0,0 +1,287 @@
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.ledgerRebuildCommand = ledgerRebuildCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const child_process_1 = require("child_process");
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const dist_1 = require("../../../core/dist");
45
+ const logger_1 = require("../utils/logger");
46
+ const cli_error_1 = require("../utils/cli-error");
47
+ const brainfile_path_1 = require("../utils/brainfile-path");
48
+ const v2_detect_1 = require("../utils/v2-detect");
49
+ const COMMIT_MARKER = '__COMMIT__';
50
+ const REBUILT_SUMMARY = 'Rebuilt from git history';
51
+ function runGit(args, cwd) {
52
+ const result = (0, child_process_1.spawnSync)('git', args, {
53
+ cwd,
54
+ encoding: 'utf-8',
55
+ });
56
+ return {
57
+ ok: !result.error && result.status === 0,
58
+ stdout: typeof result.stdout === 'string' ? result.stdout : '',
59
+ stderr: typeof result.stderr === 'string' ? result.stderr : '',
60
+ };
61
+ }
62
+ function normalizeGitPath(value) {
63
+ return value.replace(/\\/g, '/').replace(/^\.\//, '').trim();
64
+ }
65
+ function isPathWithinDirectory(filePath, directory) {
66
+ return filePath === directory || filePath.startsWith(`${directory}/`);
67
+ }
68
+ function isTaskMarkdownInDirectory(filePath, directory) {
69
+ return filePath.endsWith('.md') && isPathWithinDirectory(filePath, directory);
70
+ }
71
+ function toRepoRelativePath(repoRoot, targetPath) {
72
+ const relative = normalizeGitPath(path.relative(repoRoot, targetPath));
73
+ if (!relative || relative.startsWith('..')) {
74
+ throw (0, cli_error_1.operationFailed)(`Path is outside the git repository: ${targetPath}`);
75
+ }
76
+ return relative;
77
+ }
78
+ function resolveRepoRoot(startDir) {
79
+ const result = runGit(['rev-parse', '--show-toplevel'], startDir);
80
+ if (!result.ok) {
81
+ throw (0, cli_error_1.operationFailed)('ledger rebuild requires a git repository');
82
+ }
83
+ const repoRoot = result.stdout.trim();
84
+ if (!repoRoot) {
85
+ throw (0, cli_error_1.operationFailed)('Failed to resolve git repository root for ledger rebuild');
86
+ }
87
+ return path.resolve(repoRoot);
88
+ }
89
+ function parseCompletionEvents(logOutput, boardRel, logsRel) {
90
+ const events = [];
91
+ let currentCommit = '';
92
+ let currentCompletedAt = '';
93
+ for (const rawLine of logOutput.split('\n')) {
94
+ const line = rawLine.trim();
95
+ if (!line) {
96
+ continue;
97
+ }
98
+ if (line.startsWith(COMMIT_MARKER)) {
99
+ const payload = line.slice(COMMIT_MARKER.length);
100
+ const separatorIndex = payload.indexOf('|');
101
+ if (separatorIndex === -1) {
102
+ currentCommit = '';
103
+ currentCompletedAt = '';
104
+ continue;
105
+ }
106
+ currentCommit = payload.slice(0, separatorIndex).trim();
107
+ currentCompletedAt = payload.slice(separatorIndex + 1).trim();
108
+ continue;
109
+ }
110
+ if (!currentCommit) {
111
+ continue;
112
+ }
113
+ const parts = rawLine.split('\t');
114
+ if (parts.length < 2) {
115
+ continue;
116
+ }
117
+ const status = parts[0].trim();
118
+ if (status === 'D') {
119
+ const deletedPath = normalizeGitPath(parts[1] || '');
120
+ if (!isTaskMarkdownInDirectory(deletedPath, boardRel)) {
121
+ continue;
122
+ }
123
+ events.push({
124
+ commit: currentCommit,
125
+ completedAt: currentCompletedAt,
126
+ sourcePath: deletedPath,
127
+ });
128
+ continue;
129
+ }
130
+ if (!status.startsWith('R') || parts.length < 3) {
131
+ continue;
132
+ }
133
+ const sourcePath = normalizeGitPath(parts[1] || '');
134
+ const targetPath = normalizeGitPath(parts[2] || '');
135
+ if (!isTaskMarkdownInDirectory(sourcePath, boardRel)) {
136
+ continue;
137
+ }
138
+ if (!isTaskMarkdownInDirectory(targetPath, logsRel)) {
139
+ continue;
140
+ }
141
+ events.push({
142
+ commit: currentCommit,
143
+ completedAt: currentCompletedAt,
144
+ sourcePath,
145
+ targetPath,
146
+ });
147
+ }
148
+ return events;
149
+ }
150
+ function scanCompletionEvents(repoRoot, boardRel, logsRel) {
151
+ const result = runGit([
152
+ 'log',
153
+ '--reverse',
154
+ '--date=iso-strict',
155
+ `--pretty=format:${COMMIT_MARKER}%H|%cI`,
156
+ '--name-status',
157
+ '--find-renames',
158
+ '--',
159
+ boardRel,
160
+ logsRel,
161
+ ], repoRoot);
162
+ if (!result.ok) {
163
+ const details = result.stderr.trim();
164
+ throw (0, cli_error_1.operationFailed)(details
165
+ ? `Failed to scan git history for ledger rebuild: ${details}`
166
+ : 'Failed to scan git history for ledger rebuild');
167
+ }
168
+ return parseCompletionEvents(result.stdout, boardRel, logsRel);
169
+ }
170
+ function parseIsoDate(value) {
171
+ if (!value) {
172
+ return undefined;
173
+ }
174
+ const parsed = Date.parse(value);
175
+ if (!Number.isFinite(parsed)) {
176
+ return undefined;
177
+ }
178
+ return new Date(parsed).toISOString();
179
+ }
180
+ function readTaskFromHistory(event, repoRoot) {
181
+ const showSpecs = [`${event.commit}^:${event.sourcePath}`, `${event.commit}:${event.sourcePath}`];
182
+ if (event.targetPath) {
183
+ showSpecs.push(`${event.commit}:${event.targetPath}`);
184
+ }
185
+ for (const showSpec of showSpecs) {
186
+ const result = runGit(['show', showSpec], repoRoot);
187
+ if (!result.ok || !result.stdout) {
188
+ continue;
189
+ }
190
+ const parsed = (0, dist_1.parseTaskContent)(result.stdout);
191
+ if (parsed) {
192
+ return parsed;
193
+ }
194
+ }
195
+ return null;
196
+ }
197
+ function inferFilesChangedFromCommit(repoRoot, commit, boardRel, logsRel) {
198
+ const result = runGit(['show', '--pretty=format:', '--name-only', commit], repoRoot);
199
+ if (!result.ok) {
200
+ return [];
201
+ }
202
+ const filesChanged = [];
203
+ const seen = new Set();
204
+ for (const line of result.stdout.split('\n')) {
205
+ const normalized = normalizeGitPath(line);
206
+ if (!normalized || seen.has(normalized)) {
207
+ continue;
208
+ }
209
+ if (isTaskMarkdownInDirectory(normalized, boardRel)) {
210
+ continue;
211
+ }
212
+ if (isTaskMarkdownInDirectory(normalized, logsRel)) {
213
+ continue;
214
+ }
215
+ if (normalized === `${logsRel}/ledger.jsonl`) {
216
+ continue;
217
+ }
218
+ seen.add(normalized);
219
+ filesChanged.push(normalized);
220
+ }
221
+ return filesChanged;
222
+ }
223
+ function buildRebuiltRecord(task, body, completedAt, filesChanged) {
224
+ const record = (0, dist_1.buildLedgerRecord)(task, body, {
225
+ completedAt,
226
+ summary: REBUILT_SUMMARY,
227
+ filesChanged: filesChanged.length > 0 ? filesChanged : undefined,
228
+ });
229
+ // For rebuilds, preserve strict semantics: either inferred files or empty array.
230
+ record.summary = REBUILT_SUMMARY;
231
+ record.filesChanged = filesChanged;
232
+ return record;
233
+ }
234
+ function writeLedger(logsDir, records) {
235
+ fs.mkdirSync(logsDir, { recursive: true });
236
+ const ledgerPath = path.join(logsDir, 'ledger.jsonl');
237
+ const jsonl = records.map((record) => JSON.stringify(record)).join('\n');
238
+ fs.writeFileSync(ledgerPath, jsonl ? `${jsonl}\n` : '', 'utf-8');
239
+ return ledgerPath;
240
+ }
241
+ /**
242
+ * Rebuild `logs/ledger.jsonl` from git history.
243
+ */
244
+ function ledgerRebuildCommand(options, logger = logger_1.defaultLogger) {
245
+ const filePath = (0, brainfile_path_1.resolveCliBrainfilePath)(options.file);
246
+ if (!fs.existsSync(filePath)) {
247
+ throw (0, cli_error_1.fileNotFound)(filePath);
248
+ }
249
+ if (!(0, v2_detect_1.isV2)(filePath)) {
250
+ throw (0, cli_error_1.operationFailed)('ledger rebuild requires v2 per-task file architecture. Run: brainfile migrate');
251
+ }
252
+ const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
253
+ const repoRoot = resolveRepoRoot(path.dirname(filePath));
254
+ const boardRel = toRepoRelativePath(repoRoot, dirs.boardDir);
255
+ const logsRel = toRepoRelativePath(repoRoot, dirs.logsDir);
256
+ const events = scanCompletionEvents(repoRoot, boardRel, logsRel);
257
+ const records = [];
258
+ let skipped = 0;
259
+ for (const event of events) {
260
+ const parsedTask = readTaskFromHistory(event, repoRoot);
261
+ if (!parsedTask) {
262
+ skipped += 1;
263
+ continue;
264
+ }
265
+ const completedAt = parseIsoDate(event.completedAt) ||
266
+ parseIsoDate(parsedTask.task.completedAt) ||
267
+ new Date().toISOString();
268
+ const filesChanged = inferFilesChangedFromCommit(repoRoot, event.commit, boardRel, logsRel);
269
+ const record = buildRebuiltRecord(parsedTask.task, parsedTask.body, completedAt, filesChanged);
270
+ records.push(record);
271
+ }
272
+ const ledgerPath = writeLedger(dirs.logsDir, records);
273
+ const relativeLedgerPath = path.relative(path.dirname(filePath), ledgerPath) || ledgerPath;
274
+ logger.log(chalk_1.default.green('Ledger rebuild complete.'));
275
+ logger.log('');
276
+ logger.log(chalk_1.default.gray(` Rebuilt: ${records.length}`));
277
+ logger.log(chalk_1.default.gray(` Skipped: ${skipped}`));
278
+ logger.log(chalk_1.default.gray(` Ledger: ${relativeLedgerPath}`));
279
+ return {
280
+ success: true,
281
+ rebuilt: records.length,
282
+ skipped,
283
+ ledgerPath,
284
+ records,
285
+ };
286
+ }
287
+ //# sourceMappingURL=ledger-rebuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-rebuild.js","sourceRoot":"","sources":["../../src/commands/ledger-rebuild.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoSA,oDAuDC;AA3VD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAA0C;AAC1C,kDAA0B;AAC1B,6CAK4B;AAC5B,4CAA6D;AAC7D,kDAAmE;AACnE,4DAAkE;AAClE,kDAAqD;AAErD,MAAM,aAAa,GAAG,YAAY,CAAC;AACnC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AA2BnD,SAAS,MAAM,CAAC,IAAc,EAAE,GAAW;IACzC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,KAAK,EAAE,IAAI,EAAE;QACpC,GAAG;QACH,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACxC,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC9D,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,SAAiB;IAChE,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAgB,EAAE,SAAiB;IACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,UAAkB;IAC9D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAA,2BAAe,EAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAA,2BAAe,EAAC,0CAA0C,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAA,2BAAe,EAAC,0DAA0D,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB,EAAE,OAAe;IACjF,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,aAAa,GAAG,EAAE,CAAC;gBACnB,kBAAkB,GAAG,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACtD,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,kBAAkB;gBAC/B,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,kBAAkB;YAC/B,UAAU;YACV,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAe;IAC/E,MAAM,MAAM,GAAG,MAAM,CACnB;QACE,KAAK;QACL,WAAW;QACX,mBAAmB;QACnB,mBAAmB,aAAa,QAAQ;QACxC,eAAe;QACf,gBAAgB;QAChB,IAAI;QACJ,QAAQ;QACR,OAAO;KACR,EACD,QAAQ,CACT,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,IAAA,2BAAe,EACnB,OAAO;YACL,CAAC,CAAC,kDAAkD,OAAO,EAAE;YAC7D,CAAC,CAAC,+CAA+C,CACpD,CAAC;IACJ,CAAC;IAED,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAsB,EAAE,QAAgB;IACnE,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAClG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,uBAAgB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,IAAI,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QACD,IAAI,UAAU,KAAK,GAAG,OAAO,eAAe,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAsB;IAEtB,MAAM,MAAM,GAAG,IAAA,wBAAiB,EAAC,IAAI,EAAE,IAAI,EAAE;QAC3C,WAAW;QACX,OAAO,EAAE,eAAe;QACxB,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC,CAAC;IAEH,iFAAiF;IACjF,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC;IACjC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,OAAuB;IAC3D,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,OAA6B,EAC7B,SAAiB,sBAAa;IAE9B,MAAM,QAAQ,GAAG,IAAA,wCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAA,wBAAY,EAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAA,gBAAI,EAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,MAAM,IAAA,2BAAe,EAAC,+EAA+E,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GACf,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC;YAC/B,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3B,MAAM,YAAY,GAAG,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC;IAE3F,MAAM,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,OAAO;QACP,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type LedgerRecord } from '../../../core/dist';
2
+ import { type Logger } from '../utils/logger';
3
+ export interface LedgerOptions {
4
+ file: string;
5
+ assignee?: string;
6
+ since?: string;
7
+ until?: string;
8
+ tag?: string;
9
+ contractStatus?: string;
10
+ }
11
+ export interface LedgerResult {
12
+ success: true;
13
+ count: number;
14
+ records: LedgerRecord[];
15
+ }
16
+ /**
17
+ * Query append-only completion ledger records.
18
+ */
19
+ export declare function ledgerCommand(options: LedgerOptions, logger?: Logger): LedgerResult;
20
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/commands/ledger.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAM7D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAqDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,GAAE,MAAsB,GAAG,YAAY,CA0BlG"}