agentic-team-templates 0.17.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 +36 -29
- package/package.json +1 -1
- package/src/index.js +297 -127
- package/src/index.test.js +165 -68
- /package/templates/{utility-agent/.cursorrules → agents/utility-agent/.cursor/rules}/action-control.md +0 -0
- /package/templates/{utility-agent/.cursorrules → agents/utility-agent/.cursor/rules}/context-management.md +0 -0
- /package/templates/{utility-agent/.cursorrules → agents/utility-agent/.cursor/rules}/hallucination-prevention.md +0 -0
- /package/templates/{utility-agent/.cursorrules → agents/utility-agent/.cursor/rules}/overview.md +0 -0
- /package/templates/{utility-agent/.cursorrules → 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/.cursorrules → business/product-manager/.cursor/rules}/communication.md +0 -0
- /package/templates/{product-manager/.cursorrules → business/product-manager/.cursor/rules}/discovery.md +0 -0
- /package/templates/{product-manager/.cursorrules → business/product-manager/.cursor/rules}/metrics.md +0 -0
- /package/templates/{product-manager/.cursorrules → business/product-manager/.cursor/rules}/overview.md +0 -0
- /package/templates/{product-manager/.cursorrules → business/product-manager/.cursor/rules}/prioritization.md +0 -0
- /package/templates/{product-manager/.cursorrules → business/product-manager/.cursor/rules}/requirements.md +0 -0
- /package/templates/{product-manager → business/product-manager}/CLAUDE.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/accessibility.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/emotional-design.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/handoff.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/information-architecture.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/interaction-design.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/overview.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/research.md +0 -0
- /package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/visual-design.md +0 -0
- /package/templates/{ux-designer → creative/ux-designer}/CLAUDE.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/accessibility.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/assessment.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/curriculum.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/engagement.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/instructional-design.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/overview.md +0 -0
- /package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/retention.md +0 -0
- /package/templates/{educator → education/educator}/CLAUDE.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/defi-patterns.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/gas-optimization.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/overview.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/security.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/smart-contracts.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/testing.md +0 -0
- /package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/web3-integration.md +0 -0
- /package/templates/{blockchain → engineering/blockchain}/CLAUDE.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/architecture.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/arguments.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/distribution.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/overview.md +0 -0
- /package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/testing.md +0 -0
- /package/templates/{cli-tools/.cursorrules → 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/.cursorrules → engineering/data-engineering/.cursor/rules}/data-modeling.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/data-quality.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/overview.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/performance.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/pipeline-design.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/security.md +0 -0
- /package/templates/{data-engineering/.cursorrules → engineering/data-engineering/.cursor/rules}/testing.md +0 -0
- /package/templates/{data-engineering → engineering/data-engineering}/CLAUDE.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/capacity-planning.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/change-management.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/chaos-engineering.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/disaster-recovery.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/incident-management.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/observability.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/overview.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/postmortems.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/runbooks.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/slo-sli.md +0 -0
- /package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/toil-reduction.md +0 -0
- /package/templates/{devops-sre → engineering/devops-sre}/CLAUDE.md +0 -0
- /package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/api-contracts.md +0 -0
- /package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/architecture.md +0 -0
- /package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/overview.md +0 -0
- /package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/shared-types.md +0 -0
- /package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/testing.md +0 -0
- /package/templates/{fullstack → engineering/fullstack}/CLAUDE.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/data-engineering.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/deployment.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/model-development.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/monitoring.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/overview.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/security.md +0 -0
- /package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/testing.md +0 -0
- /package/templates/{ml-ai → engineering/ml-ai}/CLAUDE.md +0 -0
- /package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/navigation.md +0 -0
- /package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/offline-first.md +0 -0
- /package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/overview.md +0 -0
- /package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/performance.md +0 -0
- /package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/testing.md +0 -0
- /package/templates/{mobile → engineering/mobile}/CLAUDE.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/ci-cd.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/developer-experience.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/infrastructure-as-code.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/kubernetes.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/observability.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/overview.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/security.md +0 -0
- /package/templates/{platform-engineering/.cursorrules → engineering/platform-engineering/.cursor/rules}/testing.md +0 -0
- /package/templates/{platform-engineering → engineering/platform-engineering}/CLAUDE.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/automation.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/metrics.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/overview.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/quality-gates.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/test-design.md +0 -0
- /package/templates/{qa-engineering/.cursorrules → engineering/qa-engineering/.cursor/rules}/test-strategy.md +0 -0
- /package/templates/{qa-engineering → engineering/qa-engineering}/CLAUDE.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/advanced-techniques.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/ci-cd-integration.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/overview.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/performance-testing.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/quality-metrics.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/reliability.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/tdd-methodology.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/test-data.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/test-design.md +0 -0
- /package/templates/{testing/.cursorrules → engineering/testing/.cursor/rules}/test-types.md +0 -0
- /package/templates/{testing → engineering/testing}/CLAUDE.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/api-design.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/authentication.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/database-patterns.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/overview.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/security.md +0 -0
- /package/templates/{web-backend/.cursorrules → engineering/web-backend/.cursor/rules}/testing.md +0 -0
- /package/templates/{web-backend → engineering/web-backend}/CLAUDE.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/accessibility.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/component-patterns.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/overview.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/performance.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/state-management.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/styling.md +0 -0
- /package/templates/{web-frontend/.cursorrules → engineering/web-frontend/.cursor/rules}/testing.md +0 -0
- /package/templates/{web-frontend → engineering/web-frontend}/CLAUDE.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/concurrency.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/memory-and-ownership.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/modern-cpp.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{cpp-expert/.cursorrules → languages/cpp-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{cpp-expert → languages/cpp-expert}/CLAUDE.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/aspnet-core.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/async-patterns.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/dependency-injection.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/language-features.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{csharp-expert/.cursorrules → languages/csharp-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{csharp-expert → languages/csharp-expert}/CLAUDE.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/concurrency.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/interfaces-and-types.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/production-patterns.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/stdlib-and-tooling.md +0 -0
- /package/templates/{golang-expert/.cursorrules → languages/golang-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{golang-expert → languages/golang-expert}/CLAUDE.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/concurrency.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/modern-java.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/persistence.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/spring-boot.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{java-expert/.cursorrules → languages/java-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{java-expert → languages/java-expert}/CLAUDE.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/language-deep-dive.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/node-patterns.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/react-patterns.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → languages/javascript-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{javascript-expert/.cursorrules → 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/.cursorrules → languages/kotlin-expert/.cursor/rules}/coroutines.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/frameworks.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/language-features.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{kotlin-expert/.cursorrules → languages/kotlin-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{kotlin-expert → languages/kotlin-expert}/CLAUDE.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/async-python.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/patterns-and-idioms.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{python-expert/.cursorrules → languages/python-expert/.cursor/rules}/type-system.md +0 -0
- /package/templates/{python-expert/.cursorrules → 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/.cursorrules → languages/rust-expert/.cursor/rules}/concurrency.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/ecosystem-and-tooling.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/ownership-and-borrowing.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/performance-and-unsafe.md +0 -0
- /package/templates/{rust-expert/.cursorrules → languages/rust-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{rust-expert/.cursorrules → 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/.cursorrules → languages/swift-expert/.cursor/rules}/concurrency.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/error-handling.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/language-features.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/overview.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/performance.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/swiftui.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/testing.md +0 -0
- /package/templates/{swift-expert/.cursorrules → languages/swift-expert/.cursor/rules}/tooling.md +0 -0
- /package/templates/{swift-expert → languages/swift-expert}/CLAUDE.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/adr.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/api-documentation.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/code-comments.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/maintenance.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/overview.md +0 -0
- /package/templates/{documentation/.cursorrules → professional/documentation/.cursor/rules}/readme-standards.md +0 -0
- /package/templates/{documentation → professional/documentation}/CLAUDE.md +0 -0
package/src/index.test.js
CHANGED
|
@@ -7,6 +7,9 @@ import { run, _internals } from './index.js';
|
|
|
7
7
|
const {
|
|
8
8
|
PACKAGE_NAME,
|
|
9
9
|
CURRENT_VERSION,
|
|
10
|
+
CURSOR_RULES_DIR,
|
|
11
|
+
LEGACY_CURSORRULES_DIR,
|
|
12
|
+
CATEGORIES,
|
|
10
13
|
TEMPLATES,
|
|
11
14
|
TEMPLATE_ALIASES,
|
|
12
15
|
SHARED_RULES,
|
|
@@ -14,6 +17,7 @@ const {
|
|
|
14
17
|
DEFAULT_IDES,
|
|
15
18
|
compareVersions,
|
|
16
19
|
resolveTemplateAlias,
|
|
20
|
+
getTemplateRulePath,
|
|
17
21
|
filesMatch,
|
|
18
22
|
parseMarkdownSections,
|
|
19
23
|
generateSectionSignature,
|
|
@@ -106,12 +110,15 @@ describe('Constants', () => {
|
|
|
106
110
|
expect(Object.keys(TEMPLATES).sort()).toEqual(expectedTemplates.sort());
|
|
107
111
|
});
|
|
108
112
|
|
|
109
|
-
it('each template should have description and rules array', () => {
|
|
113
|
+
it('each template should have category, description, and rules array', () => {
|
|
110
114
|
for (const [name, template] of Object.entries(TEMPLATES)) {
|
|
115
|
+
expect(template).toHaveProperty('category');
|
|
116
|
+
expect(CATEGORIES).toContain(template.category);
|
|
117
|
+
|
|
111
118
|
expect(template).toHaveProperty('description');
|
|
112
119
|
expect(typeof template.description).toBe('string');
|
|
113
120
|
expect(template.description.length).toBeGreaterThan(0);
|
|
114
|
-
|
|
121
|
+
|
|
115
122
|
expect(template).toHaveProperty('rules');
|
|
116
123
|
expect(Array.isArray(template.rules)).toBe(true);
|
|
117
124
|
expect(template.rules.length).toBeGreaterThan(0);
|
|
@@ -123,6 +130,15 @@ describe('Constants', () => {
|
|
|
123
130
|
expect(template.rules).toContain('overview.md');
|
|
124
131
|
}
|
|
125
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
|
+
});
|
|
126
142
|
});
|
|
127
143
|
|
|
128
144
|
describe('SHARED_RULES', () => {
|
|
@@ -715,104 +731,151 @@ describe('Install/Remove/Reset Operations', () => {
|
|
|
715
731
|
});
|
|
716
732
|
|
|
717
733
|
describe('install', () => {
|
|
718
|
-
it('should create .
|
|
719
|
-
install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
720
|
-
|
|
721
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
734
|
+
it('should create .cursor/rules directory', async () => {
|
|
735
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
736
|
+
|
|
737
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(true);
|
|
722
738
|
});
|
|
723
739
|
|
|
724
|
-
it('should install shared rules', () => {
|
|
725
|
-
install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
726
|
-
|
|
740
|
+
it('should install shared rules', async () => {
|
|
741
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
742
|
+
|
|
727
743
|
for (const rule of SHARED_RULES) {
|
|
728
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
744
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', rule))).toBe(true);
|
|
729
745
|
}
|
|
730
746
|
});
|
|
731
747
|
|
|
732
|
-
it('should install template-specific rules with prefix', () => {
|
|
733
|
-
install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
734
|
-
|
|
748
|
+
it('should install template-specific rules with prefix', async () => {
|
|
749
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
750
|
+
|
|
735
751
|
for (const rule of TEMPLATES['web-frontend'].rules) {
|
|
736
752
|
const prefixedName = `web-frontend-${rule}`;
|
|
737
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
753
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', prefixedName))).toBe(true);
|
|
738
754
|
}
|
|
739
755
|
});
|
|
740
756
|
|
|
741
|
-
it('should create CLAUDE.md for claude IDE', () => {
|
|
742
|
-
install(tempDir, ['web-frontend'], false, false, ['claude']);
|
|
743
|
-
|
|
757
|
+
it('should create CLAUDE.md for claude IDE', async () => {
|
|
758
|
+
await install(tempDir, ['web-frontend'], false, false, ['claude']);
|
|
759
|
+
|
|
744
760
|
expect(fs.existsSync(path.join(tempDir, 'CLAUDE.md'))).toBe(true);
|
|
745
761
|
const content = fs.readFileSync(path.join(tempDir, 'CLAUDE.md'), 'utf8');
|
|
746
762
|
expect(content).toContain('# CLAUDE.md - Development Guide');
|
|
747
763
|
});
|
|
748
764
|
|
|
749
|
-
it('should create copilot-instructions.md for codex IDE', () => {
|
|
750
|
-
install(tempDir, ['web-frontend'], false, false, ['codex']);
|
|
751
|
-
|
|
765
|
+
it('should create copilot-instructions.md for codex IDE', async () => {
|
|
766
|
+
await install(tempDir, ['web-frontend'], false, false, ['codex']);
|
|
767
|
+
|
|
752
768
|
expect(fs.existsSync(path.join(tempDir, '.github', 'copilot-instructions.md'))).toBe(true);
|
|
753
769
|
});
|
|
754
770
|
|
|
755
|
-
it('should install for all IDEs by default', () => {
|
|
756
|
-
install(tempDir, ['web-frontend'], false, false, DEFAULT_IDES);
|
|
757
|
-
|
|
758
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
771
|
+
it('should install for all IDEs by default', async () => {
|
|
772
|
+
await install(tempDir, ['web-frontend'], false, false, DEFAULT_IDES);
|
|
773
|
+
|
|
774
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(true);
|
|
759
775
|
expect(fs.existsSync(path.join(tempDir, 'CLAUDE.md'))).toBe(true);
|
|
760
776
|
expect(fs.existsSync(path.join(tempDir, '.github', 'copilot-instructions.md'))).toBe(true);
|
|
761
777
|
});
|
|
762
778
|
|
|
763
|
-
it('should not write files in dry-run mode', () => {
|
|
764
|
-
install(tempDir, ['web-frontend'], true, false, ['cursor']);
|
|
765
|
-
|
|
766
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
779
|
+
it('should not write files in dry-run mode', async () => {
|
|
780
|
+
await install(tempDir, ['web-frontend'], true, false, ['cursor']);
|
|
781
|
+
|
|
782
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(false);
|
|
767
783
|
});
|
|
768
784
|
|
|
769
|
-
it('should install multiple templates', () => {
|
|
770
|
-
install(tempDir, ['web-frontend', 'web-backend'], false, false, ['cursor']);
|
|
771
|
-
|
|
785
|
+
it('should install multiple templates', async () => {
|
|
786
|
+
await install(tempDir, ['web-frontend', 'web-backend'], false, false, ['cursor']);
|
|
787
|
+
|
|
772
788
|
// Check web-frontend rules
|
|
773
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
789
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md'))).toBe(true);
|
|
774
790
|
// Check web-backend rules
|
|
775
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
791
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-backend-overview.md'))).toBe(true);
|
|
792
|
+
});
|
|
793
|
+
|
|
794
|
+
it('should copy legacy .cursorrules/ files to .cursor/rules/ then remove legacy dir when cleanup confirmed', async () => {
|
|
795
|
+
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
796
|
+
const cursorRulesDir = path.join(tempDir, '.cursor', 'rules');
|
|
797
|
+
fs.mkdirSync(legacyDir, { recursive: true });
|
|
798
|
+
fs.writeFileSync(path.join(legacyDir, 'old-rule.md'), '# Old rule');
|
|
799
|
+
fs.writeFileSync(path.join(legacyDir, 'custom-guide.md'), '# Custom guide');
|
|
800
|
+
|
|
801
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor'], true);
|
|
802
|
+
|
|
803
|
+
expect(fs.existsSync(legacyDir)).toBe(false);
|
|
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);
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
it('should show legacy warning in dry-run mode without prompting', async () => {
|
|
826
|
+
// Create a legacy .cursorrules/ directory
|
|
827
|
+
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
828
|
+
fs.mkdirSync(legacyDir, { recursive: true });
|
|
829
|
+
fs.writeFileSync(path.join(legacyDir, 'old-rule.md'), '# Old rule');
|
|
830
|
+
|
|
831
|
+
await install(tempDir, ['web-frontend'], true, false, ['cursor']);
|
|
832
|
+
|
|
833
|
+
// Legacy dir should still exist (dry-run doesn't modify)
|
|
834
|
+
expect(fs.existsSync(legacyDir)).toBe(true);
|
|
835
|
+
// Warning should have been printed
|
|
836
|
+
expect(consoleLogSpy).toHaveBeenCalledWith(
|
|
837
|
+
expect.stringContaining('Deprecated')
|
|
838
|
+
);
|
|
776
839
|
});
|
|
777
840
|
});
|
|
778
841
|
|
|
779
842
|
describe('remove', () => {
|
|
780
|
-
beforeEach(() => {
|
|
843
|
+
beforeEach(async () => {
|
|
781
844
|
// First install a template
|
|
782
|
-
install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
845
|
+
await install(tempDir, ['web-frontend'], false, false, ['cursor']);
|
|
783
846
|
});
|
|
784
847
|
|
|
785
848
|
it('should remove template-specific files', async () => {
|
|
786
849
|
await remove(tempDir, ['web-frontend'], false, false, true, ['cursor']);
|
|
787
|
-
|
|
850
|
+
|
|
788
851
|
for (const rule of TEMPLATES['web-frontend'].rules) {
|
|
789
852
|
const prefixedName = `web-frontend-${rule}`;
|
|
790
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
853
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', prefixedName))).toBe(false);
|
|
791
854
|
}
|
|
792
855
|
});
|
|
793
856
|
|
|
794
857
|
it('should keep shared rules when removing template', async () => {
|
|
795
858
|
await remove(tempDir, ['web-frontend'], false, false, true, ['cursor']);
|
|
796
|
-
|
|
859
|
+
|
|
797
860
|
for (const rule of SHARED_RULES) {
|
|
798
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
861
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', rule))).toBe(true);
|
|
799
862
|
}
|
|
800
863
|
});
|
|
801
864
|
|
|
802
865
|
it('should not remove files in dry-run mode', async () => {
|
|
803
866
|
await remove(tempDir, ['web-frontend'], true, false, true, ['cursor']);
|
|
804
|
-
|
|
867
|
+
|
|
805
868
|
// Files should still exist
|
|
806
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
869
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md'))).toBe(true);
|
|
807
870
|
});
|
|
808
871
|
|
|
809
872
|
it('should skip modified files without force', async () => {
|
|
810
873
|
// Modify a file
|
|
811
|
-
const filePath = path.join(tempDir, '.
|
|
874
|
+
const filePath = path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md');
|
|
812
875
|
fs.writeFileSync(filePath, '# Modified content');
|
|
813
|
-
|
|
876
|
+
|
|
814
877
|
await remove(tempDir, ['web-frontend'], false, false, true, ['cursor']);
|
|
815
|
-
|
|
878
|
+
|
|
816
879
|
// Modified file should still exist
|
|
817
880
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
818
881
|
expect(fs.readFileSync(filePath, 'utf8')).toBe('# Modified content');
|
|
@@ -820,73 +883,107 @@ describe('Install/Remove/Reset Operations', () => {
|
|
|
820
883
|
|
|
821
884
|
it('should remove modified files with force', async () => {
|
|
822
885
|
// Modify a file
|
|
823
|
-
const filePath = path.join(tempDir, '.
|
|
886
|
+
const filePath = path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md');
|
|
824
887
|
fs.writeFileSync(filePath, '# Modified content');
|
|
825
|
-
|
|
888
|
+
|
|
826
889
|
await remove(tempDir, ['web-frontend'], false, true, true, ['cursor']);
|
|
827
|
-
|
|
890
|
+
|
|
828
891
|
// Modified file should be removed
|
|
829
892
|
expect(fs.existsSync(filePath)).toBe(false);
|
|
830
893
|
});
|
|
894
|
+
|
|
895
|
+
it('should also remove files from legacy .cursorrules/ directory', async () => {
|
|
896
|
+
// Manually create files in legacy location
|
|
897
|
+
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
898
|
+
fs.mkdirSync(legacyDir, { recursive: true });
|
|
899
|
+
for (const rule of TEMPLATES['web-frontend'].rules) {
|
|
900
|
+
fs.writeFileSync(path.join(legacyDir, `web-frontend-${rule}`), '# legacy content');
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
await remove(tempDir, ['web-frontend'], false, true, true, ['cursor']);
|
|
904
|
+
|
|
905
|
+
// Both new and legacy files should be removed
|
|
906
|
+
for (const rule of TEMPLATES['web-frontend'].rules) {
|
|
907
|
+
const prefixedName = `web-frontend-${rule}`;
|
|
908
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', prefixedName))).toBe(false);
|
|
909
|
+
expect(fs.existsSync(path.join(legacyDir, prefixedName))).toBe(false);
|
|
910
|
+
}
|
|
911
|
+
});
|
|
831
912
|
});
|
|
832
913
|
|
|
833
914
|
describe('reset', () => {
|
|
834
|
-
beforeEach(() => {
|
|
915
|
+
beforeEach(async () => {
|
|
835
916
|
// Install templates
|
|
836
|
-
install(tempDir, ['web-frontend', 'web-backend'], false, false, DEFAULT_IDES);
|
|
917
|
+
await install(tempDir, ['web-frontend', 'web-backend'], false, false, DEFAULT_IDES);
|
|
837
918
|
});
|
|
838
919
|
|
|
839
|
-
it('should remove all template files from .
|
|
920
|
+
it('should remove all template files from .cursor/rules', async () => {
|
|
840
921
|
await reset(tempDir, false, false, true, ['cursor']);
|
|
841
|
-
|
|
922
|
+
|
|
842
923
|
// Template files should be removed
|
|
843
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
844
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
924
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md'))).toBe(false);
|
|
925
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-backend-overview.md'))).toBe(false);
|
|
845
926
|
});
|
|
846
927
|
|
|
847
928
|
it('should remove shared rules', async () => {
|
|
848
929
|
await reset(tempDir, false, false, true, ['cursor']);
|
|
849
|
-
|
|
930
|
+
|
|
850
931
|
for (const rule of SHARED_RULES) {
|
|
851
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
932
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', rule))).toBe(false);
|
|
852
933
|
}
|
|
853
934
|
});
|
|
854
935
|
|
|
855
936
|
it('should remove CLAUDE.md', async () => {
|
|
856
937
|
await reset(tempDir, false, false, true, ['claude']);
|
|
857
|
-
|
|
938
|
+
|
|
858
939
|
expect(fs.existsSync(path.join(tempDir, 'CLAUDE.md'))).toBe(false);
|
|
859
940
|
});
|
|
860
941
|
|
|
861
942
|
it('should remove copilot-instructions.md', async () => {
|
|
862
943
|
await reset(tempDir, false, false, true, ['codex']);
|
|
863
|
-
|
|
944
|
+
|
|
864
945
|
expect(fs.existsSync(path.join(tempDir, '.github', 'copilot-instructions.md'))).toBe(false);
|
|
865
946
|
});
|
|
866
947
|
|
|
867
948
|
it('should not remove files in dry-run mode', async () => {
|
|
868
949
|
await reset(tempDir, true, false, true, DEFAULT_IDES);
|
|
869
|
-
|
|
950
|
+
|
|
870
951
|
// All files should still exist
|
|
871
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
952
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(true);
|
|
872
953
|
expect(fs.existsSync(path.join(tempDir, 'CLAUDE.md'))).toBe(true);
|
|
873
954
|
});
|
|
874
955
|
|
|
875
|
-
it('should remove empty .
|
|
956
|
+
it('should remove empty .cursor/rules directory', async () => {
|
|
876
957
|
await reset(tempDir, false, false, true, ['cursor']);
|
|
877
|
-
|
|
878
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
958
|
+
|
|
959
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(false);
|
|
879
960
|
});
|
|
880
961
|
|
|
881
|
-
it('should keep .
|
|
962
|
+
it('should keep .cursor/rules if non-template files remain', async () => {
|
|
882
963
|
// Add a custom file
|
|
883
|
-
fs.writeFileSync(path.join(tempDir, '.
|
|
884
|
-
|
|
964
|
+
fs.writeFileSync(path.join(tempDir, '.cursor', 'rules', 'my-custom-rules.md'), '# Custom');
|
|
965
|
+
|
|
885
966
|
await reset(tempDir, false, false, true, ['cursor']);
|
|
886
|
-
|
|
967
|
+
|
|
887
968
|
// Directory should still exist with custom file
|
|
888
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
889
|
-
expect(fs.existsSync(path.join(tempDir, '.
|
|
969
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules'))).toBe(true);
|
|
970
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'my-custom-rules.md'))).toBe(true);
|
|
971
|
+
});
|
|
972
|
+
|
|
973
|
+
it('should also clean up legacy .cursorrules/ directory', async () => {
|
|
974
|
+
// Manually create legacy directory with template files
|
|
975
|
+
const legacyDir = path.join(tempDir, LEGACY_CURSORRULES_DIR);
|
|
976
|
+
fs.mkdirSync(legacyDir, { recursive: true });
|
|
977
|
+
for (const rule of SHARED_RULES) {
|
|
978
|
+
fs.writeFileSync(path.join(legacyDir, rule), '# legacy shared');
|
|
979
|
+
}
|
|
980
|
+
fs.writeFileSync(path.join(legacyDir, 'web-frontend-overview.md'), '# legacy template');
|
|
981
|
+
|
|
982
|
+
await reset(tempDir, false, true, true, ['cursor']);
|
|
983
|
+
|
|
984
|
+
// Both directories should be cleaned up
|
|
985
|
+
expect(fs.existsSync(path.join(tempDir, '.cursor', 'rules', 'web-frontend-overview.md'))).toBe(false);
|
|
986
|
+
expect(fs.existsSync(path.join(legacyDir, 'web-frontend-overview.md'))).toBe(false);
|
|
890
987
|
});
|
|
891
988
|
});
|
|
892
989
|
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{utility-agent/.cursorrules → agents/utility-agent/.cursor/rules}/overview.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
|
/package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/accessibility.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/handoff.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/overview.md
RENAMED
|
File without changes
|
/package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/research.md
RENAMED
|
File without changes
|
/package/templates/{ux-designer/.cursorrules → creative/ux-designer/.cursor/rules}/visual-design.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{educator/.cursorrules → education/educator/.cursor/rules}/accessibility.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
|
/package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/defi-patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/overview.md
RENAMED
|
File without changes
|
/package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/security.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{blockchain/.cursorrules → engineering/blockchain/.cursor/rules}/testing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/architecture.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/arguments.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/distribution.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/error-handling.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/overview.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/testing.md
RENAMED
|
File without changes
|
/package/templates/{cli-tools/.cursorrules → engineering/cli-tools/.cursor/rules}/user-experience.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
|
/package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/observability.md
RENAMED
|
File without changes
|
/package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/overview.md
RENAMED
|
File without changes
|
/package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/postmortems.md
RENAMED
|
File without changes
|
/package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/runbooks.md
RENAMED
|
File without changes
|
/package/templates/{devops-sre/.cursorrules → engineering/devops-sre/.cursor/rules}/slo-sli.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/api-contracts.md
RENAMED
|
File without changes
|
/package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/architecture.md
RENAMED
|
File without changes
|
/package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/overview.md
RENAMED
|
File without changes
|
/package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/shared-types.md
RENAMED
|
File without changes
|
/package/templates/{fullstack/.cursorrules → engineering/fullstack/.cursor/rules}/testing.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/data-engineering.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/templates/{ml-ai/.cursorrules → engineering/ml-ai/.cursor/rules}/model-development.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/templates/{mobile/.cursorrules → engineering/mobile/.cursor/rules}/offline-first.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
|