@agentbrain/mcp-server 1.4.56 → 1.4.62
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 +74 -2
- package/dist/index.js +1 -22
- package/dist/index.js.map +1 -1
- package/dist/tools/create-spec.d.ts +49 -6
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +221 -14
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/load-context.d.ts.map +1 -1
- package/dist/tools/load-context.js +14 -50
- package/dist/tools/load-context.js.map +1 -1
- package/dist/tools/load-spec.d.ts +21 -8
- package/dist/tools/load-spec.d.ts.map +1 -1
- package/dist/tools/load-spec.js +244 -31
- package/dist/tools/load-spec.js.map +1 -1
- package/dist/tools/save-context.d.ts.map +1 -1
- package/dist/tools/save-context.js +14 -6
- package/dist/tools/save-context.js.map +1 -1
- package/dist/tools/setup-repo.d.ts.map +1 -1
- package/dist/tools/setup-repo.js +6 -5
- package/dist/tools/setup-repo.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Model Context Protocol (MCP) server for AgentBrain - connect your AI agent direc
|
|
|
4
4
|
|
|
5
5
|
## What is This?
|
|
6
6
|
|
|
7
|
-
This MCP server lets **Claude Desktop**, **Cursor**, and **Windsurf** access AgentBrain functionality directly from within your coding sessions. Your AI agent can automatically:
|
|
7
|
+
This MCP server lets **Claude Code**, **Claude Desktop**, **Cursor**, and **Windsurf** access AgentBrain functionality directly from within your coding sessions. Your AI agent can automatically:
|
|
8
8
|
|
|
9
9
|
- 🔍 Scan your repository structure
|
|
10
10
|
- 📖 Load comprehensive codebase context
|
|
@@ -27,6 +27,77 @@ npm install -g @agentbrain/mcp-server
|
|
|
27
27
|
|
|
28
28
|
## Setup by Platform
|
|
29
29
|
|
|
30
|
+
### 🔵 Claude Code
|
|
31
|
+
|
|
32
|
+
#### Step 1: Edit Claude Code MCP Config
|
|
33
|
+
|
|
34
|
+
**macOS/Linux:**
|
|
35
|
+
```bash
|
|
36
|
+
# Open in your text editor
|
|
37
|
+
code ~/.config/claude-code/mcp.json
|
|
38
|
+
|
|
39
|
+
# Or use nano
|
|
40
|
+
nano ~/.config/claude-code/mcp.json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Windows:**
|
|
44
|
+
```bash
|
|
45
|
+
# The config is at:
|
|
46
|
+
%USERPROFILE%\.config\claude-code\mcp.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### Step 2: Add AgentBrain to Config
|
|
50
|
+
|
|
51
|
+
Add this configuration:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"agentbrain": {
|
|
57
|
+
"command": "npx",
|
|
58
|
+
"args": ["-y", "@agentbrain/mcp-server"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**If you have other MCP servers already:**
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"mcpServers": {
|
|
68
|
+
"filesystem": {
|
|
69
|
+
"command": "npx",
|
|
70
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
|
|
71
|
+
},
|
|
72
|
+
"agentbrain": {
|
|
73
|
+
"command": "npx",
|
|
74
|
+
"args": ["-y", "@agentbrain/mcp-server"]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Step 3: Restart Claude Code
|
|
81
|
+
|
|
82
|
+
Exit Claude Code completely and reopen it.
|
|
83
|
+
|
|
84
|
+
#### Step 4: Verify It's Working
|
|
85
|
+
|
|
86
|
+
1. Start a new session in Claude Code
|
|
87
|
+
2. Type `/mcp` or check MCP tools list
|
|
88
|
+
3. You should see "agentbrain" with 9 tools available
|
|
89
|
+
|
|
90
|
+
#### Step 5: Try It Out!
|
|
91
|
+
|
|
92
|
+
Ask Claude:
|
|
93
|
+
```
|
|
94
|
+
"Use the scan_repo tool to analyze my project at /Users/yourname/my-project"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Claude will automatically use the AgentBrain tools!
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
30
101
|
### 🟣 Claude Desktop
|
|
31
102
|
|
|
32
103
|
#### Step 1: Edit Claude Desktop Config
|
|
@@ -874,7 +945,8 @@ A: Yes! The MCP server works standalone. You can either:
|
|
|
874
945
|
- Use CLI once (`agentbrain init`) to generate context (requires API key)
|
|
875
946
|
|
|
876
947
|
**Q: Which agent is best?**
|
|
877
|
-
A: All
|
|
948
|
+
A: All four work great:
|
|
949
|
+
- **Claude Code** - Official CLI, excellent MCP support, fast and lightweight
|
|
878
950
|
- **Claude Desktop** - Native MCP support, excellent integration
|
|
879
951
|
- **Cursor** - Popular for coding, good MCP support
|
|
880
952
|
- **Windsurf** - Emerging option with MCP support
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,6 @@ import { loadStandards, loadStandardsSchema } from './tools/load-standards.js';
|
|
|
8
8
|
import { loadContext, loadContextSchema } from './tools/load-context.js';
|
|
9
9
|
import { loadSpecTool, loadSpecSchema } from './tools/load-spec.js';
|
|
10
10
|
import { detectDoomLoop, detectDoomLoopSchema } from './tools/detect-doom-loop.js';
|
|
11
|
-
import { createSpecTool, createSpecSchema } from './tools/create-spec.js';
|
|
12
11
|
import { saveHandoff, saveHandoffSchema } from './tools/save-handoff.js';
|
|
13
12
|
import { setupRepo, setupRepoSchema } from './tools/setup-repo.js';
|
|
14
13
|
import { saveContext, saveContextSchema } from './tools/save-context.js';
|
|
@@ -61,7 +60,6 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
61
60
|
saveContextSchema,
|
|
62
61
|
loadSpecSchema,
|
|
63
62
|
detectDoomLoopSchema,
|
|
64
|
-
createSpecSchema,
|
|
65
63
|
saveHandoffSchema,
|
|
66
64
|
],
|
|
67
65
|
};
|
|
@@ -107,20 +105,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
107
105
|
};
|
|
108
106
|
}
|
|
109
107
|
case 'load_spec': {
|
|
110
|
-
const bootstrap = await checkBootstrap(args.repoPath);
|
|
111
|
-
if (bootstrap) {
|
|
112
|
-
return {
|
|
113
|
-
content: [{ type: 'text', text: bootstrap }],
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
108
|
const result = await loadSpecTool(args);
|
|
117
109
|
return {
|
|
118
110
|
content: [
|
|
119
111
|
{
|
|
120
112
|
type: 'text',
|
|
121
|
-
text: result.
|
|
122
|
-
? `${result.content}\n\n---\n\n[Loaded spec: ${result.slug}]`
|
|
123
|
-
: result.content,
|
|
113
|
+
text: result.content,
|
|
124
114
|
},
|
|
125
115
|
],
|
|
126
116
|
};
|
|
@@ -142,17 +132,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
142
132
|
],
|
|
143
133
|
};
|
|
144
134
|
}
|
|
145
|
-
case 'create_spec': {
|
|
146
|
-
const result = await createSpecTool(args);
|
|
147
|
-
return {
|
|
148
|
-
content: [
|
|
149
|
-
{
|
|
150
|
-
type: 'text',
|
|
151
|
-
text: `Spec saved to ${result.specPath}\nSlug: ${result.slug}`,
|
|
152
|
-
},
|
|
153
|
-
],
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
135
|
case 'save_handoff': {
|
|
157
136
|
const bootstrap = await checkBootstrap(args.repo_path);
|
|
158
137
|
if (bootstrap) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,wBAAwB;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEnE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,32 @@
|
|
|
1
|
+
export interface SpecAnswers {
|
|
2
|
+
problem: string;
|
|
3
|
+
approach: string;
|
|
4
|
+
out_of_scope: string;
|
|
5
|
+
done_criteria: string;
|
|
6
|
+
risks: string;
|
|
7
|
+
}
|
|
1
8
|
export interface CreateSpecInput {
|
|
2
|
-
|
|
9
|
+
repo_path: string;
|
|
10
|
+
task: string;
|
|
11
|
+
answers?: SpecAnswers;
|
|
12
|
+
}
|
|
13
|
+
export interface QuestionsOutput {
|
|
14
|
+
mode: 'questions';
|
|
3
15
|
task: string;
|
|
4
|
-
|
|
16
|
+
questions: Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
question: string;
|
|
19
|
+
}>;
|
|
20
|
+
instruction: string;
|
|
5
21
|
}
|
|
6
|
-
export interface
|
|
7
|
-
|
|
22
|
+
export interface SaveOutput {
|
|
23
|
+
mode: 'save';
|
|
24
|
+
success: true;
|
|
25
|
+
spec_path: string;
|
|
8
26
|
slug: string;
|
|
27
|
+
message: string;
|
|
9
28
|
}
|
|
29
|
+
export type CreateSpecOutput = QuestionsOutput | SaveOutput;
|
|
10
30
|
export declare function createSpecTool(input: CreateSpecInput): Promise<CreateSpecOutput>;
|
|
11
31
|
export declare const createSpecSchema: {
|
|
12
32
|
name: string;
|
|
@@ -14,7 +34,7 @@ export declare const createSpecSchema: {
|
|
|
14
34
|
inputSchema: {
|
|
15
35
|
type: string;
|
|
16
36
|
properties: {
|
|
17
|
-
|
|
37
|
+
repo_path: {
|
|
18
38
|
type: string;
|
|
19
39
|
description: string;
|
|
20
40
|
};
|
|
@@ -22,9 +42,32 @@ export declare const createSpecSchema: {
|
|
|
22
42
|
type: string;
|
|
23
43
|
description: string;
|
|
24
44
|
};
|
|
25
|
-
|
|
45
|
+
answers: {
|
|
26
46
|
type: string;
|
|
27
47
|
description: string;
|
|
48
|
+
properties: {
|
|
49
|
+
problem: {
|
|
50
|
+
type: string;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
approach: {
|
|
54
|
+
type: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
out_of_scope: {
|
|
58
|
+
type: string;
|
|
59
|
+
description: string;
|
|
60
|
+
};
|
|
61
|
+
done_criteria: {
|
|
62
|
+
type: string;
|
|
63
|
+
description: string;
|
|
64
|
+
};
|
|
65
|
+
risks: {
|
|
66
|
+
type: string;
|
|
67
|
+
description: string;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
required: string[];
|
|
28
71
|
};
|
|
29
72
|
};
|
|
30
73
|
required: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"AAsDA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,IAAI,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAA;AA4J3D,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkDtF;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C5B,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// create-spec.ts - MCP tool
|
|
2
|
-
import { writeFile, mkdir } from 'node:fs/promises';
|
|
1
|
+
// create-spec.ts - MCP tool for spec generation (no API key required)
|
|
2
|
+
import { writeFile, mkdir, readFile } from 'node:fs/promises';
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
|
-
import { join, resolve } from 'node:path';
|
|
4
|
+
import { join, resolve, basename } from 'node:path';
|
|
5
5
|
import { homedir } from 'node:os';
|
|
6
|
+
import { getAgentFilePath } from '@agentbrain/core';
|
|
6
7
|
/**
|
|
7
8
|
* Expand path: handles ~, relative paths, etc.
|
|
8
9
|
*/
|
|
@@ -21,43 +22,249 @@ function slugify(text) {
|
|
|
21
22
|
.replace(/[^a-z0-9]+/g, '-')
|
|
22
23
|
.replace(/^-+|-+$/g, '');
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* The 5 questions for spec generation
|
|
27
|
+
*/
|
|
28
|
+
const SPEC_QUESTIONS = [
|
|
29
|
+
{
|
|
30
|
+
id: 'problem',
|
|
31
|
+
question: 'What problem does this solve? (1-2 sentences)',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'approach',
|
|
35
|
+
question: "What's your approach or implementation idea? (or 'not sure yet')",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'out_of_scope',
|
|
39
|
+
question: 'What should the agent NOT touch or change?',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: 'done_criteria',
|
|
43
|
+
question: 'What does "done" look like? (acceptance criteria)',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'risks',
|
|
47
|
+
question: 'Any edge cases or risks to consider?',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Generate task checklist from user answers (derives tasks directly from what user said)
|
|
52
|
+
*/
|
|
53
|
+
function generateTaskChecklist(answers) {
|
|
54
|
+
const tasks = [];
|
|
55
|
+
// 1. Always start with spec review
|
|
56
|
+
tasks.push('Review this spec before writing any code');
|
|
57
|
+
// 2. Break down the approach into implementation tasks
|
|
58
|
+
// Split approach by sentences/commas and create a task for each
|
|
59
|
+
const approachParts = answers.approach
|
|
60
|
+
.split(/[.,\n]/)
|
|
61
|
+
.map((s) => s.trim())
|
|
62
|
+
.filter((s) => s.length > 5);
|
|
63
|
+
approachParts.forEach((part) => {
|
|
64
|
+
tasks.push(`Implement: ${part}`);
|
|
65
|
+
});
|
|
66
|
+
// 3. Break done_criteria into verification tasks
|
|
67
|
+
// Each acceptance criterion becomes a verification task
|
|
68
|
+
const criteriaParts = answers.done_criteria
|
|
69
|
+
.split(/[.,\n]/)
|
|
70
|
+
.map((s) => s.trim())
|
|
71
|
+
.filter((s) => s.length > 5);
|
|
72
|
+
criteriaParts.forEach((part) => {
|
|
73
|
+
tasks.push(`Verify: ${part}`);
|
|
74
|
+
});
|
|
75
|
+
// 4. Turn risks into mitigation tasks
|
|
76
|
+
const riskParts = answers.risks
|
|
77
|
+
.split(/[.,\n]/)
|
|
78
|
+
.map((s) => s.trim())
|
|
79
|
+
.filter((s) => s.length > 5 &&
|
|
80
|
+
!s.toLowerCase().includes('none') &&
|
|
81
|
+
!s.toLowerCase().includes('n/a'));
|
|
82
|
+
riskParts.forEach((part) => {
|
|
83
|
+
tasks.push(`Handle edge case: ${part}`);
|
|
84
|
+
});
|
|
85
|
+
// 5. Always end with testing
|
|
86
|
+
tasks.push('Write tests for the implementation');
|
|
87
|
+
tasks.push('Verify all acceptance criteria pass');
|
|
88
|
+
return tasks;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate spec content from answers using template (no AI required)
|
|
92
|
+
*/
|
|
93
|
+
function generateSpecFromTemplate(task, answers, repoPath) {
|
|
94
|
+
const date = new Date().toISOString().split('T')[0];
|
|
95
|
+
const repo = basename(repoPath);
|
|
96
|
+
// Convert done_criteria to checklist format if not already
|
|
97
|
+
const doneCriteria = answers.done_criteria
|
|
98
|
+
.split('\n')
|
|
99
|
+
.map((line) => {
|
|
100
|
+
const trimmed = line.trim();
|
|
101
|
+
if (!trimmed)
|
|
102
|
+
return '';
|
|
103
|
+
if (trimmed.startsWith('- [ ]') || trimmed.startsWith('-'))
|
|
104
|
+
return trimmed;
|
|
105
|
+
return `- [ ] ${trimmed}`;
|
|
106
|
+
})
|
|
107
|
+
.filter((line) => line)
|
|
108
|
+
.join('\n');
|
|
109
|
+
// Convert risks to bullet format if not already
|
|
110
|
+
const risks = answers.risks
|
|
111
|
+
.split('\n')
|
|
112
|
+
.map((line) => {
|
|
113
|
+
const trimmed = line.trim();
|
|
114
|
+
if (!trimmed)
|
|
115
|
+
return '';
|
|
116
|
+
if (trimmed.startsWith('-'))
|
|
117
|
+
return trimmed;
|
|
118
|
+
return `- ${trimmed}`;
|
|
119
|
+
})
|
|
120
|
+
.filter((line) => line)
|
|
121
|
+
.join('\n');
|
|
122
|
+
// Convert approach to implementation notes
|
|
123
|
+
const implementationNotes = answers.approach
|
|
124
|
+
.split('\n')
|
|
125
|
+
.map((line) => {
|
|
126
|
+
const trimmed = line.trim();
|
|
127
|
+
if (!trimmed)
|
|
128
|
+
return '';
|
|
129
|
+
if (trimmed.startsWith('-'))
|
|
130
|
+
return trimmed;
|
|
131
|
+
return `- ${trimmed}`;
|
|
132
|
+
})
|
|
133
|
+
.filter((line) => line)
|
|
134
|
+
.join('\n');
|
|
135
|
+
// Generate dynamic task checklist from answers
|
|
136
|
+
const taskChecklist = generateTaskChecklist(answers)
|
|
137
|
+
.map((task) => `- [ ] ${task}`)
|
|
138
|
+
.join('\n');
|
|
139
|
+
return `# Spec: ${task}
|
|
140
|
+
|
|
141
|
+
*Created: ${date} | Repo: ${repo}*
|
|
142
|
+
|
|
143
|
+
## Problem
|
|
144
|
+
${answers.problem}
|
|
145
|
+
|
|
146
|
+
## Scope
|
|
147
|
+
**Out of scope:** ${answers.out_of_scope}
|
|
148
|
+
|
|
149
|
+
## Acceptance Criteria
|
|
150
|
+
${doneCriteria}
|
|
151
|
+
|
|
152
|
+
## Risks & Edge Cases
|
|
153
|
+
${risks}
|
|
154
|
+
|
|
155
|
+
## Implementation Notes
|
|
156
|
+
${implementationNotes}
|
|
157
|
+
|
|
158
|
+
## Task Checklist
|
|
159
|
+
${taskChecklist}
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Inject spec reference into detected agent file
|
|
164
|
+
*/
|
|
165
|
+
async function injectSpecReference(repoPath, slug) {
|
|
166
|
+
const agentFilePath = getAgentFilePath(repoPath);
|
|
167
|
+
const specPath = `.agentbrain/specs/${slug}.md`;
|
|
168
|
+
const reference = `---
|
|
169
|
+
|
|
170
|
+
**Active Spec:** Read \`${specPath}\` before implementing this feature.
|
|
171
|
+
`;
|
|
172
|
+
// Create agent file if it doesn't exist
|
|
173
|
+
if (!existsSync(agentFilePath)) {
|
|
174
|
+
await writeFile(agentFilePath, reference, 'utf-8');
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Append spec reference if not already present
|
|
178
|
+
const content = await readFile(agentFilePath, 'utf-8');
|
|
179
|
+
if (!content.includes(`**Active Spec:** Read \`${specPath}\``)) {
|
|
180
|
+
const separator = content.endsWith('\n') ? '\n' : '\n\n';
|
|
181
|
+
await writeFile(agentFilePath, content + separator + reference, 'utf-8');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
24
184
|
export async function createSpecTool(input) {
|
|
25
|
-
const {
|
|
26
|
-
const expandedPath = expandPath(
|
|
185
|
+
const { repo_path, task, answers } = input;
|
|
186
|
+
const expandedPath = expandPath(repo_path);
|
|
187
|
+
// MODE 1: Questions mode - return questions for agent to ask
|
|
188
|
+
if (!answers) {
|
|
189
|
+
return {
|
|
190
|
+
mode: 'questions',
|
|
191
|
+
task,
|
|
192
|
+
questions: SPEC_QUESTIONS,
|
|
193
|
+
instruction: 'Ask the user these 5 questions, then call create_spec again with the answers.',
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// MODE 2: Save mode - generate spec from answers and save
|
|
27
197
|
const slug = slugify(task);
|
|
28
198
|
// Ensure specs directory exists
|
|
29
199
|
const specsDir = join(expandedPath, '.agentbrain', 'specs');
|
|
30
200
|
if (!existsSync(specsDir)) {
|
|
31
201
|
await mkdir(specsDir, { recursive: true });
|
|
32
202
|
}
|
|
203
|
+
// Generate spec content from template
|
|
204
|
+
const specContent = generateSpecFromTemplate(task, answers, expandedPath);
|
|
33
205
|
// Write spec file
|
|
34
206
|
const specPath = join(specsDir, `${slug}.md`);
|
|
35
|
-
await writeFile(specPath,
|
|
207
|
+
await writeFile(specPath, specContent, 'utf-8');
|
|
208
|
+
// Inject reference into detected agent file
|
|
209
|
+
await injectSpecReference(expandedPath, slug);
|
|
210
|
+
// Get which file was updated for user message
|
|
211
|
+
const agentFilePath = getAgentFilePath(expandedPath);
|
|
212
|
+
const agentFileName = basename(agentFilePath);
|
|
36
213
|
return {
|
|
37
|
-
|
|
214
|
+
mode: 'save',
|
|
215
|
+
success: true,
|
|
216
|
+
spec_path: `.agentbrain/specs/${slug}.md`,
|
|
38
217
|
slug,
|
|
218
|
+
message: `Spec saved to .agentbrain/specs/${slug}.md
|
|
219
|
+
|
|
220
|
+
Reference added to ${agentFileName}
|
|
221
|
+
|
|
222
|
+
Next: Review the spec and start implementing!`,
|
|
39
223
|
};
|
|
40
224
|
}
|
|
41
225
|
export const createSpecSchema = {
|
|
42
226
|
name: 'create_spec',
|
|
43
|
-
description: '
|
|
227
|
+
description: 'Create structured spec for a task. Two modes: (1) Questions mode - call without answers to get 5 questions for the user. (2) Save mode - call with answers to generate and save the spec. No API key required.',
|
|
44
228
|
inputSchema: {
|
|
45
229
|
type: 'object',
|
|
46
230
|
properties: {
|
|
47
|
-
|
|
231
|
+
repo_path: {
|
|
48
232
|
type: 'string',
|
|
49
233
|
description: 'Absolute path to the repository',
|
|
50
234
|
},
|
|
51
235
|
task: {
|
|
52
236
|
type: 'string',
|
|
53
|
-
description: 'Task
|
|
237
|
+
description: 'Task description (e.g., "add stripe billing")',
|
|
54
238
|
},
|
|
55
|
-
|
|
56
|
-
type: '
|
|
57
|
-
description: '
|
|
239
|
+
answers: {
|
|
240
|
+
type: 'object',
|
|
241
|
+
description: 'Answers to the 5 spec questions (omit to get questions first)',
|
|
242
|
+
properties: {
|
|
243
|
+
problem: {
|
|
244
|
+
type: 'string',
|
|
245
|
+
description: 'What problem does this solve?',
|
|
246
|
+
},
|
|
247
|
+
approach: {
|
|
248
|
+
type: 'string',
|
|
249
|
+
description: 'Implementation approach or idea',
|
|
250
|
+
},
|
|
251
|
+
out_of_scope: {
|
|
252
|
+
type: 'string',
|
|
253
|
+
description: 'What should NOT be changed',
|
|
254
|
+
},
|
|
255
|
+
done_criteria: {
|
|
256
|
+
type: 'string',
|
|
257
|
+
description: 'Acceptance criteria for completion',
|
|
258
|
+
},
|
|
259
|
+
risks: {
|
|
260
|
+
type: 'string',
|
|
261
|
+
description: 'Edge cases or risks to consider',
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
required: ['problem', 'approach', 'out_of_scope', 'done_criteria', 'risks'],
|
|
58
265
|
},
|
|
59
266
|
},
|
|
60
|
-
required: ['
|
|
267
|
+
required: ['repo_path', 'task'],
|
|
61
268
|
},
|
|
62
269
|
};
|
|
63
270
|
//# sourceMappingURL=create-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-spec.js","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"create-spec.js","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-context.d.ts","sourceRoot":"","sources":["../../src/tools/load-context.ts"],"names":[],"mappings":"AAMA,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,kBAAkB,CAAA;AAazB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACxC;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"load-context.d.ts","sourceRoot":"","sources":["../../src/tools/load-context.ts"],"names":[],"mappings":"AAMA,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,kBAAkB,CAAA;AAazB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACxC;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuLrF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAkB7B,CAAA"}
|
|
@@ -4,7 +4,6 @@ import { existsSync } from 'node:fs';
|
|
|
4
4
|
import { join, resolve } from 'node:path';
|
|
5
5
|
import { homedir } from 'node:os';
|
|
6
6
|
import { loadAIConfig, generateContext, getCachedDoc, getGitHash, loadCache, getPendingDoomForMCP, ensureGitignore, installPostCommitHook, isGitRepository, createAgentFilesShared, } from '@agentbrain/core';
|
|
7
|
-
import { setupRepo } from './setup-repo.js';
|
|
8
7
|
/**
|
|
9
8
|
* Expand path: handles ~, relative paths, etc.
|
|
10
9
|
*/
|
|
@@ -88,8 +87,9 @@ export async function loadContext(input) {
|
|
|
88
87
|
const isStale = cache && cache.gitHash !== currentGitHash;
|
|
89
88
|
// Check for doom loop warnings
|
|
90
89
|
const doomWarning = await getPendingDoomForMCP(expandedPath);
|
|
90
|
+
const footer = '\n\n---\n_AgentBrain context loaded. Check doom_warning field for any detected issues._';
|
|
91
91
|
return {
|
|
92
|
-
content: combined,
|
|
92
|
+
content: combined + footer,
|
|
93
93
|
fromCache: true,
|
|
94
94
|
tokensUsed: 0,
|
|
95
95
|
...(isStale && {
|
|
@@ -112,8 +112,9 @@ export async function loadContext(input) {
|
|
|
112
112
|
const isStale = cache && cache.gitHash !== currentGitHash;
|
|
113
113
|
// Check for doom loop warnings
|
|
114
114
|
const doomWarning = await getPendingDoomForMCP(expandedPath);
|
|
115
|
+
const footer = '\n\n---\n_AgentBrain context loaded. Check doom_warning field for any detected issues._';
|
|
115
116
|
return {
|
|
116
|
-
content: combined,
|
|
117
|
+
content: combined + footer,
|
|
117
118
|
fromCache: true,
|
|
118
119
|
tokensUsed: 0,
|
|
119
120
|
...(isStale && {
|
|
@@ -125,58 +126,20 @@ export async function loadContext(input) {
|
|
|
125
126
|
doom_warning: doomWarning,
|
|
126
127
|
};
|
|
127
128
|
}
|
|
128
|
-
// Need to generate -
|
|
129
|
-
let aiConfig;
|
|
129
|
+
// Need to generate - no API key path returns bootstrap message
|
|
130
|
+
let aiConfig = null;
|
|
130
131
|
try {
|
|
131
132
|
aiConfig = await loadAIConfig();
|
|
132
133
|
}
|
|
133
134
|
catch {
|
|
134
|
-
// No API key
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const fileTreeSection = `\n## 📁 Repository Structure\n\n${setupData.file_tree}\n`;
|
|
138
|
-
// Format key files (truncate for readability)
|
|
139
|
-
const keyFilesSection = `\n## 🔑 Key Files Found\n\n${setupData.key_files.slice(0, 10).map(f => {
|
|
140
|
-
const preview = f.content.slice(0, 300);
|
|
141
|
-
return `**${f.path}**\n\`\`\`\n${preview}${f.content.length > 300 ? '\n...(truncated)' : ''}\n\`\`\``;
|
|
142
|
-
}).join('\n\n')}`;
|
|
143
|
-
const friendlyMessage = `👋 Looks like this is your first time setting up AgentBrain for this repo! Let me help you get started.
|
|
144
|
-
|
|
145
|
-
I've scanned your repository and found ${setupData.key_files.length} key files. Now I need you to analyze the code and create three context documents:
|
|
146
|
-
|
|
147
|
-
${fileTreeSection}
|
|
148
|
-
${keyFilesSection}
|
|
149
|
-
|
|
150
|
-
## 📝 What I Need You To Create
|
|
151
|
-
|
|
152
|
-
Based on the files above, please generate these three documents:
|
|
153
|
-
|
|
154
|
-
**1. context.md** - Architecture overview covering:
|
|
155
|
-
- What this codebase does (product purpose)
|
|
156
|
-
- Tech stack and key frameworks
|
|
157
|
-
- Repository structure and main directories
|
|
158
|
-
- Entry points and core flows
|
|
159
|
-
|
|
160
|
-
**2. dependency-map.md** - Dependency relationships covering:
|
|
161
|
-
- How modules/services relate to each other
|
|
162
|
-
- Data flow through the system
|
|
163
|
-
- External dependencies and their purposes
|
|
164
|
-
|
|
165
|
-
**3. patterns.md** - Coding patterns covering:
|
|
166
|
-
- Code conventions used consistently
|
|
167
|
-
- How new features should be structured
|
|
168
|
-
- Error handling approaches
|
|
169
|
-
- Important patterns developers should follow
|
|
135
|
+
// No API key - return simple bootstrap message
|
|
136
|
+
return {
|
|
137
|
+
content: `AgentBrain context not found for this repository.
|
|
170
138
|
|
|
171
|
-
|
|
172
|
-
-
|
|
173
|
-
- dependency_map: [your dependency-map.md content]
|
|
174
|
-
- patterns: [your patterns.md content]
|
|
175
|
-
- repo_path: "${expandedPath}"
|
|
139
|
+
Run setup_repo to scan the repo and get setup instructions.
|
|
140
|
+
This is a one-time setup — future sessions load instantly.
|
|
176
141
|
|
|
177
|
-
|
|
178
|
-
return {
|
|
179
|
-
content: friendlyMessage,
|
|
142
|
+
Call: setup_repo({ repo_path: '${expandedPath}' })`,
|
|
180
143
|
fromCache: false,
|
|
181
144
|
tokensUsed: 0,
|
|
182
145
|
doom_warning: null,
|
|
@@ -194,8 +157,9 @@ ${setupData.hook_installed ? '\n✅ Git hook installed - context will auto-updat
|
|
|
194
157
|
// Check for doom loop warnings
|
|
195
158
|
const doomWarning = await getPendingDoomForMCP(expandedPath);
|
|
196
159
|
// Newly generated content is never stale
|
|
160
|
+
const footer = '\n\n---\n_AgentBrain context loaded. Check doom_warning field for any detected issues._';
|
|
197
161
|
return {
|
|
198
|
-
content: combined,
|
|
162
|
+
content: combined + footer,
|
|
199
163
|
fromCache: false,
|
|
200
164
|
tokensUsed: result.totalTokens,
|
|
201
165
|
doom_warning: doomWarning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-context.js","sourceRoot":"","sources":["../../src/tools/load-context.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,oBAAoB,EAEpB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"load-context.js","sourceRoot":"","sources":["../../src/tools/load-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { type DoomWarningForMCP } from '@agentbrain/core';
|
|
2
1
|
export interface LoadSpecInput {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
repo_path?: string;
|
|
3
|
+
id?: string;
|
|
4
|
+
search?: string;
|
|
5
|
+
group?: string;
|
|
6
|
+
all?: boolean;
|
|
5
7
|
}
|
|
6
8
|
export interface LoadSpecOutput {
|
|
7
9
|
content: string;
|
|
8
|
-
|
|
9
|
-
doom_warning?: DoomWarningForMCP | null;
|
|
10
|
+
found: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare const loadSpecSchema: {
|
|
12
13
|
name: string;
|
|
@@ -14,16 +15,28 @@ export declare const loadSpecSchema: {
|
|
|
14
15
|
inputSchema: {
|
|
15
16
|
type: string;
|
|
16
17
|
properties: {
|
|
17
|
-
|
|
18
|
+
repo_path: {
|
|
18
19
|
type: string;
|
|
19
20
|
description: string;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
+
id: {
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
search: {
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
group: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
all: {
|
|
22
35
|
type: string;
|
|
23
36
|
description: string;
|
|
24
37
|
};
|
|
25
38
|
};
|
|
26
|
-
required:
|
|
39
|
+
required: never[];
|
|
27
40
|
};
|
|
28
41
|
};
|
|
29
42
|
export declare function loadSpecTool(input: LoadSpecInput): Promise<LoadSpecOutput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-spec.d.ts","sourceRoot":"","sources":["../../src/tools/load-spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load-spec.d.ts","sourceRoot":"","sources":["../../src/tools/load-spec.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AA8CD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC1B,CAAA;AAiJD,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA0GhF"}
|
package/dist/tools/load-spec.js
CHANGED
|
@@ -1,57 +1,270 @@
|
|
|
1
|
-
// MCP tool: load_spec - Load specification files
|
|
2
|
-
import { listSpecs, loadSpec
|
|
1
|
+
// MCP tool: load_spec - Load specification files (local or cloud)
|
|
2
|
+
import { listSpecs, loadSpec } from '@agentbrain/core';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { homedir } from 'node:os';
|
|
7
|
+
// ══════════════════════════════════════════════════════════════
|
|
8
|
+
// Environment & Configuration
|
|
9
|
+
// ══════════════════════════════════════════════════════════════
|
|
10
|
+
const BASE_URL = process.env.AGENTBRAIN_API_BASE_URL?.replace(/\/$/, '') ??
|
|
11
|
+
'https://useagentbrain.com/api/v1';
|
|
12
|
+
const SPECS_URL = `${BASE_URL}/specs`;
|
|
13
|
+
/**
|
|
14
|
+
* Expand path: handles ~, relative paths, etc.
|
|
15
|
+
*/
|
|
16
|
+
function expandPath(path) {
|
|
17
|
+
if (path.startsWith('~/') || path === '~') {
|
|
18
|
+
return path.replace('~', homedir());
|
|
19
|
+
}
|
|
20
|
+
// Return absolute path
|
|
21
|
+
if (!path.startsWith('/')) {
|
|
22
|
+
return join(process.cwd(), path);
|
|
23
|
+
}
|
|
24
|
+
return path;
|
|
25
|
+
}
|
|
26
|
+
// ══════════════════════════════════════════════════════════════
|
|
27
|
+
// Schema
|
|
28
|
+
// ══════════════════════════════════════════════════════════════
|
|
3
29
|
export const loadSpecSchema = {
|
|
4
30
|
name: 'load_spec',
|
|
5
|
-
description: 'Load
|
|
31
|
+
description: 'Load spec for the current task.\n\n' +
|
|
32
|
+
'With AGENTBRAIN_API_KEY set in your MCP env:\n' +
|
|
33
|
+
' - No args → your assigned in_progress spec\n' +
|
|
34
|
+
' - id: "abc123" → spec by public ID (exact)\n' +
|
|
35
|
+
' - search: "stripe" → specs matching title/slug\n' +
|
|
36
|
+
' - group: "payments" → all specs in group\n' +
|
|
37
|
+
' - all: true → all specs assigned to you\n' +
|
|
38
|
+
' - Add repo_path to any call to cache locally\n\n' +
|
|
39
|
+
'Without AGENTBRAIN_API_KEY:\n' +
|
|
40
|
+
' - Reads from .agentbrain/specs/ on disk\n' +
|
|
41
|
+
' - repo_path required in local mode',
|
|
6
42
|
inputSchema: {
|
|
7
43
|
type: 'object',
|
|
8
44
|
properties: {
|
|
9
|
-
|
|
45
|
+
repo_path: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Optional: Absolute path to repository. If provided, caches spec to disk at .agentbrain/specs/',
|
|
48
|
+
},
|
|
49
|
+
id: {
|
|
10
50
|
type: 'string',
|
|
11
|
-
description: '
|
|
51
|
+
description: 'Optional: Fetch by public_id (exact match)',
|
|
12
52
|
},
|
|
13
|
-
|
|
53
|
+
search: {
|
|
14
54
|
type: 'string',
|
|
15
|
-
description: 'Optional:
|
|
55
|
+
description: 'Optional: Fetch by partial title or slug match (e.g., "stripe" matches "add-stripe-billing")',
|
|
56
|
+
},
|
|
57
|
+
group: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'Optional: Fetch all specs in this group slug (e.g., "payments", "auth")',
|
|
60
|
+
},
|
|
61
|
+
all: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
description: 'Optional: If true, fetch all specs assigned to user across all statuses',
|
|
16
64
|
},
|
|
17
65
|
},
|
|
18
|
-
required: [
|
|
66
|
+
required: [],
|
|
19
67
|
},
|
|
20
68
|
};
|
|
69
|
+
// ══════════════════════════════════════════════════════════════
|
|
70
|
+
// API Client
|
|
71
|
+
// ══════════════════════════════════════════════════════════════
|
|
72
|
+
async function fetchSpecs(apiKey, params) {
|
|
73
|
+
const url = new URL(SPECS_URL);
|
|
74
|
+
if (params.id)
|
|
75
|
+
url.searchParams.set('id', params.id);
|
|
76
|
+
if (params.search)
|
|
77
|
+
url.searchParams.set('search', params.search);
|
|
78
|
+
if (params.group)
|
|
79
|
+
url.searchParams.set('group', params.group);
|
|
80
|
+
if (params.all)
|
|
81
|
+
url.searchParams.set('all', 'true');
|
|
82
|
+
const res = await fetch(url.toString(), {
|
|
83
|
+
method: 'GET',
|
|
84
|
+
headers: {
|
|
85
|
+
Authorization: `Bearer ${apiKey}`,
|
|
86
|
+
'Content-Type': 'application/json',
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
const json = (await res.json());
|
|
90
|
+
if (res.status === 401) {
|
|
91
|
+
throw new Error('Invalid AGENTBRAIN_API_KEY. Check your MCP config env block.');
|
|
92
|
+
}
|
|
93
|
+
if (res.status === 429) {
|
|
94
|
+
throw new Error('Rate limit exceeded. Max 100 requests per minute.');
|
|
95
|
+
}
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
throw new Error(json.error ?? 'Failed to fetch spec from AgentBrain.');
|
|
98
|
+
}
|
|
99
|
+
return json;
|
|
100
|
+
}
|
|
101
|
+
// ══════════════════════════════════════════════════════════════
|
|
102
|
+
// Formatting
|
|
103
|
+
// ══════════════════════════════════════════════════════════════
|
|
104
|
+
function formatSpecs(specs) {
|
|
105
|
+
if (specs.length === 0) {
|
|
106
|
+
return 'No specs found.';
|
|
107
|
+
}
|
|
108
|
+
if (specs.length === 1) {
|
|
109
|
+
return formatSingleSpec(specs[0]);
|
|
110
|
+
}
|
|
111
|
+
return specs.map((s) => formatSingleSpec(s)).join('\n\n---\n\n');
|
|
112
|
+
}
|
|
113
|
+
function formatSingleSpec(spec) {
|
|
114
|
+
const group = spec.group ? `Group: ${spec.group.name}` : '';
|
|
115
|
+
const deps = spec.dependencies?.length
|
|
116
|
+
? '\n## Dependencies\n' +
|
|
117
|
+
spec.dependencies
|
|
118
|
+
.map((d) => {
|
|
119
|
+
const status = d.status === 'done' ? '✅' : '⚠ not complete';
|
|
120
|
+
const grp = d.group ? ` (${d.group.name})` : '';
|
|
121
|
+
return `- ${d.title}${grp} — ${status}`;
|
|
122
|
+
})
|
|
123
|
+
.join('\n')
|
|
124
|
+
: '';
|
|
125
|
+
const approach = Array.isArray(spec.answers.approach)
|
|
126
|
+
? spec.answers.approach.map((a) => `- ${a}`).join('\n')
|
|
127
|
+
: spec.answers.approach;
|
|
128
|
+
const outOfScope = spec.answers.out_of_scope?.length
|
|
129
|
+
? spec.answers.out_of_scope.map((o) => `- ${o}`).join('\n')
|
|
130
|
+
: 'None specified';
|
|
131
|
+
const doneCriteria = Array.isArray(spec.answers.done_criteria)
|
|
132
|
+
? spec.answers.done_criteria.map((d) => `- [ ] ${d}`).join('\n')
|
|
133
|
+
: spec.answers.done_criteria;
|
|
134
|
+
const risks = spec.answers.risks?.length
|
|
135
|
+
? spec.answers.risks.map((r) => `- ${r}`).join('\n')
|
|
136
|
+
: 'None identified';
|
|
137
|
+
const additionalInfo = spec.answers.additional_info
|
|
138
|
+
? `\n## Additional Info\n${spec.answers.additional_info}`
|
|
139
|
+
: '';
|
|
140
|
+
return `# ${spec.title}
|
|
141
|
+
${group}
|
|
142
|
+
Status: ${spec.status}
|
|
143
|
+
ID: ${spec.public_id}
|
|
144
|
+
|
|
145
|
+
## Problem
|
|
146
|
+
${spec.answers.problem}
|
|
147
|
+
|
|
148
|
+
## Approach
|
|
149
|
+
${approach}
|
|
150
|
+
|
|
151
|
+
## Out of Scope
|
|
152
|
+
${outOfScope}
|
|
153
|
+
|
|
154
|
+
## Done Criteria
|
|
155
|
+
${doneCriteria}
|
|
156
|
+
|
|
157
|
+
## Risks
|
|
158
|
+
${risks}
|
|
159
|
+
${additionalInfo}
|
|
160
|
+
${deps}`;
|
|
161
|
+
}
|
|
162
|
+
// ══════════════════════════════════════════════════════════════
|
|
163
|
+
// Cache to Disk
|
|
164
|
+
// ══════════════════════════════════════════════════════════════
|
|
165
|
+
async function cacheSpecsToDisk(repoPath, specs) {
|
|
166
|
+
const expandedPath = expandPath(repoPath);
|
|
167
|
+
const specsDir = join(expandedPath, '.agentbrain', 'specs');
|
|
168
|
+
await mkdir(specsDir, { recursive: true });
|
|
169
|
+
for (const spec of specs) {
|
|
170
|
+
// Group specs into subdirectory if group exists
|
|
171
|
+
const fileName = spec.group ? `${spec.group.slug}/${spec.slug}.md` : `${spec.slug}.md`;
|
|
172
|
+
const filePath = join(specsDir, fileName);
|
|
173
|
+
// Create group subdirectory if needed
|
|
174
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
175
|
+
// Write formatted markdown
|
|
176
|
+
await writeFile(filePath, formatSingleSpec(spec), 'utf-8');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// ══════════════════════════════════════════════════════════════
|
|
180
|
+
// Main Tool Function
|
|
181
|
+
// ══════════════════════════════════════════════════════════════
|
|
21
182
|
export async function loadSpecTool(input) {
|
|
22
|
-
const
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
183
|
+
const apiKey = process.env.AGENTBRAIN_API_KEY;
|
|
184
|
+
// ── Cloud mode ──────────────────────────────
|
|
185
|
+
if (apiKey) {
|
|
186
|
+
let response;
|
|
187
|
+
try {
|
|
188
|
+
response = await fetchSpecs(apiKey, {
|
|
189
|
+
id: input.id,
|
|
190
|
+
search: input.search,
|
|
191
|
+
group: input.group,
|
|
192
|
+
all: input.all,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
return {
|
|
197
|
+
content: err instanceof Error ? err.message : 'Failed to fetch spec.',
|
|
198
|
+
found: false,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
// No spec found
|
|
202
|
+
if (!response.data) {
|
|
203
|
+
return {
|
|
204
|
+
content: response.message ??
|
|
205
|
+
'No active spec found. Create or assign one at useagentbrain.com/specs',
|
|
206
|
+
found: false,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
// Normalize to array
|
|
210
|
+
const specs = Array.isArray(response.data) ? response.data : [response.data];
|
|
211
|
+
// Cache to disk if repo_path provided
|
|
212
|
+
if (input.repo_path) {
|
|
213
|
+
await cacheSpecsToDisk(input.repo_path, specs);
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
content: formatSpecs(specs),
|
|
217
|
+
found: true,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// ── Local mode ──────────────────────────────
|
|
221
|
+
if (!input.repo_path) {
|
|
222
|
+
return {
|
|
223
|
+
content: 'repo_path is required in local mode (no AGENTBRAIN_API_KEY set). ' +
|
|
224
|
+
'Provide the absolute path to your repository.',
|
|
225
|
+
found: false,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const expandedPath = expandPath(input.repo_path);
|
|
229
|
+
const specsDir = join(expandedPath, '.agentbrain', 'specs');
|
|
230
|
+
if (!existsSync(specsDir)) {
|
|
231
|
+
return {
|
|
232
|
+
content: 'No specs found locally. .agentbrain/specs/ directory does not exist.\n\n' +
|
|
233
|
+
'To use cloud specs, set AGENTBRAIN_API_KEY in your MCP config env block.',
|
|
234
|
+
found: false,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// If specific query provided in local mode, try to match by slug
|
|
238
|
+
if (input.id || input.search) {
|
|
239
|
+
const query = input.id || input.search || '';
|
|
240
|
+
const slug = query
|
|
241
|
+
.toLowerCase()
|
|
242
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
243
|
+
.replace(/^-+|-+$/g, '');
|
|
244
|
+
const content = await loadSpec(input.repo_path, slug);
|
|
245
|
+
if (!content) {
|
|
29
246
|
return {
|
|
30
|
-
content:
|
|
31
|
-
|
|
247
|
+
content: `Spec not found locally: ${slug}\n\nAvailable specs:\n${(await listSpecs(input.repo_path)).map((s) => `- ${s}`).join('\n')}`,
|
|
248
|
+
found: false,
|
|
32
249
|
};
|
|
33
250
|
}
|
|
34
251
|
return {
|
|
35
|
-
content
|
|
36
|
-
|
|
252
|
+
content,
|
|
253
|
+
found: true,
|
|
37
254
|
};
|
|
38
255
|
}
|
|
39
|
-
//
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
43
|
-
.replace(/^-+|-+$/g, '');
|
|
44
|
-
const content = await loadSpec(repoPath, slug);
|
|
45
|
-
if (!content) {
|
|
256
|
+
// List all local specs
|
|
257
|
+
const specs = await listSpecs(input.repo_path);
|
|
258
|
+
if (specs.length === 0) {
|
|
46
259
|
return {
|
|
47
|
-
content:
|
|
48
|
-
|
|
260
|
+
content: 'No specs found locally in .agentbrain/specs/\n\n' +
|
|
261
|
+
'To use cloud specs, set AGENTBRAIN_API_KEY in your MCP config env block.',
|
|
262
|
+
found: false,
|
|
49
263
|
};
|
|
50
264
|
}
|
|
51
265
|
return {
|
|
52
|
-
content,
|
|
53
|
-
|
|
54
|
-
doom_warning: doomWarning,
|
|
266
|
+
content: `Local specs:\n\n${specs.map((s) => `- ${s}`).join('\n')}\n\nTo load a spec, provide id or search parameter.`,
|
|
267
|
+
found: true,
|
|
55
268
|
};
|
|
56
269
|
}
|
|
57
270
|
//# sourceMappingURL=load-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-spec.js","sourceRoot":"","sources":["../../src/tools/load-spec.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"load-spec.js","sourceRoot":"","sources":["../../src/tools/load-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC5D,OAAO,EAAE,MAAM,CAAA;CAChB;AAgGD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"save-context.d.ts","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC5D,OAAO,EAAE,MAAM,CAAA;CAChB;AAgGD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6IrF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CA0B7B,CAAA"}
|
|
@@ -198,19 +198,27 @@ export async function saveContext(input) {
|
|
|
198
198
|
message = 'Updated existing CLAUDE.md';
|
|
199
199
|
}
|
|
200
200
|
else {
|
|
201
|
-
// Nothing detected
|
|
202
|
-
|
|
203
|
-
await updateOrAppendAgentSection(
|
|
204
|
-
filesWritten.push('.
|
|
205
|
-
message = 'Created .
|
|
201
|
+
// Nothing detected — create CLAUDE.md as safe default
|
|
202
|
+
// CLAUDE.md works across all agents
|
|
203
|
+
await updateOrAppendAgentSection(claudePath, legacyContent);
|
|
204
|
+
filesWritten.push('CLAUDE.md');
|
|
205
|
+
message = 'Created CLAUDE.md (universal format)';
|
|
206
206
|
}
|
|
207
207
|
// Determine agent type for response
|
|
208
208
|
let detectedAgent = detectAgentType(expandedPath);
|
|
209
|
+
// Extract agent file name from message for cleaner output
|
|
210
|
+
const agentFile = message.split(' ').slice(-1)[0];
|
|
211
|
+
const responseMessage = `Context saved to .agentbrain/
|
|
212
|
+
|
|
213
|
+
Files written: ${filesWritten.join(', ')}
|
|
214
|
+
Agent file: ${agentFile}
|
|
215
|
+
|
|
216
|
+
Call load_context() to verify context loads correctly.`;
|
|
209
217
|
return {
|
|
210
218
|
success: true,
|
|
211
219
|
files_written: filesWritten,
|
|
212
220
|
agent_detected: detectedAgent,
|
|
213
|
-
message:
|
|
221
|
+
message: responseMessage,
|
|
214
222
|
};
|
|
215
223
|
}
|
|
216
224
|
export const saveContextSchema = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-context.js","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"save-context.js","sourceRoot":"","sources":["../../src/tools/save-context.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9D;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAkBD;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,cAAuB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;gDAmB0B,CAAA;IAE9C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;;;;;EAKT,WAAW,EAAE,CAAA;IACb,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,OAAO,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,0BAA0B,CAAC,QAAgB,EAAE,OAAe;IACzE,MAAM,MAAM,GAAG,gDAAgD,CAAA;IAC/D,MAAM,SAAS,GAAG,gDAAgD,CAAA;IAElE,IAAI,eAAe,GAAG,EAAE,CAAA;IACxB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,eAAe,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;IAED,6CAA6C;IAC7C,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QAClF,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAC3C,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,CACtD,CAAA;QACD,MAAM,UAAU,GAAG,GAAG,YAAY,GAAG,MAAM,KAAK,OAAO,KAAK,SAAS,GAAG,WAAW,EAAE,CAAA;QACrF,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;SAAM,CAAC;QACN,qBAAqB;QACrB,MAAM,iBAAiB,GAAG,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS,IAAI,CAAA;QACnE,MAAM,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACzE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAE9D,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;IACpD,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,2DAA2D;IAC3D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAEpD,MAAM,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEhD,YAAY,CAAC,IAAI,CAAC,wBAAwB,EAAE,+BAA+B,EAAE,yBAAyB,CAAC,CAAA;IAEvG,oDAAoD;IACpD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAA;IAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAChD,MAAM,KAAK,GAAG;QACZ,OAAO;QACP,IAAI,EAAE;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,SAAkB;gBACxB,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAClC;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,gBAAyB;gBAC/B,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAClC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,UAAmB;gBACzB,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAClC;SACF;QACD,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAClC,CAAA;IAED,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACnE,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IAE3C,kDAAkD;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;IAC7D,MAAM,SAAS,CACb,eAAe,EACf,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7E,OAAO,CACR,CAAA;IACD,YAAY,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAElD,8FAA8F;IAC9F,8EAA8E;IAC9E,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,YAAY,CAAC,CAAA;QACnC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAA;IAChE,CAAC;IAED,0DAA0D;IAC1D,qEAAqE;IACrE,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAEhD,IAAI,OAAO,GAAG,EAAE,CAAA;IAEhB,mBAAmB;IACnB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;IAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IACjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAA;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAElD,qDAAqD;IACrD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,4BAA4B;QAC5B,MAAM,0BAA0B,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;QAC5D,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACjC,OAAO,GAAG,+BAA+B,CAAA;IAC3C,CAAC;SAAM,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACtC,iCAAiC;QACjC,MAAM,0BAA0B,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;QACjE,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QACjD,OAAO,GAAG,sCAAsC,CAAA;IAClD,CAAC;SAAM,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,mCAAmC;QACnC,MAAM,0BAA0B,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAA;QACnE,YAAY,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QAClD,OAAO,GAAG,uCAAuC,CAAA;IACnD,CAAC;SAAM,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,8BAA8B;QAC9B,MAAM,0BAA0B,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAC9D,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACnC,OAAO,GAAG,iCAAiC,CAAA;IAC7C,CAAC;SAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,qBAAqB;QACrB,MAAM,0BAA0B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC3D,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC9B,OAAO,GAAG,4BAA4B,CAAA;IACxC,CAAC;SAAM,CAAC;QACN,sDAAsD;QACtD,oCAAoC;QACpC,MAAM,0BAA0B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC3D,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC9B,OAAO,GAAG,sCAAsC,CAAA;IAClD,CAAC;IAED,oCAAoC;IACpC,IAAI,aAAa,GAAc,eAAe,CAAC,YAAY,CAAC,CAAA;IAE5D,0DAA0D;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,eAAe,GAAG;;iBAET,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;cAC1B,SAAS;;uDAEgC,CAAA;IAErD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,YAAY;QAC3B,cAAc,EAAE,aAAa;QAC7B,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,8KAA8K;IAChL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4DAA4D;aAC1E;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4DAA4D;aAC1E;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC;KACjE;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-repo.d.ts","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IACF,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"setup-repo.d.ts","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC,CAAA;IACF,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA6F/E;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAc3B,CAAA"}
|
package/dist/tools/setup-repo.js
CHANGED
|
@@ -17,18 +17,19 @@ export async function setupRepo(input) {
|
|
|
17
17
|
const expandedPath = expandPath(repo_path);
|
|
18
18
|
// Scan the repository to get relevant files
|
|
19
19
|
const scanResult = await scanRepository(expandedPath, { maxFiles: 30 });
|
|
20
|
-
// Build file tree visualization
|
|
20
|
+
// Build file tree visualization (limit to 100 lines)
|
|
21
21
|
const fileTree = scanResult.relevantFiles
|
|
22
|
-
.
|
|
22
|
+
.slice(0, 100)
|
|
23
|
+
.map((f) => f.path)
|
|
23
24
|
.join('\n');
|
|
24
|
-
// Read content of top files (
|
|
25
|
+
// Read content of top files (limit to 15 files, 500 chars each)
|
|
25
26
|
const keyFiles = [];
|
|
26
|
-
for (const file of scanResult.relevantFiles.slice(0,
|
|
27
|
+
for (const file of scanResult.relevantFiles.slice(0, 15)) {
|
|
27
28
|
const content = await readFileContent(expandedPath, file.path);
|
|
28
29
|
if (content !== null) {
|
|
29
30
|
keyFiles.push({
|
|
30
31
|
path: file.path,
|
|
31
|
-
content,
|
|
32
|
+
content: content.slice(0, 500) + (content.length > 500 ? '\n...(truncated)' : ''),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-repo.js","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE3B,gDAAgD;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAE1C,4CAA4C;IAC5C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IAEvE,
|
|
1
|
+
{"version":3,"file":"setup-repo.js","sourceRoot":"","sources":["../../src/tools/setup-repo.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED