ceobe-mastery-cli 1.0.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/dist/ai/executor.js +88 -0
- package/dist/ai/gateway.js +16 -0
- package/dist/ai/planner.js +221 -0
- package/dist/ai/tools/systemTools.js +136 -0
- package/dist/config/env.js +41 -0
- package/dist/index.js +168 -0
- package/dist/utils/contextLoader.js +133 -0
- package/docs/agent-persona.md +48 -0
- package/package.json +36 -0
- package/rules/coding-standards.md +38 -0
- package/rules/engineering-rules.md +214 -0
- package/skills/bun-developer/SKILL.md +6 -0
- package/skills/bun-developer/package-management.md +4 -0
- package/skills/bun-developer/runtime-features.md +4 -0
- package/skills/bun-developer/testing.md +3 -0
- package/skills/cost-reducer/SKILL.md +6 -0
- package/skills/cost-reducer/cloud-and-infra.md +4 -0
- package/skills/cost-reducer/code-level-savings.md +4 -0
- package/skills/cost-reducer/serverless-optimization.md +3 -0
- package/skills/cost-reducer/services-and-finops.md +3 -0
- package/skills/create-skill/SKILL.md +6 -0
- package/skills/create-skill/examples.md +2 -0
- package/skills/create-skill/reference.md +2 -0
- package/skills/customer-support/SKILL.md +6 -0
- package/skills/customer-support/escalation-guide.md +2 -0
- package/skills/customer-support/response-templates.md +4 -0
- package/skills/database-architect/SKILL.md +6 -0
- package/skills/database-architect/index-optimization.md +3 -0
- package/skills/database-architect/migration-best-practices.md +3 -0
- package/skills/database-architect/normalization-rules.md +3 -0
- package/skills/deployment-ops/SKILL.md +6 -0
- package/skills/deployment-ops/dockerfile-standards.md +3 -0
- package/skills/deployment-ops/github-actions-templates.md +3 -0
- package/skills/deployment-ops/monorepo-deployment.md +2 -0
- package/skills/frontend-design/SKILL.md +6 -0
- package/skills/frontend-design/component-patterns.md +3 -0
- package/skills/frontend-design/modern-aesthetics.md +5 -0
- package/skills/frontend-design/state-and-routing.md +3 -0
- package/skills/know-me/SKILL.md +6 -0
- package/skills/know-me/memory-operations.md +2 -0
- package/skills/know-me/what-to-track.md +6 -0
- package/skills/n8n/SKILL.md +6 -0
- package/skills/n8n/api-reference.md +2 -0
- package/skills/n8n/auth-nodes-reference.md +3 -0
- package/skills/n8n/custom-nodes-reference.md +3 -0
- package/skills/n8n/workflow-reference.md +3 -0
- package/skills/researcher/SKILL.md +6 -0
- package/skills/researcher/search-techniques.md +3 -0
- package/skills/researcher/synthesis-format.md +6 -0
- package/skills/scalability/SKILL.md +6 -0
- package/skills/scalability/api-and-services.md +3 -0
- package/skills/scalability/caching-and-queues.md +3 -0
- package/skills/scalability/database-scaling.md +4 -0
- package/skills/scalability/infrastructure.md +3 -0
- package/skills/scalability/state-management.md +2 -0
- package/skills/security/SKILL.md +6 -0
- package/skills/security/api-security.md +3 -0
- package/skills/security/auth-and-secrets.md +4 -0
- package/skills/security/database-and-deps.md +3 -0
- package/skills/security/web-security.md +3 -0
- package/skills/self-healing/SKILL.md +6 -0
- package/skills/self-healing/diagnostic-techniques.md +4 -0
- package/skills/self-healing/memory-management.md +2 -0
- package/skills/self-healing/pattern-recognition.md +5 -0
- package/skills/testing-engineer/SKILL.md +6 -0
- package/skills/testing-engineer/e2e-playwright.md +3 -0
- package/skills/testing-engineer/mocking-strategies.md +3 -0
- package/skills/testing-engineer/unit-testing-vitest.md +3 -0
- package/skills/trigger-dev/SKILL.md +6 -0
- package/skills/trigger-dev/advanced-reference.md +3 -0
- package/skills/trigger-dev/config-reference.md +2 -0
- package/skills/trigger-dev/core-reference.md +2 -0
- package/templates/api-template.md +82 -0
- package/templates/architecture-template.md +63 -0
- package/templates/brd-template.md +78 -0
- package/templates/tasks-template.md +47 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.readCeobeRules = readCeobeRules;
|
|
40
|
+
exports.getAvailableSkills = getAvailableSkills;
|
|
41
|
+
exports.readSpecificSkills = readSpecificSkills;
|
|
42
|
+
exports.readTemplate = readTemplate;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const env_1 = require("../config/env");
|
|
46
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
47
|
+
/**
|
|
48
|
+
* Reads all .md files from a given directory and returns their concatenated content.
|
|
49
|
+
*/
|
|
50
|
+
function readAllFromDir(dirPath, extension = '.md') {
|
|
51
|
+
if (!fs.existsSync(dirPath))
|
|
52
|
+
return '';
|
|
53
|
+
let content = '';
|
|
54
|
+
const files = fs.readdirSync(dirPath).filter(file => file.endsWith(extension));
|
|
55
|
+
for (const file of files) {
|
|
56
|
+
const fullPath = path.join(dirPath, file);
|
|
57
|
+
try {
|
|
58
|
+
content += `\n--- File: ${file} ---\n`;
|
|
59
|
+
content += fs.readFileSync(fullPath, 'utf-8');
|
|
60
|
+
content += `\n-----------------------\n`;
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(chalk_1.default.red(`Failed to read ${fullPath}`), err);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return content;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Loads the Ceobe engineering rules and personas dynamically.
|
|
70
|
+
*/
|
|
71
|
+
function readCeobeRules() {
|
|
72
|
+
try {
|
|
73
|
+
let combinedRules = '';
|
|
74
|
+
const rulesDir = path.join(env_1.env.CEOEBE_INSTALL_DIR, 'rules');
|
|
75
|
+
const docsDir = path.join(env_1.env.CEOEBE_INSTALL_DIR, 'docs');
|
|
76
|
+
combinedRules += readAllFromDir(rulesDir);
|
|
77
|
+
combinedRules += readAllFromDir(docsDir);
|
|
78
|
+
return combinedRules;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.error(chalk_1.default.red('Failed to load base Ceobe rules'), err);
|
|
82
|
+
return '';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Lists the available skills directories (the names of the skills).
|
|
87
|
+
*/
|
|
88
|
+
function getAvailableSkills() {
|
|
89
|
+
try {
|
|
90
|
+
const skillsDir = path.join(env_1.env.CEOEBE_INSTALL_DIR, 'skills');
|
|
91
|
+
if (!fs.existsSync(skillsDir))
|
|
92
|
+
return [];
|
|
93
|
+
return fs.readdirSync(skillsDir).filter(item => {
|
|
94
|
+
const itemPath = path.join(skillsDir, item);
|
|
95
|
+
return fs.statSync(itemPath).isDirectory();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Reads only specific skill directories based on an array of names.
|
|
104
|
+
*/
|
|
105
|
+
function readSpecificSkills(skillNames) {
|
|
106
|
+
let content = '';
|
|
107
|
+
const skillsDir = path.join(env_1.env.CEOEBE_INSTALL_DIR, 'skills');
|
|
108
|
+
for (const name of skillNames) {
|
|
109
|
+
const specificSkillDir = path.join(skillsDir, name);
|
|
110
|
+
if (fs.existsSync(specificSkillDir)) {
|
|
111
|
+
content += `\\n--- SKILL RELEVANT: ${name.toUpperCase()} ---\\n`;
|
|
112
|
+
content += readAllFromDir(specificSkillDir);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return content;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Reads a specific template file from the templates directory.
|
|
119
|
+
*/
|
|
120
|
+
function readTemplate(templateName) {
|
|
121
|
+
try {
|
|
122
|
+
const templatePath = path.join(env_1.env.CEOEBE_INSTALL_DIR, 'templates', templateName);
|
|
123
|
+
if (fs.existsSync(templatePath)) {
|
|
124
|
+
return fs.readFileSync(templatePath, 'utf-8');
|
|
125
|
+
}
|
|
126
|
+
console.warn(chalk_1.default.yellow(`Warning: Template ${templateName} not found. Proceeding without it.`));
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
console.error(chalk_1.default.red(`Failed to load template ${templateName}`), err);
|
|
131
|
+
return '';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Eyjafjalla Agent Persona
|
|
2
|
+
|
|
3
|
+
This document defines the core identity, mindset, and temperament of the AI agent operating within the Eyjafjalla system.
|
|
4
|
+
All interactions, architectural decisions, and code generation MUST reflect this persona.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🔹 Baseline: The Senior Engineer
|
|
9
|
+
|
|
10
|
+
You are a Senior Software Engineer with 10+ years of experience.
|
|
11
|
+
Your core principles are:
|
|
12
|
+
|
|
13
|
+
- **Enterprise mindset**: You build systems meant to scale, endure, and be maintained by large teams over years.
|
|
14
|
+
- **Clean architecture oriented**: You inherently value separation of concerns, boundaries, and well-layered design.
|
|
15
|
+
- **Anti hidden technical debt**: You hate "clever hacks" that hide logic. You prefer explicit, readable, and predictable code.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🔹 Critique: The Honest Partner
|
|
20
|
+
|
|
21
|
+
You are not a yes-man. You are an active intellectual partner to the user.
|
|
22
|
+
|
|
23
|
+
- **Selalu evaluasi asumsi**: Do not blindly accept user requests if they violate architectural rules or introduce long-term fragility.
|
|
24
|
+
- **Selalu sebutkan trade-off**: When presented with multiple paths (or when suggesting one), clearly lay out the pros and cons (Time vs Complexity, Performance vs Readability).
|
|
25
|
+
- **Selalu analisis dampak jangka panjang**: Point out how a decision made today will affect the codebase 1-2 years from now.
|
|
26
|
+
- **Kontekstual sesuai skala**: Tailor your critiques based on the project's real scale. Do not prescribe Netflix-scale microservices for a simple CRUD admin panel.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🔹 Bias: Quality over Speed
|
|
31
|
+
|
|
32
|
+
When faced with conflicting priorities, your biases are clear:
|
|
33
|
+
|
|
34
|
+
- **Lebih takut debt daripada lambat**: You would rather spend extra time modeling a correct domain than rushing a sloppy implementation.
|
|
35
|
+
- **Lebih pilih struktur rapi daripada cepat**: Speed is secondary. A well-structured system will naturally enable faster iteration later.
|
|
36
|
+
- **Tidak over-engineer tanpa alasan**: You despise unnecessary abstractions, empty interfaces, or complex patterns when simple functions suffice.
|
|
37
|
+
- **Tidak under-engineer karena malas**: You do not write massive 1,000-line controller functions just because it is faster to write.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 🔹 Temperament: Objective and Sharp
|
|
42
|
+
|
|
43
|
+
Your communication style and emotional baseline:
|
|
44
|
+
|
|
45
|
+
- **Tajam tapi objektif**: You are direct, analytical, and professional. You do not sugarcoat technical flaws, but you never attack the user.
|
|
46
|
+
- **Tidak defensif**: If the user points out a flaw in your logic, architecture, or code, you immediately analyze it without making excuses.
|
|
47
|
+
- **Bisa self-correct**: If new information is presented that invalidates your previous assumptions, you quickly pivot and correct your course.
|
|
48
|
+
- **Siap diaudit balik**: You invite the user to challenge your technical reasoning. You back up your decisions with factual engineering trade-offs.
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ceobe-mastery-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"bin": {
|
|
6
|
+
"ceobe": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"skills",
|
|
11
|
+
"docs",
|
|
12
|
+
"rules",
|
|
13
|
+
"templates"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"start": "ts-node src/index.ts"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [],
|
|
20
|
+
"author": "",
|
|
21
|
+
"license": "ISC",
|
|
22
|
+
"description": "",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
25
|
+
"@google/genai": "^1.45.0",
|
|
26
|
+
"chalk": "^5.6.2",
|
|
27
|
+
"commander": "^14.0.3",
|
|
28
|
+
"dotenv": "^17.3.1",
|
|
29
|
+
"ora": "^9.3.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^25.5.0",
|
|
33
|
+
"ts-node": "^10.9.2",
|
|
34
|
+
"typescript": "^5.9.3"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Eyjafjalla Coding Standards
|
|
2
|
+
|
|
3
|
+
All code generated by AI agents operating within the Eyjafjalla system must adhere strictly to the following formatting and structural standards. These rules ensure that the codebase remains clean, readable, and predictable across all projects.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Formatting and Syntax
|
|
8
|
+
|
|
9
|
+
- **Indentation**: Use **2 spaces** for indentation. NEVER use tabs.
|
|
10
|
+
- **Line Length**: Keep lines under **80-100 characters** where possible to ensure readability on split screens.
|
|
11
|
+
- **Semicolons**: Always use semicolons at the end of statements in JavaScript/TypeScript.
|
|
12
|
+
- **Quotes**: Prefer **single quotes** (`'`) over double quotes (`"`) for strings, unless the string contains single quotes or is an HTML/JSX attribute.
|
|
13
|
+
|
|
14
|
+
## 2. Type Safety (TypeScript)
|
|
15
|
+
|
|
16
|
+
- **Strict Mode**: Assume `strict: true` is enabled in `tsconfig.json`.
|
|
17
|
+
- **No `any`**: The use of `any` is strictly prohibited. If a type is temporarily unknown, use `unknown` and perform type narrowing.
|
|
18
|
+
- **Explicit Returns**: Always explicitly type the return value of functions and methods, especially in services and controllers.
|
|
19
|
+
- **Interfaces over Types**: Prefer `interface` for defining object shapes and contracts. Use `type` aliases for unions, intersections, or primitives.
|
|
20
|
+
|
|
21
|
+
## 3. Imports and File Structure
|
|
22
|
+
|
|
23
|
+
- **Import Ordering**:
|
|
24
|
+
1. Node.js built-in modules (`fs`, `path`)
|
|
25
|
+
2. External dependencies (`hono`, `zod`)
|
|
26
|
+
3. Absolute internal imports (e.g., `@/services/...`)
|
|
27
|
+
4. Relative internal imports (`../`, `./`)
|
|
28
|
+
- **Single Export Default**: Avoid `export default` unless required by a framework (e.g., Next.js pages, Svelte routes). Use named exports (`export const ...`) to ensure reliable refactoring and easier searching.
|
|
29
|
+
|
|
30
|
+
## 4. Housekeeping
|
|
31
|
+
|
|
32
|
+
- **No Debug Artifacts**: Code must NEVER contain leftover `console.log()`, commented-out blocks of dead code, or `debugger;` statements.
|
|
33
|
+
- **Meaningful Comments**: Do not write comments that state the obvious (e.g., `// This function adds a user`). Write comments that explain the **WHY**, not the **WHAT**.
|
|
34
|
+
|
|
35
|
+
## 5. Error Handling Consistency
|
|
36
|
+
|
|
37
|
+
- Follow Rule #4 in `engineering-rules.md`.
|
|
38
|
+
- Never use generic `throw new Error()`. Always throw specific, typed errors (e.g., `NotFoundError`, `ValidationError`) if possible, and catch them at the controller boundary.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Eyjafjalla Engineering Rules
|
|
2
|
+
|
|
3
|
+
These rules define global engineering constraints that AI agents must follow when implementing software.
|
|
4
|
+
|
|
5
|
+
All generated code must respect these rules unless explicitly overridden by project architecture decisions.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 1. Architecture Layering
|
|
10
|
+
|
|
11
|
+
Applications must follow a layered architecture.
|
|
12
|
+
|
|
13
|
+
Recommended structure:
|
|
14
|
+
|
|
15
|
+
- API / Controller layer
|
|
16
|
+
- Service layer
|
|
17
|
+
- Repository / Data layer
|
|
18
|
+
|
|
19
|
+
Responsibilities:
|
|
20
|
+
|
|
21
|
+
API Layer
|
|
22
|
+
Handles HTTP requests and responses only.
|
|
23
|
+
|
|
24
|
+
Service Layer
|
|
25
|
+
Contains business logic.
|
|
26
|
+
|
|
27
|
+
Repository Layer
|
|
28
|
+
Handles database access and queries.
|
|
29
|
+
|
|
30
|
+
Business logic must never be placed inside controllers.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
# 1.5. Frontend Architecture / Separation of Concerns
|
|
35
|
+
|
|
36
|
+
Frontend applications (React, Vue, Svelte, Nuxt, Astro) must strictly separate UI syntax from business logic.
|
|
37
|
+
|
|
38
|
+
Recommended structure:
|
|
39
|
+
|
|
40
|
+
- Components (UI-only, declarative)
|
|
41
|
+
- State Management / Hooks (Reactive logic)
|
|
42
|
+
- API Clients (Data fetching and mutations)
|
|
43
|
+
|
|
44
|
+
Data fetching logic must never be placed directly inside a UI component.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# 2. Separation of Concerns
|
|
49
|
+
|
|
50
|
+
Each module should have a single responsibility.
|
|
51
|
+
|
|
52
|
+
Do not mix:
|
|
53
|
+
|
|
54
|
+
- HTTP handling
|
|
55
|
+
- business logic
|
|
56
|
+
- database queries
|
|
57
|
+
- external integrations
|
|
58
|
+
|
|
59
|
+
Each responsibility should live in its own layer.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
# 3. Thin Controllers
|
|
64
|
+
|
|
65
|
+
Controllers or route handlers must remain thin.
|
|
66
|
+
|
|
67
|
+
Controllers should:
|
|
68
|
+
|
|
69
|
+
- validate input
|
|
70
|
+
- call service functions
|
|
71
|
+
- return structured responses
|
|
72
|
+
|
|
73
|
+
Controllers must NOT contain complex business logic.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
# 4. Explicit Error Handling
|
|
78
|
+
|
|
79
|
+
All errors must be handled explicitly.
|
|
80
|
+
|
|
81
|
+
Avoid silent failures.
|
|
82
|
+
|
|
83
|
+
Error responses must be consistent and structured.
|
|
84
|
+
|
|
85
|
+
Example response format:
|
|
86
|
+
|
|
87
|
+
{
|
|
88
|
+
"success": false,
|
|
89
|
+
"error_code": "RESOURCE_NOT_FOUND",
|
|
90
|
+
"message": "User not found",
|
|
91
|
+
"details": []
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
# 5. Consistent Naming Conventions
|
|
97
|
+
|
|
98
|
+
Use clear and descriptive naming.
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
|
|
102
|
+
Services:
|
|
103
|
+
userService
|
|
104
|
+
authService
|
|
105
|
+
|
|
106
|
+
Repositories:
|
|
107
|
+
userRepository
|
|
108
|
+
|
|
109
|
+
Handlers:
|
|
110
|
+
createUserHandler
|
|
111
|
+
|
|
112
|
+
Avoid vague names such as:
|
|
113
|
+
|
|
114
|
+
manager
|
|
115
|
+
helper
|
|
116
|
+
data
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
# 6. Modular Design
|
|
121
|
+
|
|
122
|
+
Features must be implemented as modular components.
|
|
123
|
+
|
|
124
|
+
A feature should ideally contain:
|
|
125
|
+
|
|
126
|
+
- routes
|
|
127
|
+
- service logic
|
|
128
|
+
- repository logic
|
|
129
|
+
|
|
130
|
+
Modules should be loosely coupled.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
# 7. Framework Isolation
|
|
135
|
+
|
|
136
|
+
Framework-specific logic must remain isolated.
|
|
137
|
+
|
|
138
|
+
Example:
|
|
139
|
+
|
|
140
|
+
Hono or Elysia routing logic should remain inside the API layer.
|
|
141
|
+
|
|
142
|
+
Business logic should remain framework-agnostic.
|
|
143
|
+
|
|
144
|
+
This allows the same service logic to be reused across frameworks.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
# 8. Database Access Rules
|
|
149
|
+
|
|
150
|
+
Database queries must go through a dedicated data access layer.
|
|
151
|
+
|
|
152
|
+
Direct database calls from controllers are not allowed.
|
|
153
|
+
|
|
154
|
+
Repositories must encapsulate database interactions.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
# 9. Simplicity Over Cleverness
|
|
159
|
+
|
|
160
|
+
Prefer simple and maintainable implementations.
|
|
161
|
+
|
|
162
|
+
Avoid unnecessary abstractions or overly complex patterns.
|
|
163
|
+
|
|
164
|
+
Readable code is preferred over clever code.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
# 10. Document Important Decisions
|
|
169
|
+
|
|
170
|
+
When architectural decisions affect the system structure,
|
|
171
|
+
they must be documented.
|
|
172
|
+
|
|
173
|
+
Examples:
|
|
174
|
+
|
|
175
|
+
- choosing a framework
|
|
176
|
+
- selecting an authentication method
|
|
177
|
+
- database schema strategy
|
|
178
|
+
|
|
179
|
+
These decisions should be recorded in project documentation.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
# 11. Task Decomposition
|
|
184
|
+
|
|
185
|
+
Large tasks must be decomposed into smaller tasks before implementation begins.
|
|
186
|
+
|
|
187
|
+
Example (Auction System):
|
|
188
|
+
|
|
189
|
+
→ create auction table
|
|
190
|
+
→ create auction service
|
|
191
|
+
→ create auction API
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
# 12. Safe Modification Strategy ("Add, Don't Break")
|
|
196
|
+
|
|
197
|
+
When extending functionality, PREFER adding new modules rather than modifying large existing files.
|
|
198
|
+
|
|
199
|
+
Example violations:
|
|
200
|
+
Modifying unrelated services because they "seem related".
|
|
201
|
+
|
|
202
|
+
Correct approach:
|
|
203
|
+
Create `authService.ts`.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
# 13. AI Agent Strict Constraints
|
|
208
|
+
|
|
209
|
+
All AI agents managing this project MUST:
|
|
210
|
+
|
|
211
|
+
1. VERIFY file existence before attempting to read or edit.
|
|
212
|
+
2. NEVER hallucinate imports or dependencies; always check the `package.json` or equivalent first.
|
|
213
|
+
3. FOLLOW exact file paths provided in the task capsule.
|
|
214
|
+
4. PREFER precise string replacements over full file replacements for minor edits.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bun-developer
|
|
3
|
+
description: Strict guidelines for writing ultra-fast TypeScript applications natively using the Bun runtime.
|
|
4
|
+
---
|
|
5
|
+
# BUN DEVELOPER SKILL
|
|
6
|
+
You are a modern JavaScript architect. When this skill is active, you absolutely reject legacy Node.js/NPM habits. Everything must be executed, tested, and resolved via Bun.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# PACKAGE MANAGEMENT
|
|
2
|
+
1. **Never Use NPM:** When this skill is active, NEVER run `npm install`, `npm run`, or `npx`.
|
|
3
|
+
2. **Always Use Bun:** Always use `bun install`, `bun add`, `bun run`, and `bunx`.
|
|
4
|
+
3. **Lockfile:** Rely on `bun.lockb`. Do not generate or interact with `package-lock.json`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# NATIVE RUNTIME FEATURES
|
|
2
|
+
1. **File I/O:** Prefer native `Bun.file()` and `Bun.write()` over Node's `fs/promises` where applicable.
|
|
3
|
+
2. **HTTP Server:** For lightweight wrappers, use `Bun.serve()` directly instead of installing raw Express.
|
|
4
|
+
3. **Framework Choice:** When building APIs, DEFAULT to **Elysia.js** or **Hono.js**. They are optimized for the Bun runtime.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# CLOUD & INFRASTRUCTURE COST SAVINGS
|
|
2
|
+
1. **Right-Sizing:** Never default to large instances. Start small (e.g., t3.micro/nano) and scale based on metrics.
|
|
3
|
+
2. **Spot Instances:** Use pre-emptible/spot instances for background workers or stateless tasks.
|
|
4
|
+
3. **Data Transfer:** Avoid cross-zone data transfer. Keep DB and App in the same AZ. Use Cloudflare to cache egress.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# CODE LEVEL SAVINGS
|
|
2
|
+
1. **Algorithmic Efficiency:** O(N^2) code costs actual dollars in server time. Optimize loops and DB queries.
|
|
3
|
+
2. **Memory Leaks:** Unbounded arrays or unclosed connections lead to OOM errors and bloated instances. Always clean up.
|
|
4
|
+
3. **Payload Size:** Compress API responses (gzip/brotli). Only send the fields the client actually needs (GraphQL or selective REST).
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# SERVERLESS OPTIMIZATION (Lambda/Cloudflare Workers)
|
|
2
|
+
1. **Cold Starts:** Keep dependencies absolutely minimal. Do not import heavy libraries like full `lodash` or `aws-sdk` if you only need one function.
|
|
3
|
+
2. **Execution Time:** You are billed by the millisecond. Await DB calls concurrently using `Promise.all()` whenever possible.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-skill
|
|
3
|
+
description: Meta-skill describing how the AI should generate new skills for itself.
|
|
4
|
+
---
|
|
5
|
+
# CREATE SKILL
|
|
6
|
+
When asked to learn something new permanently, generate a new folder in the `skills/` directory with highly structured markdown files detailing best practices, avoiding fluff.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-architect
|
|
3
|
+
description: Rules for designing scalable, normalized, and highly performant relational databases schemas.
|
|
4
|
+
---
|
|
5
|
+
# DATABASE ARCHITECT SKILL
|
|
6
|
+
You design databases that survive massive scale. Prevent data anomalies, enforce strict types, and optimize query paths.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# INDEX OPTIMIZATION
|
|
2
|
+
1. **Foreign Keys:** Every foreign key column MUST have a corresponding index to speed up JOIN operations.
|
|
3
|
+
2. **Composite Indexes:** Use composite indexes for queries that filter by multiple columns (e.g., `WHERE status = ? AND created_at > ?`). Order matters: most selective column first.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# MIGRATIONS
|
|
2
|
+
1. **Immutable History:** Never rewrite a migration that has already been executed in production. Always write a new migration to alter the state.
|
|
3
|
+
2. **Backwards Compatibility:** All database schema changes (adding, renaming, dropping columns) MUST be backward compatible. Deploy the DB change first, then the code.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# NORMALIZATION
|
|
2
|
+
1. **Third Normal Form (3NF):** Always strive for 3NF. Do not duplicate data unless there is a proven, measured performance bottleneck that requires denormalization.
|
|
3
|
+
2. **UUIDs:** Always use UUIDv4 or ULID for primary keys exposed to the client to prevent sequential ID guessing. Let the database generate them if possible (e.g., `gen_random_uuid()`).
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deployment-ops
|
|
3
|
+
description: Rules for safe, automated, and containerized Continuous Integration & Continuous Deployment (CI/CD).
|
|
4
|
+
---
|
|
5
|
+
# DEPLOYMENT OPS SKILL
|
|
6
|
+
You are the guardian of the production environment. Output efficient Dockerfiles and secure deployment pipelines.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# DOCKERFILE STANDARDS
|
|
2
|
+
1. **Multi-Stage Builds:** Always use multi-stage builds. Compile TypeScript in a `builder` stage, and copy only the `dist/` and `node_modules/ (production only)` to the final Alpine image.
|
|
3
|
+
2. **Non-Root User:** NEVER run Node.js as `root` inside the container. Use `USER node`.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: Guidelines for creating premium, stunning, and highly responsive user interfaces.
|
|
4
|
+
---
|
|
5
|
+
# FRONTEND DESIGN SKILL
|
|
6
|
+
The user must be WOW'ed. Interfaces must feel premium, alive (micro-animations), and highly polished. Do not output raw 2010s HTML/CSS.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# MODERN AESTHETICS
|
|
2
|
+
1. **No Default Colors:** Never use primary Blue #0000FF. Use tailored HSL palettes (e.g., Slate, Zinc, Indigo from Tailwind).
|
|
3
|
+
2. **Typography:** Use Inter, Roboto, or Outfit. Rely on tracking and line-height for readability.
|
|
4
|
+
3. **Glassmorphism:** Use subtle `backdrop-blur` for modals and navbars.
|
|
5
|
+
4. **Dark Mode:** Support dark mode inherently using neutral dark grays (not pure black #000000).
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: know-me
|
|
3
|
+
description: Systems for tracking and persisting user preferences to build a tailored AI persona.
|
|
4
|
+
---
|
|
5
|
+
# KNOW ME SKILL
|
|
6
|
+
The AI must adapt to the user's specific workflow. Detect frustrations, note coding styles, and never make the user repeat their preferences.
|