brainfile 0.21.2 → 0.22.1
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 +1 -1
- package/dist/__tests__/helpers/mcp-wire.d.ts +2 -0
- package/dist/__tests__/helpers/mcp-wire.d.ts.map +1 -1
- package/dist/__tests__/helpers/mcp-wire.js +4 -2
- package/dist/__tests__/helpers/mcp-wire.js.map +1 -1
- package/dist/chunk-CWUTU5VV.mjs +5585 -0
- package/dist/chunk-L4WSDMK3.mjs +1973 -0
- package/dist/{chunk-7KU2R7QC.mjs → chunk-XFDTTLSW.mjs} +3230 -4322
- package/dist/cli.js +7 -1
- package/dist/cli.mjs +8078 -5357
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +68 -72
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/boards.d.ts +18 -0
- package/dist/commands/boards.d.ts.map +1 -0
- package/dist/commands/boards.js +166 -0
- package/dist/commands/boards.js.map +1 -0
- package/dist/commands/brief.d.ts +17 -11
- package/dist/commands/brief.d.ts.map +1 -1
- package/dist/commands/brief.js +38 -35
- package/dist/commands/brief.js.map +1 -1
- package/dist/commands/check.d.ts +47 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +134 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/columns.d.ts +48 -0
- package/dist/commands/columns.d.ts.map +1 -0
- package/dist/commands/columns.js +132 -0
- package/dist/commands/columns.js.map +1 -0
- package/dist/commands/complete.js +9 -4
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/decide.d.ts +72 -0
- package/dist/commands/decide.d.ts.map +1 -0
- package/dist/commands/decide.js +264 -0
- package/dist/commands/decide.js.map +1 -0
- package/dist/commands/hooks.d.ts +5 -1
- package/dist/commands/hooks.d.ts.map +1 -1
- package/dist/commands/hooks.js +10 -11
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +27 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +127 -20
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +216 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/log.d.ts +51 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +113 -84
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mcp.d.ts +5 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +44 -9
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/memory-index.d.ts +34 -0
- package/dist/commands/memory-index.d.ts.map +1 -0
- package/dist/commands/memory-index.js +135 -0
- package/dist/commands/memory-index.js.map +1 -0
- package/dist/commands/merge-driver.d.ts +1 -15
- package/dist/commands/merge-driver.d.ts.map +1 -1
- package/dist/commands/merge-driver.js +8 -134
- package/dist/commands/merge-driver.js.map +1 -1
- package/dist/commands/migrate-tracked.d.ts +1 -1
- package/dist/commands/migrate-tracked.d.ts.map +1 -1
- package/dist/commands/migrate-tracked.js +21 -10
- package/dist/commands/migrate-tracked.js.map +1 -1
- package/dist/commands/patch.d.ts +23 -4
- package/dist/commands/patch.d.ts.map +1 -1
- package/dist/commands/patch.js +149 -91
- package/dist/commands/patch.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +11 -5
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/schema.d.ts +12 -0
- package/dist/commands/schema.d.ts.map +1 -1
- package/dist/commands/schema.js +28 -10
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/search.d.ts +46 -12
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +89 -44
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +175 -10
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/template.d.ts +2 -0
- package/dist/commands/template.d.ts.map +1 -1
- package/dist/commands/template.js +2 -1
- package/dist/commands/template.js.map +1 -1
- package/dist/commands/types.d.ts +31 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +122 -22
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/where.d.ts +20 -1
- package/dist/commands/where.d.ts.map +1 -1
- package/dist/commands/where.js +56 -6
- package/dist/commands/where.js.map +1 -1
- package/dist/hook.mjs +15 -0
- package/dist/hooks/session-start.d.ts +39 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +181 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/lib/contractRunner.d.ts.map +1 -1
- package/dist/lib/contractRunner.js +8 -0
- package/dist/lib/contractRunner.js.map +1 -1
- package/dist/mcp/helpers.d.ts +29 -1
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +57 -2
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/instructions.d.ts +5 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +57 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/resources.d.ts +9 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +29 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/schemas.d.ts +600 -9
- package/dist/mcp/schemas.d.ts.map +1 -1
- package/dist/mcp/schemas.js +374 -12
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/tools/adr_promote_tool.d.ts +7 -0
- package/dist/mcp/tools/adr_promote_tool.d.ts.map +1 -0
- package/dist/mcp/tools/adr_promote_tool.js +37 -0
- package/dist/mcp/tools/adr_promote_tool.js.map +1 -0
- package/dist/mcp/tools/board_tool.d.ts +7 -0
- package/dist/mcp/tools/board_tool.d.ts.map +1 -0
- package/dist/mcp/tools/board_tool.js +61 -0
- package/dist/mcp/tools/board_tool.js.map +1 -0
- package/dist/mcp/tools/brief_tool.d.ts.map +1 -1
- package/dist/mcp/tools/brief_tool.js +13 -5
- package/dist/mcp/tools/brief_tool.js.map +1 -1
- package/dist/mcp/tools/check_tool.d.ts +6 -0
- package/dist/mcp/tools/check_tool.d.ts.map +1 -0
- package/dist/mcp/tools/check_tool.js +54 -0
- package/dist/mcp/tools/check_tool.js.map +1 -0
- package/dist/mcp/tools/columns_tool.d.ts +7 -0
- package/dist/mcp/tools/columns_tool.d.ts.map +1 -0
- package/dist/mcp/tools/columns_tool.js +94 -0
- package/dist/mcp/tools/columns_tool.js.map +1 -0
- package/dist/mcp/tools/decide_tool.d.ts +91 -0
- package/dist/mcp/tools/decide_tool.d.ts.map +1 -0
- package/dist/mcp/tools/decide_tool.js +141 -0
- package/dist/mcp/tools/decide_tool.js.map +1 -0
- package/dist/mcp/tools/get_task_tool.d.ts.map +1 -1
- package/dist/mcp/tools/get_task_tool.js +62 -4
- package/dist/mcp/tools/get_task_tool.js.map +1 -1
- package/dist/mcp/tools/lint_tool.d.ts +7 -0
- package/dist/mcp/tools/lint_tool.d.ts.map +1 -0
- package/dist/mcp/tools/lint_tool.js +48 -0
- package/dist/mcp/tools/lint_tool.js.map +1 -0
- package/dist/mcp/tools/list_tasks_tool.d.ts.map +1 -1
- package/dist/mcp/tools/list_tasks_tool.js +132 -15
- package/dist/mcp/tools/list_tasks_tool.js.map +1 -1
- package/dist/mcp/tools/log_tool.d.ts +4 -0
- package/dist/mcp/tools/log_tool.d.ts.map +1 -0
- package/dist/mcp/tools/log_tool.js +52 -0
- package/dist/mcp/tools/log_tool.js.map +1 -0
- package/dist/mcp/tools/note_tool.d.ts +7 -0
- package/dist/mcp/tools/note_tool.d.ts.map +1 -0
- package/dist/mcp/tools/note_tool.js +39 -0
- package/dist/mcp/tools/note_tool.js.map +1 -0
- package/dist/mcp/tools/retire_tool.d.ts +4 -0
- package/dist/mcp/tools/retire_tool.d.ts.map +1 -0
- package/dist/mcp/tools/retire_tool.js +81 -0
- package/dist/mcp/tools/retire_tool.js.map +1 -0
- package/dist/mcp/tools/search_tool.d.ts.map +1 -1
- package/dist/mcp/tools/search_tool.js +36 -19
- package/dist/mcp/tools/search_tool.js.map +1 -1
- package/dist/mcp/tools/supersede_tool.d.ts +4 -0
- package/dist/mcp/tools/supersede_tool.d.ts.map +1 -0
- package/dist/mcp/tools/supersede_tool.js +72 -0
- package/dist/mcp/tools/supersede_tool.js.map +1 -0
- package/dist/mcp/tools/sync_tool.d.ts +9 -0
- package/dist/mcp/tools/sync_tool.d.ts.map +1 -0
- package/dist/mcp/tools/sync_tool.js +87 -0
- package/dist/mcp/tools/sync_tool.js.map +1 -0
- package/dist/mcp/tools/task_add_tool.d.ts.map +1 -1
- package/dist/mcp/tools/task_add_tool.js +39 -17
- 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 +3 -2
- package/dist/mcp/tools/task_complete_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 +30 -5
- package/dist/mcp/tools/task_patch_tool.js.map +1 -1
- package/dist/mcp/tools/template_tool.d.ts +4 -0
- package/dist/mcp/tools/template_tool.d.ts.map +1 -0
- package/dist/mcp/tools/template_tool.js +70 -0
- package/dist/mcp/tools/template_tool.js.map +1 -0
- package/dist/mcp/tools/types_tool.d.ts +4 -0
- package/dist/mcp/tools/types_tool.d.ts.map +1 -0
- package/dist/mcp/tools/types_tool.js +61 -0
- package/dist/mcp/tools/types_tool.js.map +1 -0
- package/dist/mcp/tools/where_tool.d.ts +4 -0
- package/dist/mcp/tools/where_tool.d.ts.map +1 -0
- package/dist/mcp/tools/where_tool.js +73 -0
- package/dist/mcp/tools/where_tool.js.map +1 -0
- package/dist/schemas/board.json +29 -8
- package/dist/{tui-3Z7ZJV7M.mjs → tui-D6RMFL6X.mjs} +994 -315
- package/dist/utils/board-autosync.d.ts +1 -10
- package/dist/utils/board-autosync.d.ts.map +1 -1
- package/dist/utils/board-autosync.js +11 -29
- package/dist/utils/board-autosync.js.map +1 -1
- package/dist/utils/board-commit-hooks.d.ts +8 -0
- package/dist/utils/board-commit-hooks.d.ts.map +1 -1
- package/dist/utils/board-commit-hooks.js +45 -1
- package/dist/utils/board-commit-hooks.js.map +1 -1
- package/dist/utils/board-repo.d.ts +1 -119
- package/dist/utils/board-repo.d.ts.map +1 -1
- package/dist/utils/board-repo.js +43 -571
- package/dist/utils/board-repo.js.map +1 -1
- package/dist/utils/board-sync.d.ts +3 -123
- package/dist/utils/board-sync.d.ts.map +1 -1
- package/dist/utils/board-sync.js +34 -551
- package/dist/utils/board-sync.js.map +1 -1
- package/dist/utils/graph.d.ts +20 -0
- package/dist/utils/graph.d.ts.map +1 -0
- package/dist/utils/graph.js +61 -0
- package/dist/utils/graph.js.map +1 -0
- package/dist/utils/related.d.ts +21 -0
- package/dist/utils/related.d.ts.map +1 -0
- package/dist/utils/related.js +36 -0
- package/dist/utils/related.js.map +1 -0
- package/package.json +2 -2
- package/dist/tui/theme.d.ts +0 -98
- package/dist/tui/theme.d.ts.map +0 -1
- package/dist/tui/theme.js +0 -141
- package/dist/tui/theme.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_task_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_task_tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_task_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_task_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
/**
|
|
3
|
+
* `lint`: check the board, and fix what the CLI can, like `brainfile lint`.
|
|
4
|
+
* Issues are a result, not an error: the call succeeds with valid: false.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerLintTool(server: McpServer, defaultFile: string): void;
|
|
7
|
+
//# sourceMappingURL=lint_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/lint_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAM9D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqC7E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerLintTool = registerLintTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const lint_1 = require("../../commands/lint");
|
|
6
|
+
const helpers_1 = require("../helpers");
|
|
7
|
+
const schemas_1 = require("../schemas");
|
|
8
|
+
/**
|
|
9
|
+
* `lint`: check the board, and fix what the CLI can, like `brainfile lint`.
|
|
10
|
+
* Issues are a result, not an error: the call succeeds with valid: false.
|
|
11
|
+
*/
|
|
12
|
+
function registerLintTool(server, defaultFile) {
|
|
13
|
+
server.registerTool('lint', {
|
|
14
|
+
title: 'Lint Board',
|
|
15
|
+
description: 'Check the board: the config\'s YAML and shape, columns, types, dependsOn references to related boards, and the graph (missing or looping parents, off-pattern links, decisions: naming nothing or a non-decision). fix: true rewrites what can be fixed (quoting, a legacy rules: block). valid is false when there are errors; warnings do not count.',
|
|
16
|
+
inputSchema: zod_1.z.object({
|
|
17
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
18
|
+
fix: zod_1.z.boolean().optional().describe('Fix what can be fixed'),
|
|
19
|
+
}),
|
|
20
|
+
outputSchema: schemas_1.lintOutputSchema,
|
|
21
|
+
}, (0, helpers_1.withBoardCommit)('lint', defaultFile, async ({ file, fix }) => {
|
|
22
|
+
const filePath = file || defaultFile;
|
|
23
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
24
|
+
if (guard)
|
|
25
|
+
return guard;
|
|
26
|
+
try {
|
|
27
|
+
const report = (0, lint_1.lintBoard)((0, helpers_1.resolveBrainfile)(filePath), { fix: fix === true });
|
|
28
|
+
const output = {
|
|
29
|
+
valid: report.errors.length === 0,
|
|
30
|
+
issues: report.issues,
|
|
31
|
+
errorCount: report.errors.length,
|
|
32
|
+
warningCount: report.warnings.length,
|
|
33
|
+
fixableCount: report.fixable.length,
|
|
34
|
+
fixed: report.fixed,
|
|
35
|
+
fixedCount: report.fixedCount,
|
|
36
|
+
remaining: report.remaining,
|
|
37
|
+
};
|
|
38
|
+
const head = report.issues.length === 0
|
|
39
|
+
? 'No issues found'
|
|
40
|
+
: `${output.errorCount} error${output.errorCount === 1 ? '' : 's'}, ${output.warningCount} warning${output.warningCount === 1 ? '' : 's'}${report.fixed ? `; fixed ${report.fixedCount}` : output.fixableCount > 0 ? `; ${output.fixableCount} fixable with fix: true` : ''}`;
|
|
41
|
+
return (0, helpers_1.mcpResult)(`${head}\n\n${JSON.stringify(output, null, 2)}`, output);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return (0, helpers_1.mcpErrorFrom)(error);
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=lint_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/lint_tool.ts"],"names":[],"mappings":";;AAUA,4CAqCC;AA9CD,6BAAwB;AACxB,8CAAgD;AAChD,wCAAmG;AACnG,wCAA8C;AAE9C;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,WAAmB;IACrE,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wVAAwV;QACrW,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACpF,GAAG,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAC9D,CAAC;QACF,YAAY,EAAE,0BAAgB;KAC/B,EACD,IAAA,yBAAe,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;QAC3D,MAAM,QAAQ,GAAG,IAAI,IAAI,WAAW,CAAC;QACrC,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAA,0BAAgB,EAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;gBAChC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;gBACpC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBACrC,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,SAAS,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,YAAY,WAAW,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChR,OAAO,IAAA,mBAAS,EAAC,GAAG,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,sBAAY,EAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_tasks_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list_tasks_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"list_tasks_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list_tasks_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AA6B9D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAwGlF"}
|
|
@@ -1,51 +1,168 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.registerListTasksTool = registerListTasksTool;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
4
38
|
const zod_1 = require("zod");
|
|
39
|
+
const core_1 = require("@brainfile/core");
|
|
40
|
+
const repo_1 = require("@brainfile/core/repo");
|
|
5
41
|
const v2_detect_1 = require("../../utils/v2-detect");
|
|
42
|
+
const graph_1 = require("../../utils/graph");
|
|
6
43
|
const helpers_1 = require("../helpers");
|
|
7
44
|
const schemas_1 = require("../schemas");
|
|
8
45
|
function registerListTasksTool(server, defaultFile) {
|
|
9
46
|
server.registerTool('list_tasks', {
|
|
10
47
|
title: 'List Tasks',
|
|
11
|
-
description: 'List
|
|
48
|
+
description: 'List board documents (epics, specs, plans, tasks and the board\'s own types), optionally filtered by column, tag, type or status; aliases work (issue is task, adr is decision). Decisions have no column and are left out unless type names them (type:"decision"). tree:true also returns the outline: open work nested by parentId, in reading order with depth.',
|
|
12
49
|
inputSchema: zod_1.z.object({
|
|
13
50
|
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
14
51
|
column: zod_1.z.string().optional().describe('Filter by column ID or name'),
|
|
15
52
|
tag: zod_1.z.string().optional().describe('Filter by tag'),
|
|
16
|
-
type: zod_1.z.string().optional().describe('Filter by document type (e.g
|
|
53
|
+
type: zod_1.z.string().optional().describe('Filter by document type (e.g. epic, spec, plan, task, decision; aliases issue and adr work). type:"decision" lists decisions, which are otherwise left out.'),
|
|
54
|
+
status: zod_1.z.string().optional().describe('Filter by status: a plan\'s free-form status (draft, active, superseded) or, with type:"decision", current, superseded, rejected or stale'),
|
|
55
|
+
tree: zod_1.z.boolean().optional().describe('Also return tree: the containment outline of open work (epic ▸ spec · plan · task), each entry with depth, parentId and children IDs, in reading order.'),
|
|
56
|
+
related: zod_1.z.union([zod_1.z.boolean(), zod_1.z.literal('all')]).optional().describe('Also list open tasks on related boards (related: in brainfile.md): true for the ones this board\'s tasks depend on, "all" for every open task there. Reference them as alias:task-id.'),
|
|
17
57
|
}),
|
|
18
58
|
outputSchema: schemas_1.listTasksOutputSchema
|
|
19
|
-
}, async ({ file, column, tag, type: filterType }) => {
|
|
59
|
+
}, async ({ file, column, tag, type: filterType, status: filterStatus, tree, related }) => {
|
|
20
60
|
const filePath = file || defaultFile;
|
|
21
61
|
const guard = (0, helpers_1.requireV2)(filePath);
|
|
22
62
|
if (guard)
|
|
23
63
|
return guard;
|
|
24
64
|
const board = (0, v2_detect_1.buildBoardFromV2)(filePath);
|
|
65
|
+
const types = board.types;
|
|
66
|
+
const isDecision = (task) => (0, core_1.resolveDocType)(task.type, types).role === 'decision';
|
|
67
|
+
const statusOf = (task) => {
|
|
68
|
+
const value = task.status;
|
|
69
|
+
return typeof value === 'string' ? value : undefined;
|
|
70
|
+
};
|
|
71
|
+
const summarize = (task, columnId) => ({
|
|
72
|
+
id: task.id,
|
|
73
|
+
title: task.title,
|
|
74
|
+
column: columnId,
|
|
75
|
+
...(task.type ? { type: task.type } : {}),
|
|
76
|
+
...(typeof task.parentId === 'string' && task.parentId ? { parentId: task.parentId } : {}),
|
|
77
|
+
// A plan's free-form status (draft, active, …); a decision's is set below.
|
|
78
|
+
...(statusOf(task) ? { status: statusOf(task) } : {}),
|
|
79
|
+
priority: task.priority,
|
|
80
|
+
tags: task.tags,
|
|
81
|
+
assignee: task.assignee,
|
|
82
|
+
});
|
|
83
|
+
const graph = (tree || (filterType && (0, core_1.resolveDocType)(filterType, types).role === 'decision'))
|
|
84
|
+
? (0, graph_1.readOrderedGraph)(filePath, board.columns.map((col) => col.id), types)
|
|
85
|
+
: null;
|
|
25
86
|
const tasks = [];
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (!matchesId && !matchesName)
|
|
87
|
+
if (filterType && (0, core_1.resolveDocType)(filterType, types).role === 'decision') {
|
|
88
|
+
// Decisions have no column: list them on their own, with where they stand.
|
|
89
|
+
for (const task of graph.tasks) {
|
|
90
|
+
if (!isDecision(task) || !(0, core_1.typesMatch)(task.type, filterType))
|
|
31
91
|
continue;
|
|
32
|
-
}
|
|
33
|
-
for (const task of col.tasks) {
|
|
34
92
|
if (tag && (!task.tags || !task.tags.includes(tag)))
|
|
35
93
|
continue;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
94
|
+
tasks.push({
|
|
95
|
+
// A decision has no column; a legacy ADR may still carry one.
|
|
96
|
+
...summarize(task, task.column ?? (task.completedAt ? 'completed' : 'none')),
|
|
97
|
+
status: (0, core_1.decisionStatus)(task),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
for (const col of board.columns) {
|
|
103
|
+
if (column) {
|
|
104
|
+
const matchesId = col.id === column;
|
|
105
|
+
const matchesName = col.title.toLowerCase() === column.toLowerCase();
|
|
106
|
+
if (!matchesId && !matchesName)
|
|
39
107
|
continue;
|
|
40
108
|
}
|
|
41
|
-
|
|
109
|
+
for (const task of col.tasks) {
|
|
110
|
+
if (isDecision(task))
|
|
111
|
+
continue;
|
|
112
|
+
if (tag && (!task.tags || !task.tags.includes(tag)))
|
|
113
|
+
continue;
|
|
114
|
+
if (filterType && !(0, core_1.typesMatch)(task.type, filterType))
|
|
115
|
+
continue;
|
|
116
|
+
tasks.push(summarize(task, col.id));
|
|
117
|
+
}
|
|
42
118
|
}
|
|
43
119
|
}
|
|
44
|
-
const
|
|
120
|
+
const outline = tree && graph
|
|
121
|
+
? (0, core_1.flattenDocTree)(graph.tree()).map((node) => ({
|
|
122
|
+
id: node.task.id,
|
|
123
|
+
title: node.task.title,
|
|
124
|
+
type: node.type.name,
|
|
125
|
+
column: node.task.column ?? 'todo',
|
|
126
|
+
depth: node.depth,
|
|
127
|
+
...(typeof node.task.parentId === 'string' && node.task.parentId ? { parentId: node.task.parentId } : {}),
|
|
128
|
+
children: node.children.map((child) => child.task.id),
|
|
129
|
+
...(node.offPattern ? { offPattern: true } : {}),
|
|
130
|
+
...(node.detachedFrom ? { detachedFrom: node.detachedFrom.id } : {}),
|
|
131
|
+
}))
|
|
132
|
+
: undefined;
|
|
133
|
+
const wanted = filterStatus?.trim().toLowerCase();
|
|
134
|
+
const listed = wanted ? tasks.filter((task) => (task.status ?? '').toLowerCase() === wanted) : tasks;
|
|
135
|
+
const output = {
|
|
136
|
+
tasks: listed,
|
|
137
|
+
count: listed.length,
|
|
138
|
+
...(outline ? { tree: outline } : {}),
|
|
139
|
+
...(related ? { related: listRelated(filePath, related === 'all' ? 'all' : 'depends') } : {}),
|
|
140
|
+
};
|
|
45
141
|
return {
|
|
46
142
|
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
47
143
|
structuredContent: output,
|
|
48
144
|
};
|
|
49
145
|
});
|
|
50
146
|
}
|
|
147
|
+
function listRelated(filePath, mode) {
|
|
148
|
+
return (0, repo_1.relatedBoards)(path.resolve(filePath)).openTasks(mode).map(({ board, tasks, notFound, neededBy }) => ({
|
|
149
|
+
alias: board.alias,
|
|
150
|
+
path: board.path,
|
|
151
|
+
status: board.status,
|
|
152
|
+
note: (0, repo_1.describeRelatedBoard)(board),
|
|
153
|
+
...(board.status === 'found' && board.title ? { title: board.title } : {}),
|
|
154
|
+
tasks: tasks.map((task) => ({
|
|
155
|
+
ref: `${board.alias}:${task.id}`,
|
|
156
|
+
id: task.id,
|
|
157
|
+
title: task.title,
|
|
158
|
+
column: task.column ?? 'todo',
|
|
159
|
+
priority: task.priority,
|
|
160
|
+
tags: task.tags,
|
|
161
|
+
assignee: task.assignee,
|
|
162
|
+
...(neededBy[task.id] ? { neededBy: neededBy[task.id] } : {}),
|
|
163
|
+
})),
|
|
164
|
+
notFound,
|
|
165
|
+
neededBy,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
51
168
|
//# sourceMappingURL=list_tasks_tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_tasks_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/list_tasks_tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list_tasks_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/list_tasks_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/log_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAO9D,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAyC5E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerLogTool = registerLogTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const log_1 = require("../../commands/log");
|
|
6
|
+
const v2_detect_1 = require("../../utils/v2-detect");
|
|
7
|
+
const helpers_1 = require("../helpers");
|
|
8
|
+
const schemas_1 = require("../schemas");
|
|
9
|
+
/** `log`: read completed work, like the CLI's `log`. Read-only. */
|
|
10
|
+
function registerLogTool(server, defaultFile) {
|
|
11
|
+
server.registerTool('log', {
|
|
12
|
+
title: 'Read Logs',
|
|
13
|
+
description: 'Read completed work. task: one task\'s description and log (open or completed). query: search completed tasks (title, description, log) with where each matched. Neither: the most recently completed tasks, ledger-only records included. For search across the board, its history and the project\'s docs, use search.',
|
|
14
|
+
inputSchema: zod_1.z.object({
|
|
15
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
16
|
+
task: zod_1.z.string().optional().describe('A task ID: its description and log'),
|
|
17
|
+
query: zod_1.z.string().optional().describe('Search completed tasks'),
|
|
18
|
+
limit: zod_1.z.number().int().positive().optional().describe('Most entries for search and recent (default 20)'),
|
|
19
|
+
}),
|
|
20
|
+
outputSchema: schemas_1.logOutputSchema,
|
|
21
|
+
}, async ({ file, task, query, limit }) => {
|
|
22
|
+
const filePath = file || defaultFile;
|
|
23
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
24
|
+
if (guard)
|
|
25
|
+
return guard;
|
|
26
|
+
if (task && query)
|
|
27
|
+
return (0, helpers_1.mcpError)('give task or query, not both');
|
|
28
|
+
const dirs = (0, v2_detect_1.getV2Dirs)(filePath);
|
|
29
|
+
const max = limit ?? 20;
|
|
30
|
+
try {
|
|
31
|
+
if (task) {
|
|
32
|
+
const view = (0, log_1.readTaskLog)(dirs, task);
|
|
33
|
+
const head = `${view.id}: ${view.title}${view.completedAt ? ` (completed ${view.completedAt})` : ''}`;
|
|
34
|
+
return (0, helpers_1.mcpResult)(`${head}\n\n${view.log ?? '(no log entries)'}`, { mode: 'task', task: view });
|
|
35
|
+
}
|
|
36
|
+
if (query !== undefined) {
|
|
37
|
+
if (!query.trim())
|
|
38
|
+
return (0, helpers_1.mcpError)('query is empty');
|
|
39
|
+
const matches = (0, log_1.searchLogEntries)(dirs, query.trim());
|
|
40
|
+
const output = { mode: 'search', query: query.trim(), entries: matches.slice(0, max), count: matches.length };
|
|
41
|
+
return (0, helpers_1.mcpResult)(JSON.stringify(output, null, 2), output);
|
|
42
|
+
}
|
|
43
|
+
const entries = (0, log_1.recentLogEntries)(dirs);
|
|
44
|
+
const output = { mode: 'recent', entries: entries.slice(0, max), count: entries.length };
|
|
45
|
+
return (0, helpers_1.mcpResult)(JSON.stringify(output, null, 2), output);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return (0, helpers_1.mcpErrorFrom)(error);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=log_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/log_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
/**
|
|
3
|
+
* `note`: append a timestamped line to a task's log, attributed like the
|
|
4
|
+
* CLI's `note` (agent, else the detected agent, else the git user).
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerNoteTool(server: McpServer, defaultFile: string): void;
|
|
7
|
+
//# sourceMappingURL=note_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/note_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAM9D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA2B7E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerNoteTool = registerNoteTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const log_1 = require("../../commands/log");
|
|
6
|
+
const helpers_1 = require("../helpers");
|
|
7
|
+
const schemas_1 = require("../schemas");
|
|
8
|
+
/**
|
|
9
|
+
* `note`: append a timestamped line to a task's log, attributed like the
|
|
10
|
+
* CLI's `note` (agent, else the detected agent, else the git user).
|
|
11
|
+
*/
|
|
12
|
+
function registerNoteTool(server, defaultFile) {
|
|
13
|
+
server.registerTool('note', {
|
|
14
|
+
title: 'Add Note',
|
|
15
|
+
description: 'Append a timestamped line to a task\'s log (its ## Log section): what you found, decided or did while working on it. Works on open and completed tasks. Attributed to agent, else the agent running the server, else the git user. Notes become the ledger summary when the task completes.',
|
|
16
|
+
inputSchema: zod_1.z.object({
|
|
17
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
18
|
+
task: zod_1.z.string().describe('Task ID'),
|
|
19
|
+
message: zod_1.z.string().describe('The note: one line is best'),
|
|
20
|
+
agent: zod_1.z.string().optional().describe('Who wrote it (default: the detected agent, else the git user)'),
|
|
21
|
+
}),
|
|
22
|
+
outputSchema: schemas_1.noteOutputSchema,
|
|
23
|
+
}, (0, helpers_1.withBoardCommit)('note', defaultFile, async ({ file, task, message, agent }) => {
|
|
24
|
+
const filePath = file || defaultFile;
|
|
25
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
26
|
+
if (guard)
|
|
27
|
+
return guard;
|
|
28
|
+
if (!message.trim())
|
|
29
|
+
return (0, helpers_1.mcpError)('message is required');
|
|
30
|
+
try {
|
|
31
|
+
const note = (0, log_1.appendTaskNote)((0, helpers_1.resolveBrainfile)(filePath), task, message.trim(), agent);
|
|
32
|
+
return (0, helpers_1.mcpResult)(`Note added to ${note.taskId}\n${note.entry}`, { ...note });
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return (0, helpers_1.mcpErrorFrom)(error);
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=note_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/note_tool.ts"],"names":[],"mappings":";;AAUA,4CA2BC;AApCD,6BAAwB;AACxB,4CAAoD;AACpD,wCAA6G;AAC7G,wCAA8C;AAE9C;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,WAAmB;IACrE,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,6RAA6R;QAC1S,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACpF,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACpC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SACvG,CAAC;QACF,YAAY,EAAE,0BAAgB;KAC/B,EACD,IAAA,yBAAe,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,IAAI,IAAI,WAAW,CAAC;QACrC,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,IAAA,kBAAQ,EAAC,qBAAqB,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,oBAAc,EAAC,IAAA,0BAAgB,EAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YACrF,OAAO,IAAA,mBAAS,EAAC,iBAAiB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,sBAAY,EAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
/** `retire`: mark a decision rejected or stale and move it to logs/, like `brainfile retire`. */
|
|
3
|
+
export declare function registerRetireTool(server: McpServer, defaultFile: string): void;
|
|
4
|
+
//# sourceMappingURL=retire_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retire_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/retire_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAS9D,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqC/E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerRetireTool = registerRetireTool;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const zod_1 = require("zod");
|
|
39
|
+
const core_1 = require("@brainfile/core");
|
|
40
|
+
const v2_detect_1 = require("../../utils/v2-detect");
|
|
41
|
+
const actor_1 = require("../../utils/actor");
|
|
42
|
+
const helpers_1 = require("../helpers");
|
|
43
|
+
const schemas_1 = require("../schemas");
|
|
44
|
+
/** `retire`: mark a decision rejected or stale and move it to logs/, like `brainfile retire`. */
|
|
45
|
+
function registerRetireTool(server, defaultFile) {
|
|
46
|
+
server.registerTool('retire', {
|
|
47
|
+
title: 'Retire Decision',
|
|
48
|
+
description: 'Mark a decision rejected (it was turned down) or stale (it no longer applies) and move it to logs/, with an optional note on why. No ledger record: a decision is not completed work. To replace a decision with a new one, use supersede.',
|
|
49
|
+
inputSchema: zod_1.z.object({
|
|
50
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
51
|
+
taskId: zod_1.z.string().describe('The decision to retire, e.g. decision-4'),
|
|
52
|
+
as: zod_1.z.enum(['rejected', 'stale']).describe('Its new status'),
|
|
53
|
+
note: zod_1.z.string().optional().describe('Why, written on the decision\'s log'),
|
|
54
|
+
agent: zod_1.z.string().optional().describe('Who is retiring it (default: the detected agent, else the git user)'),
|
|
55
|
+
}),
|
|
56
|
+
outputSchema: schemas_1.retireOutputSchema,
|
|
57
|
+
}, (0, helpers_1.withBoardCommit)('retire', defaultFile, async ({ file, taskId, as: status, note, agent }) => {
|
|
58
|
+
const filePath = file || defaultFile;
|
|
59
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
60
|
+
if (guard)
|
|
61
|
+
return guard;
|
|
62
|
+
const resolved = (0, helpers_1.resolveBrainfile)(filePath);
|
|
63
|
+
const who = agent?.trim() || (0, actor_1.resolveActor)(path.dirname(resolved))?.name;
|
|
64
|
+
const result = (0, core_1.retireDecisionFile)((0, v2_detect_1.ensureV2Dirs)(resolved), taskId, status, {
|
|
65
|
+
types: (0, core_1.readBoardConfig)(resolved)?.config.types,
|
|
66
|
+
...(note?.trim() ? { note: note.trim() } : {}),
|
|
67
|
+
...(who ? { agent: who } : {}),
|
|
68
|
+
});
|
|
69
|
+
if (!result.success || !result.task || !result.filePath)
|
|
70
|
+
return (0, helpers_1.mcpError)(result.error ?? `Could not retire ${taskId}`);
|
|
71
|
+
const projectRoot = path.dirname(path.dirname(resolved));
|
|
72
|
+
const output = {
|
|
73
|
+
decision: {
|
|
74
|
+
...(0, core_1.summarizeDecision)(result.task),
|
|
75
|
+
path: path.relative(projectRoot, result.filePath).split(path.sep).join('/'),
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
return (0, helpers_1.mcpResult)(`Retired ${taskId} as ${status} (moved to logs/): ${result.task.title}`, output);
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=retire_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retire_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/retire_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"search_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAa9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAsG/E"}
|