@brainfile/cli 0.12.4 → 0.12.5

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 (88) hide show
  1. package/dist/cli.js +32 -9
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/add.d.ts +12 -3
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +83 -81
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/contract.d.ts +20 -0
  8. package/dist/commands/contract.d.ts.map +1 -0
  9. package/dist/commands/contract.js +62 -0
  10. package/dist/commands/contract.js.map +1 -0
  11. package/dist/commands/hooks.d.ts +7 -6
  12. package/dist/commands/hooks.d.ts.map +1 -1
  13. package/dist/commands/hooks.js +130 -124
  14. package/dist/commands/hooks.js.map +1 -1
  15. package/dist/commands/lint.d.ts +9 -1
  16. package/dist/commands/lint.d.ts.map +1 -1
  17. package/dist/commands/lint.js +74 -77
  18. package/dist/commands/lint.js.map +1 -1
  19. package/dist/commands/list.d.ts +12 -3
  20. package/dist/commands/list.d.ts.map +1 -1
  21. package/dist/commands/list.js +59 -58
  22. package/dist/commands/list.js.map +1 -1
  23. package/dist/commands/mcp.d.ts.map +1 -1
  24. package/dist/commands/mcp.js +58 -0
  25. package/dist/commands/mcp.js.map +1 -1
  26. package/dist/commands/move.d.ts +9 -1
  27. package/dist/commands/move.d.ts.map +1 -1
  28. package/dist/commands/move.js +78 -64
  29. package/dist/commands/move.js.map +1 -1
  30. package/dist/commands/template.d.ts +7 -1
  31. package/dist/commands/template.d.ts.map +1 -1
  32. package/dist/commands/template.js +105 -124
  33. package/dist/commands/template.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +5 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/contractRunner.d.ts +54 -0
  39. package/dist/lib/contractRunner.d.ts.map +1 -0
  40. package/dist/lib/contractRunner.js +273 -0
  41. package/dist/lib/contractRunner.js.map +1 -0
  42. package/dist/tui/BrainfileTUI.d.ts.map +1 -1
  43. package/dist/tui/BrainfileTUI.js +7 -1
  44. package/dist/tui/BrainfileTUI.js.map +1 -1
  45. package/dist/tui/components/StackedTaskList.d.ts.map +1 -1
  46. package/dist/tui/components/StackedTaskList.js +4 -4
  47. package/dist/tui/components/StackedTaskList.js.map +1 -1
  48. package/dist/tui/components/TaskCard.d.ts +3 -1
  49. package/dist/tui/components/TaskCard.d.ts.map +1 -1
  50. package/dist/tui/components/TaskCard.js +33 -9
  51. package/dist/tui/components/TaskCard.js.map +1 -1
  52. package/dist/tui/components/TaskCardMeasure.d.ts +1 -1
  53. package/dist/tui/components/TaskCardMeasure.d.ts.map +1 -1
  54. package/dist/tui/components/TaskCardMeasure.js +11 -1
  55. package/dist/tui/components/TaskCardMeasure.js.map +1 -1
  56. package/dist/tui/components/TaskDetail.d.ts +14 -0
  57. package/dist/tui/components/TaskDetail.d.ts.map +1 -0
  58. package/dist/tui/components/TaskDetail.js +41 -0
  59. package/dist/tui/components/TaskDetail.js.map +1 -0
  60. package/dist/tui/components/TaskList.d.ts.map +1 -1
  61. package/dist/tui/components/TaskList.js +5 -4
  62. package/dist/tui/components/TaskList.js.map +1 -1
  63. package/dist/utils/cli-error.d.ts +44 -0
  64. package/dist/utils/cli-error.d.ts.map +1 -0
  65. package/dist/utils/cli-error.js +85 -0
  66. package/dist/utils/cli-error.js.map +1 -0
  67. package/dist/utils/errorHandler.d.ts +2 -2
  68. package/dist/utils/errorHandler.d.ts.map +1 -1
  69. package/dist/utils/errorHandler.js +8 -13
  70. package/dist/utils/errorHandler.js.map +1 -1
  71. package/dist/utils/git-helper.d.ts +8 -4
  72. package/dist/utils/git-helper.d.ts.map +1 -1
  73. package/dist/utils/git-helper.js +12 -9
  74. package/dist/utils/git-helper.js.map +1 -1
  75. package/dist/utils/logger.d.ts +34 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +56 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/package.json +2 -2
  80. package/.aider/sessions/auto-save.json +0 -23
  81. package/.aider.chat.history.md +0 -81
  82. package/.aider.input.history +0 -12
  83. package/.aider.tags.cache.v8/cache.db +0 -0
  84. package/.aider.tags.cache.v8/cache.db-shm +0 -0
  85. package/.aider.tags.cache.v8/cache.db-wal +0 -0
  86. package/.claude/settings.json +0 -7
  87. package/brainfile.md +0 -102
  88. package/logo.png +0 -0
@@ -41,86 +41,83 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const core_1 = require("@brainfile/core");
43
43
  const chalk_1 = __importDefault(require("chalk"));
44
- function lintCommand(options) {
45
- try {
46
- // Resolve file path
47
- const filePath = path.resolve(options.file);
48
- // Check if file exists
49
- if (!fs.existsSync(filePath)) {
50
- console.error(chalk_1.default.red(`Error: File not found: ${filePath}`));
51
- console.log('');
52
- console.log(chalk_1.default.gray('To create a new brainfile, run:'));
53
- console.log(chalk_1.default.cyan(' brainfile init'));
54
- process.exit(1);
55
- }
56
- // Read file content
57
- const content = fs.readFileSync(filePath, 'utf-8');
58
- console.log(chalk_1.default.blue(`\n🔍 Linting: ${filePath}\n`));
59
- // Run linter from core
60
- const result = core_1.BrainfileLinter.lint(content, { autoFix: options.fix });
61
- // Report findings
62
- if (result.issues.length === 0) {
63
- console.log(chalk_1.default.green('✓ No issues found! Your brainfile.md is valid.\n'));
64
- return; // Success - don't exit, just return
65
- }
66
- // Group issues by type
67
- const grouped = core_1.BrainfileLinter.groupIssues(result);
68
- const { errors, warnings, fixable } = grouped;
69
- // Display errors
70
- if (errors.length > 0) {
71
- console.log(chalk_1.default.red.bold(`✗ ${errors.length} Error${errors.length > 1 ? 's' : ''}:`));
72
- errors.forEach(issue => {
73
- const location = issue.line ? chalk_1.default.gray(` [line ${issue.line}]`) : '';
74
- console.log(chalk_1.default.red(` • ${issue.message}${location}`));
75
- });
76
- console.log();
77
- }
78
- // Display warnings
79
- if (warnings.length > 0) {
80
- console.log(chalk_1.default.yellow.bold(`⚠ ${warnings.length} Warning${warnings.length > 1 ? 's' : ''}:`));
81
- warnings.forEach(issue => {
82
- const location = issue.line ? chalk_1.default.gray(` [line ${issue.line}]`) : '';
83
- const fixableTag = issue.fixable ? chalk_1.default.gray(' [fixable]') : '';
84
- console.log(chalk_1.default.yellow(` • ${issue.message}${location}${fixableTag}`));
85
- });
86
- console.log();
87
- }
88
- // Apply fixes if requested and content was fixed
89
- if (options.fix && result.fixedContent) {
90
- fs.writeFileSync(filePath, result.fixedContent, 'utf-8');
91
- console.log(chalk_1.default.green(`✓ Fixed ${fixable.length} issue${fixable.length > 1 ? 's' : ''}!\n`));
92
- // Recheck after fixes
93
- const recheckResult = core_1.BrainfileLinter.lint(result.fixedContent, { autoFix: false });
94
- const remainingIssues = recheckResult.issues;
95
- if (remainingIssues.length > 0) {
96
- console.log(chalk_1.default.yellow(`⚠ ${remainingIssues.length} issue${remainingIssues.length > 1 ? 's' : ''} remaining (not auto-fixable)\n`));
97
- }
98
- }
99
- else if (fixable.length > 0 && !options.fix) {
100
- console.log(chalk_1.default.gray(`💡 Run with --fix to automatically fix ${fixable.length} issue${fixable.length > 1 ? 's' : ''}\n`));
101
- }
102
- // Summary
103
- console.log(chalk_1.default.gray('─'.repeat(60)));
104
- console.log(chalk_1.default.gray(`Total: ${result.issues.length} issue${result.issues.length > 1 ? 's' : ''} found`));
105
- if (fixable.length > 0 && !options.fix) {
106
- console.log(chalk_1.default.gray(` ${fixable.length} fixable with --fix`));
107
- }
108
- console.log();
109
- // Exit with error code in check mode
110
- if (options.check) {
111
- if (errors.length > 0 || warnings.length > 0) {
112
- process.exit(1);
113
- }
44
+ const logger_1 = require("../utils/logger");
45
+ const cli_error_1 = require("../utils/cli-error");
46
+ const errorHandler_1 = require("../utils/errorHandler");
47
+ function lintCommand(options, logger = logger_1.defaultLogger) {
48
+ // Resolve file path
49
+ const filePath = path.resolve(options.file);
50
+ // Check if file exists
51
+ if (!fs.existsSync(filePath)) {
52
+ throw (0, cli_error_1.fileNotFound)(filePath);
53
+ }
54
+ // Read file content
55
+ const content = fs.readFileSync(filePath, 'utf-8');
56
+ logger.log(chalk_1.default.blue(`\n🔍 Linting: ${filePath}\n`));
57
+ // Run linter from core
58
+ const result = core_1.BrainfileLinter.lint(content, { autoFix: options.fix });
59
+ // Report findings
60
+ if (result.issues.length === 0) {
61
+ logger.log(chalk_1.default.green('✓ No issues found! Your brainfile.md is valid.\n'));
62
+ return { success: true, issues: [], fixed: false, fixedCount: 0 };
63
+ }
64
+ // Group issues by type
65
+ const grouped = core_1.BrainfileLinter.groupIssues(result);
66
+ const { errors, warnings, fixable } = grouped;
67
+ // Display errors
68
+ if (errors.length > 0) {
69
+ logger.log(chalk_1.default.red.bold(`✗ ${errors.length} Error${errors.length > 1 ? 's' : ''}:`));
70
+ errors.forEach(issue => {
71
+ const location = issue.line ? chalk_1.default.gray(` [line ${issue.line}]`) : '';
72
+ logger.log(chalk_1.default.red(` • ${issue.message}${location}`));
73
+ });
74
+ logger.log('');
75
+ }
76
+ // Display warnings
77
+ if (warnings.length > 0) {
78
+ logger.log(chalk_1.default.yellow.bold(`⚠ ${warnings.length} Warning${warnings.length > 1 ? 's' : ''}:`));
79
+ warnings.forEach(issue => {
80
+ const location = issue.line ? chalk_1.default.gray(` [line ${issue.line}]`) : '';
81
+ const fixableTag = issue.fixable ? chalk_1.default.gray(' [fixable]') : '';
82
+ logger.log(chalk_1.default.yellow(` ${issue.message}${location}${fixableTag}`));
83
+ });
84
+ logger.log('');
85
+ }
86
+ let fixedCount = 0;
87
+ let fixed = false;
88
+ // Apply fixes if requested and content was fixed
89
+ if (options.fix && result.fixedContent) {
90
+ fs.writeFileSync(filePath, result.fixedContent, 'utf-8');
91
+ fixedCount = fixable.length;
92
+ fixed = true;
93
+ logger.log(chalk_1.default.green(`✓ Fixed ${fixable.length} issue${fixable.length > 1 ? 's' : ''}!\n`));
94
+ // Recheck after fixes
95
+ const recheckResult = core_1.BrainfileLinter.lint(result.fixedContent, { autoFix: false });
96
+ const remainingIssues = recheckResult.issues;
97
+ if (remainingIssues.length > 0) {
98
+ logger.log(chalk_1.default.yellow(`⚠ ${remainingIssues.length} issue${remainingIssues.length > 1 ? 's' : ''} remaining (not auto-fixable)\n`));
114
99
  }
115
- // Normal mode: only exit 1 on errors (not warnings)
116
- if (errors.length > 0) {
117
- process.exit(1);
100
+ }
101
+ else if (fixable.length > 0 && !options.fix) {
102
+ logger.log(chalk_1.default.gray(`💡 Run with --fix to automatically fix ${fixable.length} issue${fixable.length > 1 ? 's' : ''}\n`));
103
+ }
104
+ // Summary
105
+ logger.log(chalk_1.default.gray('─'.repeat(60)));
106
+ logger.log(chalk_1.default.gray(`Total: ${result.issues.length} issue${result.issues.length > 1 ? 's' : ''} found`));
107
+ if (fixable.length > 0 && !options.fix) {
108
+ logger.log(chalk_1.default.gray(` ${fixable.length} fixable with --fix`));
109
+ }
110
+ logger.log('');
111
+ // Exit with error code in check mode
112
+ if (options.check) {
113
+ if (errors.length > 0 || warnings.length > 0) {
114
+ throw new cli_error_1.CLIError('Lint check failed', errorHandler_1.ExitCode.USER_ERROR);
118
115
  }
119
- // Success - don't exit, just return
120
116
  }
121
- catch (error) {
122
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : String(error));
123
- process.exit(1);
117
+ // Normal mode: only exit 1 on errors (not warnings)
118
+ if (errors.length > 0) {
119
+ throw new cli_error_1.CLIError('Lint failed with errors', errorHandler_1.ExitCode.USER_ERROR);
124
120
  }
121
+ return { success: true, issues: result.issues, fixed, fixedCount };
125
122
  }
126
123
  //# sourceMappingURL=lint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
- interface ListOptions {
1
+ import { type Logger } from '../utils/logger';
2
+ export interface ListOptions {
2
3
  file: string;
3
4
  column?: string;
4
5
  tag?: string;
5
6
  }
6
- export declare function listCommand(options: ListOptions): void;
7
- export {};
7
+ export interface ListResult {
8
+ success: true;
9
+ totalTasks: number;
10
+ columnsDisplayed: number;
11
+ }
12
+ /**
13
+ * List tasks from a brainfile.
14
+ * Throws CLIError on failure instead of calling process.exit.
15
+ */
16
+ export declare function listCommand(options: ListOptions, logger?: Logger): ListResult;
8
17
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,QAmE/C"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAE,MAAsB,GAAG,UAAU,CAgE5F"}
@@ -41,82 +41,83 @@ const fs = __importStar(require("fs"));
41
41
  const path = __importStar(require("path"));
42
42
  const core_1 = require("@brainfile/core");
43
43
  const chalk_1 = __importDefault(require("chalk"));
44
- const errorHandler_1 = require("../utils/errorHandler");
45
- function listCommand(options) {
46
- try {
47
- // Resolve file path
48
- const filePath = path.resolve(options.file);
49
- // Check if file exists
50
- if (!fs.existsSync(filePath)) {
51
- (0, errorHandler_1.fileNotFoundError)(filePath);
52
- }
53
- // Read and parse the file
54
- const content = fs.readFileSync(filePath, 'utf-8');
55
- const result = core_1.Brainfile.parseWithErrors(content);
56
- if (!result.board) {
57
- (0, errorHandler_1.parseError)(result.error);
44
+ const logger_1 = require("../utils/logger");
45
+ const cli_error_1 = require("../utils/cli-error");
46
+ /**
47
+ * List tasks from a brainfile.
48
+ * Throws CLIError on failure instead of calling process.exit.
49
+ */
50
+ function listCommand(options, logger = logger_1.defaultLogger) {
51
+ // Resolve file path
52
+ const filePath = path.resolve(options.file);
53
+ // Check if file exists
54
+ if (!fs.existsSync(filePath)) {
55
+ throw (0, cli_error_1.fileNotFound)(filePath);
56
+ }
57
+ // Read and parse the file
58
+ const content = fs.readFileSync(filePath, 'utf-8');
59
+ const result = core_1.Brainfile.parseWithErrors(content);
60
+ if (!result.board) {
61
+ throw (0, cli_error_1.parseFailure)(result.error);
62
+ }
63
+ const board = result.board;
64
+ // Filter columns if specified
65
+ const columns = options.column
66
+ ? board.columns.filter(col => col.id === options.column || col.title === options.column)
67
+ : board.columns;
68
+ if (columns.length === 0) {
69
+ logger.log(chalk_1.default.yellow(`No columns found matching: ${options.column}`));
70
+ return { success: true, totalTasks: 0, columnsDisplayed: 0 };
71
+ }
72
+ // Display board title
73
+ logger.log(chalk_1.default.bold.white(`\n${board.title || 'Brainfile Board'}\n`));
74
+ // Display each column
75
+ for (const column of columns) {
76
+ // Filter tasks by tag if specified
77
+ const tasks = options.tag
78
+ ? column.tasks.filter(task => task.tags?.includes(options.tag))
79
+ : column.tasks;
80
+ if (tasks.length === 0 && options.tag) {
81
+ continue;
58
82
  }
59
- const board = result.board;
60
- // Filter columns if specified
61
- const columns = options.column
62
- ? board.columns.filter(col => col.id === options.column || col.title === options.column)
63
- : board.columns;
64
- if (columns.length === 0) {
65
- console.log(chalk_1.default.yellow(`No columns found matching: ${options.column}`));
66
- return;
83
+ // Column header
84
+ logger.log(chalk_1.default.bold.cyan(`${column.title} (${tasks.length})`));
85
+ logger.log(chalk_1.default.gray('─'.repeat(50)));
86
+ if (tasks.length === 0) {
87
+ logger.log(chalk_1.default.gray(' (no tasks)\n'));
88
+ continue;
67
89
  }
68
- // Display board title
69
- console.log(chalk_1.default.bold.white(`\n${board.title || 'Brainfile Board'}\n`));
70
- // Display each column
71
- for (const column of columns) {
72
- // Filter tasks by tag if specified
73
- const tasks = options.tag
74
- ? column.tasks.filter(task => task.tags?.includes(options.tag))
75
- : column.tasks;
76
- if (tasks.length === 0 && options.tag) {
77
- continue;
78
- }
79
- // Column header
80
- console.log(chalk_1.default.bold.cyan(`${column.title} (${tasks.length})`));
81
- console.log(chalk_1.default.gray('─'.repeat(50)));
82
- if (tasks.length === 0) {
83
- console.log(chalk_1.default.gray(' (no tasks)\n'));
84
- continue;
85
- }
86
- // Display tasks
87
- for (const task of tasks) {
88
- displayTask(task);
89
- }
90
- console.log('');
90
+ // Display tasks
91
+ for (const task of tasks) {
92
+ displayTask(task, logger);
91
93
  }
92
- // Display summary
93
- const totalTasks = board.columns.reduce((sum, col) => sum + col.tasks.length, 0);
94
- console.log(chalk_1.default.gray(`Total tasks: ${totalTasks}`));
95
- }
96
- catch (error) {
97
- (0, errorHandler_1.handleError)(error);
94
+ logger.log('');
98
95
  }
96
+ // Display summary
97
+ const totalTasks = board.columns.reduce((sum, col) => sum + col.tasks.length, 0);
98
+ logger.log(chalk_1.default.gray(`Total tasks: ${totalTasks}`));
99
+ return { success: true, totalTasks, columnsDisplayed: columns.length };
99
100
  }
100
- function displayTask(task) {
101
+ function displayTask(task, logger) {
101
102
  // Task ID and title
102
103
  const idStr = chalk_1.default.gray(`[${task.id}]`);
103
104
  const titleStr = chalk_1.default.white(task.title);
104
- console.log(` ${idStr} ${titleStr}`);
105
+ logger.log(` ${idStr} ${titleStr}`);
105
106
  // Priority
106
107
  if (task.priority) {
107
108
  const priorityColor = task.priority === 'high' ? chalk_1.default.red :
108
109
  task.priority === 'medium' ? chalk_1.default.yellow :
109
110
  chalk_1.default.blue;
110
- console.log(` ${chalk_1.default.gray('Priority:')} ${priorityColor(task.priority)}`);
111
+ logger.log(` ${chalk_1.default.gray('Priority:')} ${priorityColor(task.priority)}`);
111
112
  }
112
113
  // Tags
113
114
  if (task.tags && task.tags.length > 0) {
114
115
  const tagStr = task.tags.map(t => chalk_1.default.cyan(`#${t}`)).join(' ');
115
- console.log(` ${chalk_1.default.gray('Tags:')} ${tagStr}`);
116
+ logger.log(` ${chalk_1.default.gray('Tags:')} ${tagStr}`);
116
117
  }
117
118
  // Template
118
119
  if (task.template) {
119
- console.log(` ${chalk_1.default.gray('Template:')} ${chalk_1.default.magenta(task.template)}`);
120
+ logger.log(` ${chalk_1.default.gray('Template:')} ${chalk_1.default.magenta(task.template)}`);
120
121
  }
121
122
  // Subtasks summary
122
123
  if (task.subtasks && task.subtasks.length > 0) {
@@ -124,8 +125,8 @@ function displayTask(task) {
124
125
  const total = task.subtasks.length;
125
126
  const progressStr = `${completed}/${total}`;
126
127
  const progressColor = completed === total ? chalk_1.default.green : chalk_1.default.yellow;
127
- console.log(` ${chalk_1.default.gray('Subtasks:')} ${progressColor(progressStr)}`);
128
+ logger.log(` ${chalk_1.default.gray('Subtasks:')} ${progressColor(progressStr)}`);
128
129
  }
129
- console.log('');
130
+ logger.log('');
130
131
  }
131
132
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AA2CA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAiDD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAirCnD"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AA4CA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAiDD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBA4vCnD"}
@@ -45,6 +45,7 @@ const config_1 = require("../utils/config");
45
45
  const github_auth_1 = require("../utils/github-auth");
46
46
  const linear_auth_1 = require("../utils/linear-auth");
47
47
  const core_2 = require("@brainfile/core");
48
+ const contractRunner_1 = require("../lib/contractRunner");
48
49
  const archive_1 = require("../utils/archive");
49
50
  function resolveBrainfile(filePath) {
50
51
  return path.resolve(filePath);
@@ -1040,6 +1041,63 @@ async function mcpCommand(options) {
1040
1041
  isError: failureCount > 0 && successCount === 0
1041
1042
  };
1042
1043
  });
1044
+ // ==========================================================================
1045
+ // CONTRACTS
1046
+ // ==========================================================================
1047
+ server.registerTool('contract_pickup', {
1048
+ title: 'Contract Pickup',
1049
+ description: 'Claim a task contract (sets status to in_progress) and return agent context as markdown',
1050
+ inputSchema: {
1051
+ file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
1052
+ task: zod_1.z.string().describe('Task ID to pick up'),
1053
+ }
1054
+ }, async ({ file, task }) => {
1055
+ const filePath = file || defaultFile;
1056
+ const result = (0, contractRunner_1.pickupContract)({ filePath, taskId: task });
1057
+ if ('error' in result) {
1058
+ return { content: [{ type: 'text', text: `Error: ${result.error}` }], isError: true };
1059
+ }
1060
+ return { content: [{ type: 'text', text: result.markdown }] };
1061
+ });
1062
+ server.registerTool('contract_deliver', {
1063
+ title: 'Contract Deliver',
1064
+ description: 'Mark a task contract as delivered (sets status to delivered)',
1065
+ inputSchema: {
1066
+ file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
1067
+ task: zod_1.z.string().describe('Task ID to deliver'),
1068
+ }
1069
+ }, async ({ file, task }) => {
1070
+ const filePath = file || defaultFile;
1071
+ const result = (0, contractRunner_1.deliverContract)({ filePath, taskId: task });
1072
+ if ('error' in result) {
1073
+ return { content: [{ type: 'text', text: `Error: ${result.error}` }], isError: true };
1074
+ }
1075
+ return { content: [{ type: 'text', text: `Contract delivered: ${task}` }] };
1076
+ });
1077
+ server.registerTool('contract_validate', {
1078
+ title: 'Contract Validate',
1079
+ description: 'Validate contract deliverables + commands; sets status to done/failed',
1080
+ inputSchema: {
1081
+ file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
1082
+ task: zod_1.z.string().describe('Task ID to validate'),
1083
+ }
1084
+ }, async ({ file, task }) => {
1085
+ const filePath = file || defaultFile;
1086
+ const result = (0, contractRunner_1.validateContract)({ filePath, taskId: task });
1087
+ if ('error' in result) {
1088
+ return { content: [{ type: 'text', text: `Error: ${result.error}` }], isError: true };
1089
+ }
1090
+ const output = {
1091
+ ok: result.ok,
1092
+ status: result.ok ? 'done' : 'failed',
1093
+ deliverables: result.deliverableChecks,
1094
+ commands: result.commandResults,
1095
+ };
1096
+ return {
1097
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
1098
+ isError: !result.ok
1099
+ };
1100
+ });
1043
1101
  // Connect via stdio
1044
1102
  const transport = new stdio_js_1.StdioServerTransport();
1045
1103
  await server.connect(transport);