@2amtech/hai 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -18
- package/dist/cli.js +0 -0
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pull.js +24 -12
- package/dist/commands/pull.js.map +1 -1
- package/dist/helpers/init.js.map +1 -1
- package/dist/helpers/preflight.d.ts +1 -1
- package/dist/helpers/preflight.js +1 -1
- package/dist/helpers/preflight.js.map +1 -1
- package/dist/helpers/pull.d.ts +1 -0
- package/dist/helpers/pull.js +2 -0
- package/dist/helpers/pull.js.map +1 -1
- package/dist/plugins/atlassian/adf/convert.d.ts +4 -0
- package/dist/plugins/atlassian/adf/convert.js +171 -0
- package/dist/plugins/atlassian/adf/convert.js.map +1 -0
- package/dist/plugins/atlassian/adf/marks.d.ts +4 -0
- package/dist/plugins/atlassian/adf/marks.js +34 -0
- package/dist/plugins/atlassian/adf/marks.js.map +1 -0
- package/dist/plugins/atlassian/adf/tables.d.ts +11 -0
- package/dist/plugins/atlassian/adf/tables.js +73 -0
- package/dist/plugins/atlassian/adf/tables.js.map +1 -0
- package/dist/plugins/atlassian/adf/types.d.ts +14 -0
- package/dist/plugins/atlassian/adf/types.js +2 -0
- package/dist/plugins/atlassian/adf/types.js.map +1 -0
- package/dist/plugins/atlassian/adf-to-markdown.d.ts +2 -11
- package/dist/plugins/atlassian/adf-to-markdown.js +1 -120
- package/dist/plugins/atlassian/adf-to-markdown.js.map +1 -1
- package/dist/plugins/atlassian/confluence-client.d.ts +1 -1
- package/dist/plugins/atlassian/confluence-client.js +49 -21
- package/dist/plugins/atlassian/confluence-client.js.map +1 -1
- package/dist/plugins/vscode-copilot/agents.js.map +1 -1
- package/dist/plugins/vscode-copilot/index.js.map +1 -1
- package/dist/plugins/vscode-copilot/prompts.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/wizard/summary-step.d.ts +1 -1
- package/dist/wizard/summary-step.js +5 -3
- package/dist/wizard/summary-step.js.map +1 -1
- package/package.json +9 -7
- package/dist/commands/mcp/specs.d.ts +0 -2
- package/dist/commands/mcp/specs.js +0 -325
- package/dist/commands/mcp/specs.js.map +0 -1
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
3
|
-
import { join, relative } from 'node:path';
|
|
4
|
-
import { walkMdFiles } from '../../helpers/fs.js';
|
|
5
|
-
import { mcpError, mcpSuccess, errorText } from './helpers.js';
|
|
6
|
-
export function registerSpecTools(server, workspaceFolder) {
|
|
7
|
-
const specsDir = join(workspaceFolder, '.ai', 'specs');
|
|
8
|
-
server.registerTool('spec_get', {
|
|
9
|
-
description: 'Read a local spec file by path (relative to .ai/specs/)',
|
|
10
|
-
inputSchema: {
|
|
11
|
-
path: z
|
|
12
|
-
.string()
|
|
13
|
-
.describe("File path relative to .ai/specs/, e.g. 'my-project/overview.md'"),
|
|
14
|
-
},
|
|
15
|
-
outputSchema: {
|
|
16
|
-
path: z.string().describe('The requested spec file path'),
|
|
17
|
-
content: z
|
|
18
|
-
.string()
|
|
19
|
-
.describe('Markdown content of the spec file'),
|
|
20
|
-
},
|
|
21
|
-
}, async ({ path }) => {
|
|
22
|
-
try {
|
|
23
|
-
const fullPath = join(specsDir, path);
|
|
24
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
25
|
-
return mcpSuccess({ path, content }, content);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
return mcpError(errorText(error));
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
server.registerTool('spec_list', {
|
|
32
|
-
description: 'List all local spec files under .ai/specs/',
|
|
33
|
-
inputSchema: {},
|
|
34
|
-
outputSchema: {
|
|
35
|
-
files: z
|
|
36
|
-
.array(z.string())
|
|
37
|
-
.describe('List of spec file paths relative to .ai/specs/'),
|
|
38
|
-
count: z.number().describe('Total number of spec files'),
|
|
39
|
-
},
|
|
40
|
-
}, async () => {
|
|
41
|
-
try {
|
|
42
|
-
const files = [];
|
|
43
|
-
for await (const fullPath of walkMdFiles(specsDir)) {
|
|
44
|
-
files.push(relative(specsDir, fullPath));
|
|
45
|
-
}
|
|
46
|
-
files.sort();
|
|
47
|
-
const structuredContent = {
|
|
48
|
-
files,
|
|
49
|
-
count: files.length,
|
|
50
|
-
};
|
|
51
|
-
return mcpSuccess(structuredContent, files.length > 0
|
|
52
|
-
? files.join('\n')
|
|
53
|
-
: 'No spec files found. Run pull first.');
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
return mcpError(errorText(error));
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
server.registerTool('spec_get_many', {
|
|
60
|
-
description: 'Read multiple spec files at once by paths (relative to .ai/specs/)',
|
|
61
|
-
inputSchema: {
|
|
62
|
-
paths: z
|
|
63
|
-
.array(z.string())
|
|
64
|
-
.describe("File paths relative to .ai/specs/, e.g. ['overview.md', 'api/auth.md']"),
|
|
65
|
-
},
|
|
66
|
-
outputSchema: {
|
|
67
|
-
results: z
|
|
68
|
-
.array(z.object({
|
|
69
|
-
path: z.string().describe('The requested spec file path'),
|
|
70
|
-
content: z.string().describe('Markdown content of the spec file'),
|
|
71
|
-
}))
|
|
72
|
-
.describe('Successfully read files'),
|
|
73
|
-
errors: z
|
|
74
|
-
.array(z.object({
|
|
75
|
-
path: z.string().describe('The requested spec file path'),
|
|
76
|
-
error: z.string().describe('Error message'),
|
|
77
|
-
}))
|
|
78
|
-
.describe('Files that could not be read'),
|
|
79
|
-
},
|
|
80
|
-
}, async ({ paths }) => {
|
|
81
|
-
const results = [];
|
|
82
|
-
const errors = [];
|
|
83
|
-
await Promise.all(paths.map(async (p) => {
|
|
84
|
-
try {
|
|
85
|
-
const fullPath = join(specsDir, p);
|
|
86
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
87
|
-
results.push({ path: p, content });
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
errors.push({ path: p, error: errorText(error) });
|
|
91
|
-
}
|
|
92
|
-
}));
|
|
93
|
-
results.sort((a, b) => a.path.localeCompare(b.path));
|
|
94
|
-
const structuredContent = { results, errors };
|
|
95
|
-
return mcpSuccess(structuredContent, results.map((r) => `--- ${r.path} ---\n${r.content}`).join('\n\n') +
|
|
96
|
-
(errors.length > 0
|
|
97
|
-
? `\n\nErrors:\n${errors.map((e) => `${e.path}: ${e.error}`).join('\n')}`
|
|
98
|
-
: ''));
|
|
99
|
-
});
|
|
100
|
-
server.registerTool('spec_get_lines', {
|
|
101
|
-
description: 'Read specific line ranges from one or more spec files (relative to .ai/specs/)',
|
|
102
|
-
inputSchema: {
|
|
103
|
-
files: z
|
|
104
|
-
.array(z.object({
|
|
105
|
-
path: z
|
|
106
|
-
.string()
|
|
107
|
-
.describe("File path relative to .ai/specs/, e.g. 'overview.md'"),
|
|
108
|
-
start: z.number().describe('Start line number (1-based)'),
|
|
109
|
-
end: z.number().describe('End line number (1-based, inclusive)'),
|
|
110
|
-
}))
|
|
111
|
-
.describe('Files and line ranges to read'),
|
|
112
|
-
},
|
|
113
|
-
outputSchema: {
|
|
114
|
-
results: z
|
|
115
|
-
.array(z.object({
|
|
116
|
-
path: z.string().describe('The spec file path'),
|
|
117
|
-
totalLines: z
|
|
118
|
-
.number()
|
|
119
|
-
.describe('Total number of lines in the file'),
|
|
120
|
-
start: z.number().describe('Actual start line returned'),
|
|
121
|
-
end: z.number().describe('Actual end line returned'),
|
|
122
|
-
lines: z
|
|
123
|
-
.string()
|
|
124
|
-
.describe('The requested lines with line numbers'),
|
|
125
|
-
}))
|
|
126
|
-
.describe('Line range results'),
|
|
127
|
-
errors: z
|
|
128
|
-
.array(z.object({
|
|
129
|
-
path: z.string().describe('The spec file path'),
|
|
130
|
-
error: z.string().describe('Error message'),
|
|
131
|
-
}))
|
|
132
|
-
.describe('Files that could not be read'),
|
|
133
|
-
},
|
|
134
|
-
}, async ({ files }) => {
|
|
135
|
-
const results = [];
|
|
136
|
-
const errors = [];
|
|
137
|
-
await Promise.all(files.map(async ({ path: p, start, end }) => {
|
|
138
|
-
try {
|
|
139
|
-
const fullPath = join(specsDir, p);
|
|
140
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
141
|
-
const allLines = content.split('\n');
|
|
142
|
-
const totalLines = allLines.length;
|
|
143
|
-
const clampedStart = Math.max(1, start);
|
|
144
|
-
const clampedEnd = Math.min(totalLines, end);
|
|
145
|
-
const selected = allLines.slice(clampedStart - 1, clampedEnd);
|
|
146
|
-
const numbered = selected
|
|
147
|
-
.map((line, i) => `${clampedStart + i}: ${line}`)
|
|
148
|
-
.join('\n');
|
|
149
|
-
results.push({
|
|
150
|
-
path: p,
|
|
151
|
-
totalLines,
|
|
152
|
-
start: clampedStart,
|
|
153
|
-
end: clampedEnd,
|
|
154
|
-
lines: numbered,
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
errors.push({ path: p, error: errorText(error) });
|
|
159
|
-
}
|
|
160
|
-
}));
|
|
161
|
-
const structuredContent = { results, errors };
|
|
162
|
-
return mcpSuccess(structuredContent, results
|
|
163
|
-
.map((r) => `--- ${r.path} (${r.totalLines} lines) [${r.start}-${r.end}] ---\n${r.lines}`)
|
|
164
|
-
.join('\n\n') +
|
|
165
|
-
(errors.length > 0
|
|
166
|
-
? `\n\nErrors:\n${errors.map((e) => `${e.path}: ${e.error}`).join('\n')}`
|
|
167
|
-
: ''));
|
|
168
|
-
});
|
|
169
|
-
const specSearchResultSchema = z.object({
|
|
170
|
-
file: z.string().describe('Spec file path relative to .ai/specs/'),
|
|
171
|
-
matches: z
|
|
172
|
-
.array(z.string())
|
|
173
|
-
.describe('Matching lines with line numbers'),
|
|
174
|
-
});
|
|
175
|
-
server.registerTool('spec_search', {
|
|
176
|
-
description: 'Search all local spec files for a regex pattern',
|
|
177
|
-
inputSchema: {
|
|
178
|
-
pattern: z
|
|
179
|
-
.string()
|
|
180
|
-
.describe('Regular expression pattern to search for'),
|
|
181
|
-
caseSensitive: z
|
|
182
|
-
.boolean()
|
|
183
|
-
.optional()
|
|
184
|
-
.default(false)
|
|
185
|
-
.describe('Whether the search is case-sensitive'),
|
|
186
|
-
},
|
|
187
|
-
outputSchema: {
|
|
188
|
-
results: z
|
|
189
|
-
.array(specSearchResultSchema)
|
|
190
|
-
.describe('Files with matching lines'),
|
|
191
|
-
count: z
|
|
192
|
-
.number()
|
|
193
|
-
.describe('Total number of files with matches'),
|
|
194
|
-
},
|
|
195
|
-
}, async ({ pattern, caseSensitive }) => {
|
|
196
|
-
try {
|
|
197
|
-
const regex = new RegExp(pattern, caseSensitive ? 'g' : 'gi');
|
|
198
|
-
const results = [];
|
|
199
|
-
for await (const fullPath of walkMdFiles(specsDir)) {
|
|
200
|
-
const relativePath = relative(specsDir, fullPath);
|
|
201
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
202
|
-
const lines = content.split('\n');
|
|
203
|
-
const matchingLines = [];
|
|
204
|
-
for (let i = 0; i < lines.length; i++) {
|
|
205
|
-
if (regex.test(lines[i])) {
|
|
206
|
-
matchingLines.push(`${i + 1}: ${lines[i]}`);
|
|
207
|
-
}
|
|
208
|
-
regex.lastIndex = 0;
|
|
209
|
-
}
|
|
210
|
-
if (matchingLines.length > 0) {
|
|
211
|
-
results.push({
|
|
212
|
-
file: relativePath,
|
|
213
|
-
matches: matchingLines,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
results.sort((a, b) => a.file.localeCompare(b.file));
|
|
218
|
-
const structuredContent = {
|
|
219
|
-
results,
|
|
220
|
-
count: results.length,
|
|
221
|
-
};
|
|
222
|
-
return mcpSuccess(structuredContent, results.length > 0
|
|
223
|
-
? JSON.stringify(results, null, 2)
|
|
224
|
-
: 'No matches found.');
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
return mcpError(errorText(error));
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
const excerptChunkSchema = z.object({
|
|
231
|
-
file: z.string().describe('Spec file path (use with spec_get)'),
|
|
232
|
-
totalLines: z.number().describe('Total number of lines in the file'),
|
|
233
|
-
lines: z
|
|
234
|
-
.array(z.object({
|
|
235
|
-
number: z.number().describe('Line number (1-based)'),
|
|
236
|
-
text: z.string().describe('Line content'),
|
|
237
|
-
isMatch: z
|
|
238
|
-
.boolean()
|
|
239
|
-
.describe('Whether this line contains the match'),
|
|
240
|
-
}))
|
|
241
|
-
.describe('Excerpt lines around the match (-5 to +5)'),
|
|
242
|
-
});
|
|
243
|
-
server.registerTool('spec_search_excerpt', {
|
|
244
|
-
description: 'Search spec files and return 10-line excerpts around each match (5 lines before and after)',
|
|
245
|
-
inputSchema: {
|
|
246
|
-
pattern: z
|
|
247
|
-
.string()
|
|
248
|
-
.describe('Regular expression pattern to search for'),
|
|
249
|
-
caseSensitive: z
|
|
250
|
-
.boolean()
|
|
251
|
-
.optional()
|
|
252
|
-
.default(false)
|
|
253
|
-
.describe('Whether the search is case-sensitive'),
|
|
254
|
-
},
|
|
255
|
-
outputSchema: {
|
|
256
|
-
results: z
|
|
257
|
-
.array(excerptChunkSchema)
|
|
258
|
-
.describe('Excerpt chunks with context around matches'),
|
|
259
|
-
count: z.number().describe('Total number of excerpt chunks'),
|
|
260
|
-
},
|
|
261
|
-
}, async ({ pattern, caseSensitive }) => {
|
|
262
|
-
try {
|
|
263
|
-
const regex = new RegExp(pattern, caseSensitive ? 'g' : 'gi');
|
|
264
|
-
const results = [];
|
|
265
|
-
for await (const fullPath of walkMdFiles(specsDir)) {
|
|
266
|
-
const relativePath = relative(specsDir, fullPath);
|
|
267
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
268
|
-
const allLines = content.split('\n');
|
|
269
|
-
const totalLines = allLines.length;
|
|
270
|
-
// Collect matching line indices
|
|
271
|
-
const matchIndices = [];
|
|
272
|
-
for (let i = 0; i < allLines.length; i++) {
|
|
273
|
-
if (regex.test(allLines[i])) {
|
|
274
|
-
matchIndices.push(i);
|
|
275
|
-
}
|
|
276
|
-
regex.lastIndex = 0;
|
|
277
|
-
}
|
|
278
|
-
if (matchIndices.length === 0)
|
|
279
|
-
continue;
|
|
280
|
-
// Merge overlapping ranges and build chunks
|
|
281
|
-
const ranges = [];
|
|
282
|
-
for (const idx of matchIndices) {
|
|
283
|
-
const start = Math.max(0, idx - 5);
|
|
284
|
-
const end = Math.min(allLines.length - 1, idx + 5);
|
|
285
|
-
const last = ranges[ranges.length - 1];
|
|
286
|
-
if (last && start <= last.end + 1) {
|
|
287
|
-
last.end = Math.max(last.end, end);
|
|
288
|
-
last.matchSet.add(idx);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
ranges.push({ start, end, matchSet: new Set([idx]) });
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
for (const range of ranges) {
|
|
295
|
-
const lines = [];
|
|
296
|
-
for (let i = range.start; i <= range.end; i++) {
|
|
297
|
-
lines.push({
|
|
298
|
-
number: i + 1,
|
|
299
|
-
text: allLines[i],
|
|
300
|
-
isMatch: range.matchSet.has(i),
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
results.push({ file: relativePath, totalLines, lines });
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
results.sort((a, b) => a.file.localeCompare(b.file));
|
|
307
|
-
const structuredContent = { results, count: results.length };
|
|
308
|
-
return mcpSuccess(structuredContent, results.length > 0
|
|
309
|
-
? results
|
|
310
|
-
.map((r) => {
|
|
311
|
-
const header = `--- ${r.file} (${r.totalLines} lines) ---`;
|
|
312
|
-
const body = r.lines
|
|
313
|
-
.map((l) => `${l.isMatch ? '>' : ' '} ${l.number}: ${l.text}`)
|
|
314
|
-
.join('\n');
|
|
315
|
-
return `${header}\n${body}`;
|
|
316
|
-
})
|
|
317
|
-
.join('\n\n')
|
|
318
|
-
: 'No matches found.');
|
|
319
|
-
}
|
|
320
|
-
catch (error) {
|
|
321
|
-
return mcpError(errorText(error));
|
|
322
|
-
}
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
//# sourceMappingURL=specs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../../../source/commands/mcp/specs.ts"],"names":[],"mappings":"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"}
|