mycontext-cli 4.2.7 → 4.2.10

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 (98) hide show
  1. package/dist/commands/agent.d.ts.map +1 -1
  2. package/dist/commands/agent.js +10 -1
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/generate.d.ts.map +1 -1
  5. package/dist/commands/generate.js +19 -60
  6. package/dist/commands/generate.js.map +1 -1
  7. package/dist/commands/init-interactive.d.ts +20 -0
  8. package/dist/commands/init-interactive.d.ts.map +1 -1
  9. package/dist/commands/init-interactive.js +168 -5
  10. package/dist/commands/init-interactive.js.map +1 -1
  11. package/dist/config/shadcn-catalog.json +93 -0
  12. package/dist/core/brain/BrainClient.d.ts +1 -1
  13. package/dist/core/brain/BrainClient.d.ts.map +1 -1
  14. package/dist/core/brain/BrainClient.js +5 -5
  15. package/dist/core/brain/BrainClient.js.map +1 -1
  16. package/dist/doctor/DoctorEngine.d.ts.map +1 -1
  17. package/dist/doctor/DoctorEngine.js +21 -11
  18. package/dist/doctor/DoctorEngine.js.map +1 -1
  19. package/dist/doctor/rules/dead-code-rules.d.ts.map +1 -1
  20. package/dist/doctor/rules/dead-code-rules.js +33 -0
  21. package/dist/doctor/rules/dead-code-rules.js.map +1 -1
  22. package/dist/doctor/rules/instantdb-rules.d.ts.map +1 -1
  23. package/dist/doctor/rules/instantdb-rules.js +278 -69
  24. package/dist/doctor/rules/instantdb-rules.js.map +1 -1
  25. package/dist/doctor/rules/nextjs-rules.d.ts.map +1 -1
  26. package/dist/doctor/rules/nextjs-rules.js +53 -3
  27. package/dist/doctor/rules/nextjs-rules.js.map +1 -1
  28. package/dist/package.json +4 -2
  29. package/dist/services/ComponentInferenceEngine.d.ts +66 -0
  30. package/dist/services/ComponentInferenceEngine.d.ts.map +1 -0
  31. package/dist/services/ComponentInferenceEngine.js +302 -0
  32. package/dist/services/ComponentInferenceEngine.js.map +1 -0
  33. package/dist/services/ComponentRegistry.d.ts +61 -0
  34. package/dist/services/ComponentRegistry.d.ts.map +1 -0
  35. package/dist/services/ComponentRegistry.js +128 -0
  36. package/dist/services/ComponentRegistry.js.map +1 -0
  37. package/dist/services/InferenceEngine.js +1 -1
  38. package/dist/services/ProjectScanner.d.ts.map +1 -1
  39. package/dist/services/ProjectScanner.js +18 -1
  40. package/dist/services/ProjectScanner.js.map +1 -1
  41. package/dist/services/ScaffoldEngine.d.ts +87 -0
  42. package/dist/services/ScaffoldEngine.d.ts.map +1 -0
  43. package/dist/services/ScaffoldEngine.js +409 -0
  44. package/dist/services/ScaffoldEngine.js.map +1 -0
  45. package/dist/services/ScaffoldPreview.d.ts +62 -0
  46. package/dist/services/ScaffoldPreview.d.ts.map +1 -0
  47. package/dist/services/ScaffoldPreview.js +292 -0
  48. package/dist/services/ScaffoldPreview.js.map +1 -0
  49. package/dist/services/TemplateEngine.d.ts +136 -0
  50. package/dist/services/TemplateEngine.d.ts.map +1 -0
  51. package/dist/services/TemplateEngine.js +483 -0
  52. package/dist/services/TemplateEngine.js.map +1 -0
  53. package/dist/services/TemplateHelpers.d.ts +9 -0
  54. package/dist/services/TemplateHelpers.d.ts.map +1 -0
  55. package/dist/services/TemplateHelpers.js +212 -0
  56. package/dist/services/TemplateHelpers.js.map +1 -0
  57. package/dist/templates/actions/auth-actions.ts.hbs +140 -0
  58. package/dist/templates/actions/crud-actions.ts.hbs +113 -0
  59. package/dist/templates/components/auth/login-form.tsx.hbs +67 -0
  60. package/dist/templates/components/auth/login-skeleton.tsx.hbs +24 -0
  61. package/dist/templates/components/auth/register-form.tsx.hbs +116 -0
  62. package/dist/templates/components/crud/entity-card.tsx.hbs +71 -0
  63. package/dist/templates/components/crud/entity-form.tsx.hbs +158 -0
  64. package/dist/templates/components/crud/entity-skeleton.tsx.hbs +90 -0
  65. package/dist/templates/components/crud/entity-table.tsx.hbs +129 -0
  66. package/dist/templates/components/ui/button.tsx.hbs +53 -0
  67. package/dist/templates/components/ui/card.tsx.hbs +68 -0
  68. package/dist/templates/components/ui/input.tsx.hbs +33 -0
  69. package/dist/templates/components/ui/label.tsx.hbs +20 -0
  70. package/dist/templates/components/ui/skeleton.tsx.hbs +15 -0
  71. package/dist/templates/components/ui/theme-provider.tsx.hbs +66 -0
  72. package/dist/templates/components/ui/theme-toggle.tsx.hbs +30 -0
  73. package/dist/templates/config/app.css.hbs +150 -0
  74. package/dist/templates/layouts/dashboard-layout.tsx.hbs +69 -0
  75. package/dist/templates/layouts/error.tsx.hbs +51 -0
  76. package/dist/templates/layouts/loading.tsx.hbs +22 -0
  77. package/dist/templates/layouts/not-found.tsx.hbs +24 -0
  78. package/dist/templates/layouts/root-layout.tsx.hbs +40 -0
  79. package/dist/templates/lib/instant.ts.hbs +19 -0
  80. package/dist/templates/lib/utils.ts.hbs +24 -0
  81. package/dist/templates/pages/auth/login-page.tsx.hbs +30 -0
  82. package/dist/templates/pages/auth/register-page.tsx.hbs +38 -0
  83. package/dist/templates/pages/crud/create-page.tsx.hbs +42 -0
  84. package/dist/templates/pages/crud/detail-page.tsx.hbs +90 -0
  85. package/dist/templates/pages/crud/list-page.tsx.hbs +60 -0
  86. package/dist/templates/pages/crud/loading.tsx.hbs +13 -0
  87. package/dist/templates/pages/landing-page.tsx.hbs +111 -0
  88. package/dist/types/asl.d.ts +1 -1
  89. package/dist/types/asl.d.ts.map +1 -1
  90. package/dist/types/living-context.d.ts +1 -1
  91. package/dist/types/living-context.d.ts.map +1 -1
  92. package/dist/utils/FileGenerator.js +3 -3
  93. package/dist/utils/FileGenerator.js.map +1 -1
  94. package/dist/utils/generateTypesFromSchema.d.ts +47 -0
  95. package/dist/utils/generateTypesFromSchema.d.ts.map +1 -0
  96. package/dist/utils/generateTypesFromSchema.js +298 -0
  97. package/dist/utils/generateTypesFromSchema.js.map +1 -0
  98. package/package.json +4 -2
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mycontext-cli",
3
- "version": "4.2.7",
3
+ "version": "4.2.10",
4
4
  "description": "CLI tool for spec-driven development - Generate comprehensive context, visual screens, and scaffolding for AI-powered coding",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
@@ -54,9 +54,10 @@
54
54
  "@google/generative-ai": "^0.24.1",
55
55
  "@huggingface/inference": "^4.11.1",
56
56
  "@modelcontextprotocol/sdk": "^1.26.0",
57
- "@myycontext/core": "^1.0.5",
57
+ "@myycontext/core": "workspace:*",
58
58
  "@playwright/test": "^1.58.2",
59
59
  "@types/figlet": "^1.7.0",
60
+ "@types/handlebars": "^4.1.0",
60
61
  "axios": "^1.6.0",
61
62
  "chalk": "^5.6.2",
62
63
  "commander": "^11.1.0",
@@ -68,6 +69,7 @@
68
69
  "fuse.js": "^7.1.0",
69
70
  "glob": "^10.3.10",
70
71
  "gradient-string": "^3.0.0",
72
+ "handlebars": "^4.7.8",
71
73
  "inquirer": "^9.2.12",
72
74
  "mdast-util-to-markdown": "^2.1.2",
73
75
  "node-fetch": "^2.7.0",
@@ -0,0 +1,66 @@
1
+ import { ASL } from "../types/asl";
2
+ export interface ShadCNComponent {
3
+ name: string;
4
+ dependencies: string[];
5
+ useCases: string[];
6
+ description: string;
7
+ required: boolean;
8
+ }
9
+ export interface ShadCNCatalog {
10
+ components: ShadCNComponent[];
11
+ metadata: {
12
+ version: string;
13
+ totalComponents: number;
14
+ lastUpdated: string;
15
+ };
16
+ }
17
+ /**
18
+ * ComponentInferenceEngine - Smart inference of needed shadCN components
19
+ *
20
+ * Analyzes ASL specification to determine which shadCN UI components
21
+ * are needed for the project. Automatically resolves dependencies.
22
+ *
23
+ * Benefits:
24
+ * - Only installs what's needed (saves tokens and time)
25
+ * - Resolves dependencies automatically
26
+ * - Provides reasoning for each component choice
27
+ */
28
+ export declare class ComponentInferenceEngine {
29
+ private catalog;
30
+ constructor();
31
+ /**
32
+ * Infer which shadCN components are needed based on ASL
33
+ * Returns array of component names to install
34
+ */
35
+ inferNeededComponents(asl: ASL): string[];
36
+ /**
37
+ * Check if ASL has list/table views
38
+ */
39
+ private hasListViews;
40
+ /**
41
+ * Check if a page is an entity list page
42
+ */
43
+ private isEntityListPage;
44
+ /**
45
+ * Check if ASL has admin/RBAC features
46
+ */
47
+ private hasAdminFeatures;
48
+ /**
49
+ * Resolve component dependencies
50
+ * E.g., if we need 'form', we also need 'button' and 'label'
51
+ */
52
+ private resolveDependencies;
53
+ /**
54
+ * Load shadCN component catalog
55
+ */
56
+ private loadCatalog;
57
+ /**
58
+ * Default catalog (used if shadcn-catalog.json doesn't exist yet)
59
+ */
60
+ private getDefaultCatalog;
61
+ /**
62
+ * Explain why each component was chosen
63
+ */
64
+ explainChoices(asl: ASL): Map<string, string>;
65
+ }
66
+ //# sourceMappingURL=ComponentInferenceEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentInferenceEngine.d.ts","sourceRoot":"","sources":["../../src/services/ComponentInferenceEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAwB,MAAM,cAAc,CAAC;AAIzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,OAAO,CAAgB;;IAM/B;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE;IAwCzC;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgGzB;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;CAkC9C"}
@@ -0,0 +1,302 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ComponentInferenceEngine = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs-extra"));
39
+ /**
40
+ * ComponentInferenceEngine - Smart inference of needed shadCN components
41
+ *
42
+ * Analyzes ASL specification to determine which shadCN UI components
43
+ * are needed for the project. Automatically resolves dependencies.
44
+ *
45
+ * Benefits:
46
+ * - Only installs what's needed (saves tokens and time)
47
+ * - Resolves dependencies automatically
48
+ * - Provides reasoning for each component choice
49
+ */
50
+ class ComponentInferenceEngine {
51
+ constructor() {
52
+ this.catalog = this.loadCatalog();
53
+ }
54
+ /**
55
+ * Infer which shadCN components are needed based on ASL
56
+ * Returns array of component names to install
57
+ */
58
+ inferNeededComponents(asl) {
59
+ const needed = new Set();
60
+ // Base components (always needed for any app)
61
+ needed.add('button');
62
+ needed.add('card');
63
+ // Auth-based components
64
+ if (asl.auth) {
65
+ needed.add('form');
66
+ needed.add('input');
67
+ needed.add('label');
68
+ needed.add('toast'); // for error messages
69
+ }
70
+ // Entity CRUD forms
71
+ if (asl.entities && Object.keys(asl.entities).length > 0) {
72
+ needed.add('form');
73
+ needed.add('input');
74
+ needed.add('textarea'); // for long text fields
75
+ needed.add('select'); // for references/dropdowns
76
+ needed.add('dialog'); // for create/edit modals
77
+ needed.add('label');
78
+ }
79
+ // List views (tables for data display)
80
+ if (this.hasListViews(asl)) {
81
+ needed.add('table');
82
+ }
83
+ // Admin/RBAC features
84
+ if (this.hasAdminFeatures(asl)) {
85
+ needed.add('dropdown-menu'); // for actions
86
+ needed.add('badge'); // for status/roles
87
+ }
88
+ // Resolve dependencies (e.g., form needs button, label)
89
+ return this.resolveDependencies(needed);
90
+ }
91
+ /**
92
+ * Check if ASL has list/table views
93
+ */
94
+ hasListViews(asl) {
95
+ // Entities imply list views
96
+ if (asl.entities && Object.keys(asl.entities).length > 0) {
97
+ return true;
98
+ }
99
+ // Check for explicit list pages
100
+ return asl.pages.some(p => p.path.includes('/list') ||
101
+ this.isEntityListPage(p, asl.entities));
102
+ }
103
+ /**
104
+ * Check if a page is an entity list page
105
+ */
106
+ isEntityListPage(page, entities) {
107
+ if (!entities)
108
+ return false;
109
+ const entityNames = Object.keys(entities).map(name => name.toLowerCase() + 's');
110
+ return entityNames.some(name => page.path.includes('/' + name));
111
+ }
112
+ /**
113
+ * Check if ASL has admin/RBAC features
114
+ */
115
+ hasAdminFeatures(asl) {
116
+ if (!asl.permissions)
117
+ return false;
118
+ return asl.permissions.some(p => p.role === 'admin' ||
119
+ p.role === 'moderator' ||
120
+ p.actions.includes('manage'));
121
+ }
122
+ /**
123
+ * Resolve component dependencies
124
+ * E.g., if we need 'form', we also need 'button' and 'label'
125
+ */
126
+ resolveDependencies(components) {
127
+ const resolved = new Set(components);
128
+ // Keep resolving until no new dependencies are added
129
+ let changed = true;
130
+ while (changed) {
131
+ changed = false;
132
+ const current = Array.from(resolved);
133
+ for (const comp of current) {
134
+ const definition = this.catalog.components.find(c => c.name === comp);
135
+ if (definition) {
136
+ for (const dep of definition.dependencies) {
137
+ if (!resolved.has(dep)) {
138
+ resolved.add(dep);
139
+ changed = true;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // Return sorted array
146
+ return Array.from(resolved).sort();
147
+ }
148
+ /**
149
+ * Load shadCN component catalog
150
+ */
151
+ loadCatalog() {
152
+ try {
153
+ const catalogPath = path.join(__dirname, '../config/shadcn-catalog.json');
154
+ return fs.readJSONSync(catalogPath);
155
+ }
156
+ catch (error) {
157
+ // Return minimal catalog if file doesn't exist yet
158
+ return this.getDefaultCatalog();
159
+ }
160
+ }
161
+ /**
162
+ * Default catalog (used if shadcn-catalog.json doesn't exist yet)
163
+ */
164
+ getDefaultCatalog() {
165
+ return {
166
+ components: [
167
+ {
168
+ name: 'button',
169
+ dependencies: [],
170
+ useCases: ['forms', 'actions', 'navigation'],
171
+ description: 'Interactive button component with variants',
172
+ required: true
173
+ },
174
+ {
175
+ name: 'form',
176
+ dependencies: ['label', 'button'],
177
+ useCases: ['auth', 'crud', 'settings'],
178
+ description: 'Form wrapper with validation support',
179
+ required: false
180
+ },
181
+ {
182
+ name: 'input',
183
+ dependencies: ['label'],
184
+ useCases: ['auth', 'forms'],
185
+ description: 'Text input field',
186
+ required: false
187
+ },
188
+ {
189
+ name: 'card',
190
+ dependencies: [],
191
+ useCases: ['lists', 'dashboard'],
192
+ description: 'Container with header, content, footer',
193
+ required: false
194
+ },
195
+ {
196
+ name: 'table',
197
+ dependencies: [],
198
+ useCases: ['lists', 'admin', 'data-display'],
199
+ description: 'Data table component',
200
+ required: false
201
+ },
202
+ {
203
+ name: 'dialog',
204
+ dependencies: ['button'],
205
+ useCases: ['modals', 'forms', 'confirmations'],
206
+ description: 'Modal dialog component',
207
+ required: false
208
+ },
209
+ {
210
+ name: 'toast',
211
+ dependencies: [],
212
+ useCases: ['notifications', 'feedback'],
213
+ description: 'Toast notification system',
214
+ required: false
215
+ },
216
+ {
217
+ name: 'select',
218
+ dependencies: [],
219
+ useCases: ['forms', 'filters'],
220
+ description: 'Dropdown select component',
221
+ required: false
222
+ },
223
+ {
224
+ name: 'label',
225
+ dependencies: [],
226
+ useCases: ['forms'],
227
+ description: 'Form label component',
228
+ required: false
229
+ },
230
+ {
231
+ name: 'textarea',
232
+ dependencies: ['label'],
233
+ useCases: ['forms', 'comments'],
234
+ description: 'Multi-line text input',
235
+ required: false
236
+ },
237
+ {
238
+ name: 'dropdown-menu',
239
+ dependencies: ['button'],
240
+ useCases: ['navigation', 'actions', 'admin'],
241
+ description: 'Dropdown menu component',
242
+ required: false
243
+ },
244
+ {
245
+ name: 'badge',
246
+ dependencies: [],
247
+ useCases: ['status', 'labels', 'counts'],
248
+ description: 'Badge/pill component for status',
249
+ required: false
250
+ }
251
+ ],
252
+ metadata: {
253
+ version: 'latest',
254
+ totalComponents: 12,
255
+ lastUpdated: '2026-02-22'
256
+ }
257
+ };
258
+ }
259
+ /**
260
+ * Explain why each component was chosen
261
+ */
262
+ explainChoices(asl) {
263
+ const explanations = new Map();
264
+ const components = this.inferNeededComponents(asl);
265
+ components.forEach(comp => {
266
+ const definition = this.catalog.components.find(c => c.name === comp);
267
+ if (!definition)
268
+ return;
269
+ if (comp === 'button' || comp === 'card') {
270
+ explanations.set(comp, 'Always needed for UI');
271
+ }
272
+ else if (asl.auth && ['form', 'input', 'label', 'toast'].includes(comp)) {
273
+ explanations.set(comp, 'Required for authentication');
274
+ }
275
+ else if (asl.entities && Object.keys(asl.entities).length > 0 && ['textarea', 'select', 'dialog'].includes(comp)) {
276
+ explanations.set(comp, 'Required for CRUD forms');
277
+ }
278
+ else if (comp === 'table') {
279
+ explanations.set(comp, 'Required for entity lists');
280
+ }
281
+ else if (this.hasAdminFeatures(asl) && ['dropdown-menu', 'badge'].includes(comp)) {
282
+ explanations.set(comp, 'Required for admin features');
283
+ }
284
+ else {
285
+ // Dependency
286
+ const parent = components.find(c => {
287
+ const def = this.catalog.components.find(d => d.name === c);
288
+ return def?.dependencies.includes(comp);
289
+ });
290
+ if (parent) {
291
+ explanations.set(comp, `Dependency of ${parent}`);
292
+ }
293
+ else {
294
+ explanations.set(comp, definition.description);
295
+ }
296
+ }
297
+ });
298
+ return explanations;
299
+ }
300
+ }
301
+ exports.ComponentInferenceEngine = ComponentInferenceEngine;
302
+ //# sourceMappingURL=ComponentInferenceEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentInferenceEngine.js","sourceRoot":"","sources":["../../src/services/ComponentInferenceEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { ASL } from "../types/asl";
2
+ export interface ShadCNComponentMetadata {
3
+ name: string;
4
+ version: string;
5
+ installedAt: string;
6
+ }
7
+ export interface CustomComponentMetadata {
8
+ name: string;
9
+ type: 'auth' | 'entity' | 'custom';
10
+ path: string;
11
+ shadcnDeps: string[];
12
+ props?: Record<string, string>;
13
+ createdAt: string;
14
+ lastModified?: string;
15
+ usedIn: string[];
16
+ }
17
+ export interface ComponentRegistryData {
18
+ version: string;
19
+ shadcnComponents: ShadCNComponentMetadata[];
20
+ customComponents: CustomComponentMetadata[];
21
+ stats: {
22
+ totalShadCN: number;
23
+ totalCustom: number;
24
+ };
25
+ }
26
+ /**
27
+ * ComponentRegistry - Track all components in the project
28
+ *
29
+ * Maintains .mycontext/components_registry.json with metadata about:
30
+ * - Installed shadCN components
31
+ * - Custom generated components
32
+ * - Component dependencies and usage
33
+ *
34
+ * Enables:
35
+ * - LEGO assembly (component reuse)
36
+ * - Token usage tracking
37
+ * - Avoiding duplicate installations
38
+ */
39
+ export declare class ComponentRegistry {
40
+ /**
41
+ * Initialize component registry for a new project
42
+ */
43
+ initialize(projectPath: string, asl: ASL, shadcnComponents: string[]): Promise<void>;
44
+ /**
45
+ * Register a custom component
46
+ */
47
+ registerComponent(projectPath: string, component: CustomComponentMetadata): Promise<void>;
48
+ /**
49
+ * Check if a shadCN component is installed
50
+ */
51
+ has(projectPath: string, componentName: string): Promise<boolean>;
52
+ /**
53
+ * Get all custom components of a specific type
54
+ */
55
+ findByType(projectPath: string, type: CustomComponentMetadata['type']): Promise<CustomComponentMetadata[]>;
56
+ /**
57
+ * Get registry stats
58
+ */
59
+ getStats(projectPath: string): Promise<ComponentRegistryData['stats'] | null>;
60
+ }
61
+ //# sourceMappingURL=ComponentRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentRegistry.d.ts","sourceRoot":"","sources":["../../src/services/ComponentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;IAC5C,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,GAAG,EACR,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;IAoBhB;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC;IAchB;;OAEG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvE;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACpC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAUrC;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CASpF"}
@@ -0,0 +1,128 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ComponentRegistry = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs-extra"));
39
+ /**
40
+ * ComponentRegistry - Track all components in the project
41
+ *
42
+ * Maintains .mycontext/components_registry.json with metadata about:
43
+ * - Installed shadCN components
44
+ * - Custom generated components
45
+ * - Component dependencies and usage
46
+ *
47
+ * Enables:
48
+ * - LEGO assembly (component reuse)
49
+ * - Token usage tracking
50
+ * - Avoiding duplicate installations
51
+ */
52
+ class ComponentRegistry {
53
+ /**
54
+ * Initialize component registry for a new project
55
+ */
56
+ async initialize(projectPath, asl, shadcnComponents) {
57
+ const registry = {
58
+ version: '1.0',
59
+ shadcnComponents: shadcnComponents.map(name => ({
60
+ name,
61
+ version: 'latest',
62
+ installedAt: new Date().toISOString()
63
+ })),
64
+ customComponents: [],
65
+ stats: {
66
+ totalShadCN: shadcnComponents.length,
67
+ totalCustom: 0
68
+ }
69
+ };
70
+ const registryPath = path.join(projectPath, '.mycontext', 'components_registry.json');
71
+ await fs.ensureDir(path.dirname(registryPath));
72
+ await fs.writeJSON(registryPath, registry, { spaces: 2 });
73
+ }
74
+ /**
75
+ * Register a custom component
76
+ */
77
+ async registerComponent(projectPath, component) {
78
+ const registryPath = path.join(projectPath, '.mycontext', 'components_registry.json');
79
+ // Load existing registry
80
+ const registry = await fs.readJSON(registryPath);
81
+ // Add component
82
+ registry.customComponents.push(component);
83
+ registry.stats.totalCustom = registry.customComponents.length;
84
+ // Save
85
+ await fs.writeJSON(registryPath, registry, { spaces: 2 });
86
+ }
87
+ /**
88
+ * Check if a shadCN component is installed
89
+ */
90
+ async has(projectPath, componentName) {
91
+ try {
92
+ const registryPath = path.join(projectPath, '.mycontext', 'components_registry.json');
93
+ const registry = await fs.readJSON(registryPath);
94
+ return registry.shadcnComponents.some(c => c.name === componentName);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Get all custom components of a specific type
102
+ */
103
+ async findByType(projectPath, type) {
104
+ try {
105
+ const registryPath = path.join(projectPath, '.mycontext', 'components_registry.json');
106
+ const registry = await fs.readJSON(registryPath);
107
+ return registry.customComponents.filter(c => c.type === type);
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ }
113
+ /**
114
+ * Get registry stats
115
+ */
116
+ async getStats(projectPath) {
117
+ try {
118
+ const registryPath = path.join(projectPath, '.mycontext', 'components_registry.json');
119
+ const registry = await fs.readJSON(registryPath);
120
+ return registry.stats;
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ }
127
+ exports.ComponentRegistry = ComponentRegistry;
128
+ //# sourceMappingURL=ComponentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentRegistry.js","sourceRoot":"","sources":["../../src/services/ComponentRegistry.ts"],"names":[],"mappings":"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"}
@@ -194,7 +194,7 @@ Consider:
194
194
  4. What patterns exist in similar applications?
195
195
 
196
196
  ## Guidelines
197
- 1. **Entities**: Must have 'name' and 'fields'. Fields must have 'name' and 'type' (string, number, boolean, date, json, ref).
197
+ 1. **Entities**: Must be a Record/Object where keys are entity names. Each entity must have 'name' and 'fields'. Fields must have 'name' and 'type' (string, number, boolean, date, json, ref).
198
198
  2. **Auth**: If needed, provider must be 'email', 'oauth-github', 'oauth-google', or 'magic-link'.
199
199
  3. **Permissions**: Each permission must have 'role', 'resource' (entity name or '*'), and 'actions' (array of: 'create', 'read', 'update', 'delete', 'manage'). **DO NOT USE 'can'**.
200
200
  4. **Pages**: Must have 'path' (e.g., '/dashboard'), 'name' (component name), 'type' ('page' or 'layout').
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectScanner.d.ts","sourceRoot":"","sources":["../../src/services/ProjectScanner.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAC;IAC3E,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,qBAAqB,EAAE,GAAG,CAAC;CAC5B;AAqCD,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,EAAE,CAAuB;gBAErB,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAqCtC;;OAEG;YACW,aAAa;IA8D3B;;OAEG;YACW,eAAe;IAe7B;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAE,GAAG,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA6E7B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAYhD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IA8B9C;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;CAMxB"}
1
+ {"version":3,"file":"ProjectScanner.d.ts","sourceRoot":"","sources":["../../src/services/ProjectScanner.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAC;IAC3E,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,qBAAqB,EAAE,GAAG,CAAC;CAC5B;AAsCD,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,EAAE,CAAuB;gBAErB,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAqCtC;;OAEG;YACW,aAAa;IAoF3B;;OAEG;YACW,eAAe;IAe7B;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAE,GAAG,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA6E7B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAYhD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IA8B9C;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;CAMxB"}