forgecraft-mcp 0.1.0 → 0.2.0
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 +16 -14
- package/dist/analyzers/completeness.js +29 -1
- package/dist/analyzers/completeness.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/registry/composer.d.ts +6 -2
- package/dist/registry/composer.d.ts.map +1 -1
- package/dist/registry/composer.js +16 -7
- package/dist/registry/composer.js.map +1 -1
- package/dist/registry/loader.d.ts.map +1 -1
- package/dist/registry/loader.js +16 -9
- package/dist/registry/loader.js.map +1 -1
- package/dist/registry/renderer.d.ts +14 -4
- package/dist/registry/renderer.d.ts.map +1 -1
- package/dist/registry/renderer.js +41 -12
- package/dist/registry/renderer.js.map +1 -1
- package/dist/shared/types.d.ts +54 -7
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +71 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/tools/audit.js +2 -2
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/convert.js +2 -2
- package/dist/tools/convert.js.map +1 -1
- package/dist/tools/generate-claude-md.d.ts +29 -3
- package/dist/tools/generate-claude-md.d.ts.map +1 -1
- package/dist/tools/generate-claude-md.js +58 -27
- package/dist/tools/generate-claude-md.js.map +1 -1
- package/dist/tools/refresh-project.d.ts +3 -0
- package/dist/tools/refresh-project.d.ts.map +1 -1
- package/dist/tools/refresh-project.js +22 -10
- package/dist/tools/refresh-project.js.map +1 -1
- package/dist/tools/scaffold.d.ts +3 -0
- package/dist/tools/scaffold.d.ts.map +1 -1
- package/dist/tools/scaffold.js +20 -8
- package/dist/tools/scaffold.js.map +1 -1
- package/dist/tools/setup-project.d.ts +3 -0
- package/dist/tools/setup-project.d.ts.map +1 -1
- package/dist/tools/setup-project.js +58 -31
- package/dist/tools/setup-project.js.map +1 -1
- package/package.json +1 -1
- package/templates/analytics/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/api/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/cli/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/data-pipeline/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/fintech/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/game/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/healthcare/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/infra/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/library/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/ml/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/mobile/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/realtime/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/social/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/state-machine/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/universal/hooks.yaml +1 -1
- package/templates/universal/{claude-md.yaml → instructions.yaml} +3 -3
- package/templates/web-react/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/web-static/{claude-md.yaml → instructions.yaml} +1 -1
- package/templates/web3/{claude-md.yaml → instructions.yaml} +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">ForgeCraft</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong>
|
|
4
|
+
<strong>Production engineering standards for any AI coding assistant.</strong>
|
|
5
5
|
</p>
|
|
6
6
|
<p align="center">
|
|
7
7
|
<a href="https://www.npmjs.com/package/forgecraft-mcp"><img src="https://img.shields.io/npm/v/forgecraft-mcp.svg" alt="npm version"></a>
|
|
@@ -12,11 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
AI coding assistants work better with clear engineering standards. Most start with a generic instruction file — ForgeCraft replaces that with production-grade standards: SOLID principles, testing pyramids, architecture patterns, CI/CD pipelines, domain-specific rules, and quality-gate hooks — all composed from 112 curated template blocks matched to your actual stack.
|
|
16
16
|
|
|
17
|
-
**
|
|
18
|
-
|
|
19
|
-
`claude init` gives you a generic starting point. ForgeCraft gives you production engineering standards: SOLID principles, testing pyramids with coverage targets, architecture patterns, CI/CD pipelines, domain-specific rules, and quality-gate hooks — all composed from 112 curated template blocks matched to your actual stack.
|
|
17
|
+
**Supports:** Claude (CLAUDE.md) · Cursor (.cursor/rules/) · GitHub Copilot (.github/copilot-instructions.md) · Windsurf (.windsurfrules) · Cline (.clinerules) · Aider (CONVENTIONS.md)
|
|
20
18
|
|
|
21
19
|
```bash
|
|
22
20
|
claude mcp add forgecraft -- npx -y forgecraft-mcp
|
|
@@ -26,13 +24,14 @@ Then tell Claude:
|
|
|
26
24
|
|
|
27
25
|
> "Set up this project for production"
|
|
28
26
|
|
|
29
|
-
Done.
|
|
27
|
+
Done. Your AI assistant now has tailored instruction files with SOLID principles, testing standards, architecture patterns, CI/CD guidance, and quality-gate hooks — all matched to your stack.
|
|
30
28
|
|
|
31
29
|
## `claude init` vs ForgeCraft
|
|
32
30
|
|
|
33
31
|
| | `claude init` | ForgeCraft |
|
|
34
32
|
|---|---|---|
|
|
35
|
-
| **
|
|
33
|
+
| **Instruction file** | Generic, one-size-fits-all | 112 curated blocks matched to your stack |
|
|
34
|
+
| **AI assistants** | Claude only | Claude, Cursor, Copilot, Windsurf, Cline, Aider |
|
|
36
35
|
| **Architecture** | None | SOLID, hexagonal, clean code, DDD |
|
|
37
36
|
| **Testing** | Basic mention | Testing pyramid with coverage targets (80%+) |
|
|
38
37
|
| **Domain rules** | None | 18 domains (fintech, healthcare, gaming…) |
|
|
@@ -50,14 +49,14 @@ You: "Set up this project for production"
|
|
|
50
49
|
|
|
51
50
|
Claude calls setup_project → scans your code → detects [API] + [WEB-REACT]
|
|
52
51
|
→ creates forgecraft.yaml
|
|
53
|
-
→ generates
|
|
52
|
+
→ generates instruction files for your AI assistant(s)
|
|
54
53
|
→ adds quality-gate hooks
|
|
55
54
|
→ done
|
|
56
55
|
```
|
|
57
56
|
|
|
58
57
|
ForgeCraft is an [MCP server](https://modelcontextprotocol.io/) — it gives Claude 14 specialized tools. Claude picks the right ones automatically. You just describe what you want in plain English.
|
|
59
58
|
|
|
60
|
-
> **Already ran `claude init`?** ForgeCraft's `
|
|
59
|
+
> **Already ran `claude init`?** ForgeCraft's `generate_instructions` can merge with your existing CLAUDE.md (`merge_with_existing: true`), keeping your custom sections while adding production standards.
|
|
61
60
|
|
|
62
61
|
## Install
|
|
63
62
|
|
|
@@ -92,7 +91,9 @@ After `setup_project`, your project has:
|
|
|
92
91
|
```
|
|
93
92
|
your-project/
|
|
94
93
|
├── forgecraft.yaml ← Your config (tags, tier, customizations)
|
|
95
|
-
├── CLAUDE.md ← Engineering standards
|
|
94
|
+
├── CLAUDE.md ← Engineering standards (Claude)
|
|
95
|
+
├── .cursor/rules/ ← Engineering standards (Cursor)
|
|
96
|
+
├── .github/copilot-instructions.md ← Engineering standards (Copilot)
|
|
96
97
|
├── Status.md ← Session continuity tracker
|
|
97
98
|
├── .claude/hooks/ ← Pre-commit quality gates
|
|
98
99
|
├── docs/
|
|
@@ -101,7 +102,7 @@ your-project/
|
|
|
101
102
|
└── src/shared/ ← Config, errors, logger starters
|
|
102
103
|
```
|
|
103
104
|
|
|
104
|
-
### The
|
|
105
|
+
### The Instruction Files
|
|
105
106
|
|
|
106
107
|
This is the core value. Assembled from curated blocks covering:
|
|
107
108
|
|
|
@@ -165,7 +166,7 @@ tier: recommended
|
|
|
165
166
|
| `refresh_project` | Re-scan after changes. Detects new tags, updates config. |
|
|
166
167
|
| `classify_project` | Analyze code to suggest tags |
|
|
167
168
|
| `scaffold_project` | Generate full project structure |
|
|
168
|
-
| `
|
|
169
|
+
| `generate_instructions` | Create instruction files for any AI assistant |
|
|
169
170
|
| `audit_project` | Score compliance (0-100). Run in CI. |
|
|
170
171
|
| `review_project` | Structured review checklist |
|
|
171
172
|
| `convert_existing` | Phased migration plan for legacy code |
|
|
@@ -185,6 +186,7 @@ tier: recommended
|
|
|
185
186
|
projectName: my-api
|
|
186
187
|
tags: [UNIVERSAL, API, FINTECH]
|
|
187
188
|
tier: recommended
|
|
189
|
+
outputTargets: [claude, cursor, copilot] # Generate for multiple assistants
|
|
188
190
|
|
|
189
191
|
exclude:
|
|
190
192
|
- cqrs-event-patterns # Don't need this yet
|
|
@@ -209,7 +211,7 @@ templateDirs:
|
|
|
209
211
|
```
|
|
210
212
|
Score: 72/100 Grade: C
|
|
211
213
|
|
|
212
|
-
✅
|
|
214
|
+
✅ Instruction files exist
|
|
213
215
|
✅ Hooks installed (3/3)
|
|
214
216
|
✅ Test script configured
|
|
215
217
|
🔴 hardcoded_url: src/auth/service.ts
|
|
@@ -227,7 +229,7 @@ Templates are YAML, not code. You can add patterns without writing TypeScript.
|
|
|
227
229
|
|
|
228
230
|
```
|
|
229
231
|
templates/your-tag/
|
|
230
|
-
├──
|
|
232
|
+
├── instructions.yaml # Instruction file blocks (with tier metadata)
|
|
231
233
|
├── structure.yaml # Folder structure
|
|
232
234
|
├── nfr.yaml # Non-functional requirements
|
|
233
235
|
├── hooks.yaml # Quality gate scripts
|
|
@@ -15,7 +15,7 @@ export function checkCompleteness(projectDir, activeTags) {
|
|
|
15
15
|
const passing = [];
|
|
16
16
|
const failing = [];
|
|
17
17
|
// UNIVERSAL checks — always run
|
|
18
|
-
|
|
18
|
+
checkInstructionFileExists(projectDir, passing, failing);
|
|
19
19
|
checkFileExists(projectDir, "Status.md", "status_md_exists", "Status.md enables session continuity", passing, failing);
|
|
20
20
|
checkFileExists(projectDir, ".env.example", "env_example_exists", ".env.example documents required env vars", passing, failing);
|
|
21
21
|
// Check Status.md freshness
|
|
@@ -40,6 +40,34 @@ export function checkCompleteness(projectDir, activeTags) {
|
|
|
40
40
|
});
|
|
41
41
|
return { passing, failing };
|
|
42
42
|
}
|
|
43
|
+
/** Known AI assistant instruction file paths to check. */
|
|
44
|
+
const KNOWN_INSTRUCTION_PATHS = [
|
|
45
|
+
"CLAUDE.md",
|
|
46
|
+
".cursor/rules",
|
|
47
|
+
".github/copilot-instructions.md",
|
|
48
|
+
".windsurfrules",
|
|
49
|
+
".clinerules",
|
|
50
|
+
"CONVENTIONS.md",
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* Check if any AI assistant instruction file exists.
|
|
54
|
+
*/
|
|
55
|
+
function checkInstructionFileExists(projectDir, passing, failing) {
|
|
56
|
+
const found = KNOWN_INSTRUCTION_PATHS.filter((p) => existsSync(join(projectDir, p)));
|
|
57
|
+
if (found.length > 0) {
|
|
58
|
+
passing.push({
|
|
59
|
+
check: "instruction_file_exists",
|
|
60
|
+
message: `✅ Instruction file(s) found: ${found.join(", ")}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
failing.push({
|
|
65
|
+
check: "instruction_file_exists",
|
|
66
|
+
message: "No AI assistant instruction file found — run `generate_instructions` to create one",
|
|
67
|
+
severity: "error",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
43
71
|
/**
|
|
44
72
|
* Check if a file or directory exists.
|
|
45
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeness.js","sourceRoot":"","sources":["../../src/analyzers/completeness.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,MAAM,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,UAAiB;IAEjB,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,gCAAgC;IAChC,
|
|
1
|
+
{"version":3,"file":"completeness.js","sourceRoot":"","sources":["../../src/analyzers/completeness.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ import { createLogger } from "./shared/logger/index.js";
|
|
|
12
12
|
import { listTagsSchema, listTagsHandler, listHooksSchema, listHooksHandler, } from "./tools/list.js";
|
|
13
13
|
import { classifyProjectSchema, classifyProjectHandler, } from "./tools/classify.js";
|
|
14
14
|
import { scaffoldProjectSchema, scaffoldProjectHandler, } from "./tools/scaffold.js";
|
|
15
|
-
import {
|
|
15
|
+
import { generateInstructionsSchema, generateInstructionsHandler, } from "./tools/generate-claude-md.js";
|
|
16
16
|
import { auditProjectSchema, auditProjectHandler, } from "./tools/audit.js";
|
|
17
17
|
import { addHookSchema, addHookHandler, } from "./tools/add-hook.js";
|
|
18
18
|
import { addModuleSchema, addModuleHandler, } from "./tools/add-module.js";
|
|
@@ -34,8 +34,8 @@ async function main() {
|
|
|
34
34
|
server.tool("list_tags", "List all available project classification tags with descriptions.", listTagsSchema.shape, listTagsHandler);
|
|
35
35
|
server.tool("list_hooks", "List available hooks, optionally filtered by tags.", listHooksSchema.shape, listHooksHandler);
|
|
36
36
|
server.tool("classify_project", "Analyze a project directory and/or description to suggest classification tags.", classifyProjectSchema.shape, classifyProjectHandler);
|
|
37
|
-
server.tool("scaffold_project", "Generate full project structure (
|
|
38
|
-
server.tool("
|
|
37
|
+
server.tool("scaffold_project", "Generate full project structure (instruction files, Status.md, hooks, folders) from tags. Supports multiple AI assistant targets.", scaffoldProjectSchema.shape, scaffoldProjectHandler);
|
|
38
|
+
server.tool("generate_instructions", "Generate AI assistant instruction files for given tags. Supports multiple targets: Claude (CLAUDE.md), Cursor (.cursor/rules/), GitHub Copilot (.github/copilot-instructions.md), Windsurf (.windsurfrules), Cline (.clinerules), Aider (CONVENTIONS.md). Adds SOLID principles, testing pyramid, architecture patterns, CI/CD, and domain-specific standards from 112 curated blocks. Can merge with existing files to preserve custom sections.", generateInstructionsSchema.shape, generateInstructionsHandler);
|
|
39
39
|
server.tool("audit_project", "Audit project against template standards and report violations with a score.", auditProjectSchema.shape, auditProjectHandler);
|
|
40
40
|
server.tool("add_hook", "Add a specific quality-gate hook script to the project.", addHookSchema.shape, addHookHandler);
|
|
41
41
|
server.tool("add_module", "Scaffold a new feature module following established patterns.", addModuleSchema.shape, addModuleHandler);
|
|
@@ -43,8 +43,8 @@ async function main() {
|
|
|
43
43
|
server.tool("get_nfr_template", "Get NFR (Non-Functional Requirement) sections for specific tags.", getNfrTemplateSchema.shape, getNfrTemplateHandler);
|
|
44
44
|
server.tool("convert_existing", "Analyze an existing codebase and generate a phased migration plan.", convertExistingSchema.shape, convertExistingHandler);
|
|
45
45
|
server.tool("review_project", "Generate a structured code review checklist for active tags. Covers architecture, code quality, tests, and performance with per-issue guidance format.", reviewProjectSchema.shape, reviewProjectHandler);
|
|
46
|
-
server.tool("setup_project", "RECOMMENDED FIRST STEP —
|
|
47
|
-
server.tool("refresh_project", "Re-analyze a project that already has forgecraft.yaml. Detects tag drift (e.g. new framework added), proposes adding/removing tags, shows content impact.
|
|
46
|
+
server.tool("setup_project", "RECOMMENDED FIRST STEP — generates production-grade AI assistant instruction files from 112 curated template blocks. Supports Claude, Cursor, Copilot, Windsurf, Cline, and Aider. Analyzes project, auto-detects tags from code/dependencies, creates forgecraft.yaml config, and adds engineering standards (SOLID, testing pyramid, architecture patterns, CI/CD, domain rules). Works for new and existing projects. Supports tier-based content filtering (core/recommended/optional).", setupProjectSchema.shape, setupProjectHandler);
|
|
47
|
+
server.tool("refresh_project", "Re-analyze a project that already has forgecraft.yaml. Detects tag drift (e.g. new framework added), proposes adding/removing tags, shows content impact. Updates instruction files for all configured AI assistant targets. Preview changes before applying.", refreshProjectSchema.shape, refreshProjectHandler);
|
|
48
48
|
// ── Start Stdio Transport ────────────────────────────────────────
|
|
49
49
|
const transport = new StdioServerTransport();
|
|
50
50
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,wEAAwE;AACxE,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,18 @@
|
|
|
5
5
|
* hooks, and NFRs from all matching templates into unified outputs.
|
|
6
6
|
* Handles merge, deduplication, ordering, and tier-based filtering.
|
|
7
7
|
*/
|
|
8
|
-
import type { Tag, TagTemplateSet,
|
|
8
|
+
import type { Tag, TagTemplateSet, InstructionBlock, StructureEntry, NfrBlock, HookTemplate, ReviewBlock, ForgeCraftConfig } from "../shared/types.js";
|
|
9
9
|
/** Composed output for a set of active tags. */
|
|
10
10
|
export interface ComposedTemplates {
|
|
11
|
-
readonly
|
|
11
|
+
readonly instructionBlocks: InstructionBlock[];
|
|
12
12
|
readonly structureEntries: StructureEntry[];
|
|
13
13
|
readonly nfrBlocks: NfrBlock[];
|
|
14
14
|
readonly hooks: HookTemplate[];
|
|
15
15
|
readonly reviewBlocks: ReviewBlock[];
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use `instructionBlocks` instead. Alias for backward compatibility.
|
|
18
|
+
*/
|
|
19
|
+
readonly claudeMdBlocks: InstructionBlock[];
|
|
16
20
|
}
|
|
17
21
|
/** Options for controlling template composition. */
|
|
18
22
|
export interface ComposeOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EAEX,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAoB5B,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;CAC7C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,GAAG,EAAE,EACjB,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,iBAAiB,CAgHnB"}
|
|
@@ -67,7 +67,7 @@ export function composeTemplates(activeTags, allTemplates, options) {
|
|
|
67
67
|
const excludeList = config?.exclude;
|
|
68
68
|
// Ensure UNIVERSAL is first and present
|
|
69
69
|
const orderedTags = normalizeTagOrder(activeTags);
|
|
70
|
-
const
|
|
70
|
+
const instructionBlocks = [];
|
|
71
71
|
const structureEntries = [];
|
|
72
72
|
const nfrBlocks = [];
|
|
73
73
|
const hooks = [];
|
|
@@ -83,14 +83,15 @@ export function composeTemplates(activeTags, allTemplates, options) {
|
|
|
83
83
|
logger.warn("No templates found for tag", { tag });
|
|
84
84
|
continue;
|
|
85
85
|
}
|
|
86
|
-
// Compose
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
// Compose instruction blocks (deduplicate by id, filter by tier)
|
|
87
|
+
const instrSource = templateSet.instructions ?? templateSet.claudeMd;
|
|
88
|
+
if (instrSource?.blocks) {
|
|
89
|
+
for (const block of instrSource.blocks) {
|
|
89
90
|
if (!seenBlockIds.has(block.id) &&
|
|
90
91
|
isTierAllowed(block.tier, allowedTiers) &&
|
|
91
92
|
isBlockAllowed(block.id, includeList, excludeList)) {
|
|
92
93
|
seenBlockIds.add(block.id);
|
|
93
|
-
|
|
94
|
+
instructionBlocks.push(block);
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
}
|
|
@@ -138,13 +139,21 @@ export function composeTemplates(activeTags, allTemplates, options) {
|
|
|
138
139
|
logger.info("Templates composed", {
|
|
139
140
|
tags: orderedTags,
|
|
140
141
|
tier: tierLevel,
|
|
141
|
-
|
|
142
|
+
instructionBlocks: instructionBlocks.length,
|
|
142
143
|
structureEntries: structureEntries.length,
|
|
143
144
|
nfrBlocks: nfrBlocks.length,
|
|
144
145
|
hooks: hooks.length,
|
|
145
146
|
reviewBlocks: reviewBlocks.length,
|
|
146
147
|
});
|
|
147
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
instructionBlocks,
|
|
150
|
+
structureEntries,
|
|
151
|
+
nfrBlocks,
|
|
152
|
+
hooks,
|
|
153
|
+
reviewBlocks,
|
|
154
|
+
// Backward-compat alias
|
|
155
|
+
claudeMdBlocks: instructionBlocks,
|
|
156
|
+
};
|
|
148
157
|
}
|
|
149
158
|
/**
|
|
150
159
|
* Ensure UNIVERSAL is always first in the tag list.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAazD,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,cAAc,GAAuC;IACzD,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;IACpC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;CAC9C,CAAC;AAEF,qDAAqD;AACrD,MAAM,YAAY,GAAgB,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EAMd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAW5B;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CA0B1B;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EAMd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAW5B;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CA0B1B;AAsGD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GACjB,gBAAgB,GAAG,IAAI,CA4BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAuC1B"}
|
package/dist/registry/loader.js
CHANGED
|
@@ -65,15 +65,22 @@ export function loadAllTemplates(templatesDir) {
|
|
|
65
65
|
* Load a single tag's template set from its directory.
|
|
66
66
|
*/
|
|
67
67
|
function loadTagTemplateSet(tag, tagDir) {
|
|
68
|
-
let
|
|
68
|
+
let instructions;
|
|
69
69
|
let nfr;
|
|
70
70
|
let structure;
|
|
71
71
|
let hooks;
|
|
72
72
|
let review;
|
|
73
|
-
// Load claude-md.yaml
|
|
74
|
-
const
|
|
75
|
-
if (existsSync(
|
|
76
|
-
|
|
73
|
+
// Load instructions.yaml (formerly claude-md.yaml)
|
|
74
|
+
const instructionsPath = join(tagDir, "instructions.yaml");
|
|
75
|
+
if (existsSync(instructionsPath)) {
|
|
76
|
+
instructions = loadYamlFile(instructionsPath);
|
|
77
|
+
}
|
|
78
|
+
// Backward compat: try claude-md.yaml if instructions.yaml not found
|
|
79
|
+
if (!instructions) {
|
|
80
|
+
const legacyPath = join(tagDir, "claude-md.yaml");
|
|
81
|
+
if (existsSync(legacyPath)) {
|
|
82
|
+
instructions = loadYamlFile(legacyPath);
|
|
83
|
+
}
|
|
77
84
|
}
|
|
78
85
|
// Load nfr.yaml
|
|
79
86
|
const nfrPath = join(tagDir, "nfr.yaml");
|
|
@@ -96,7 +103,7 @@ function loadTagTemplateSet(tag, tagDir) {
|
|
|
96
103
|
if (existsSync(reviewPath)) {
|
|
97
104
|
review = loadYamlFile(reviewPath);
|
|
98
105
|
}
|
|
99
|
-
return { tag,
|
|
106
|
+
return { tag, instructions, nfr, structure, hooks, review };
|
|
100
107
|
}
|
|
101
108
|
/**
|
|
102
109
|
* Load and parse a single YAML template file.
|
|
@@ -216,7 +223,7 @@ export function loadAllTemplatesWithExtras(builtInDir, extraDirs) {
|
|
|
216
223
|
// Merge each template section additively
|
|
217
224
|
const merged = {
|
|
218
225
|
tag,
|
|
219
|
-
|
|
226
|
+
instructions: mergeInstructionTemplates(baseSet.instructions, extraSet.instructions),
|
|
220
227
|
nfr: mergeNfrTemplates(baseSet.nfr, extraSet.nfr),
|
|
221
228
|
structure: extraSet.structure ?? baseSet.structure,
|
|
222
229
|
hooks: mergeHookTemplates(baseSet.hooks, extraSet.hooks),
|
|
@@ -228,9 +235,9 @@ export function loadAllTemplatesWithExtras(builtInDir, extraDirs) {
|
|
|
228
235
|
return base;
|
|
229
236
|
}
|
|
230
237
|
/**
|
|
231
|
-
* Merge two
|
|
238
|
+
* Merge two InstructionTemplates, appending non-duplicate blocks from the extra template.
|
|
232
239
|
*/
|
|
233
|
-
function
|
|
240
|
+
function mergeInstructionTemplates(base, extra) {
|
|
234
241
|
if (!extra)
|
|
235
242
|
return base;
|
|
236
243
|
if (!base)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Template renderer.
|
|
3
3
|
*
|
|
4
4
|
* Renders composed template content with project-specific variable substitution.
|
|
5
|
+
* Supports multiple output targets (Claude, Cursor, Copilot, Windsurf, Cline, Aider).
|
|
5
6
|
* Handles {{variable}} and {{variable | default: value}} syntax.
|
|
6
7
|
*/
|
|
7
|
-
import type {
|
|
8
|
+
import type { InstructionBlock, NfrBlock, ReviewBlock, Tag, OutputTarget } from "../shared/types.js";
|
|
8
9
|
/** Variables available for template rendering. */
|
|
9
10
|
export interface RenderContext {
|
|
10
11
|
readonly projectName: string;
|
|
@@ -17,10 +18,19 @@ export interface RenderContext {
|
|
|
17
18
|
readonly [key: string]: unknown;
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
|
-
* Render
|
|
21
|
-
*
|
|
21
|
+
* Render an instruction file from composed blocks and project context.
|
|
22
|
+
* Supports all output targets (Claude, Cursor, Copilot, Windsurf, Cline, Aider).
|
|
23
|
+
*
|
|
24
|
+
* @param blocks - Composed instruction blocks
|
|
25
|
+
* @param context - Project context for variable substitution
|
|
26
|
+
* @param target - Output target (defaults to "claude")
|
|
27
|
+
* @returns Full instruction file content as a string
|
|
28
|
+
*/
|
|
29
|
+
export declare function renderInstructionFile(blocks: InstructionBlock[], context: RenderContext, target?: OutputTarget): string;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Use renderInstructionFile instead. Kept for backward compatibility.
|
|
22
32
|
*/
|
|
23
|
-
export declare function renderClaudeMd(blocks:
|
|
33
|
+
export declare function renderClaudeMd(blocks: InstructionBlock[], context: RenderContext): string;
|
|
24
34
|
/**
|
|
25
35
|
* Render NFR sections from composed blocks.
|
|
26
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/registry/renderer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/registry/renderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EACR,WAAW,EAEX,GAAG,EACH,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAQ5B,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IACrB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EAAE,EAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,YAAoC,GAC3C,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EAAE,EAC1B,OAAO,EAAE,aAAa,GACrB,MAAM,CAER;AAsCD;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,aAAa,GACrB,MAAM,CAQR;AAkBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,eAAe,GAAG,SAAS,GACjC,MAAM,CAuDR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAsC7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA6BhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+BrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,MAAM,CA2BR"}
|
|
@@ -2,17 +2,31 @@
|
|
|
2
2
|
* Template renderer.
|
|
3
3
|
*
|
|
4
4
|
* Renders composed template content with project-specific variable substitution.
|
|
5
|
+
* Supports multiple output targets (Claude, Cursor, Copilot, Windsurf, Cline, Aider).
|
|
5
6
|
* Handles {{variable}} and {{variable | default: value}} syntax.
|
|
6
7
|
*/
|
|
7
8
|
import { createLogger } from "../shared/logger/index.js";
|
|
9
|
+
import { OUTPUT_TARGET_CONFIGS, DEFAULT_OUTPUT_TARGET, } from "../shared/types.js";
|
|
8
10
|
const logger = createLogger("registry/renderer");
|
|
9
11
|
/**
|
|
10
|
-
* Render
|
|
11
|
-
*
|
|
12
|
+
* Render an instruction file from composed blocks and project context.
|
|
13
|
+
* Supports all output targets (Claude, Cursor, Copilot, Windsurf, Cline, Aider).
|
|
14
|
+
*
|
|
15
|
+
* @param blocks - Composed instruction blocks
|
|
16
|
+
* @param context - Project context for variable substitution
|
|
17
|
+
* @param target - Output target (defaults to "claude")
|
|
18
|
+
* @returns Full instruction file content as a string
|
|
12
19
|
*/
|
|
13
|
-
export function
|
|
14
|
-
const
|
|
15
|
-
const
|
|
20
|
+
export function renderInstructionFile(blocks, context, target = DEFAULT_OUTPUT_TARGET) {
|
|
21
|
+
const targetConfig = OUTPUT_TARGET_CONFIGS[target];
|
|
22
|
+
const header = buildHeader(context, targetConfig);
|
|
23
|
+
const sections = [];
|
|
24
|
+
// Cursor .mdc files use frontmatter
|
|
25
|
+
if (targetConfig.usesFrontmatter) {
|
|
26
|
+
sections.push(buildCursorFrontmatter(context));
|
|
27
|
+
}
|
|
28
|
+
sections.push(`${targetConfig.heading}\n`);
|
|
29
|
+
sections.push(header);
|
|
16
30
|
for (const block of blocks) {
|
|
17
31
|
const rendered = renderTemplate(block.content, context);
|
|
18
32
|
sections.push(rendered);
|
|
@@ -20,19 +34,24 @@ export function renderClaudeMd(blocks, context) {
|
|
|
20
34
|
return sections.join("\n");
|
|
21
35
|
}
|
|
22
36
|
/**
|
|
23
|
-
*
|
|
24
|
-
* This section tells Claude that the project is managed by ForgeCraft
|
|
25
|
-
* and what tools are available for maintenance.
|
|
37
|
+
* @deprecated Use renderInstructionFile instead. Kept for backward compatibility.
|
|
26
38
|
*/
|
|
27
|
-
function
|
|
39
|
+
export function renderClaudeMd(blocks, context) {
|
|
40
|
+
return renderInstructionFile(blocks, context, "claude");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build the ForgeCraft metadata header for the instruction file.
|
|
44
|
+
* Adapts messaging based on the output target.
|
|
45
|
+
*/
|
|
46
|
+
function buildHeader(context, targetConfig) {
|
|
28
47
|
const date = new Date().toISOString().split("T")[0];
|
|
29
48
|
const tagList = context.tags.map((t) => `\`${t}\``).join(", ");
|
|
30
|
-
return (`<!-- ForgeCraft managed | ${date} -->\n` +
|
|
31
|
-
`> **This project is managed by [ForgeCraft](https://github.com/jghiringhelli/forgecraft-mcp)
|
|
49
|
+
return (`<!-- ForgeCraft managed | ${date} | target: ${targetConfig.target} -->\n` +
|
|
50
|
+
`> **This project is managed by [ForgeCraft](https://github.com/jghiringhelli/forgecraft-mcp).** Generated for ${targetConfig.displayName}.\n` +
|
|
32
51
|
`> Tags: ${tagList}\n` +
|
|
33
52
|
`>\n` +
|
|
34
53
|
`> Available commands:\n` +
|
|
35
|
-
`> - \`setup_project\` — re-run full setup (detects tags, generates
|
|
54
|
+
`> - \`setup_project\` — re-run full setup (detects tags, generates instruction files)\n` +
|
|
36
55
|
`> - \`refresh_project\` — detect drift, update tags/tier after project scope changes\n` +
|
|
37
56
|
`> - \`audit_project\` — score compliance, find gaps\n` +
|
|
38
57
|
`> - \`review_project\` — structured code review checklist\n` +
|
|
@@ -40,6 +59,16 @@ function buildForgeCraftHeader(context) {
|
|
|
40
59
|
`>\n` +
|
|
41
60
|
`> Config: \`forgecraft.yaml\` | Tier system: core → recommended → optional\n`);
|
|
42
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Build Cursor-specific MDC frontmatter.
|
|
64
|
+
*/
|
|
65
|
+
function buildCursorFrontmatter(context) {
|
|
66
|
+
return (`---\n` +
|
|
67
|
+
`description: Engineering standards for ${context.projectName}\n` +
|
|
68
|
+
`globs:\n` +
|
|
69
|
+
`alwaysApply: true\n` +
|
|
70
|
+
`---\n`);
|
|
71
|
+
}
|
|
43
72
|
/**
|
|
44
73
|
* Render NFR sections from composed blocks.
|
|
45
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/registry/renderer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/registry/renderer.ts"],"names":[],"mappings":"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"}
|