@kamkom/awb-mcp 0.0.6 → 0.0.7
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/templates/.github/copilot-instructions.md +0 -2
- package/dist/templates/copilot-instructions-sampling-system.md +1 -0
- package/dist/tools/planBootstrap.d.ts.map +1 -1
- package/dist/tools/planBootstrap.js +34 -11
- package/dist/tools/planBootstrap.js.map +1 -1
- package/package.json +1 -1
- package/src/templates/.github/copilot-instructions.md +0 -2
- package/src/templates/copilot-instructions-sampling-system.md +1 -0
- package/src/tools/planBootstrap.ts +36 -14
- package/test/plan-bootstrap.ts +2 -10
- package/src/templates/copilot-instructions-prompt.md +0 -1
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ The server exposes AWB tools over stdio, including:
|
|
|
60
60
|
|
|
61
61
|
### Copilot instructions and sampling
|
|
62
62
|
|
|
63
|
-
The plan can generate `.github/copilot-instructions.md`
|
|
63
|
+
The plan can generate `.github/copilot-instructions.md` with an optional custom section. When the MCP client supports **sampling** (e.g. Cursor, VS Code with a sampling-capable host), the server requests generated content for that section from the **client’s LLM**; otherwise the custom section is left empty. No API keys are required on the server.
|
|
64
64
|
|
|
65
65
|
## Overwrite and managed blocks
|
|
66
66
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
You are generating the custom section for a .github/copilot-instructions.md file. Output only the requested content. No preamble, no explanation, no markdown code fences.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planBootstrap.d.ts","sourceRoot":"","sources":["../../src/tools/planBootstrap.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,4HAA4H;AAC5H,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE;QACjB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;YACtC,OAAO,CAAC,EACJ;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,GAChC,KAAK,CAAC;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC7C,CAAC,CAAC;KACJ,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"planBootstrap.d.ts","sourceRoot":"","sources":["../../src/tools/planBootstrap.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,4HAA4H;AAC5H,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE;QACjB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;YACtC,OAAO,CAAC,EACJ;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,GAChC,KAAK,CAAC;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC7C,CAAC,CAAC;KACJ,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AA4KF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAyF9B"}
|
|
@@ -133,7 +133,29 @@ function buildOperation(relPath, fullPath, options, templateContent) {
|
|
|
133
133
|
warnings: ["File exists and is not being overwritten."],
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
|
-
const
|
|
136
|
+
const COPILOT_SAMPLING_SYSTEM_FILE = "copilot-instructions-sampling-system.md";
|
|
137
|
+
const COPILOT_SAMPLING_SYSTEM_FALLBACK = "You are generating the custom section for a .github/copilot-instructions.md file. Output only the requested content. No preamble, no explanation, no markdown code fences.";
|
|
138
|
+
const COPILOT_SAMPLING_USER_PROMPT = `
|
|
139
|
+
Analyze this codebase to generate or update .github/copilot-instructions.md for guiding AI coding agents.
|
|
140
|
+
|
|
141
|
+
Focus on discovering the essential knowledge that would help an AI agents be immediately productive in this codebase. Consider aspects like:
|
|
142
|
+
|
|
143
|
+
The "big picture" architecture that requires reading multiple files to understand - major components, service boundaries, data flows, and the "why" behind structural decisions
|
|
144
|
+
Critical developer workflows (builds, tests, debugging) especially commands that aren't obvious from file inspection alone
|
|
145
|
+
Project-specific conventions and patterns that differ from common practices
|
|
146
|
+
Integration points, external dependencies, and cross-component communication patterns
|
|
147
|
+
Source existing AI conventions from **/{.github/copilot-instructions.md,AGENT.md,AGENTS.md,CLAUDE.md,.cursorrules,.windsurfrules,.clinerules,.cursor/rules/**,.windsurf/rules/**,.clinerules/**,README.md} (do one glob search).
|
|
148
|
+
|
|
149
|
+
Guidelines (read more at https://aka.ms/vscode-instructions-docs):
|
|
150
|
+
|
|
151
|
+
If .github/copilot-instructions.md exists, merge intelligently - preserve valuable content while updating outdated sections
|
|
152
|
+
Write concise, actionable instructions (~20-50 lines) using markdown structure
|
|
153
|
+
Include specific examples from the codebase when describing patterns
|
|
154
|
+
Avoid generic advice ("write tests", "handle errors") - focus on THIS project's specific approaches
|
|
155
|
+
Document only discoverable patterns, not aspirational practices
|
|
156
|
+
Reference key files/directories that exemplify important patterns
|
|
157
|
+
Update .github/copilot-instructions.md for the user, then ask for feedback on any unclear or incomplete sections to iterate.
|
|
158
|
+
`;
|
|
137
159
|
export async function handlePlanBootstrap(args, context) {
|
|
138
160
|
try {
|
|
139
161
|
const error = validateRootPath(args?.rootPath);
|
|
@@ -149,26 +171,25 @@ export async function handlePlanBootstrap(args, context) {
|
|
|
149
171
|
const pathsToConsider = getPathsToConsider(options, resolvedRoot);
|
|
150
172
|
const operations = [];
|
|
151
173
|
const COPILOT_INSTRUCTIONS_PATH = ".github/copilot-instructions.md";
|
|
152
|
-
const COPILOT_PROMPT_FILE = "copilot-instructions-prompt.md";
|
|
153
|
-
const COPILOT_INSTRUCTIONS_PLACEHOLDER = "{{COPILOT_INSTRUCTIONS_PROMPT}}";
|
|
154
174
|
for (const relPath of pathsToConsider) {
|
|
155
175
|
const fullPath = path.join(resolvedRoot, relPath);
|
|
156
176
|
if (!isUnderRoot(fullPath, resolvedRoot))
|
|
157
177
|
continue;
|
|
158
178
|
let templateContent = getTemplateContent(relPath);
|
|
159
179
|
if (relPath === COPILOT_INSTRUCTIONS_PATH) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (promptContent && context?.serverForSampling) {
|
|
180
|
+
let value = "";
|
|
181
|
+
if (context?.serverForSampling) {
|
|
163
182
|
try {
|
|
183
|
+
const systemPrompt = getTemplateContent(COPILOT_SAMPLING_SYSTEM_FILE).trim() ||
|
|
184
|
+
COPILOT_SAMPLING_SYSTEM_FALLBACK;
|
|
164
185
|
const res = await context.serverForSampling.createMessage({
|
|
165
186
|
messages: [
|
|
166
187
|
{
|
|
167
188
|
role: "user",
|
|
168
|
-
content: { type: "text", text:
|
|
189
|
+
content: { type: "text", text: COPILOT_SAMPLING_USER_PROMPT },
|
|
169
190
|
},
|
|
170
191
|
],
|
|
171
|
-
systemPrompt
|
|
192
|
+
systemPrompt,
|
|
172
193
|
maxTokens: 2000,
|
|
173
194
|
});
|
|
174
195
|
const block = Array.isArray(res.content)
|
|
@@ -177,13 +198,15 @@ export async function handlePlanBootstrap(args, context) {
|
|
|
177
198
|
const text = block?.type === "text"
|
|
178
199
|
? (block.text ?? "")
|
|
179
200
|
: "";
|
|
180
|
-
value = (text ?? "").trim()
|
|
201
|
+
value = (text ?? "").trim();
|
|
181
202
|
}
|
|
182
203
|
catch {
|
|
183
|
-
value =
|
|
204
|
+
value = "";
|
|
184
205
|
}
|
|
185
206
|
}
|
|
186
|
-
|
|
207
|
+
if (value) {
|
|
208
|
+
templateContent = templateContent + "\n\n" + value;
|
|
209
|
+
}
|
|
187
210
|
}
|
|
188
211
|
operations.push(buildOperation(relPath, fullPath, options, templateContent));
|
|
189
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planBootstrap.js","sourceRoot":"","sources":["../../src/tools/planBootstrap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"planBootstrap.js","sourceRoot":"","sources":["../../src/tools/planBootstrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
You are generating the custom section for a .github/copilot-instructions.md file. Output only the requested content. No preamble, no explanation, no markdown code fences.
|
|
@@ -207,7 +207,30 @@ function buildOperation(
|
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
const
|
|
210
|
+
const COPILOT_SAMPLING_SYSTEM_FILE = "copilot-instructions-sampling-system.md";
|
|
211
|
+
const COPILOT_SAMPLING_SYSTEM_FALLBACK =
|
|
212
|
+
"You are generating the custom section for a .github/copilot-instructions.md file. Output only the requested content. No preamble, no explanation, no markdown code fences.";
|
|
213
|
+
const COPILOT_SAMPLING_USER_PROMPT = `
|
|
214
|
+
Analyze this codebase to generate or update .github/copilot-instructions.md for guiding AI coding agents.
|
|
215
|
+
|
|
216
|
+
Focus on discovering the essential knowledge that would help an AI agents be immediately productive in this codebase. Consider aspects like:
|
|
217
|
+
|
|
218
|
+
The "big picture" architecture that requires reading multiple files to understand - major components, service boundaries, data flows, and the "why" behind structural decisions
|
|
219
|
+
Critical developer workflows (builds, tests, debugging) especially commands that aren't obvious from file inspection alone
|
|
220
|
+
Project-specific conventions and patterns that differ from common practices
|
|
221
|
+
Integration points, external dependencies, and cross-component communication patterns
|
|
222
|
+
Source existing AI conventions from **/{.github/copilot-instructions.md,AGENT.md,AGENTS.md,CLAUDE.md,.cursorrules,.windsurfrules,.clinerules,.cursor/rules/**,.windsurf/rules/**,.clinerules/**,README.md} (do one glob search).
|
|
223
|
+
|
|
224
|
+
Guidelines (read more at https://aka.ms/vscode-instructions-docs):
|
|
225
|
+
|
|
226
|
+
If .github/copilot-instructions.md exists, merge intelligently - preserve valuable content while updating outdated sections
|
|
227
|
+
Write concise, actionable instructions (~20-50 lines) using markdown structure
|
|
228
|
+
Include specific examples from the codebase when describing patterns
|
|
229
|
+
Avoid generic advice ("write tests", "handle errors") - focus on THIS project's specific approaches
|
|
230
|
+
Document only discoverable patterns, not aspirational practices
|
|
231
|
+
Reference key files/directories that exemplify important patterns
|
|
232
|
+
Update .github/copilot-instructions.md for the user, then ask for feedback on any unclear or incomplete sections to iterate.
|
|
233
|
+
`;
|
|
211
234
|
|
|
212
235
|
export async function handlePlanBootstrap(
|
|
213
236
|
args: PlanBootstrapArgs,
|
|
@@ -230,26 +253,26 @@ export async function handlePlanBootstrap(
|
|
|
230
253
|
const operations: PlanOperation[] = [];
|
|
231
254
|
|
|
232
255
|
const COPILOT_INSTRUCTIONS_PATH = ".github/copilot-instructions.md";
|
|
233
|
-
const COPILOT_PROMPT_FILE = "copilot-instructions-prompt.md";
|
|
234
|
-
const COPILOT_INSTRUCTIONS_PLACEHOLDER = "{{COPILOT_INSTRUCTIONS_PROMPT}}";
|
|
235
256
|
|
|
236
257
|
for (const relPath of pathsToConsider) {
|
|
237
258
|
const fullPath = path.join(resolvedRoot, relPath);
|
|
238
259
|
if (!isUnderRoot(fullPath, resolvedRoot)) continue;
|
|
239
260
|
let templateContent = getTemplateContent(relPath);
|
|
240
261
|
if (relPath === COPILOT_INSTRUCTIONS_PATH) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (promptContent && context?.serverForSampling) {
|
|
262
|
+
let value = "";
|
|
263
|
+
if (context?.serverForSampling) {
|
|
244
264
|
try {
|
|
265
|
+
const systemPrompt =
|
|
266
|
+
getTemplateContent(COPILOT_SAMPLING_SYSTEM_FILE).trim() ||
|
|
267
|
+
COPILOT_SAMPLING_SYSTEM_FALLBACK;
|
|
245
268
|
const res = await context.serverForSampling.createMessage({
|
|
246
269
|
messages: [
|
|
247
270
|
{
|
|
248
271
|
role: "user",
|
|
249
|
-
content: { type: "text", text:
|
|
272
|
+
content: { type: "text", text: COPILOT_SAMPLING_USER_PROMPT },
|
|
250
273
|
},
|
|
251
274
|
],
|
|
252
|
-
systemPrompt
|
|
275
|
+
systemPrompt,
|
|
253
276
|
maxTokens: 2000,
|
|
254
277
|
});
|
|
255
278
|
const block = Array.isArray(res.content)
|
|
@@ -259,15 +282,14 @@ export async function handlePlanBootstrap(
|
|
|
259
282
|
block?.type === "text"
|
|
260
283
|
? ((block as { text?: string }).text ?? "")
|
|
261
284
|
: "";
|
|
262
|
-
value = (text ?? "").trim()
|
|
285
|
+
value = (text ?? "").trim();
|
|
263
286
|
} catch {
|
|
264
|
-
value =
|
|
287
|
+
value = "";
|
|
265
288
|
}
|
|
266
289
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
);
|
|
290
|
+
if (value) {
|
|
291
|
+
templateContent = templateContent + "\n\n" + value;
|
|
292
|
+
}
|
|
271
293
|
}
|
|
272
294
|
operations.push(
|
|
273
295
|
buildOperation(relPath, fullPath, options, templateContent),
|
package/test/plan-bootstrap.ts
CHANGED
|
@@ -346,7 +346,7 @@ async function main(): Promise<void> {
|
|
|
346
346
|
fs.rmSync(pathNormDir, { recursive: true, force: true });
|
|
347
347
|
}
|
|
348
348
|
|
|
349
|
-
// 9. copilot-instructions: output
|
|
349
|
+
// 9. copilot-instructions: output has template structure
|
|
350
350
|
const copilotTestDir = fs.mkdtempSync(path.join(projectRoot, "test-copilot-"));
|
|
351
351
|
try {
|
|
352
352
|
await withServer(async (client) => {
|
|
@@ -375,15 +375,7 @@ async function main(): Promise<void> {
|
|
|
375
375
|
throw new Error("Expected template structure: # Copilot instructions");
|
|
376
376
|
if (!content.includes("Use repo scripts"))
|
|
377
377
|
throw new Error("Expected template structure: Use repo scripts");
|
|
378
|
-
|
|
379
|
-
const promptContent = fs.existsSync(promptPath)
|
|
380
|
-
? fs.readFileSync(promptPath, "utf8").trim()
|
|
381
|
-
: "";
|
|
382
|
-
if (content === promptContent)
|
|
383
|
-
throw new Error("Output must not equal raw prompt file (template with placeholder replacement expected)");
|
|
384
|
-
if (promptContent.length > 0 && !content.includes(promptContent))
|
|
385
|
-
throw new Error("When prompt file has content, output must include it");
|
|
386
|
-
console.log(" copilot-instructions: template structure + prompt injection, not verbatim prompt file");
|
|
378
|
+
console.log(" copilot-instructions: template structure");
|
|
387
379
|
});
|
|
388
380
|
} finally {
|
|
389
381
|
fs.rmSync(copilotTestDir, { recursive: true, force: true });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Generate a few jokes in polish
|