brainfile 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -24
- package/dist/__tests__/helpers/mcp-wire.d.ts +45 -0
- package/dist/__tests__/helpers/mcp-wire.d.ts.map +1 -0
- package/dist/__tests__/helpers/mcp-wire.js +133 -0
- package/dist/__tests__/helpers/mcp-wire.js.map +1 -0
- package/dist/{chunk-YTFLC673.mjs → chunk-UOCQBEEW.mjs} +1486 -992
- package/dist/cli.mjs +916 -776
- package/dist/commands/adr.d.ts +1 -9
- package/dist/commands/adr.d.ts.map +1 -1
- package/dist/commands/adr.js +11 -88
- package/dist/commands/adr.js.map +1 -1
- package/dist/commands/archive.d.ts +2 -5
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +43 -11
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/brief.d.ts +31 -0
- package/dist/commands/brief.d.ts.map +1 -0
- package/dist/commands/brief.js +151 -0
- package/dist/commands/brief.js.map +1 -0
- package/dist/commands/complete.js +1 -1
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/log.js +31 -18
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +28 -17
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate.js +10 -12
- package/dist/commands/migrate.js.map +1 -1
- package/dist/mcp/schemas.d.ts +297 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +328 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/tools/brief_tool.d.ts +14 -0
- package/dist/mcp/tools/brief_tool.d.ts.map +1 -0
- package/dist/mcp/tools/brief_tool.js +58 -0
- package/dist/mcp/tools/brief_tool.js.map +1 -0
- package/dist/mcp/tools/contract_tool.d.ts.map +1 -1
- package/dist/mcp/tools/contract_tool.js +37 -13
- package/dist/mcp/tools/contract_tool.js.map +1 -1
- package/dist/mcp/tools/get_task_tool.d.ts.map +1 -1
- package/dist/mcp/tools/get_task_tool.js +7 -2
- package/dist/mcp/tools/get_task_tool.js.map +1 -1
- package/dist/mcp/tools/list_tasks_tool.d.ts.map +1 -1
- package/dist/mcp/tools/list_tasks_tool.js +9 -3
- package/dist/mcp/tools/list_tasks_tool.js.map +1 -1
- package/dist/mcp/tools/search_tool.d.ts.map +1 -1
- package/dist/mcp/tools/search_tool.js +17 -4
- package/dist/mcp/tools/search_tool.js.map +1 -1
- package/dist/mcp/tools/subtask_tool.d.ts.map +1 -1
- package/dist/mcp/tools/subtask_tool.js +47 -13
- package/dist/mcp/tools/subtask_tool.js.map +1 -1
- package/dist/mcp/tools/task_add_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_add_tool.js +7 -2
- package/dist/mcp/tools/task_add_tool.js.map +1 -1
- package/dist/mcp/tools/task_complete_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_complete_tool.js +34 -6
- package/dist/mcp/tools/task_complete_tool.js.map +1 -1
- package/dist/mcp/tools/task_delete_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_delete_tool.js +7 -2
- package/dist/mcp/tools/task_delete_tool.js.map +1 -1
- package/dist/mcp/tools/task_move_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_move_tool.js +15 -6
- package/dist/mcp/tools/task_move_tool.js.map +1 -1
- package/dist/mcp/tools/task_patch_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_patch_tool.js +18 -6
- package/dist/mcp/tools/task_patch_tool.js.map +1 -1
- package/dist/schemas/board.json +1 -1
- package/dist/tui/theme.d.ts +98 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +141 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/{tui-P56H4X7N.mjs → tui-H3RI22S4.mjs} +1593 -1934
- package/dist/utils/cli-error.d.ts +20 -0
- package/dist/utils/cli-error.d.ts.map +1 -1
- package/dist/utils/cli-error.js +36 -0
- package/dist/utils/cli-error.js.map +1 -1
- package/package.json +3 -3
- package/dist/commands/rules.d.ts +0 -68
- package/dist/commands/rules.d.ts.map +0 -1
- package/dist/commands/rules.js +0 -322
- package/dist/commands/rules.js.map +0 -1
|
@@ -41,4 +41,24 @@ export declare function subtaskNotFound(subtaskId: string, availableSubtasks?: s
|
|
|
41
41
|
* Create a CLIError for validation errors.
|
|
42
42
|
*/
|
|
43
43
|
export declare function validationError(message: string): CLIError;
|
|
44
|
+
/**
|
|
45
|
+
* Renders a failure that escaped a command and exits.
|
|
46
|
+
*
|
|
47
|
+
* This is the CLI's outermost error boundary, wired to `program.parseAsync()`
|
|
48
|
+
* in cli.ts. Commands throw `CLIError` rather than exiting themselves, and
|
|
49
|
+
* nothing used to catch those throws — so a missing `--task` surfaced as
|
|
50
|
+
* Node's raw uncaught-exception stack trace instead of the message and usage
|
|
51
|
+
* hint the error already carried.
|
|
52
|
+
*
|
|
53
|
+
* Two branches, deliberately:
|
|
54
|
+
*
|
|
55
|
+
* - `CLIError` is an expected, user-facing failure: print the message and its
|
|
56
|
+
* usage `details`, exit with the code the error carries, and show no stack
|
|
57
|
+
* (a stack tells the user nothing about a missing flag).
|
|
58
|
+
* - Anything else is a genuine bug: print the real stack, unmodified, and
|
|
59
|
+
* exit 1. This is what Node already printed, just under our control so the
|
|
60
|
+
* exit code is deterministic rather than depending on Node's
|
|
61
|
+
* version-specific unhandled-rejection default.
|
|
62
|
+
*/
|
|
63
|
+
export declare function renderCliError(error: unknown): never;
|
|
44
64
|
//# sourceMappingURL=cli-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-error.d.ts","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-error.d.ts","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAC/B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAkC,EAAE,OAAO,CAAC,EAAE,MAAM;CAM9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAMvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAOrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAMvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,QAAQ,CAOrF;AACD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO,GAAG,QAAQ,CAMpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,EAAO,GAAG,QAAQ,CAM7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEzD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAYpD"}
|
package/dist/utils/cli-error.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.CLIError = void 0;
|
|
4
7
|
exports.fileNotFound = fileNotFound;
|
|
@@ -9,6 +12,8 @@ exports.columnNotFound = columnNotFound;
|
|
|
9
12
|
exports.taskNotFound = taskNotFound;
|
|
10
13
|
exports.subtaskNotFound = subtaskNotFound;
|
|
11
14
|
exports.validationError = validationError;
|
|
15
|
+
exports.renderCliError = renderCliError;
|
|
16
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
17
|
const errorHandler_1 = require("./errorHandler");
|
|
13
18
|
/**
|
|
14
19
|
* Custom error class for CLI errors.
|
|
@@ -82,4 +87,35 @@ function subtaskNotFound(subtaskId, availableSubtasks = []) {
|
|
|
82
87
|
function validationError(message) {
|
|
83
88
|
return new CLIError(`Validation error: ${message}`, errorHandler_1.ExitCode.USER_ERROR);
|
|
84
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Renders a failure that escaped a command and exits.
|
|
92
|
+
*
|
|
93
|
+
* This is the CLI's outermost error boundary, wired to `program.parseAsync()`
|
|
94
|
+
* in cli.ts. Commands throw `CLIError` rather than exiting themselves, and
|
|
95
|
+
* nothing used to catch those throws — so a missing `--task` surfaced as
|
|
96
|
+
* Node's raw uncaught-exception stack trace instead of the message and usage
|
|
97
|
+
* hint the error already carried.
|
|
98
|
+
*
|
|
99
|
+
* Two branches, deliberately:
|
|
100
|
+
*
|
|
101
|
+
* - `CLIError` is an expected, user-facing failure: print the message and its
|
|
102
|
+
* usage `details`, exit with the code the error carries, and show no stack
|
|
103
|
+
* (a stack tells the user nothing about a missing flag).
|
|
104
|
+
* - Anything else is a genuine bug: print the real stack, unmodified, and
|
|
105
|
+
* exit 1. This is what Node already printed, just under our control so the
|
|
106
|
+
* exit code is deterministic rather than depending on Node's
|
|
107
|
+
* version-specific unhandled-rejection default.
|
|
108
|
+
*/
|
|
109
|
+
function renderCliError(error) {
|
|
110
|
+
if (error instanceof CLIError) {
|
|
111
|
+
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
112
|
+
if (error.details) {
|
|
113
|
+
console.error('');
|
|
114
|
+
console.error(chalk_1.default.gray(error.details));
|
|
115
|
+
}
|
|
116
|
+
process.exit(error.exitCode);
|
|
117
|
+
}
|
|
118
|
+
console.error(error instanceof Error ? error.stack : String(error));
|
|
119
|
+
process.exit(errorHandler_1.ExitCode.USER_ERROR);
|
|
120
|
+
}
|
|
85
121
|
//# sourceMappingURL=cli-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../../src/utils/cli-error.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brainfile",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Command-line interface for Brainfile task management",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@brainfile/core": "^0.
|
|
40
|
+
"@brainfile/core": "^0.20.0",
|
|
41
41
|
"chalk": "^4.1.2",
|
|
42
42
|
"chokidar": "^4.0.3",
|
|
43
43
|
"commander": "^14.0.3",
|
|
@@ -72,6 +72,6 @@
|
|
|
72
72
|
"dist"
|
|
73
73
|
],
|
|
74
74
|
"engines": {
|
|
75
|
-
"node": ">=
|
|
75
|
+
"node": ">=20"
|
|
76
76
|
}
|
|
77
77
|
}
|
package/dist/commands/rules.d.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rules command for Brainfile CLI
|
|
3
|
-
*
|
|
4
|
-
* Manage project rules (always, never, prefer, context) in brainfile.md.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* brainfile rules # List all rules
|
|
8
|
-
* brainfile rules list # List all rules
|
|
9
|
-
* brainfile rules add <category> <text> # Add a rule
|
|
10
|
-
* brainfile rules delete <category> <id> # Delete a rule by ID
|
|
11
|
-
* brainfile rules --json # Output in JSON format
|
|
12
|
-
*
|
|
13
|
-
* @packageDocumentation
|
|
14
|
-
*/
|
|
15
|
-
import { type Rules, type Rule } from '@brainfile/core';
|
|
16
|
-
import { type Logger } from '../utils/logger';
|
|
17
|
-
export type RuleCategory = 'always' | 'never' | 'prefer' | 'context';
|
|
18
|
-
export interface RulesListOptions {
|
|
19
|
-
file: string;
|
|
20
|
-
json?: boolean;
|
|
21
|
-
category?: RuleCategory;
|
|
22
|
-
}
|
|
23
|
-
export interface RulesAddOptions {
|
|
24
|
-
file: string;
|
|
25
|
-
category: RuleCategory;
|
|
26
|
-
text: string;
|
|
27
|
-
json?: boolean;
|
|
28
|
-
}
|
|
29
|
-
export interface RulesDeleteOptions {
|
|
30
|
-
file: string;
|
|
31
|
-
category: RuleCategory;
|
|
32
|
-
id: number;
|
|
33
|
-
json?: boolean;
|
|
34
|
-
}
|
|
35
|
-
export interface RulesListResult {
|
|
36
|
-
success: true;
|
|
37
|
-
action: 'list';
|
|
38
|
-
rules: Rules;
|
|
39
|
-
totalCount: number;
|
|
40
|
-
}
|
|
41
|
-
export interface RulesAddResult {
|
|
42
|
-
success: true;
|
|
43
|
-
action: 'add';
|
|
44
|
-
category: RuleCategory;
|
|
45
|
-
rule: Rule;
|
|
46
|
-
}
|
|
47
|
-
export interface RulesDeleteResult {
|
|
48
|
-
success: true;
|
|
49
|
-
action: 'delete';
|
|
50
|
-
category: RuleCategory;
|
|
51
|
-
id: number;
|
|
52
|
-
}
|
|
53
|
-
export type RulesResult = RulesListResult | RulesAddResult | RulesDeleteResult;
|
|
54
|
-
export declare const RULES_COMMAND_HELP: string;
|
|
55
|
-
export declare function rulesListCommand(options: RulesListOptions, logger?: Logger): RulesListResult;
|
|
56
|
-
export declare function rulesAddCommand(options: RulesAddOptions, logger?: Logger): RulesAddResult;
|
|
57
|
-
export declare function rulesDeleteCommand(options: RulesDeleteOptions, logger?: Logger): RulesDeleteResult;
|
|
58
|
-
export interface RulesOptions {
|
|
59
|
-
file: string;
|
|
60
|
-
json?: boolean;
|
|
61
|
-
category?: string;
|
|
62
|
-
addCategory?: string;
|
|
63
|
-
addText?: string;
|
|
64
|
-
deleteCategory?: string;
|
|
65
|
-
deleteId?: string;
|
|
66
|
-
}
|
|
67
|
-
export declare function rulesCommand(action: 'list' | 'add' | 'delete' | undefined, args: string[], options: RulesOptions, logger?: Logger): RulesResult;
|
|
68
|
-
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/commands/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAIL,KAAK,KAAK,EACV,KAAK,IAAI,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAS7D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAmB/E,eAAO,MAAM,kBAAkB,QAsBpB,CAAC;AA6DZ,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,GAAE,MAAsB,GAC7B,eAAe,CAqDjB;AAmBD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,MAAsB,GAC7B,cAAc,CAyChB;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,GAAE,MAAsB,GAC7B,iBAAiB,CAoDnB;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,EAC7C,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,EACrB,MAAM,GAAE,MAAsB,GAC7B,WAAW,CAyEb"}
|
package/dist/commands/rules.js
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Rules command for Brainfile CLI
|
|
4
|
-
*
|
|
5
|
-
* Manage project rules (always, never, prefer, context) in brainfile.md.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* brainfile rules # List all rules
|
|
9
|
-
* brainfile rules list # List all rules
|
|
10
|
-
* brainfile rules add <category> <text> # Add a rule
|
|
11
|
-
* brainfile rules delete <category> <id> # Delete a rule by ID
|
|
12
|
-
* brainfile rules --json # Output in JSON format
|
|
13
|
-
*
|
|
14
|
-
* @packageDocumentation
|
|
15
|
-
*/
|
|
16
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
-
}
|
|
22
|
-
Object.defineProperty(o, k2, desc);
|
|
23
|
-
}) : (function(o, m, k, k2) {
|
|
24
|
-
if (k2 === undefined) k2 = k;
|
|
25
|
-
o[k2] = m[k];
|
|
26
|
-
}));
|
|
27
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
-
}) : function(o, v) {
|
|
30
|
-
o["default"] = v;
|
|
31
|
-
});
|
|
32
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
-
var ownKeys = function(o) {
|
|
34
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
-
var ar = [];
|
|
36
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
-
return ar;
|
|
38
|
-
};
|
|
39
|
-
return ownKeys(o);
|
|
40
|
-
};
|
|
41
|
-
return function (mod) {
|
|
42
|
-
if (mod && mod.__esModule) return mod;
|
|
43
|
-
var result = {};
|
|
44
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
-
__setModuleDefault(result, mod);
|
|
46
|
-
return result;
|
|
47
|
-
};
|
|
48
|
-
})();
|
|
49
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
-
};
|
|
52
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.RULES_COMMAND_HELP = void 0;
|
|
54
|
-
exports.rulesListCommand = rulesListCommand;
|
|
55
|
-
exports.rulesAddCommand = rulesAddCommand;
|
|
56
|
-
exports.rulesDeleteCommand = rulesDeleteCommand;
|
|
57
|
-
exports.rulesCommand = rulesCommand;
|
|
58
|
-
const fs = __importStar(require("fs"));
|
|
59
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
60
|
-
const core_1 = require("@brainfile/core");
|
|
61
|
-
const logger_1 = require("../utils/logger");
|
|
62
|
-
const cli_error_1 = require("../utils/cli-error");
|
|
63
|
-
const errorHandler_1 = require("../utils/errorHandler");
|
|
64
|
-
const brainfile_path_1 = require("../utils/brainfile-path");
|
|
65
|
-
// ============================================================================
|
|
66
|
-
// Constants
|
|
67
|
-
// ============================================================================
|
|
68
|
-
const VALID_CATEGORIES = ['always', 'never', 'prefer', 'context'];
|
|
69
|
-
const CATEGORY_DESCRIPTIONS = {
|
|
70
|
-
always: 'Rules that must always be followed',
|
|
71
|
-
never: 'Things that should never be done',
|
|
72
|
-
prefer: 'Preferred approaches when applicable',
|
|
73
|
-
context: 'Context-specific guidelines',
|
|
74
|
-
};
|
|
75
|
-
// ============================================================================
|
|
76
|
-
// Help Text
|
|
77
|
-
// ============================================================================
|
|
78
|
-
exports.RULES_COMMAND_HELP = `
|
|
79
|
-
Examples:
|
|
80
|
-
brainfile rules # List all rules
|
|
81
|
-
brainfile rules list # List all rules
|
|
82
|
-
brainfile rules list --category always # List only 'always' rules
|
|
83
|
-
brainfile rules add always "Use TypeScript strict mode"
|
|
84
|
-
brainfile rules add never "Commit .env files"
|
|
85
|
-
brainfile rules add prefer "Functional over imperative style"
|
|
86
|
-
brainfile rules add context "For API routes, use Express middleware"
|
|
87
|
-
brainfile rules delete always 1 # Delete rule with id=1 from 'always'
|
|
88
|
-
brainfile rules --json # Output as JSON
|
|
89
|
-
|
|
90
|
-
Categories:
|
|
91
|
-
always - ${CATEGORY_DESCRIPTIONS.always}
|
|
92
|
-
never - ${CATEGORY_DESCRIPTIONS.never}
|
|
93
|
-
prefer - ${CATEGORY_DESCRIPTIONS.prefer}
|
|
94
|
-
context - ${CATEGORY_DESCRIPTIONS.context}
|
|
95
|
-
|
|
96
|
-
Notes:
|
|
97
|
-
- Rules are stored in brainfile.md frontmatter under the 'rules' field
|
|
98
|
-
- Each rule has an auto-generated numeric ID within its category
|
|
99
|
-
- Rules provide guidance to AI agents working on the project
|
|
100
|
-
`.trimEnd();
|
|
101
|
-
// ============================================================================
|
|
102
|
-
// Helpers
|
|
103
|
-
// ============================================================================
|
|
104
|
-
function validateCategory(category) {
|
|
105
|
-
const lower = category.toLowerCase();
|
|
106
|
-
if (!VALID_CATEGORIES.includes(lower)) {
|
|
107
|
-
throw new cli_error_1.CLIError(`Invalid category: ${category}`, errorHandler_1.ExitCode.USER_ERROR, `Valid categories: ${VALID_CATEGORIES.join(', ')}`);
|
|
108
|
-
}
|
|
109
|
-
return lower;
|
|
110
|
-
}
|
|
111
|
-
function readBoardFromFile(filePath) {
|
|
112
|
-
const resolvedPath = (0, brainfile_path_1.resolveCliBrainfilePath)(filePath);
|
|
113
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
114
|
-
throw new cli_error_1.CLIError(`File not found: ${resolvedPath}`, errorHandler_1.ExitCode.USER_ERROR);
|
|
115
|
-
}
|
|
116
|
-
const content = fs.readFileSync(resolvedPath, 'utf-8');
|
|
117
|
-
const result = core_1.Brainfile.parseWithErrors(content);
|
|
118
|
-
if (!result.board) {
|
|
119
|
-
throw new cli_error_1.CLIError('Failed to parse brainfile', errorHandler_1.ExitCode.USER_ERROR, result.error);
|
|
120
|
-
}
|
|
121
|
-
return { board: result.board, resolvedPath };
|
|
122
|
-
}
|
|
123
|
-
function writeBoard(filePath, board) {
|
|
124
|
-
const content = core_1.Brainfile.serialize(board);
|
|
125
|
-
fs.writeFileSync(filePath, content, 'utf-8');
|
|
126
|
-
}
|
|
127
|
-
function countRules(rules) {
|
|
128
|
-
if (!rules)
|
|
129
|
-
return 0;
|
|
130
|
-
return ((rules.always?.length || 0) +
|
|
131
|
-
(rules.never?.length || 0) +
|
|
132
|
-
(rules.prefer?.length || 0) +
|
|
133
|
-
(rules.context?.length || 0));
|
|
134
|
-
}
|
|
135
|
-
// ============================================================================
|
|
136
|
-
// List Command
|
|
137
|
-
// ============================================================================
|
|
138
|
-
function rulesListCommand(options, logger = logger_1.defaultLogger) {
|
|
139
|
-
const { board } = readBoardFromFile(options.file);
|
|
140
|
-
const rules = board.rules || {};
|
|
141
|
-
const totalCount = countRules(rules);
|
|
142
|
-
// Filter by category if specified
|
|
143
|
-
let displayRules = rules;
|
|
144
|
-
if (options.category) {
|
|
145
|
-
const cat = validateCategory(options.category);
|
|
146
|
-
displayRules = { [cat]: rules[cat] || [] };
|
|
147
|
-
}
|
|
148
|
-
if (options.json) {
|
|
149
|
-
const output = {
|
|
150
|
-
rules: displayRules,
|
|
151
|
-
totalCount: options.category
|
|
152
|
-
? (displayRules[options.category]?.length || 0)
|
|
153
|
-
: totalCount,
|
|
154
|
-
};
|
|
155
|
-
logger.log(JSON.stringify(output, null, 2));
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
if (totalCount === 0) {
|
|
159
|
-
logger.log('');
|
|
160
|
-
logger.log(chalk_1.default.gray('No rules defined.'));
|
|
161
|
-
logger.log(chalk_1.default.gray('Run: brainfile rules add <category> "<rule text>"'));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
logger.log('');
|
|
165
|
-
logger.log(chalk_1.default.bold('Project Rules'));
|
|
166
|
-
logger.log('');
|
|
167
|
-
for (const category of VALID_CATEGORIES) {
|
|
168
|
-
if (options.category && options.category !== category)
|
|
169
|
-
continue;
|
|
170
|
-
const categoryRules = displayRules[category];
|
|
171
|
-
if (!categoryRules || categoryRules.length === 0)
|
|
172
|
-
continue;
|
|
173
|
-
const categoryColor = getCategoryColor(category);
|
|
174
|
-
logger.log(categoryColor(`${category.toUpperCase()}:`));
|
|
175
|
-
for (const rule of categoryRules) {
|
|
176
|
-
logger.log(` ${chalk_1.default.gray(`[${rule.id}]`)} ${rule.rule}`);
|
|
177
|
-
}
|
|
178
|
-
logger.log('');
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
success: true,
|
|
184
|
-
action: 'list',
|
|
185
|
-
rules: displayRules,
|
|
186
|
-
totalCount,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
function getCategoryColor(category) {
|
|
190
|
-
switch (category) {
|
|
191
|
-
case 'always':
|
|
192
|
-
return chalk_1.default.green;
|
|
193
|
-
case 'never':
|
|
194
|
-
return chalk_1.default.red;
|
|
195
|
-
case 'prefer':
|
|
196
|
-
return chalk_1.default.blue;
|
|
197
|
-
case 'context':
|
|
198
|
-
return chalk_1.default.yellow;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
// ============================================================================
|
|
202
|
-
// Add Command
|
|
203
|
-
// ============================================================================
|
|
204
|
-
function rulesAddCommand(options, logger = logger_1.defaultLogger) {
|
|
205
|
-
const category = validateCategory(options.category);
|
|
206
|
-
const { board, resolvedPath } = readBoardFromFile(options.file);
|
|
207
|
-
const result = (0, core_1.addRule)(board, category, options.text);
|
|
208
|
-
if (!result.success || !result.board) {
|
|
209
|
-
throw new cli_error_1.CLIError(result.error || 'Failed to add rule', errorHandler_1.ExitCode.USER_ERROR);
|
|
210
|
-
}
|
|
211
|
-
writeBoard(resolvedPath, result.board);
|
|
212
|
-
// Find the newly added rule (last one in the category)
|
|
213
|
-
const newRules = result.board.rules?.[category] || [];
|
|
214
|
-
const newRule = newRules[newRules.length - 1];
|
|
215
|
-
if (options.json) {
|
|
216
|
-
const output = {
|
|
217
|
-
success: true,
|
|
218
|
-
action: 'add',
|
|
219
|
-
category,
|
|
220
|
-
rule: newRule,
|
|
221
|
-
};
|
|
222
|
-
logger.log(JSON.stringify(output, null, 2));
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
const categoryColor = getCategoryColor(category);
|
|
226
|
-
logger.log('');
|
|
227
|
-
logger.log(`${chalk_1.default.green('+')} Added ${categoryColor(category)} rule: ${chalk_1.default.gray(`[${newRule.id}]`)} ${newRule.rule}`);
|
|
228
|
-
}
|
|
229
|
-
return {
|
|
230
|
-
success: true,
|
|
231
|
-
action: 'add',
|
|
232
|
-
category,
|
|
233
|
-
rule: newRule,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
// ============================================================================
|
|
237
|
-
// Delete Command
|
|
238
|
-
// ============================================================================
|
|
239
|
-
function rulesDeleteCommand(options, logger = logger_1.defaultLogger) {
|
|
240
|
-
const category = validateCategory(options.category);
|
|
241
|
-
const { board, resolvedPath } = readBoardFromFile(options.file);
|
|
242
|
-
// Find the rule being deleted for the message
|
|
243
|
-
const existingRules = board.rules?.[category] || [];
|
|
244
|
-
const ruleToDelete = existingRules.find((r) => r.id === options.id);
|
|
245
|
-
if (!ruleToDelete) {
|
|
246
|
-
throw new cli_error_1.CLIError(`Rule ${options.id} not found in ${category}`, errorHandler_1.ExitCode.USER_ERROR, existingRules.length > 0
|
|
247
|
-
? `Available IDs in ${category}: ${existingRules.map((r) => r.id).join(', ')}`
|
|
248
|
-
: `No rules in ${category} category`);
|
|
249
|
-
}
|
|
250
|
-
const result = (0, core_1.deleteRule)(board, category, options.id);
|
|
251
|
-
if (!result.success || !result.board) {
|
|
252
|
-
throw new cli_error_1.CLIError(result.error || 'Failed to delete rule', errorHandler_1.ExitCode.USER_ERROR);
|
|
253
|
-
}
|
|
254
|
-
writeBoard(resolvedPath, result.board);
|
|
255
|
-
if (options.json) {
|
|
256
|
-
const output = {
|
|
257
|
-
success: true,
|
|
258
|
-
action: 'delete',
|
|
259
|
-
category,
|
|
260
|
-
id: options.id,
|
|
261
|
-
deletedRule: ruleToDelete,
|
|
262
|
-
};
|
|
263
|
-
logger.log(JSON.stringify(output, null, 2));
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
const categoryColor = getCategoryColor(category);
|
|
267
|
-
logger.log('');
|
|
268
|
-
logger.log(`${chalk_1.default.red('-')} Deleted ${categoryColor(category)} rule: ${chalk_1.default.gray(`[${options.id}]`)} ${ruleToDelete.rule}`);
|
|
269
|
-
}
|
|
270
|
-
return {
|
|
271
|
-
success: true,
|
|
272
|
-
action: 'delete',
|
|
273
|
-
category,
|
|
274
|
-
id: options.id,
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
function rulesCommand(action, args, options, logger = logger_1.defaultLogger) {
|
|
278
|
-
// Default action is list
|
|
279
|
-
const effectiveAction = action || 'list';
|
|
280
|
-
switch (effectiveAction) {
|
|
281
|
-
case 'list':
|
|
282
|
-
return rulesListCommand({
|
|
283
|
-
file: options.file,
|
|
284
|
-
json: options.json,
|
|
285
|
-
category: options.category,
|
|
286
|
-
}, logger);
|
|
287
|
-
case 'add': {
|
|
288
|
-
// args should be [category, ...textParts]
|
|
289
|
-
if (args.length < 2) {
|
|
290
|
-
throw new cli_error_1.CLIError('Usage: brainfile rules add <category> <text>', errorHandler_1.ExitCode.USER_ERROR, `Categories: ${VALID_CATEGORIES.join(', ')}`);
|
|
291
|
-
}
|
|
292
|
-
const [category, ...textParts] = args;
|
|
293
|
-
const text = textParts.join(' ');
|
|
294
|
-
return rulesAddCommand({
|
|
295
|
-
file: options.file,
|
|
296
|
-
category: category,
|
|
297
|
-
text,
|
|
298
|
-
json: options.json,
|
|
299
|
-
}, logger);
|
|
300
|
-
}
|
|
301
|
-
case 'delete': {
|
|
302
|
-
// args should be [category, id]
|
|
303
|
-
if (args.length < 2) {
|
|
304
|
-
throw new cli_error_1.CLIError('Usage: brainfile rules delete <category> <id>', errorHandler_1.ExitCode.USER_ERROR, `Categories: ${VALID_CATEGORIES.join(', ')}`);
|
|
305
|
-
}
|
|
306
|
-
const [category, idStr] = args;
|
|
307
|
-
const id = parseInt(idStr, 10);
|
|
308
|
-
if (isNaN(id)) {
|
|
309
|
-
throw new cli_error_1.CLIError(`Invalid rule ID: ${idStr}`, errorHandler_1.ExitCode.USER_ERROR, 'Rule ID must be a number');
|
|
310
|
-
}
|
|
311
|
-
return rulesDeleteCommand({
|
|
312
|
-
file: options.file,
|
|
313
|
-
category: category,
|
|
314
|
-
id,
|
|
315
|
-
json: options.json,
|
|
316
|
-
}, logger);
|
|
317
|
-
}
|
|
318
|
-
default:
|
|
319
|
-
throw new cli_error_1.CLIError(`Unknown action: ${effectiveAction}`, errorHandler_1.ExitCode.USER_ERROR, 'Valid actions: list, add, delete');
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/commands/rules.ts"],"names":[],"mappings":"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"}
|