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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/board_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/brief_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"brief_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/brief_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAU9D;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA0D9E"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.registerBriefTool = registerBriefTool;
|
|
37
37
|
const zod_1 = require("zod");
|
|
38
38
|
const core_1 = require("@brainfile/core");
|
|
39
|
+
const memory_1 = require("@brainfile/core/memory");
|
|
39
40
|
const v2_detect_1 = require("../../utils/v2-detect");
|
|
40
41
|
const helpers_1 = require("../helpers");
|
|
41
42
|
const schemas_1 = require("../schemas");
|
|
@@ -55,16 +56,19 @@ const path = __importStar(require("path"));
|
|
|
55
56
|
function registerBriefTool(server, defaultFile) {
|
|
56
57
|
server.registerTool('brief', {
|
|
57
58
|
title: 'Agent Brief',
|
|
58
|
-
description: 'Get a per-agent brief
|
|
59
|
-
+ '
|
|
59
|
+
description: 'Get a per-agent brief. text is a budgeted block (maxChars, default 1600) for a session start: '
|
|
60
|
+
+ 'heads up (work resting on a superseded decision, decisions whose predicates broke), current decisions, '
|
|
61
|
+
+ 'your tasks (or the work in flight), what changed since this agent last checked in, and the docs that bear on them. '
|
|
62
|
+
+ 'sections holds the same lanes as data; lanes holds the checkpoint view (first call: full orientation; later: only what is new).',
|
|
60
63
|
inputSchema: zod_1.z.object({
|
|
61
64
|
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
62
65
|
agent: zod_1.z.string().describe('Agent identifier (required — brief state is per-agent)'),
|
|
63
66
|
peek: zod_1.z.boolean().optional().describe('Read the brief without marking it as seen'),
|
|
64
67
|
offline: zod_1.z.boolean().optional().describe('Skip syncing a shared board before the brief'),
|
|
68
|
+
maxChars: zod_1.z.number().int().min(0).optional().describe('Character budget for text (default 1600; 0 for no limit)'),
|
|
65
69
|
}),
|
|
66
70
|
outputSchema: schemas_1.briefOutputSchema,
|
|
67
|
-
}, async ({ file, agent, peek, offline }) => {
|
|
71
|
+
}, async ({ file, agent, peek, offline, maxChars }) => {
|
|
68
72
|
const filePath = file || defaultFile;
|
|
69
73
|
const guard = (0, helpers_1.requireV2)(filePath);
|
|
70
74
|
if (guard)
|
|
@@ -82,11 +86,15 @@ function registerBriefTool(server, defaultFile) {
|
|
|
82
86
|
const dirs = (0, v2_detect_1.getV2Dirs)(resolvedPath);
|
|
83
87
|
const isPeek = peek === true;
|
|
84
88
|
const state = (0, core_1.readBriefState)(resolvedPath, agentName);
|
|
85
|
-
const result = (0,
|
|
89
|
+
const result = (0, memory_1.composeBrief)(dirs, agentName, {
|
|
90
|
+
lastBriefAt: state.lastBriefAt,
|
|
91
|
+
...(maxChars !== undefined ? { maxChars } : {}),
|
|
92
|
+
});
|
|
86
93
|
if (!isPeek) {
|
|
87
94
|
(0, core_1.writeBriefState)(resolvedPath, agentName, result.generatedAt);
|
|
88
95
|
}
|
|
89
|
-
const
|
|
96
|
+
const { docsMode: _docsMode, ...rest } = result;
|
|
97
|
+
const output = { ...rest, peek: isPeek };
|
|
90
98
|
return {
|
|
91
99
|
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
92
100
|
structuredContent: output,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/brief_tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"brief_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/brief_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/check_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAM9D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA6C9E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCheckTool = registerCheckTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const memory_1 = require("@brainfile/core/memory");
|
|
6
|
+
const helpers_1 = require("../helpers");
|
|
7
|
+
const schemas_1 = require("../schemas");
|
|
8
|
+
/**
|
|
9
|
+
* `check`: is a decision still safe to act on? Read-only.
|
|
10
|
+
*/
|
|
11
|
+
function registerCheckTool(server, defaultFile) {
|
|
12
|
+
server.registerTool('check', {
|
|
13
|
+
title: 'Check Decision',
|
|
14
|
+
description: 'Before acting, check whether a decision on the board speaks to it and still holds. Give an action in words, naming the subject right after the verb so a contradiction of the decision\'s stance is caught ("use axios for retries", "drop axios"), a decision ID, a claimKey, or a claimKeyPrefix (every family under it; the verdict is the worst). Verdicts: use (follow the current decision, which is returned), review (ask first: two current decisions, a broken predicate such as validUntil passed or a source file changed or a package version moved, or an action that contradicts the decision\'s stance on its subject), use_replacement (the action matched a superseded decision; use the current one), no_decision (nothing speaks to it). exitCode mirrors the CLI: 0 use/no_decision, 2 review, 3 use_replacement.',
|
|
15
|
+
inputSchema: zod_1.z.object({
|
|
16
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
17
|
+
query: zod_1.z.string().optional().describe('The action in words, or a decision ID'),
|
|
18
|
+
claimKey: zod_1.z.string().optional().describe('Check one claim family exactly'),
|
|
19
|
+
claimKeyPrefix: zod_1.z.string().optional().describe('Check every claim family under a prefix (not with claimKey)'),
|
|
20
|
+
}),
|
|
21
|
+
outputSchema: schemas_1.checkOutputSchema,
|
|
22
|
+
}, async ({ file, query, claimKey, claimKeyPrefix }) => {
|
|
23
|
+
const filePath = file || defaultFile;
|
|
24
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
25
|
+
if (guard)
|
|
26
|
+
return guard;
|
|
27
|
+
const q = query?.trim() ?? '';
|
|
28
|
+
const key = claimKey?.trim() ?? '';
|
|
29
|
+
const prefix = claimKeyPrefix?.trim() ?? '';
|
|
30
|
+
if (key && prefix) {
|
|
31
|
+
return { content: [{ type: 'text', text: 'Error: choose claimKey or claimKeyPrefix, not both' }], isError: true };
|
|
32
|
+
}
|
|
33
|
+
if (!q && !key && !prefix) {
|
|
34
|
+
return { content: [{ type: 'text', text: 'Error: give a query (an action or a decision ID), claimKey or claimKeyPrefix' }], isError: true };
|
|
35
|
+
}
|
|
36
|
+
const resolved = (0, helpers_1.resolveBrainfile)(filePath);
|
|
37
|
+
if (prefix) {
|
|
38
|
+
const result = (0, memory_1.checkClaimKeyPrefix)(resolved, prefix, q ? { query: q } : {});
|
|
39
|
+
const output = { ...result, exitCode: (0, memory_1.checkExitCode)(result.verdict) };
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: 'text', text: `${output.verdict} (${output.familyCount} families under ${output.claimKeyPrefix})\n\n${JSON.stringify(output, null, 2)}` }],
|
|
42
|
+
structuredContent: output,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const { matchedBy, result } = (0, memory_1.checkDecision)(resolved, { ...(q ? { query: q } : {}), ...(key ? { claimKey: key } : {}) });
|
|
46
|
+
const output = { ...result, matchedBy, exitCode: (0, memory_1.checkExitCode)(result.verdict) };
|
|
47
|
+
const head = `${output.verdict}: ${output.recommendation} (${output.reason})${output.current ? ` · current ${output.current.id}: ${output.current.title}` : ''}`;
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: 'text', text: `${head}\n\n${JSON.stringify(output, null, 2)}` }],
|
|
50
|
+
structuredContent: output,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=check_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/check_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
/**
|
|
3
|
+
* `columns`: the board's columns, like `brainfile columns`. The same core
|
|
4
|
+
* operations write the config; one board commit per change.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerColumnsTool(server: McpServer, defaultFile: string): void;
|
|
7
|
+
//# sourceMappingURL=columns_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/columns_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AA+B9D;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAkEhF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerColumnsTool = registerColumnsTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const core_1 = require("@brainfile/core");
|
|
6
|
+
const helpers_1 = require("../helpers");
|
|
7
|
+
const schemas_1 = require("../schemas");
|
|
8
|
+
function headline(action, result) {
|
|
9
|
+
const column = result.column;
|
|
10
|
+
switch (action) {
|
|
11
|
+
case 'add': return `Added column ${column.id} (${column.title})`;
|
|
12
|
+
case 'rename': return `Renamed column ${column.id} to ${column.title}`;
|
|
13
|
+
case 'reorder': return 'Columns reordered';
|
|
14
|
+
case 'remove': {
|
|
15
|
+
const moved = result.moved && result.moved.length > 0 && result.movedTo
|
|
16
|
+
? `; moved ${result.moved.join(', ')} to ${result.movedTo.id}`
|
|
17
|
+
: '';
|
|
18
|
+
return `Removed column ${column.id}${moved}`;
|
|
19
|
+
}
|
|
20
|
+
default: return 'Columns';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `columns`: the board's columns, like `brainfile columns`. The same core
|
|
25
|
+
* operations write the config; one board commit per change.
|
|
26
|
+
*/
|
|
27
|
+
function registerColumnsTool(server, defaultFile) {
|
|
28
|
+
server.registerTool('columns', {
|
|
29
|
+
title: 'Columns',
|
|
30
|
+
description: 'The board\'s columns. action=list (in order, with task counts), add (title; id defaults from the title; after or before another column; completion for a column whose tasks are done), rename (column, title: the ID stays, so its tasks stay), reorder (order: the columns named come first, the rest after), remove (column; one that holds tasks is refused unless moveTo names the column they go to, where they land uncompleted; the last column is never removed). Columns are named by ID or title.',
|
|
31
|
+
inputSchema: zod_1.z.object({
|
|
32
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
33
|
+
action: zod_1.z.enum(['list', 'add', 'rename', 'reorder', 'remove']).optional().describe('Default list'),
|
|
34
|
+
column: zod_1.z.string().optional().describe('rename, remove: the column (ID or title)'),
|
|
35
|
+
title: zod_1.z.string().optional().describe('add, rename: the title'),
|
|
36
|
+
id: zod_1.z.string().optional().describe('add: the column ID (default: from the title, "In Review" → in-review)'),
|
|
37
|
+
after: zod_1.z.string().optional().describe('add: place it after this column'),
|
|
38
|
+
before: zod_1.z.string().optional().describe('add: place it before this column'),
|
|
39
|
+
completion: zod_1.z.boolean().optional().describe('add: tasks moved into it are completed (completionColumn)'),
|
|
40
|
+
order: zod_1.z.array(zod_1.z.string()).optional().describe('reorder: columns in their new order (the rest follow)'),
|
|
41
|
+
moveTo: zod_1.z.string().optional().describe('remove: move the column\'s tasks here first'),
|
|
42
|
+
}),
|
|
43
|
+
outputSchema: schemas_1.columnsOutputSchema,
|
|
44
|
+
}, (0, helpers_1.withBoardCommit)('columns', defaultFile, async (input) => {
|
|
45
|
+
const filePath = input.file || defaultFile;
|
|
46
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
47
|
+
if (guard)
|
|
48
|
+
return guard;
|
|
49
|
+
const resolved = (0, helpers_1.resolveBrainfile)(filePath);
|
|
50
|
+
const action = input.action ?? 'list';
|
|
51
|
+
let result;
|
|
52
|
+
switch (action) {
|
|
53
|
+
case 'add':
|
|
54
|
+
if (!input.title?.trim())
|
|
55
|
+
return (0, helpers_1.mcpError)('add needs a title');
|
|
56
|
+
result = (0, core_1.addColumnFile)(resolved, {
|
|
57
|
+
title: input.title,
|
|
58
|
+
...(input.id ? { id: input.id } : {}),
|
|
59
|
+
...(input.after ? { after: input.after } : {}),
|
|
60
|
+
...(input.before ? { before: input.before } : {}),
|
|
61
|
+
...(input.completion ? { completionColumn: true } : {}),
|
|
62
|
+
});
|
|
63
|
+
break;
|
|
64
|
+
case 'rename':
|
|
65
|
+
if (!input.column?.trim() || !input.title?.trim())
|
|
66
|
+
return (0, helpers_1.mcpError)('rename needs a column and a title');
|
|
67
|
+
result = (0, core_1.renameColumnFile)(resolved, input.column, input.title);
|
|
68
|
+
break;
|
|
69
|
+
case 'reorder':
|
|
70
|
+
if (!input.order || input.order.length === 0)
|
|
71
|
+
return (0, helpers_1.mcpError)('reorder needs order: the columns in their new order');
|
|
72
|
+
result = (0, core_1.reorderColumnsFile)(resolved, input.order);
|
|
73
|
+
break;
|
|
74
|
+
case 'remove':
|
|
75
|
+
if (!input.column?.trim())
|
|
76
|
+
return (0, helpers_1.mcpError)('remove needs a column');
|
|
77
|
+
result = (0, core_1.removeColumnFile)(resolved, input.column, input.moveTo ? { moveTo: input.moveTo } : {});
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
result = (0, core_1.listColumnsFile)(resolved);
|
|
81
|
+
}
|
|
82
|
+
if (!result.success || !result.columns)
|
|
83
|
+
return (0, helpers_1.mcpError)(result.error ?? 'the columns were not changed');
|
|
84
|
+
const output = {
|
|
85
|
+
action,
|
|
86
|
+
columns: result.columns,
|
|
87
|
+
...(result.column ? { column: result.column } : {}),
|
|
88
|
+
...(result.moved ? { moved: result.moved } : {}),
|
|
89
|
+
...(result.movedTo ? { movedTo: result.movedTo } : {}),
|
|
90
|
+
};
|
|
91
|
+
return (0, helpers_1.mcpResult)(`${headline(action, result)}\n\n${JSON.stringify(output, null, 2)}`, output);
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=columns_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/columns_tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { type DecideResult } from '@brainfile/core';
|
|
4
|
+
/** The decide/supersede input fields both tools share. */
|
|
5
|
+
export declare const decisionInputShape: {
|
|
6
|
+
file: z.ZodOptional<z.ZodString>;
|
|
7
|
+
text: z.ZodString;
|
|
8
|
+
title: z.ZodOptional<z.ZodString>;
|
|
9
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
decision: "decision";
|
|
11
|
+
constraint: "constraint";
|
|
12
|
+
preference: "preference";
|
|
13
|
+
rule: "rule";
|
|
14
|
+
}>>;
|
|
15
|
+
stance: z.ZodOptional<z.ZodEnum<{
|
|
16
|
+
prefers: "prefers";
|
|
17
|
+
rejects: "rejects";
|
|
18
|
+
requires: "requires";
|
|
19
|
+
forbids: "forbids";
|
|
20
|
+
}>>;
|
|
21
|
+
subject: z.ZodOptional<z.ZodString>;
|
|
22
|
+
holdsWhile: z.ZodOptional<z.ZodString>;
|
|
23
|
+
recheck: z.ZodOptional<z.ZodString>;
|
|
24
|
+
validUntil: z.ZodOptional<z.ZodString>;
|
|
25
|
+
source: z.ZodOptional<z.ZodString>;
|
|
26
|
+
package: z.ZodOptional<z.ZodString>;
|
|
27
|
+
forWork: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
|
+
};
|
|
30
|
+
export interface DecisionToolInput {
|
|
31
|
+
file?: string;
|
|
32
|
+
text: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
kind?: string;
|
|
35
|
+
stance?: string;
|
|
36
|
+
subject?: string;
|
|
37
|
+
holdsWhile?: string;
|
|
38
|
+
recheck?: string;
|
|
39
|
+
validUntil?: string;
|
|
40
|
+
source?: string;
|
|
41
|
+
package?: string;
|
|
42
|
+
forWork?: string[];
|
|
43
|
+
tags?: string[];
|
|
44
|
+
claimKey?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Tool input → core input. A relative `source` is relative to the project root. */
|
|
47
|
+
export declare function decideInputFrom(input: DecisionToolInput, projectRoot: string): {
|
|
48
|
+
tags?: string[] | undefined;
|
|
49
|
+
forWork?: string[] | undefined;
|
|
50
|
+
packageVersion?: string | undefined;
|
|
51
|
+
sourcePath?: string | undefined;
|
|
52
|
+
validUntil?: string | undefined;
|
|
53
|
+
recheck?: string | undefined;
|
|
54
|
+
holdsWhile?: string | undefined;
|
|
55
|
+
subject?: string | undefined;
|
|
56
|
+
stance?: string | undefined;
|
|
57
|
+
kind?: string | undefined;
|
|
58
|
+
title?: string | undefined;
|
|
59
|
+
claimKey?: string | undefined;
|
|
60
|
+
text: string;
|
|
61
|
+
};
|
|
62
|
+
/** A core decide result as the tool's text and structured content. */
|
|
63
|
+
export declare function decideToolResult(result: DecideResult, verb: string): {
|
|
64
|
+
content: {
|
|
65
|
+
type: "text";
|
|
66
|
+
text: string;
|
|
67
|
+
}[];
|
|
68
|
+
isError: true;
|
|
69
|
+
structuredContent?: undefined;
|
|
70
|
+
} | {
|
|
71
|
+
content: {
|
|
72
|
+
type: "text";
|
|
73
|
+
text: string;
|
|
74
|
+
}[];
|
|
75
|
+
structuredContent: {
|
|
76
|
+
decision: import("@brainfile/core").DecisionSummary;
|
|
77
|
+
duplicate: boolean;
|
|
78
|
+
superseded: string[];
|
|
79
|
+
familyWasEmpty: boolean;
|
|
80
|
+
related: import("@brainfile/core").RelatedClaim[];
|
|
81
|
+
linked: string[];
|
|
82
|
+
notFound: string[];
|
|
83
|
+
};
|
|
84
|
+
isError?: undefined;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* `decide`: record a decision in its claim family. The family's current
|
|
88
|
+
* decision is superseded (status, links both ways, moved to logs/).
|
|
89
|
+
*/
|
|
90
|
+
export declare function registerDecideTool(server: McpServer, defaultFile: string): void;
|
|
91
|
+
//# sourceMappingURL=decide_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decide_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/decide_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMzH,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;CAc9B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM;;;;;;;;;;;;;;EAgB5E;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;EAwBlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA+B/E"}
|
|
@@ -0,0 +1,141 @@
|
|
|
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.decisionInputShape = void 0;
|
|
37
|
+
exports.decideInputFrom = decideInputFrom;
|
|
38
|
+
exports.decideToolResult = decideToolResult;
|
|
39
|
+
exports.registerDecideTool = registerDecideTool;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const zod_1 = require("zod");
|
|
42
|
+
const core_1 = require("@brainfile/core");
|
|
43
|
+
const v2_detect_1 = require("../../utils/v2-detect");
|
|
44
|
+
const actor_1 = require("../../utils/actor");
|
|
45
|
+
const helpers_1 = require("../helpers");
|
|
46
|
+
const schemas_1 = require("../schemas");
|
|
47
|
+
/** The decide/supersede input fields both tools share. */
|
|
48
|
+
exports.decisionInputShape = {
|
|
49
|
+
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
50
|
+
text: zod_1.z.string().describe('The decision and why. The first line becomes the title unless title is given'),
|
|
51
|
+
title: zod_1.z.string().optional().describe('Title (default: the first line of text)'),
|
|
52
|
+
kind: zod_1.z.enum(['decision', 'preference', 'constraint', 'rule']).optional().describe('How firmly it binds (default decision)'),
|
|
53
|
+
stance: zod_1.z.enum(['prefers', 'rejects', 'requires', 'forbids']).optional().describe('What it says about subject; give both or neither. check reads them'),
|
|
54
|
+
subject: zod_1.z.string().optional().describe('What the stance is about: a package, a pattern, a tool'),
|
|
55
|
+
holdsWhile: zod_1.z.string().optional().describe('The condition under which it holds'),
|
|
56
|
+
recheck: zod_1.z.string().optional().describe('When or why to look at it again'),
|
|
57
|
+
validUntil: zod_1.z.string().optional().describe('Date after which it needs a look (YYYY-MM-DD)'),
|
|
58
|
+
source: zod_1.z.string().optional().describe('A file it rests on, relative to the project root; its sha256 is recorded'),
|
|
59
|
+
package: zod_1.z.string().optional().describe('A package version it rests on: name<op>version, e.g. zod>=4.3 or engines.node>=20'),
|
|
60
|
+
forWork: zod_1.z.array(zod_1.z.string()).optional().describe('IDs of work that rests on it (each gets it in decisions:)'),
|
|
61
|
+
tags: zod_1.z.array(zod_1.z.string()).optional().describe('Tags'),
|
|
62
|
+
};
|
|
63
|
+
/** Tool input → core input. A relative `source` is relative to the project root. */
|
|
64
|
+
function decideInputFrom(input, projectRoot) {
|
|
65
|
+
return {
|
|
66
|
+
text: input.text,
|
|
67
|
+
...(input.claimKey !== undefined ? { claimKey: input.claimKey } : {}),
|
|
68
|
+
...(input.title ? { title: input.title } : {}),
|
|
69
|
+
...(input.kind ? { kind: input.kind } : {}),
|
|
70
|
+
...(input.stance ? { stance: input.stance } : {}),
|
|
71
|
+
...(input.subject ? { subject: input.subject } : {}),
|
|
72
|
+
...(input.holdsWhile ? { holdsWhile: input.holdsWhile } : {}),
|
|
73
|
+
...(input.recheck ? { recheck: input.recheck } : {}),
|
|
74
|
+
...(input.validUntil ? { validUntil: input.validUntil } : {}),
|
|
75
|
+
...(input.source ? { sourcePath: path.resolve(projectRoot, input.source) } : {}),
|
|
76
|
+
...(input.package ? { packageVersion: input.package } : {}),
|
|
77
|
+
...(input.forWork ? { forWork: input.forWork } : {}),
|
|
78
|
+
...(input.tags ? { tags: input.tags } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** A core decide result as the tool's text and structured content. */
|
|
82
|
+
function decideToolResult(result, verb) {
|
|
83
|
+
if (!result.success || !result.decision) {
|
|
84
|
+
return { content: [{ type: 'text', text: `Error: ${result.error ?? 'the decision was not written'}` }], isError: true };
|
|
85
|
+
}
|
|
86
|
+
const output = {
|
|
87
|
+
decision: (0, core_1.summarizeDecision)(result.decision),
|
|
88
|
+
duplicate: result.duplicate === true,
|
|
89
|
+
superseded: result.superseded.map((t) => t.id),
|
|
90
|
+
familyWasEmpty: result.familyWasEmpty,
|
|
91
|
+
related: result.related,
|
|
92
|
+
linked: result.linked,
|
|
93
|
+
notFound: result.notFound,
|
|
94
|
+
};
|
|
95
|
+
const lines = [
|
|
96
|
+
result.duplicate
|
|
97
|
+
? `Already current: ${output.decision.id} (${output.decision.title})`
|
|
98
|
+
: `${verb} ${output.decision.id}${output.decision.claimKey ? ` [${output.decision.claimKey}]` : ''}: ${output.decision.title}`,
|
|
99
|
+
...output.superseded.map((id) => `Superseded ${id} (moved to logs/)`),
|
|
100
|
+
...output.related.map((r) => `Related family: ${r.claimKey} (${r.id}) ${r.title}`),
|
|
101
|
+
];
|
|
102
|
+
return {
|
|
103
|
+
content: [{ type: 'text', text: `${lines.join('\n')}\n\n${JSON.stringify(output, null, 2)}` }],
|
|
104
|
+
structuredContent: output,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* `decide`: record a decision in its claim family. The family's current
|
|
109
|
+
* decision is superseded (status, links both ways, moved to logs/).
|
|
110
|
+
*/
|
|
111
|
+
function registerDecideTool(server, defaultFile) {
|
|
112
|
+
server.registerTool('decide', {
|
|
113
|
+
title: 'Decide',
|
|
114
|
+
description: 'Record a decision (a standing choice) in its claim family. A family has one current decision: when it already has one, that one is superseded (status, supersedes/supersededBy both ways, moved to logs/). Re-deciding the same words changes nothing (duplicate). When the family was empty, related families that may say the same thing are returned. stance+subject let check catch actions that contradict it; validUntil, source and package are predicates check evaluates.',
|
|
115
|
+
inputSchema: zod_1.z.object({
|
|
116
|
+
claimKey: zod_1.z.string().describe('Dotted claim family, e.g. dependency.http-client'),
|
|
117
|
+
...exports.decisionInputShape,
|
|
118
|
+
noSupersede: zod_1.z.boolean().optional().describe('Keep the family\'s current decision current too (check will say review)'),
|
|
119
|
+
}),
|
|
120
|
+
outputSchema: schemas_1.decideOutputSchema,
|
|
121
|
+
}, (0, helpers_1.withBoardCommit)('decide', defaultFile, async (input) => {
|
|
122
|
+
const filePath = input.file || defaultFile;
|
|
123
|
+
const guard = (0, helpers_1.requireV2)(filePath);
|
|
124
|
+
if (guard)
|
|
125
|
+
return guard;
|
|
126
|
+
const resolved = (0, helpers_1.resolveBrainfile)(filePath);
|
|
127
|
+
const projectRoot = path.dirname(path.dirname(resolved));
|
|
128
|
+
const coreInput = decideInputFrom(input, projectRoot);
|
|
129
|
+
const invalid = (0, core_1.validateDecideInput)(coreInput, { requireClaimKey: true });
|
|
130
|
+
if (invalid)
|
|
131
|
+
return { content: [{ type: 'text', text: `Error: ${invalid}` }], isError: true };
|
|
132
|
+
const agent = (0, actor_1.detectAgent)()?.name;
|
|
133
|
+
const result = (0, core_1.decideFile)((0, v2_detect_1.ensureV2Dirs)(resolved), coreInput, {
|
|
134
|
+
types: (0, core_1.readBoardConfig)(resolved)?.config.types,
|
|
135
|
+
noSupersede: input.noSupersede === true,
|
|
136
|
+
...(agent ? { agent } : {}),
|
|
137
|
+
});
|
|
138
|
+
return decideToolResult(result, 'Decided');
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=decide_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decide_tool.js","sourceRoot":"","sources":["../../../src/mcp/tools/decide_tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,0CAgBC;AAGD,4CAwBC;AAMD,gDA+BC;AA3HD,2CAA6B;AAC7B,6BAAwB;AACxB,0CAAyH;AACzH,qDAAqD;AACrD,6CAAgD;AAChD,wCAA0E;AAC1E,wCAAgD;AAEhD,0DAA0D;AAC7C,QAAA,kBAAkB,GAAG;IAChC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACpF,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;IACzG,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAChF,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC5H,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IACvJ,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IACjG,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAChF,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC1E,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC3F,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;IAClH,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;IAC5H,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IAC7G,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;CACtD,CAAC;AAmBF,oFAAoF;AACpF,SAAgB,eAAe,CAAC,KAAwB,EAAE,WAAmB;IAC3E,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAgB,gBAAgB,CAAC,MAAoB,EAAE,IAAY;IACjE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,IAAI,8BAA8B,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;IAC5I,CAAC;IACD,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,IAAA,wBAAiB,EAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,IAAI;QACpC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,SAAS;YACd,CAAC,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG;YACrE,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;QAChI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,EAAE,mBAAmB,CAAC;QACrE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;KACnF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACvG,iBAAiB,EAAE,MAAM;KAC1B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,MAAiB,EAAE,WAAmB;IACvE,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,odAAod;QACje,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjF,GAAG,0BAAkB;YACrB,WAAW,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;SACxH,CAAC;QACF,YAAY,EAAE,4BAAkB;KACjC,EACD,IAAA,yBAAe,EAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAA,0BAAmB,EAAC,SAAS,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;QAChH,MAAM,KAAK,GAAG,IAAA,mBAAW,GAAE,EAAE,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,IAAA,wBAAY,EAAC,QAAQ,CAAC,EAAE,SAAS,EAAE;YAC3D,KAAK,EAAE,IAAA,sBAAe,EAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK;YAC9C,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;YACvC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_task_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get_task_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"get_task_tool.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get_task_tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAU9D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA2DhF"}
|
|
@@ -1,17 +1,54 @@
|
|
|
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.registerGetTaskTool = registerGetTaskTool;
|
|
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 related_1 = require("../../utils/related");
|
|
6
43
|
const helpers_1 = require("../helpers");
|
|
7
44
|
const schemas_1 = require("../schemas");
|
|
8
45
|
function registerGetTaskTool(server, defaultFile) {
|
|
9
46
|
server.registerTool('get_task', {
|
|
10
47
|
title: 'Get Task',
|
|
11
|
-
description: 'Get detailed information about a specific task by ID',
|
|
48
|
+
description: 'Get detailed information about a specific task by ID, with its place in the graph (graph: type, parent, children, the decisions it rests on and whether any is superseded; for a decision, the work resting on it). A task on a related board (related: in brainfile.md) is alias:task-id; it is read-only from here.',
|
|
12
49
|
inputSchema: zod_1.z.object({
|
|
13
50
|
file: zod_1.z.string().optional().describe('Path to brainfile.md (default: brainfile.md)'),
|
|
14
|
-
task: zod_1.z.string().describe('Task ID to retrieve')
|
|
51
|
+
task: zod_1.z.string().describe('Task ID to retrieve, or alias:task-id for a task on a related board')
|
|
15
52
|
}),
|
|
16
53
|
outputSchema: schemas_1.getTaskOutputSchema
|
|
17
54
|
}, async ({ file, task }) => {
|
|
@@ -19,18 +56,39 @@ function registerGetTaskTool(server, defaultFile) {
|
|
|
19
56
|
const guard = (0, helpers_1.requireV2)(filePath);
|
|
20
57
|
if (guard)
|
|
21
58
|
return guard;
|
|
22
|
-
|
|
23
|
-
|
|
59
|
+
let boardFile = path.resolve(filePath);
|
|
60
|
+
let taskId = task;
|
|
61
|
+
let alias;
|
|
62
|
+
if ((0, core_1.isQualifiedRef)(task)) {
|
|
63
|
+
const target = (0, related_1.resolveRelatedTask)(boardFile, task);
|
|
64
|
+
if (!target.ok) {
|
|
65
|
+
const details = target.details ? `\n${target.details}` : '';
|
|
66
|
+
return { content: [{ type: 'text', text: `Error: ${target.message}${details}` }], isError: true };
|
|
67
|
+
}
|
|
68
|
+
boardFile = target.board.brainfilePath;
|
|
69
|
+
taskId = target.id;
|
|
70
|
+
alias = target.board.alias;
|
|
71
|
+
}
|
|
72
|
+
const dirs = (0, v2_detect_1.getV2Dirs)(boardFile);
|
|
73
|
+
const found = (0, v2_detect_1.findV2Task)(dirs, taskId, true);
|
|
24
74
|
if (!found) {
|
|
25
75
|
return { content: [{ type: 'text', text: `Error: Task not found: ${task}` }], isError: true };
|
|
26
76
|
}
|
|
27
77
|
const { doc, isLog } = found;
|
|
28
78
|
const description = (0, v2_detect_1.extractDescription)(doc.body);
|
|
79
|
+
const hasDeps = Array.isArray(doc.task.dependsOn) && doc.task.dependsOn.length > 0;
|
|
80
|
+
const rel = hasDeps ? (0, repo_1.relatedBoards)(boardFile) : null;
|
|
29
81
|
const output = {
|
|
30
82
|
...doc.task,
|
|
31
83
|
...(description && !doc.task.description && { description }),
|
|
32
84
|
column: isLog ? 'Completed' : (doc.task.column || 'unknown'),
|
|
33
85
|
...(isLog && { archived: true }),
|
|
86
|
+
...(alias && { board: alias, ref: `${alias}:${doc.task.id}` }),
|
|
87
|
+
...(rel && {
|
|
88
|
+
dependencies: rel.dependencies(doc.task).map((d) => ({ ref: d.ref, state: d.state, done: d.done })),
|
|
89
|
+
blocked: !isLog && rel.blockers(doc.task).length > 0,
|
|
90
|
+
}),
|
|
91
|
+
graph: (0, core_1.docPlace)((0, core_1.readBoardGraph)(boardFile).graph, doc.task.id),
|
|
34
92
|
};
|
|
35
93
|
return {
|
|
36
94
|
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|