agentic-team-templates 0.18.0 → 0.19.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 +6 -5
- package/package.json +1 -1
- package/src/index.js +89 -8
- package/src/index.test.js +37 -11
- /package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/action-control.md +0 -0
- /package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/context-management.md +0 -0
- /package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/hallucination-prevention.md +0 -0
- /package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/overview.md +0 -0
- /package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/token-optimization.md +0 -0
- /package/templates/{utility-agent → agents/utility-agent}/CLAUDE.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/communication.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/discovery.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/metrics.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/overview.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/prioritization.md +0 -0
- /package/templates/{product-manager → business/product-manager}/.cursor/rules/requirements.md +0 -0
- /package/templates/{product-manager → business/product-manager}/CLAUDE.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/accessibility.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/emotional-design.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/handoff.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/information-architecture.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/interaction-design.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/overview.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/research.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/visual-design.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/CLAUDE.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/accessibility.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/assessment.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/curriculum.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/engagement.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/instructional-design.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/overview.md +0 -0
- /package/templates/{educator → education/educator}/.cursor/rules/retention.md +0 -0
- /package/templates/{educator → education/educator}/CLAUDE.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/defi-patterns.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/gas-optimization.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/overview.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/security.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/smart-contracts.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/testing.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/.cursor/rules/web3-integration.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/CLAUDE.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/architecture.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/arguments.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/distribution.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/overview.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/testing.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/.cursor/rules/user-experience.md +0 -0
- /package/templates/{cli-tools → engineering/cli-tools}/CLAUDE.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/data-modeling.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/data-quality.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/overview.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/performance.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/pipeline-design.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/security.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/testing.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/CLAUDE.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/capacity-planning.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/change-management.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/chaos-engineering.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/disaster-recovery.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/incident-management.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/observability.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/overview.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/postmortems.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/runbooks.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/slo-sli.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/toil-reduction.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/CLAUDE.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/.cursor/rules/api-contracts.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/.cursor/rules/architecture.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/.cursor/rules/overview.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/.cursor/rules/shared-types.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/.cursor/rules/testing.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/CLAUDE.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/data-engineering.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/deployment.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/model-development.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/monitoring.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/overview.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/security.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/.cursor/rules/testing.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/CLAUDE.md +0 -0
- /package/templates/{mobile → engineering/mobile}/.cursor/rules/navigation.md +0 -0
- /package/templates/{mobile → engineering/mobile}/.cursor/rules/offline-first.md +0 -0
- /package/templates/{mobile → engineering/mobile}/.cursor/rules/overview.md +0 -0
- /package/templates/{mobile → engineering/mobile}/.cursor/rules/performance.md +0 -0
- /package/templates/{mobile → engineering/mobile}/.cursor/rules/testing.md +0 -0
- /package/templates/{mobile → engineering/mobile}/CLAUDE.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/ci-cd.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/developer-experience.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/infrastructure-as-code.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/kubernetes.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/observability.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/overview.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/security.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/.cursor/rules/testing.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/CLAUDE.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/automation.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/metrics.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/overview.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/quality-gates.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/test-design.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/.cursor/rules/test-strategy.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/CLAUDE.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/advanced-techniques.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/ci-cd-integration.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/overview.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/performance-testing.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/quality-metrics.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/reliability.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/tdd-methodology.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/test-data.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/test-design.md +0 -0
- /package/templates/{testing → engineering/testing}/.cursor/rules/test-types.md +0 -0
- /package/templates/{testing → engineering/testing}/CLAUDE.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/api-design.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/authentication.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/database-patterns.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/overview.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/security.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/.cursor/rules/testing.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/CLAUDE.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/accessibility.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/component-patterns.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/overview.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/performance.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/state-management.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/styling.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/.cursor/rules/testing.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/CLAUDE.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/concurrency.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/memory-and-ownership.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/modern-cpp.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/CLAUDE.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/aspnet-core.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/async-patterns.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/dependency-injection.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/language-features.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/CLAUDE.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/concurrency.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/interfaces-and-types.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/production-patterns.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/stdlib-and-tooling.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/CLAUDE.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/concurrency.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/modern-java.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/persistence.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/spring-boot.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/CLAUDE.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/language-deep-dive.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/node-patterns.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/react-patterns.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/.cursor/rules/typescript-deep-dive.md +0 -0
- /package/templates/{javascript-expert → languages/javascript-expert}/CLAUDE.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/coroutines.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/frameworks.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/language-features.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/CLAUDE.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/async-python.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/patterns-and-idioms.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/type-system.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/.cursor/rules/web-and-apis.md +0 -0
- /package/templates/{python-expert → languages/python-expert}/CLAUDE.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/concurrency.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/ecosystem-and-tooling.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/ownership-and-borrowing.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/performance-and-unsafe.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/.cursor/rules/traits-and-generics.md +0 -0
- /package/templates/{rust-expert → languages/rust-expert}/CLAUDE.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/concurrency.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/error-handling.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/language-features.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/overview.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/performance.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/swiftui.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/testing.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/.cursor/rules/tooling.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/CLAUDE.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/adr.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/api-documentation.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/code-comments.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/maintenance.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/overview.md +0 -0
- /package/templates/{documentation → professional/documentation}/.cursor/rules/readme-standards.md +0 -0
- /package/templates/{documentation → professional/documentation}/CLAUDE.md +0 -0
package/README.md
CHANGED
|
@@ -342,11 +342,10 @@ We welcome contributions! Here's how to add new templates or improve existing on
|
|
|
342
342
|
|
|
343
343
|
### Adding a New Template
|
|
344
344
|
|
|
345
|
-
1. **Create the template directory
|
|
345
|
+
1. **Create the template in the appropriate category directory:**
|
|
346
346
|
|
|
347
347
|
```text
|
|
348
|
-
templates
|
|
349
|
-
├── CLAUDE.md # Main development guide (required)
|
|
348
|
+
templates/<category>/your-template/
|
|
350
349
|
└── .cursor/
|
|
351
350
|
└── rules/
|
|
352
351
|
├── overview.md # Scope and core principles (required)
|
|
@@ -355,15 +354,17 @@ templates/your-template/
|
|
|
355
354
|
└── ...
|
|
356
355
|
```
|
|
357
356
|
|
|
357
|
+
Categories: `engineering`, `languages`, `creative`, `business`, `marketing`, `professional`, `finance`, `education`, `health`, `home`, `science`, `personal`, `civic`, `trades`, `agents`
|
|
358
|
+
|
|
358
359
|
2. **Follow the existing patterns:**
|
|
359
|
-
- Look at `templates/web-frontend/` or `templates/
|
|
360
|
+
- Look at `templates/engineering/web-frontend/` or `templates/languages/python-expert/` for reference
|
|
360
361
|
- Each rule file should be focused on a single topic
|
|
361
362
|
- Include code examples, not just guidelines
|
|
362
363
|
- Add "Common Pitfalls" and "Definition of Done" sections
|
|
363
364
|
|
|
364
365
|
3. **Required files:**
|
|
365
|
-
- `CLAUDE.md` - Comprehensive guide with overview, tech stack, patterns, and examples
|
|
366
366
|
- `.cursor/rules/overview.md` - Scope, core principles, and project structure
|
|
367
|
+
- Add a `category` field to the template entry in `src/index.js`
|
|
367
368
|
|
|
368
369
|
### Template Guidelines
|
|
369
370
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-team-templates",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "AI coding assistant templates for Cursor IDE. Pre-configured rules and guidelines that help AI assistants write better code. - use at your own risk",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cursor",
|
package/src/index.js
CHANGED
|
@@ -22,109 +22,146 @@ const CURRENT_VERSION = packageJson.version;
|
|
|
22
22
|
const REPO_URL = 'https://github.com/djm204/agentic-team-templates';
|
|
23
23
|
const CHANGELOG_URL = `${REPO_URL}/releases/tag/${PACKAGE_NAME}-v${CURRENT_VERSION}`;
|
|
24
24
|
|
|
25
|
+
// Template categories (storage-only, not exposed to CLI users)
|
|
26
|
+
const CATEGORIES = [
|
|
27
|
+
'engineering',
|
|
28
|
+
'languages',
|
|
29
|
+
'creative',
|
|
30
|
+
'business',
|
|
31
|
+
'professional',
|
|
32
|
+
'education',
|
|
33
|
+
'agents',
|
|
34
|
+
];
|
|
35
|
+
|
|
25
36
|
// Available templates
|
|
26
37
|
const TEMPLATES = {
|
|
27
38
|
'blockchain': {
|
|
39
|
+
category: 'engineering',
|
|
28
40
|
description: 'Smart contracts, DeFi protocols, and Web3 applications (Solidity, Foundry, Viem)',
|
|
29
41
|
rules: ['defi-patterns.md', 'gas-optimization.md', 'overview.md', 'security.md', 'smart-contracts.md', 'testing.md', 'web3-integration.md']
|
|
30
42
|
},
|
|
31
43
|
'cpp-expert': {
|
|
44
|
+
category: 'languages',
|
|
32
45
|
description: 'Principal-level C++ engineering (modern C++, RAII, concurrency, templates, performance)',
|
|
33
46
|
rules: ['concurrency.md', 'error-handling.md', 'memory-and-ownership.md', 'modern-cpp.md', 'overview.md', 'performance.md', 'testing.md', 'tooling.md']
|
|
34
47
|
},
|
|
35
48
|
'csharp-expert': {
|
|
49
|
+
category: 'languages',
|
|
36
50
|
description: 'Principal-level C# engineering (async, DI, EF Core, ASP.NET Core, testing)',
|
|
37
51
|
rules: ['aspnet-core.md', 'async-patterns.md', 'dependency-injection.md', 'error-handling.md', 'language-features.md', 'overview.md', 'performance.md', 'testing.md', 'tooling.md']
|
|
38
52
|
},
|
|
39
53
|
'cli-tools': {
|
|
54
|
+
category: 'engineering',
|
|
40
55
|
description: 'Command-line applications and developer tools (Cobra, Commander, Click)',
|
|
41
56
|
rules: ['architecture.md', 'arguments.md', 'distribution.md', 'error-handling.md', 'overview.md', 'testing.md', 'user-experience.md']
|
|
42
57
|
},
|
|
43
58
|
'data-engineering': {
|
|
59
|
+
category: 'engineering',
|
|
44
60
|
description: 'Data platforms and pipelines (ETL, data modeling, data quality)',
|
|
45
61
|
rules: ['data-modeling.md', 'data-quality.md', 'overview.md', 'performance.md', 'pipeline-design.md', 'security.md', 'testing.md']
|
|
46
62
|
},
|
|
47
63
|
'devops-sre': {
|
|
64
|
+
category: 'engineering',
|
|
48
65
|
description: 'DevOps and SRE practices (incident management, observability, SLOs, chaos engineering)',
|
|
49
66
|
rules: ['capacity-planning.md', 'change-management.md', 'chaos-engineering.md', 'disaster-recovery.md', 'incident-management.md', 'observability.md', 'overview.md', 'postmortems.md', 'runbooks.md', 'slo-sli.md', 'toil-reduction.md']
|
|
50
67
|
},
|
|
51
68
|
'documentation': {
|
|
69
|
+
category: 'professional',
|
|
52
70
|
description: 'Technical documentation standards (READMEs, API docs, ADRs, code comments)',
|
|
53
71
|
rules: ['adr.md', 'api-documentation.md', 'code-comments.md', 'maintenance.md', 'overview.md', 'readme-standards.md']
|
|
54
72
|
},
|
|
55
73
|
'educator': {
|
|
74
|
+
category: 'education',
|
|
56
75
|
description: 'World-class pedagogy with evidence-based teaching, learning retention, gamification, and assessment design',
|
|
57
76
|
rules: ['accessibility.md', 'assessment.md', 'curriculum.md', 'engagement.md', 'instructional-design.md', 'overview.md', 'retention.md']
|
|
58
77
|
},
|
|
59
78
|
'fullstack': {
|
|
79
|
+
category: 'engineering',
|
|
60
80
|
description: 'Full-stack web applications (Next.js, Nuxt, SvelteKit, Remix)',
|
|
61
81
|
rules: ['api-contracts.md', 'architecture.md', 'overview.md', 'shared-types.md', 'testing.md']
|
|
62
82
|
},
|
|
63
83
|
'golang-expert': {
|
|
84
|
+
category: 'languages',
|
|
64
85
|
description: 'Principal-level Go engineering (concurrency, stdlib, production patterns, testing)',
|
|
65
86
|
rules: ['concurrency.md', 'error-handling.md', 'interfaces-and-types.md', 'overview.md', 'performance.md', 'production-patterns.md', 'stdlib-and-tooling.md', 'testing.md']
|
|
66
87
|
},
|
|
67
88
|
'java-expert': {
|
|
89
|
+
category: 'languages',
|
|
68
90
|
description: 'Principal-level Java engineering (JVM, Spring Boot, concurrency, JPA, testing)',
|
|
69
91
|
rules: ['concurrency.md', 'error-handling.md', 'modern-java.md', 'overview.md', 'performance.md', 'persistence.md', 'spring-boot.md', 'testing.md', 'tooling.md']
|
|
70
92
|
},
|
|
71
93
|
'javascript-expert': {
|
|
94
|
+
category: 'languages',
|
|
72
95
|
description: 'Principal-level JavaScript & TypeScript engineering (Node.js, React, type system, testing)',
|
|
73
96
|
rules: ['language-deep-dive.md', 'node-patterns.md', 'overview.md', 'performance.md', 'react-patterns.md', 'testing.md', 'tooling.md', 'typescript-deep-dive.md']
|
|
74
97
|
},
|
|
75
98
|
'kotlin-expert': {
|
|
99
|
+
category: 'languages',
|
|
76
100
|
description: 'Principal-level Kotlin engineering (coroutines, multiplatform, Ktor, Spring Boot, testing)',
|
|
77
101
|
rules: ['coroutines.md', 'error-handling.md', 'frameworks.md', 'language-features.md', 'overview.md', 'performance.md', 'testing.md', 'tooling.md']
|
|
78
102
|
},
|
|
79
103
|
'ml-ai': {
|
|
104
|
+
category: 'engineering',
|
|
80
105
|
description: 'Machine learning and AI systems (model development, deployment, monitoring)',
|
|
81
106
|
rules: ['data-engineering.md', 'deployment.md', 'model-development.md', 'monitoring.md', 'overview.md', 'security.md', 'testing.md']
|
|
82
107
|
},
|
|
83
108
|
'mobile': {
|
|
109
|
+
category: 'engineering',
|
|
84
110
|
description: 'Mobile applications (React Native, Flutter, native iOS/Android)',
|
|
85
111
|
rules: ['navigation.md', 'offline-first.md', 'overview.md', 'performance.md', 'testing.md']
|
|
86
112
|
},
|
|
87
113
|
'platform-engineering': {
|
|
114
|
+
category: 'engineering',
|
|
88
115
|
description: 'Internal developer platforms, infrastructure automation, and reliability engineering',
|
|
89
116
|
rules: ['ci-cd.md', 'developer-experience.md', 'infrastructure-as-code.md', 'kubernetes.md', 'observability.md', 'overview.md', 'security.md', 'testing.md']
|
|
90
117
|
},
|
|
91
118
|
'product-manager': {
|
|
119
|
+
category: 'business',
|
|
92
120
|
description: 'Product management with customer-centric discovery, prioritization, and execution',
|
|
93
121
|
rules: ['communication.md', 'discovery.md', 'metrics.md', 'overview.md', 'prioritization.md', 'requirements.md']
|
|
94
122
|
},
|
|
95
123
|
'python-expert': {
|
|
124
|
+
category: 'languages',
|
|
96
125
|
description: 'Principal-level Python engineering (type system, async, testing, FastAPI, Django)',
|
|
97
126
|
rules: ['async-python.md', 'overview.md', 'patterns-and-idioms.md', 'performance.md', 'testing.md', 'tooling.md', 'type-system.md', 'web-and-apis.md']
|
|
98
127
|
},
|
|
99
128
|
'qa-engineering': {
|
|
129
|
+
category: 'engineering',
|
|
100
130
|
description: 'Quality assurance programs for confident, rapid software delivery',
|
|
101
131
|
rules: ['automation.md', 'metrics.md', 'overview.md', 'quality-gates.md', 'test-design.md', 'test-strategy.md']
|
|
102
132
|
},
|
|
103
133
|
'rust-expert': {
|
|
134
|
+
category: 'languages',
|
|
104
135
|
description: 'Principal-level Rust engineering (ownership, concurrency, unsafe, traits, async)',
|
|
105
136
|
rules: ['concurrency.md', 'ecosystem-and-tooling.md', 'error-handling.md', 'overview.md', 'ownership-and-borrowing.md', 'performance-and-unsafe.md', 'testing.md', 'traits-and-generics.md']
|
|
106
137
|
},
|
|
107
138
|
'swift-expert': {
|
|
139
|
+
category: 'languages',
|
|
108
140
|
description: 'Principal-level Swift engineering (concurrency, SwiftUI, protocols, testing, Apple platforms)',
|
|
109
141
|
rules: ['concurrency.md', 'error-handling.md', 'language-features.md', 'overview.md', 'performance.md', 'swiftui.md', 'testing.md', 'tooling.md']
|
|
110
142
|
},
|
|
111
143
|
'testing': {
|
|
144
|
+
category: 'engineering',
|
|
112
145
|
description: 'Comprehensive testing practices (TDD, test design, CI/CD integration, performance testing)',
|
|
113
146
|
rules: ['advanced-techniques.md', 'ci-cd-integration.md', 'overview.md', 'performance-testing.md', 'quality-metrics.md', 'reliability.md', 'tdd-methodology.md', 'test-data.md', 'test-design.md', 'test-types.md']
|
|
114
147
|
},
|
|
115
148
|
'utility-agent': {
|
|
149
|
+
category: 'agents',
|
|
116
150
|
description: 'AI agent utilities with context management and hallucination prevention',
|
|
117
151
|
rules: ['action-control.md', 'context-management.md', 'hallucination-prevention.md', 'overview.md', 'token-optimization.md']
|
|
118
152
|
},
|
|
119
153
|
'ux-designer': {
|
|
154
|
+
category: 'creative',
|
|
120
155
|
description: 'Principal-level UX design with user research, interaction design, design systems, accessibility, and emotional design',
|
|
121
156
|
rules: ['accessibility.md', 'emotional-design.md', 'handoff.md', 'information-architecture.md', 'interaction-design.md', 'overview.md', 'research.md', 'visual-design.md']
|
|
122
157
|
},
|
|
123
158
|
'web-backend': {
|
|
159
|
+
category: 'engineering',
|
|
124
160
|
description: 'Backend APIs and services (REST, GraphQL, microservices)',
|
|
125
161
|
rules: ['api-design.md', 'authentication.md', 'database-patterns.md', 'error-handling.md', 'overview.md', 'security.md', 'testing.md']
|
|
126
162
|
},
|
|
127
163
|
'web-frontend': {
|
|
164
|
+
category: 'engineering',
|
|
128
165
|
description: 'Frontend web applications (SPAs, SSR, static sites, PWAs)',
|
|
129
166
|
rules: ['accessibility.md', 'component-patterns.md', 'overview.md', 'performance.md', 'state-management.md', 'styling.md', 'testing.md']
|
|
130
167
|
}
|
|
@@ -166,6 +203,17 @@ function resolveTemplateAlias(name) {
|
|
|
166
203
|
return TEMPLATE_ALIASES[name] || name;
|
|
167
204
|
}
|
|
168
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Get the source path for a template's rule files
|
|
208
|
+
* @param {string} template - Template name
|
|
209
|
+
* @param {string} rule - Rule filename
|
|
210
|
+
* @returns {string} Full path to the rule file in templates/<category>/<template>/.cursor/rules/
|
|
211
|
+
*/
|
|
212
|
+
function getTemplateRulePath(template, rule) {
|
|
213
|
+
const { category } = TEMPLATES[template];
|
|
214
|
+
return path.join(TEMPLATES_DIR, category, template, '.cursor', 'rules', rule);
|
|
215
|
+
}
|
|
216
|
+
|
|
169
217
|
const SHARED_RULES = [
|
|
170
218
|
'code-quality.md',
|
|
171
219
|
'communication.md',
|
|
@@ -310,11 +358,25 @@ function printTemplates() {
|
|
|
310
358
|
|
|
311
359
|
console.log(colors.yellow('Available Templates:\n'));
|
|
312
360
|
|
|
361
|
+
// Group templates by category
|
|
362
|
+
const byCategory = {};
|
|
313
363
|
for (const [name, info] of Object.entries(TEMPLATES)) {
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
364
|
+
const cat = info.category;
|
|
365
|
+
if (!byCategory[cat]) byCategory[cat] = [];
|
|
366
|
+
byCategory[cat].push({ name, info });
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
for (const category of CATEGORIES) {
|
|
370
|
+
const templates = byCategory[category];
|
|
371
|
+
if (!templates || templates.length === 0) continue;
|
|
372
|
+
const label = category.charAt(0).toUpperCase() + category.slice(1);
|
|
373
|
+
console.log(colors.blue(` ${label}:`));
|
|
374
|
+
for (const { name, info } of templates) {
|
|
375
|
+
const aliases = aliasesByTemplate[name];
|
|
376
|
+
const aliasSuffix = aliases ? ` ${colors.dim(`(aliases: ${aliases.join(', ')})`)}` : '';
|
|
377
|
+
console.log(` ${colors.green(name)}${aliasSuffix}`);
|
|
378
|
+
console.log(` ${info.description}\n`);
|
|
379
|
+
}
|
|
318
380
|
}
|
|
319
381
|
|
|
320
382
|
console.log(colors.blue('Shared rules (always included):'));
|
|
@@ -709,7 +771,7 @@ function generateCopilotInstructionsContent(installedTemplates) {
|
|
|
709
771
|
// Read and concatenate template-specific rules
|
|
710
772
|
const templateRulesContent = installedTemplates.map(template => {
|
|
711
773
|
return TEMPLATES[template].rules.map(rule => {
|
|
712
|
-
const rulePath =
|
|
774
|
+
const rulePath = getTemplateRulePath(template, rule);
|
|
713
775
|
try {
|
|
714
776
|
return fs.readFileSync(rulePath, 'utf8');
|
|
715
777
|
} catch {
|
|
@@ -836,7 +898,7 @@ async function install(targetDir, templates, dryRun = false, force = false, ides
|
|
|
836
898
|
console.log(colors.green(`► Installing ${template} template (${CURSOR_RULES_DIR}/)...`));
|
|
837
899
|
|
|
838
900
|
for (const rule of TEMPLATES[template].rules) {
|
|
839
|
-
const src =
|
|
901
|
+
const src = getTemplateRulePath(template, rule);
|
|
840
902
|
const dest = path.join(cursorRulesDir, `${template}-${rule}`);
|
|
841
903
|
const destName = `${template}-${rule}`;
|
|
842
904
|
|
|
@@ -886,6 +948,23 @@ async function install(targetDir, templates, dryRun = false, force = false, ides
|
|
|
886
948
|
);
|
|
887
949
|
|
|
888
950
|
if (shouldCleanup) {
|
|
951
|
+
// Copy legacy rule files to .cursor/rules/ before removing (don't overwrite existing)
|
|
952
|
+
const legacyEntries = fs.readdirSync(legacyDir, { withFileTypes: true });
|
|
953
|
+
let copiedCount = 0;
|
|
954
|
+
for (const entry of legacyEntries) {
|
|
955
|
+
if (!entry.isFile()) continue;
|
|
956
|
+
const name = entry.name;
|
|
957
|
+
const legacyPath = path.join(legacyDir, name);
|
|
958
|
+
const destPath = path.join(cursorRulesDir, name);
|
|
959
|
+
if (!fs.existsSync(destPath)) {
|
|
960
|
+
fs.copyFileSync(legacyPath, destPath);
|
|
961
|
+
console.log(colors.dim(` ${colors.green('[migrated]')} ${name} → ${CURSOR_RULES_DIR}/`));
|
|
962
|
+
copiedCount++;
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
if (copiedCount > 0) {
|
|
966
|
+
console.log(colors.green(` ✓ Migrated ${copiedCount} file(s) from ${LEGACY_CURSORRULES_DIR}/ to ${CURSOR_RULES_DIR}/.`));
|
|
967
|
+
}
|
|
889
968
|
fs.rmSync(legacyDir, { recursive: true });
|
|
890
969
|
console.log(colors.green(` ✓ Removed deprecated ${LEGACY_CURSORRULES_DIR}/ directory.`));
|
|
891
970
|
} else {
|
|
@@ -1132,7 +1211,7 @@ async function remove(targetDir, templates, dryRun = false, force = false, skipC
|
|
|
1132
1211
|
for (const rule of TEMPLATES[template].rules) {
|
|
1133
1212
|
const destName = `${template}-${rule}`;
|
|
1134
1213
|
const destPath = path.join(dir, destName);
|
|
1135
|
-
const srcPath =
|
|
1214
|
+
const srcPath = getTemplateRulePath(template, rule);
|
|
1136
1215
|
|
|
1137
1216
|
if (!fs.existsSync(destPath)) {
|
|
1138
1217
|
continue;
|
|
@@ -1306,7 +1385,7 @@ async function reset(targetDir, dryRun = false, force = false, skipConfirm = fal
|
|
|
1306
1385
|
for (const rule of templateInfo.rules) {
|
|
1307
1386
|
const destName = `${templateName}-${rule}`;
|
|
1308
1387
|
const destPath = path.join(dir, destName);
|
|
1309
|
-
const srcPath =
|
|
1388
|
+
const srcPath = getTemplateRulePath(templateName, rule);
|
|
1310
1389
|
|
|
1311
1390
|
if (!fs.existsSync(destPath)) continue;
|
|
1312
1391
|
|
|
@@ -1630,6 +1709,7 @@ export const _internals = {
|
|
|
1630
1709
|
CHANGELOG_URL,
|
|
1631
1710
|
CURSOR_RULES_DIR,
|
|
1632
1711
|
LEGACY_CURSORRULES_DIR,
|
|
1712
|
+
CATEGORIES,
|
|
1633
1713
|
TEMPLATES,
|
|
1634
1714
|
TEMPLATE_ALIASES,
|
|
1635
1715
|
SHARED_RULES,
|
|
@@ -1638,6 +1718,7 @@ export const _internals = {
|
|
|
1638
1718
|
compareVersions,
|
|
1639
1719
|
checkForUpdates,
|
|
1640
1720
|
resolveTemplateAlias,
|
|
1721
|
+
getTemplateRulePath,
|
|
1641
1722
|
filesMatch,
|
|
1642
1723
|
parseMarkdownSections,
|
|
1643
1724
|
generateSectionSignature,
|
package/src/index.test.js
CHANGED
|
@@ -9,6 +9,7 @@ const {
|
|
|
9
9
|
CURRENT_VERSION,
|
|
10
10
|
CURSOR_RULES_DIR,
|
|
11
11
|
LEGACY_CURSORRULES_DIR,
|
|
12
|
+
CATEGORIES,
|
|
12
13
|
TEMPLATES,
|
|
13
14
|
TEMPLATE_ALIASES,
|
|
14
15
|
SHARED_RULES,
|
|
@@ -16,6 +17,7 @@ const {
|
|
|
16
17
|
DEFAULT_IDES,
|
|
17
18
|
compareVersions,
|
|
18
19
|
resolveTemplateAlias,
|
|
20
|
+
getTemplateRulePath,
|
|
19
21
|
filesMatch,
|
|
20
22
|
parseMarkdownSections,
|
|
21
23
|
generateSectionSignature,
|
|
@@ -108,12 +110,15 @@ describe('Constants', () => {
|
|
|
108
110
|
expect(Object.keys(TEMPLATES).sort()).toEqual(expectedTemplates.sort());
|
|
109
111
|
});
|
|
110
112
|
|
|
111
|
-
it('each template should have description and rules array', () => {
|
|
113
|
+
it('each template should have category, description, and rules array', () => {
|
|
112
114
|
for (const [name, template] of Object.entries(TEMPLATES)) {
|
|
115
|
+
expect(template).toHaveProperty('category');
|
|
116
|
+
expect(CATEGORIES).toContain(template.category);
|
|
117
|
+
|
|
113
118
|
expect(template).toHaveProperty('description');
|
|
114
119
|
expect(typeof template.description).toBe('string');
|
|
115
120
|
expect(template.description.length).toBeGreaterThan(0);
|
|
116
|
-
|
|
121
|
+
|
|
117
122
|
expect(template).toHaveProperty('rules');
|
|
118
123
|
expect(Array.isArray(template.rules)).toBe(true);
|
|
119
124
|
expect(template.rules.length).toBeGreaterThan(0);
|
|
@@ -125,6 +130,15 @@ describe('Constants', () => {
|
|
|
125
130
|
expect(template.rules).toContain('overview.md');
|
|
126
131
|
}
|
|
127
132
|
});
|
|
133
|
+
|
|
134
|
+
it('each template rule file should exist on disk', () => {
|
|
135
|
+
for (const [name, template] of Object.entries(TEMPLATES)) {
|
|
136
|
+
for (const rule of template.rules) {
|
|
137
|
+
const rulePath = getTemplateRulePath(name, rule);
|
|
138
|
+
expect(fs.existsSync(rulePath), `Missing: ${rulePath}`).toBe(true);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
128
142
|
});
|
|
129
143
|
|
|
130
144
|
describe('SHARED_RULES', () => {
|
|
@@ -777,23 +791,35 @@ describe('Install/Remove/Reset Operations', () => {
|
|
|
777
791
|
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-backend-overview.md'))).toBe(true);
|
|
778
792
|
});
|
|
779
793
|
|
|
780
|
-
it('should
|
|
781
|
-
// Create a legacy .cursorrules/ directory
|
|
794
|
+
it('should copy legacy .cursorrules/ files to .cursor/rules/ then remove legacy dir when cleanup confirmed', async () => {
|
|
782
795
|
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
796
|
+
const cursorRulesDir = path.join(tempDir, '.cursor', 'rules');
|
|
783
797
|
fs.mkdirSync(legacyDir, { recursive: true });
|
|
784
798
|
fs.writeFileSync(path.join(legacyDir, 'old-rule.md'), '# Old rule');
|
|
799
|
+
fs.writeFileSync(path.join(legacyDir, 'custom-guide.md'), '# Custom guide');
|
|
785
800
|
|
|
786
|
-
// Install with skipConfirm=false but mock stdin to decline
|
|
787
|
-
// Since we can't easily mock stdin, use the fact that confirm defaults to 'N'
|
|
788
|
-
// We'll test the --yes path which auto-cleans, and also the notice path
|
|
789
|
-
// For the notice path, install without skipConfirm - the confirm() will fail in test env
|
|
790
|
-
// Actually, let's just test the --yes (skipConfirm) paths
|
|
791
|
-
|
|
792
|
-
// Test: skipConfirm=true should remove legacy dir
|
|
793
801
|
await install(tempDir, ['web-frontend'], false, false, ['cursor'], true);
|
|
794
802
|
|
|
795
803
|
expect(fs.existsSync(legacyDir)).toBe(false);
|
|
796
804
|
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md'))).toBe(true);
|
|
805
|
+
expect(fs.existsSync(path.join(cursorRulesDir, 'old-rule.md'))).toBe(true);
|
|
806
|
+
expect(fs.readFileSync(path.join(cursorRulesDir, 'old-rule.md'), 'utf8')).toBe('# Old rule');
|
|
807
|
+
expect(fs.existsSync(path.join(cursorRulesDir, 'custom-guide.md'))).toBe(true);
|
|
808
|
+
expect(fs.readFileSync(path.join(cursorRulesDir, 'custom-guide.md'), 'utf8')).toBe('# Custom guide');
|
|
809
|
+
});
|
|
810
|
+
|
|
811
|
+
it('should not overwrite existing .cursor/rules/ files when migrating legacy', async () => {
|
|
812
|
+
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
813
|
+
const cursorRulesDir = path.join(tempDir, '.cursor', 'rules');
|
|
814
|
+
fs.mkdirSync(cursorRulesDir, { recursive: true });
|
|
815
|
+
fs.writeFileSync(path.join(cursorRulesDir, 'my-rule.md'), '# New structure content');
|
|
816
|
+
fs.mkdirSync(legacyDir, { recursive: true });
|
|
817
|
+
fs.writeFileSync(path.join(legacyDir, 'my-rule.md'), '# Legacy content');
|
|
818
|
+
|
|
819
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor'], true);
|
|
820
|
+
|
|
821
|
+
expect(fs.readFileSync(path.join(cursorRulesDir, 'my-rule.md'), 'utf8')).toBe('# New structure content');
|
|
822
|
+
expect(fs.existsSync(legacyDir)).toBe(false);
|
|
797
823
|
});
|
|
798
824
|
|
|
799
825
|
it('should show legacy warning in dry-run mode without prompting', async () => {
|
|
File without changes
|
/package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/context-management.md
RENAMED
|
File without changes
|
/package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/hallucination-prevention.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{utility-agent → agents/utility-agent}/.cursor/rules/token-optimization.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{product-manager → business/product-manager}/.cursor/rules/communication.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{product-manager → business/product-manager}/.cursor/rules/prioritization.md
RENAMED
|
File without changes
|
/package/templates/{product-manager → business/product-manager}/.cursor/rules/requirements.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{ux-designer → creative/ux-designer}/.cursor/rules/information-architecture.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/data-modeling.md
RENAMED
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/data-quality.md
RENAMED
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/overview.md
RENAMED
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/performance.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/security.md
RENAMED
|
File without changes
|
/package/templates/{data-engineering → engineering/data-engineering}/.cursor/rules/testing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{devops-sre → engineering/devops-sre}/.cursor/rules/incident-management.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|