@phantomind/core 0.1.1 → 0.1.2

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.
Files changed (53) hide show
  1. package/dist/cli/compare.d.ts +6 -0
  2. package/dist/cli/compare.d.ts.map +1 -0
  3. package/dist/cli/compare.js +34 -0
  4. package/dist/cli/compare.js.map +1 -0
  5. package/dist/cli/context.d.ts +8 -0
  6. package/dist/cli/context.d.ts.map +1 -0
  7. package/dist/cli/context.js +37 -0
  8. package/dist/cli/context.js.map +1 -0
  9. package/dist/cli/diff.d.ts +6 -0
  10. package/dist/cli/diff.d.ts.map +1 -0
  11. package/dist/cli/diff.js +46 -0
  12. package/dist/cli/diff.js.map +1 -0
  13. package/dist/cli/hooks.d.ts +5 -0
  14. package/dist/cli/hooks.d.ts.map +1 -0
  15. package/dist/cli/hooks.js +35 -0
  16. package/dist/cli/hooks.js.map +1 -0
  17. package/dist/cli/index.d.ts +5 -0
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +5 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/cli/init.d.ts +2 -2
  22. package/dist/cli/init.d.ts.map +1 -1
  23. package/dist/cli/init.js +163 -84
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/learn.d.ts +11 -0
  26. package/dist/cli/learn.d.ts.map +1 -0
  27. package/dist/cli/learn.js +50 -0
  28. package/dist/cli/learn.js.map +1 -0
  29. package/dist/cli/main.js +56 -0
  30. package/dist/cli/main.js.map +1 -1
  31. package/dist/cli/watch.d.ts +5 -0
  32. package/dist/cli/watch.d.ts.map +1 -0
  33. package/dist/cli/watch.js +60 -0
  34. package/dist/cli/watch.js.map +1 -0
  35. package/dist/config/loader.d.ts.map +1 -1
  36. package/dist/config/loader.js +8 -2
  37. package/dist/config/loader.js.map +1 -1
  38. package/dist/context/learner.d.ts +31 -6
  39. package/dist/context/learner.d.ts.map +1 -1
  40. package/dist/context/learner.js +328 -29
  41. package/dist/context/learner.js.map +1 -1
  42. package/dist/context/project-template.d.ts +21 -0
  43. package/dist/context/project-template.d.ts.map +1 -0
  44. package/dist/context/project-template.js +81 -0
  45. package/dist/context/project-template.js.map +1 -0
  46. package/dist/context/rules-generator.d.ts +7 -0
  47. package/dist/context/rules-generator.d.ts.map +1 -0
  48. package/dist/context/rules-generator.js +158 -0
  49. package/dist/context/rules-generator.js.map +1 -0
  50. package/dist/templates/engine.d.ts.map +1 -1
  51. package/dist/templates/engine.js +159 -10
  52. package/dist/templates/engine.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,158 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { TemplateEngine } from '../templates/engine.js';
5
+ import { ContextLearner } from './learner.js';
6
+ import { PROJECT_TEMPLATES, detectProjectTemplate, } from './project-template.js';
7
+ function detectProjectName(projectRoot) {
8
+ try {
9
+ const pkgPath = join(projectRoot, 'package.json');
10
+ if (existsSync(pkgPath)) {
11
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
12
+ return pkg.name ?? projectRoot.split('/').pop() ?? 'project';
13
+ }
14
+ }
15
+ catch {
16
+ // Ignore invalid package.json
17
+ }
18
+ return projectRoot.split('/').pop() ?? 'project';
19
+ }
20
+ async function readJson(projectRoot, relativePath) {
21
+ const fullPath = join(projectRoot, relativePath);
22
+ if (!existsSync(fullPath))
23
+ return null;
24
+ try {
25
+ return JSON.parse(await readFile(fullPath, 'utf-8'));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ async function readOptionalText(projectRoot, relativePath) {
32
+ const fullPath = join(projectRoot, relativePath);
33
+ if (!existsSync(fullPath))
34
+ return '';
35
+ try {
36
+ return await readFile(fullPath, 'utf-8');
37
+ }
38
+ catch {
39
+ return '';
40
+ }
41
+ }
42
+ function languageRulesFromConfig(techStack, tsconfig) {
43
+ const rules = [];
44
+ if (techStack.languages.includes('TypeScript')) {
45
+ rules.push('Keep TypeScript strictness intact when adding new code.');
46
+ const compilerOptions = tsconfig?.compilerOptions ?? {};
47
+ if (compilerOptions.strict === true)
48
+ rules.push('Do not weaken strict TypeScript compiler options.');
49
+ if (compilerOptions.noImplicitAny === true)
50
+ rules.push('Avoid introducing implicit any types.');
51
+ if (typeof compilerOptions.module === 'string') {
52
+ rules.push(`Preserve the configured module target: ${compilerOptions.module}.`);
53
+ }
54
+ }
55
+ if (techStack.languages.includes('JavaScript')) {
56
+ rules.push('Prefer modern syntax that matches the current runtime target.');
57
+ }
58
+ if (techStack.languages.includes('Python')) {
59
+ rules.push('Prefer explicit dependencies and small modules for Python code.');
60
+ }
61
+ return [...new Set(rules)];
62
+ }
63
+ function frameworkRulesFromTechStack(techStack) {
64
+ const rules = [];
65
+ if (techStack.frameworks.includes('React'))
66
+ rules.push('Keep UI state local unless cross-feature coordination is required.');
67
+ if (techStack.frameworks.includes('Next.js'))
68
+ rules.push('Respect server/client boundaries and route conventions.');
69
+ if (techStack.frameworks.includes('Express'))
70
+ rules.push('Keep routing, validation, and business logic separated.');
71
+ if (techStack.frameworks.includes('NestJS'))
72
+ rules.push('Follow module/provider/controller boundaries consistently.');
73
+ return rules;
74
+ }
75
+ function importRulesFromFiles(techStack, eslintText) {
76
+ const rules = [];
77
+ if (techStack.runtime.includes('Node.js'))
78
+ rules.push('Use the node: prefix for built-in modules where already adopted.');
79
+ if (eslintText.includes('import/order'))
80
+ rules.push('Preserve configured import ordering.');
81
+ if (eslintText.includes('@typescript-eslint/consistent-type-imports')) {
82
+ rules.push('Use type-only imports when importing types.');
83
+ }
84
+ return [...new Set(rules)];
85
+ }
86
+ function testingRulesFromTechStack(techStack) {
87
+ const rules = [];
88
+ if (techStack.testingTools.length === 0) {
89
+ rules.push('Add regression coverage when changing behavior in critical paths.');
90
+ }
91
+ if (techStack.testingTools.includes('Vitest'))
92
+ rules.push('Keep tests fast and focused when using Vitest.');
93
+ if (techStack.testingTools.includes('Playwright'))
94
+ rules.push('Reserve end-to-end coverage for critical flows.');
95
+ return rules;
96
+ }
97
+ function forbiddenPatternsFromConfig(eslintText, techStack) {
98
+ const patterns = ['Hardcoded secrets or credentials', 'Commented-out code committed as dead weight'];
99
+ if (techStack.languages.includes('TypeScript'))
100
+ patterns.push('Using any in new code without a strong reason');
101
+ if (eslintText.includes('no-console'))
102
+ patterns.push('Console logging in production code paths');
103
+ return [...new Set(patterns)];
104
+ }
105
+ export async function generateRulesContent(projectRoot, options = {}) {
106
+ const learner = new ContextLearner(projectRoot);
107
+ await learner.learn();
108
+ const techStack = learner.getTechStack();
109
+ const tsconfig = await readJson(projectRoot, 'tsconfig.json');
110
+ const eslintText = [
111
+ await readOptionalText(projectRoot, '.eslintrc'),
112
+ await readOptionalText(projectRoot, '.eslintrc.json'),
113
+ await readOptionalText(projectRoot, 'eslint.config.js'),
114
+ await readOptionalText(projectRoot, 'eslint.config.mjs'),
115
+ ].join('\n');
116
+ const prettierText = [
117
+ await readOptionalText(projectRoot, '.prettierrc'),
118
+ await readOptionalText(projectRoot, '.prettierrc.json'),
119
+ await readOptionalText(projectRoot, 'prettier.config.js'),
120
+ await readOptionalText(projectRoot, 'prettier.config.mjs'),
121
+ ].join('\n');
122
+ const selectedTemplateName = options.template && options.template !== 'auto'
123
+ ? options.template
124
+ : detectProjectTemplate({
125
+ frameworks: techStack.frameworks,
126
+ entryPoints: techStack.entryPoints,
127
+ projectType: techStack.projectType,
128
+ });
129
+ const template = PROJECT_TEMPLATES[selectedTemplateName];
130
+ return TemplateEngine.renderRules({
131
+ projectName: detectProjectName(projectRoot),
132
+ primaryLanguage: techStack.languages[0] ?? 'Unknown',
133
+ framework: techStack.frameworks[0] ?? template.displayName,
134
+ languageRules: [...template.languageRules, ...languageRulesFromConfig(techStack, tsconfig)],
135
+ frameworkRules: [...template.frameworkRules, ...frameworkRulesFromTechStack(techStack)],
136
+ fileOrganization: template.fileOrganization,
137
+ importRules: [...template.importRules, ...importRulesFromFiles(techStack, eslintText)],
138
+ testingRules: [...template.testingRules, ...testingRulesFromTechStack(techStack)],
139
+ branchNaming: 'feature/*, fix/*, chore/*',
140
+ commitFormat: 'conventional commits',
141
+ prRequirements: 'Explain behavioral changes, risks, and validation steps.',
142
+ securityRules: ['Do not trust unchecked external input.'],
143
+ performanceRules: [...template.performanceRules],
144
+ documentationRules: [
145
+ ...template.documentationRules,
146
+ ...(prettierText ? ['Do not fight formatter output; align changes with configured formatting.'] : []),
147
+ ],
148
+ forbiddenPatterns: [...template.forbiddenPatterns, ...forbiddenPatternsFromConfig(eslintText, techStack)],
149
+ customRules: template.customRules,
150
+ });
151
+ }
152
+ export async function writeRulesContent(projectRoot, options = {}) {
153
+ const content = await generateRulesContent(projectRoot, options);
154
+ const rulesPath = join(projectRoot, '.phantomind', 'RULES.md');
155
+ await writeFile(rulesPath, content, 'utf-8');
156
+ return content;
157
+ }
158
+ //# sourceMappingURL=rules-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-generator.js","sourceRoot":"","sources":["../../src/context/rules-generator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;IA8CpE;;OAEG;WACU,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IASvE;;OAEG;WACU,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAQvE"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiKH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;IA8CpE;;OAEG;WACU,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvE;;OAEG;WACU,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAMvE"}
@@ -2,10 +2,163 @@
2
2
  * PhantomMindAI — Template Engine
3
3
  * Renders mustache-like templates with project data.
4
4
  */
5
- import { readFile } from 'node:fs/promises';
6
- import { join, dirname } from 'node:path';
7
- import { fileURLToPath } from 'node:url';
8
- const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const SKILLS_TEMPLATE = `# {{projectName}} AI Skills & Context
6
+ <!-- Auto-generated by PhantomMindAI. Do not edit manually. -->
7
+ <!-- Last updated: {{timestamp}} -->
8
+
9
+ ## Project Overview
10
+ - **Name**: {{projectName}}
11
+ - **Type**: {{projectType}}
12
+ - **Language**: {{primaryLanguage}}
13
+ - **Framework**: {{framework}}
14
+
15
+ ## Tech Stack
16
+ {{#techStack}}
17
+ - {{.}}
18
+ {{/techStack}}
19
+
20
+ ## Architecture
21
+ {{architectureDescription}}
22
+
23
+ ### Directory Structure
24
+
25
+
26
+ {{directoryStructure}}
27
+
28
+
29
+ ## Coding Conventions
30
+
31
+ ### Naming Conventions
32
+ {{#namingConventions}}
33
+ - {{.}}
34
+ {{/namingConventions}}
35
+
36
+ ### Import Patterns
37
+ {{#importPatterns}}
38
+ - {{.}}
39
+ {{/importPatterns}}
40
+
41
+ ### Code Style
42
+ {{#codeStyle}}
43
+ - {{.}}
44
+ {{/codeStyle}}
45
+
46
+ ## Project Patterns
47
+
48
+ ### Common Patterns
49
+ {{#commonPatterns}}
50
+ - **{{name}}**: {{description}}
51
+ {{/commonPatterns}}
52
+
53
+ ### Anti-Patterns (Avoid)
54
+ {{#antiPatterns}}
55
+ - ❌ {{.}}
56
+ {{/antiPatterns}}
57
+
58
+ ## Key Files
59
+ {{#keyFiles}}
60
+ - \`{{path}}\` — {{description}}
61
+ {{/keyFiles}}
62
+
63
+ ## Dependencies
64
+ ### Production
65
+ {{#dependencies}}
66
+ - \`{{name}}\` ({{version}}) — {{description}}
67
+ {{/dependencies}}
68
+
69
+ ### Dev Dependencies
70
+ {{#devDependencies}}
71
+ - \`{{name}}\` ({{version}})
72
+ {{/devDependencies}}
73
+
74
+ ## Testing
75
+ - **Framework**: {{testFramework}}
76
+ - **Run**: \`{{testCommand}}\`
77
+ - **Pattern**: {{testPattern}}
78
+
79
+ ## Build & Deploy
80
+ - **Build**: \`{{buildCommand}}\`
81
+ - **Dev**: \`{{devCommand}}\`
82
+ - **Deploy**: {{deployTarget}}
83
+
84
+ ## Additional Context
85
+ {{additionalContext}}
86
+ `;
87
+ const RULES_TEMPLATE = `# {{projectName}} — AI Rules & Guidelines
88
+ <!-- Auto-generated by PhantomMindAI. Do not edit manually. -->
89
+ <!-- Last updated: {{timestamp}} -->
90
+
91
+ ## General Rules
92
+ 1. Follow the project's existing code style and conventions
93
+ 2. Never hardcode secrets, API keys, or credentials
94
+ 3. Always handle errors appropriately — never use empty catch blocks
95
+ 4. Write self-documenting code with meaningful names
96
+ 5. Keep functions focused — each function should do one thing
97
+
98
+ ## Language-Specific Rules
99
+
100
+ ### {{primaryLanguage}}
101
+ {{#languageRules}}
102
+ - {{.}}
103
+ {{/languageRules}}
104
+
105
+ ## Framework Rules
106
+
107
+ ### {{framework}}
108
+ {{#frameworkRules}}
109
+ - {{.}}
110
+ {{/frameworkRules}}
111
+
112
+ ## File Organization
113
+ {{#fileOrganization}}
114
+ - {{.}}
115
+ {{/fileOrganization}}
116
+
117
+ ## Import Rules
118
+ {{#importRules}}
119
+ - {{.}}
120
+ {{/importRules}}
121
+
122
+ ## Testing Rules
123
+ {{#testingRules}}
124
+ - {{.}}
125
+ {{/testingRules}}
126
+
127
+ ## Git Conventions
128
+ - **Branch naming**: {{branchNaming}}
129
+ - **Commit format**: {{commitFormat}}
130
+ - **PR requirements**: {{prRequirements}}
131
+
132
+ ## Security Rules
133
+ 1. Never commit secrets or API keys
134
+ 2. Validate all user input
135
+ 3. Use parameterized queries for database access
136
+ 4. Sanitize output to prevent XSS
137
+ 5. Follow the principle of least privilege
138
+ {{#securityRules}}
139
+ 6. {{.}}
140
+ {{/securityRules}}
141
+
142
+ ## Performance Rules
143
+ {{#performanceRules}}
144
+ - {{.}}
145
+ {{/performanceRules}}
146
+
147
+ ## Documentation Rules
148
+ {{#documentationRules}}
149
+ - {{.}}
150
+ {{/documentationRules}}
151
+
152
+ ## Forbidden Patterns
153
+ {{#forbiddenPatterns}}
154
+ - ❌ **Never**: {{.}}
155
+ {{/forbiddenPatterns}}
156
+
157
+ ## Custom Rules
158
+ {{#customRules}}
159
+ - {{.}}
160
+ {{/customRules}}
161
+ `;
9
162
  export class TemplateEngine {
10
163
  /**
11
164
  * Render a template with data
@@ -49,9 +202,7 @@ export class TemplateEngine {
49
202
  * Load and render the SKILLS template
50
203
  */
51
204
  static async renderSkills(data) {
52
- const templatePath = join(__dirname, 'SKILLS.template.md');
53
- const template = await readFile(templatePath, 'utf-8');
54
- return this.render(template, {
205
+ return this.render(SKILLS_TEMPLATE, {
55
206
  ...data,
56
207
  timestamp: new Date().toISOString(),
57
208
  });
@@ -60,9 +211,7 @@ export class TemplateEngine {
60
211
  * Load and render the RULES template
61
212
  */
62
213
  static async renderRules(data) {
63
- const templatePath = join(__dirname, 'RULES.template.md');
64
- const template = await readFile(templatePath, 'utf-8');
65
- return this.render(template, {
214
+ return this.render(RULES_TEMPLATE, {
66
215
  ...data,
67
216
  timestamp: new Date().toISOString(),
68
217
  });
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFvB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EtB,CAAC;AA0CF,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,QAAgB,EAAE,IAA2B;QACzD,IAAI,MAAM,GAAG,QAAQ,CAAC;QAEtB,4CAA4C;QAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,uCAAuC,EACvC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAClB,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YAEtB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAC9C,CAAC;oBACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC;wBACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC1C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EACnC,MAAM,CAAC,CAAC,CAAC,CACV,CAAC;wBACJ,CAAC;wBACD,OAAO,QAAQ,CAAC;oBAClB,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,CAAC,CACF,CAAC;QAEF,kCAAkC;QAClC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACnD,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAA2B;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAClC,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAA2B;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YACjC,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phantomind/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "PhantomMindAI — Universal AI Context Layer for Development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",