agents-templated 2.2.7 → 2.2.9
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 +2 -1
- package/bin/cli.js +17 -9
- package/index.js +0 -1
- package/lib/instructions.js +6 -6
- package/package.json +1 -1
- package/templates/.claude/rules/planning.md +1 -1
- package/templates/README.md +1 -1
- package/templates/agents/skills/README.md +1 -0
- package/templates/agents/skills/shadcn-ui/SKILL.md +1932 -0
- package/templates/agents/skills/shadcn-ui/references/chart.md +306 -0
- package/templates/agents/skills/shadcn-ui/references/learn.md +145 -0
- package/templates/agents/skills/shadcn-ui/references/official-ui-reference.md +1729 -0
- package/templates/agents/skills/shadcn-ui/references/reference.md +586 -0
- package/templates/agents/skills/shadcn-ui/references/ui-reference.md +1578 -0
- package/templates/.github/copilot-instructions.md +0 -9
package/README.md
CHANGED
|
@@ -37,6 +37,7 @@ Agents Templated scaffolds your project with:
|
|
|
37
37
|
- `.github/skills/bug-triage/`
|
|
38
38
|
- `.github/skills/error-patterns/`
|
|
39
39
|
- `.github/skills/app-hardening/`
|
|
40
|
+
- `.github/skills/shadcn-ui/`
|
|
40
41
|
- Release and audit contracts now require hardening evidence when risk profile requires it
|
|
41
42
|
|
|
42
43
|
---
|
|
@@ -145,7 +146,6 @@ your-project/
|
|
|
145
146
|
│ └── README.md # Human-readable setup guide
|
|
146
147
|
│
|
|
147
148
|
├── .github/
|
|
148
|
-
│ ├── instructions/ # Compatibility pointer directory
|
|
149
149
|
│ ├── skills/
|
|
150
150
|
│ │ ├── find-skills/ # Skill discovery helper
|
|
151
151
|
│ │ ├── feature-delivery/ # Scoped feature delivery workflow
|
|
@@ -153,6 +153,7 @@ your-project/
|
|
|
153
153
|
│ │ ├── error-patterns/ # Persistent error-debugging memory workflow
|
|
154
154
|
│ │ ├── app-hardening/ # Hardening and release-evidence workflow
|
|
155
155
|
│ │ ├── ui-ux-pro-max/ # Advanced UI/UX design implementation skill
|
|
156
|
+
│ │ ├── shadcn-ui/ # shadcn/ui setup and component patterns
|
|
156
157
|
│ │ ├── README.md # Guide for creating custom skills
|
|
157
158
|
│ │ └── [your-custom-skills]/ # Your project-specific skills
|
|
158
159
|
│ └── copilot-instructions.md # Compatibility shim for Copilot
|
package/bin/cli.js
CHANGED
|
@@ -186,7 +186,6 @@ program
|
|
|
186
186
|
// Install AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)
|
|
187
187
|
if (installAll || choices.includes('github')) {
|
|
188
188
|
console.log(chalk.yellow('Installing AI agent instructions...'));
|
|
189
|
-
await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
|
|
190
189
|
await writeGeneratedInstructions(targetDir, templateDir, options.force);
|
|
191
190
|
console.log(chalk.gray(' ✓ Claude (CLAUDE.md — canonical source)'));
|
|
192
191
|
console.log(chalk.gray(' ✓ GitHub Copilot (.github/copilot-instructions.md pointer)'));
|
|
@@ -358,7 +357,6 @@ program
|
|
|
358
357
|
// Install AI Agent instructions (Cursor, Copilot, Claude, Generic AGENTS)
|
|
359
358
|
if (options.github) {
|
|
360
359
|
console.log(chalk.yellow('Installing AI agent instructions...'));
|
|
361
|
-
await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
|
|
362
360
|
await writeGeneratedInstructions(targetDir, templateDir, options.force);
|
|
363
361
|
console.log(chalk.gray(' ✓ Claude (CLAUDE.md — canonical source)'));
|
|
364
362
|
console.log(chalk.gray(' ✓ GitHub Copilot (.github/copilot-instructions.md pointer)'));
|
|
@@ -383,10 +381,10 @@ program
|
|
|
383
381
|
console.log(chalk.white(' 1. Review CLAUDE.md (canonical AI policy — edit this directly)'));
|
|
384
382
|
console.log(chalk.white(' 2. Review agent-docs/ARCHITECTURE.md for project guidelines'));
|
|
385
383
|
console.log(chalk.white(' 3. AGENTS.MD and .github/copilot-instructions.md are thin pointers to CLAUDE.md'));
|
|
386
|
-
console.log(chalk.white(' 4. Customize
|
|
384
|
+
console.log(chalk.white(' 4. Customize .claude/rules/*.md for your tech stack'));
|
|
387
385
|
|
|
388
386
|
console.log(chalk.cyan('\n🔒 Security Reminder:\n'));
|
|
389
|
-
console.log(chalk.white(' • Review
|
|
387
|
+
console.log(chalk.white(' • Review .claude/rules/security.md'));
|
|
390
388
|
console.log(chalk.white(' • Validate all inputs with schema validation'));
|
|
391
389
|
console.log(chalk.white(' • Implement rate limiting on public endpoints'));
|
|
392
390
|
console.log(chalk.white(' • Never expose sensitive data in errors\n'));
|
|
@@ -666,6 +664,16 @@ async function cleanupLegacyInstructionFiles(targetDir) {
|
|
|
666
664
|
console.log(chalk.green(` ✓ Removed legacy file: ${file}`));
|
|
667
665
|
}
|
|
668
666
|
}
|
|
667
|
+
|
|
668
|
+
// Remove deprecated directory if it is now empty.
|
|
669
|
+
const legacyInstructionsDir = path.join(targetDir, '.github', 'instructions');
|
|
670
|
+
if (await fs.pathExists(legacyInstructionsDir)) {
|
|
671
|
+
const entries = await fs.readdir(legacyInstructionsDir);
|
|
672
|
+
if (entries.length === 0) {
|
|
673
|
+
await fs.remove(legacyInstructionsDir);
|
|
674
|
+
console.log(chalk.green(' ✓ Removed legacy directory: .github/instructions/'));
|
|
675
|
+
}
|
|
676
|
+
}
|
|
669
677
|
}
|
|
670
678
|
|
|
671
679
|
async function updateSelectedComponents(targetDir, templateDir, selectedComponents, overwrite = true) {
|
|
@@ -705,7 +713,6 @@ async function updateSelectedComponents(targetDir, templateDir, selectedComponen
|
|
|
705
713
|
|
|
706
714
|
if (components.includes('github')) {
|
|
707
715
|
console.log(chalk.yellow('Updating AI agent instructions...'));
|
|
708
|
-
await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
|
|
709
716
|
await writeGeneratedInstructions(targetDir, templateDir, overwrite);
|
|
710
717
|
await cleanupLegacyInstructionFiles(targetDir);
|
|
711
718
|
}
|
|
@@ -836,7 +843,8 @@ program
|
|
|
836
843
|
{ targetFile: `${LAYOUT.canonical.skillsDir}/README.md`, templateFile: 'agents/skills/README.md', component: 'skills' },
|
|
837
844
|
{ targetFile: `${LAYOUT.canonical.skillsDir}/find-skills/SKILL.md`, templateFile: 'agents/skills/find-skills/SKILL.md', component: 'skills' },
|
|
838
845
|
{ targetFile: `${LAYOUT.canonical.skillsDir}/error-patterns/SKILL.md`, templateFile: 'agents/skills/error-patterns/SKILL.md', component: 'skills' },
|
|
839
|
-
{ targetFile: `${LAYOUT.canonical.skillsDir}/ui-ux-pro-max/SKILL.md`, templateFile: 'agents/skills/ui-ux-pro-max/SKILL.md', component: 'skills' }
|
|
846
|
+
{ targetFile: `${LAYOUT.canonical.skillsDir}/ui-ux-pro-max/SKILL.md`, templateFile: 'agents/skills/ui-ux-pro-max/SKILL.md', component: 'skills' },
|
|
847
|
+
{ targetFile: `${LAYOUT.canonical.skillsDir}/shadcn-ui/SKILL.md`, templateFile: 'agents/skills/shadcn-ui/SKILL.md', component: 'skills' }
|
|
840
848
|
];
|
|
841
849
|
|
|
842
850
|
for (const {targetFile, templateFile, component} of checkFiles) {
|
|
@@ -991,7 +999,7 @@ program
|
|
|
991
999
|
console.log(chalk.blue('\n📚 Quick Tips:\n'));
|
|
992
1000
|
console.log(chalk.white(' • Run "agents-templated validate" to check setup'));
|
|
993
1001
|
console.log(chalk.white(' • Run "agents-templated wizard" for guided setup'));
|
|
994
|
-
console.log(chalk.white(' • Review
|
|
1002
|
+
console.log(chalk.white(' • Review .claude/rules/security.md for security patterns\n'));
|
|
995
1003
|
|
|
996
1004
|
} catch (error) {
|
|
997
1005
|
console.error(chalk.red('Error:'), error.message);
|
|
@@ -1001,7 +1009,7 @@ program
|
|
|
1001
1009
|
|
|
1002
1010
|
program
|
|
1003
1011
|
.command('new-skill <name>')
|
|
1004
|
-
.description('Scaffold a new skill in
|
|
1012
|
+
.description('Scaffold a new skill in .github/skills/<name>/SKILL.md')
|
|
1005
1013
|
.action(async (name) => {
|
|
1006
1014
|
try {
|
|
1007
1015
|
const targetDir = process.cwd();
|
|
@@ -1017,7 +1025,7 @@ program
|
|
|
1017
1025
|
|
|
1018
1026
|
program
|
|
1019
1027
|
.command('new-rule <name>')
|
|
1020
|
-
.description('Scaffold a new rule in
|
|
1028
|
+
.description('Scaffold a new rule in .claude/rules/<name>.md')
|
|
1021
1029
|
.action(async (name) => {
|
|
1022
1030
|
try {
|
|
1023
1031
|
const targetDir = process.cwd();
|
package/index.js
CHANGED
|
@@ -71,7 +71,6 @@ async function install(targetDir, options = {}) {
|
|
|
71
71
|
|
|
72
72
|
// AI Agent instructions (Cursor, Copilot, Claude)
|
|
73
73
|
if (installAll || options.github) {
|
|
74
|
-
await fs.ensureDir(path.join(targetDir, '.github', 'instructions'));
|
|
75
74
|
await writeGeneratedInstructions(targetDir, templateDir, options.force);
|
|
76
75
|
}
|
|
77
76
|
|
package/lib/instructions.js
CHANGED
|
@@ -96,11 +96,11 @@ async function validateInstructionDrift(targetDir) {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
async function scaffoldSkill(targetDir, skillName) {
|
|
99
|
-
const skillDir = path.join(targetDir, '
|
|
99
|
+
const skillDir = path.join(targetDir, '.github', 'skills', skillName);
|
|
100
100
|
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
101
101
|
|
|
102
102
|
if (await fs.pathExists(skillFile)) {
|
|
103
|
-
throw new Error(`Skill already exists:
|
|
103
|
+
throw new Error(`Skill already exists: .github/skills/${skillName}/SKILL.md`);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
const title = skillName.split('-').map(w => w[0].toUpperCase() + w.slice(1)).join(' ');
|
|
@@ -132,15 +132,15 @@ async function scaffoldSkill(targetDir, skillName) {
|
|
|
132
132
|
|
|
133
133
|
await fs.ensureDir(skillDir);
|
|
134
134
|
await fs.writeFile(skillFile, content, 'utf8');
|
|
135
|
-
return
|
|
135
|
+
return `.github/skills/${skillName}/SKILL.md`;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
async function scaffoldRule(targetDir, ruleName) {
|
|
139
|
-
const rulesDir = path.join(targetDir, '
|
|
139
|
+
const rulesDir = path.join(targetDir, '.claude', 'rules');
|
|
140
140
|
const ruleFile = path.join(rulesDir, `${ruleName}.md`);
|
|
141
141
|
|
|
142
142
|
if (await fs.pathExists(ruleFile)) {
|
|
143
|
-
throw new Error(`Rule already exists:
|
|
143
|
+
throw new Error(`Rule already exists: .claude/rules/${ruleName}.md`);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
const content = [
|
|
@@ -168,7 +168,7 @@ async function scaffoldRule(targetDir, ruleName) {
|
|
|
168
168
|
|
|
169
169
|
await fs.ensureDir(rulesDir);
|
|
170
170
|
await fs.writeFile(ruleFile, content, 'utf8');
|
|
171
|
-
return
|
|
171
|
+
return `.claude/rules/${ruleName}.md`;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
async function scaffoldSubagent(targetDir, name) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agents-templated",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.9",
|
|
4
4
|
"description": "Technology-agnostic development template with multi-AI agent support (Cursor, Copilot, VSCode, Gemini), security-first patterns, and comprehensive testing guidelines",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
package/templates/README.md
CHANGED
|
@@ -124,11 +124,11 @@ your-project/
|
|
|
124
124
|
│ └── README.md # Human-readable setup guide
|
|
125
125
|
│
|
|
126
126
|
├── .github/
|
|
127
|
-
│ ├── instructions/ # Compatibility pointer directory
|
|
128
127
|
│ ├── skills/
|
|
129
128
|
│ │ ├── find-skills/ # Skill discovery helper
|
|
130
129
|
│ │ ├── error-patterns/ # Persistent error-debugging memory workflow
|
|
131
130
|
│ │ ├── ui-ux-pro-max/ # Advanced UI/UX design implementation skill
|
|
131
|
+
│ │ ├── shadcn-ui/ # shadcn/ui setup and component patterns
|
|
132
132
|
│ │ ├── README.md # Guide for creating custom skills
|
|
133
133
|
│ │ └── [your-custom-skills]/ # Your project-specific skills
|
|
134
134
|
│ └── copilot-instructions.md # Compatibility shim for Copilot
|
|
@@ -100,6 +100,7 @@ Consider creating skills for:
|
|
|
100
100
|
- `bug-triage`: Use for defects and regressions requiring reproducible evidence, root-cause isolation, and minimal safe patches.
|
|
101
101
|
- `error-patterns`: Use when errors repeat to apply known fixes from lessons-learned and automatically record new resolutions.
|
|
102
102
|
- `app-hardening`: Use for high-risk/distributed runtimes to enforce hardening profile, obfuscation decisions, and release evidence.
|
|
103
|
+
- `shadcn-ui`: Use for shadcn/ui installation, component composition, form patterns, and theme customization.
|
|
103
104
|
|
|
104
105
|
## Using Skills in Your Project
|
|
105
106
|
|