mycontext-cli 4.2.12 → 4.2.13

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 (42) hide show
  1. package/README.md +46 -605
  2. package/dist/README.md +46 -605
  3. package/dist/cli.js +8 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/build-app.d.ts +1 -0
  6. package/dist/commands/build-app.d.ts.map +1 -1
  7. package/dist/commands/build-app.js +2 -1
  8. package/dist/commands/build-app.js.map +1 -1
  9. package/dist/commands/build-feature.d.ts +5 -0
  10. package/dist/commands/build-feature.d.ts.map +1 -0
  11. package/dist/commands/build-feature.js +39 -0
  12. package/dist/commands/build-feature.js.map +1 -0
  13. package/dist/commands/init.d.ts +0 -3
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +24 -7
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/plan.d.ts +5 -0
  18. package/dist/commands/plan.d.ts.map +1 -0
  19. package/dist/commands/plan.js +32 -0
  20. package/dist/commands/plan.js.map +1 -0
  21. package/dist/commands/test.d.ts +4 -0
  22. package/dist/commands/test.d.ts.map +1 -1
  23. package/dist/commands/test.js +90 -0
  24. package/dist/commands/test.js.map +1 -1
  25. package/dist/commands/vision-test.d.ts +6 -4
  26. package/dist/commands/vision-test.d.ts.map +1 -1
  27. package/dist/commands/vision-test.js +81 -22
  28. package/dist/commands/vision-test.js.map +1 -1
  29. package/dist/generator/scaffold.d.ts +11 -0
  30. package/dist/generator/scaffold.d.ts.map +1 -0
  31. package/dist/generator/scaffold.js +107 -0
  32. package/dist/generator/scaffold.js.map +1 -0
  33. package/dist/generator/templates/nextjs.d.ts +11 -0
  34. package/dist/generator/templates/nextjs.d.ts.map +1 -0
  35. package/dist/generator/templates/nextjs.js +499 -0
  36. package/dist/generator/templates/nextjs.js.map +1 -0
  37. package/dist/package.json +1 -1
  38. package/dist/planner/index.d.ts +11 -0
  39. package/dist/planner/index.d.ts.map +1 -0
  40. package/dist/planner/index.js +142 -0
  41. package/dist/planner/index.js.map +1 -0
  42. package/package.json +1 -1
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Planner = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ class Planner {
12
+ constructor() {
13
+ this.fsrFilePath = path_1.default.join(process.cwd(), '.mycontext', 'features');
14
+ fs_extra_1.default.ensureDirSync(this.fsrFilePath);
15
+ }
16
+ async run(options) {
17
+ console.log(chalk_1.default.blue('=== MyContext DS-NLC Planner ==='));
18
+ let requestText = options.initialRequest;
19
+ if (!requestText) {
20
+ const { request } = await inquirer_1.default.prompt([
21
+ {
22
+ type: 'input',
23
+ name: 'request',
24
+ message: 'What feature would you like to build?',
25
+ }
26
+ ]);
27
+ requestText = request;
28
+ }
29
+ const safeRequest = requestText || '';
30
+ let featureId = safeRequest.toLowerCase().replace(/[^a-z0-9]/g, '_') || 'new_feature';
31
+ console.log(chalk_1.default.gray(`\nAnalyzing intent for: "${safeRequest}"...`));
32
+ await new Promise(resolve => setTimeout(resolve, 1000)); // Simulate think time
33
+ let fsr = {
34
+ featureId,
35
+ description: safeRequest,
36
+ };
37
+ if (featureId.includes('todo')) {
38
+ const isLocalStorage = safeRequest.toLowerCase().includes('local storage') || safeRequest.toLowerCase().includes('localstorage');
39
+ console.log(chalk_1.default.green(`✓ Detected Todo feature pattern${isLocalStorage ? ' (Local Storage mode)' : ' (Server Actions mode)'}.`));
40
+ fsr = {
41
+ featureId: 'add_todo',
42
+ description: safeRequest,
43
+ entryPoint: { type: 'page', path: '/todos', component: 'TodosPage' },
44
+ components: [
45
+ { name: 'TodosPage', type: 'server', children: ['TodoList'] },
46
+ {
47
+ name: 'TodoList',
48
+ type: 'client',
49
+ children: ['AddTodoButton'],
50
+ state: isLocalStorage ? { type: 'local_storage', model: 'Todo' } : undefined
51
+ },
52
+ { name: 'AddTodoButton', type: 'client', triggers: ['AddTodoDialog'] },
53
+ { name: 'AddTodoDialog', type: 'client', contains: ['AddTodoForm'] },
54
+ {
55
+ name: 'AddTodoForm',
56
+ type: 'client',
57
+ state: isLocalStorage ? { type: 'local_storage_form', target: 'todolist_data' } : undefined
58
+ }
59
+ ],
60
+ serverActions: isLocalStorage ? [] : [
61
+ { name: 'createTodo', input: 'TodoInput', output: 'Todo' },
62
+ { name: 'getTodos', output: 'Todo[]' }
63
+ ],
64
+ models: [
65
+ {
66
+ name: 'Todo',
67
+ fields: { id: 'string', title: 'string', completed: 'boolean' }
68
+ }
69
+ ],
70
+ uiRules: { prefer_dialog_over_page: true }
71
+ };
72
+ }
73
+ else if (featureId.includes('removebg') || featureId.includes('remove_background')) {
74
+ console.log(chalk_1.default.green('✓ Detected Remove.bg feature pattern.'));
75
+ fsr = {
76
+ featureId: 'removebg',
77
+ description: safeRequest,
78
+ entryPoint: { type: 'page', path: '/removebg', component: 'RemoveBGPage' },
79
+ components: [
80
+ { name: 'RemoveBGPage', type: 'server', children: ['RemoveBGTool'] },
81
+ {
82
+ name: 'RemoveBGTool',
83
+ type: 'client',
84
+ children: ['ImageUploader', 'ImagePreview', 'TokenDisplay'],
85
+ state: { type: 'asset_processing', model: 'ImageProcess' }
86
+ },
87
+ { name: 'ImageUploader', type: 'client', state: { type: 'image_uploader' } },
88
+ { name: 'ImagePreview', type: 'client', props: { src: 'string', processing: 'boolean' } },
89
+ { name: 'TokenDisplay', type: 'client', state: { type: 'local_storage', target: 'user_tokens' } }
90
+ ],
91
+ models: [
92
+ {
93
+ name: 'ImageProcess',
94
+ fields: { id: 'string', originalUrl: 'string', resultUrl: 'string', status: 'string' }
95
+ }
96
+ ],
97
+ uiRules: { show_confetti_on_success: true }
98
+ };
99
+ }
100
+ if (options.interactive) {
101
+ fsr = await this.interactiveResolutionLoop(fsr);
102
+ }
103
+ // Save final FSR
104
+ const targetFile = path_1.default.join(this.fsrFilePath, `${fsr.featureId}.fsr.json`);
105
+ await fs_extra_1.default.writeJson(targetFile, fsr, { spaces: 2 });
106
+ console.log(chalk_1.default.green(`\n✓ FSR generated successfully at: ${targetFile}`));
107
+ console.log(chalk_1.default.gray('Run `mycontext build --feature ' + fsr.featureId + '` to scaffold.'));
108
+ }
109
+ async interactiveResolutionLoop(fsr) {
110
+ const updated = { ...fsr };
111
+ if (!updated.entryPoint) {
112
+ console.log(chalk_1.default.yellow('\nMissing Entry Point.'));
113
+ const { path, component } = await inquirer_1.default.prompt([
114
+ { type: 'input', name: 'path', message: 'What is the route/path for this feature (e.g. /todos)?' },
115
+ { type: 'input', name: 'component', message: 'What is the main page component name?' }
116
+ ]);
117
+ updated.entryPoint = { type: 'page', path, component };
118
+ }
119
+ if (!updated.components || updated.components.length === 0) {
120
+ console.log(chalk_1.default.yellow('\nMissing Components.'));
121
+ const { compNames } = await inquirer_1.default.prompt([
122
+ { type: 'input', name: 'compNames', message: 'Enter main component names (comma separated):' }
123
+ ]);
124
+ updated.components = compNames.split(',').map((c) => ({ name: c.trim(), type: 'server' }));
125
+ }
126
+ console.log(chalk_1.default.blue('\nFinal Planned FSR Diff:'));
127
+ console.log(chalk_1.default.gray(JSON.stringify(updated, null, 2)));
128
+ const { approve } = await inquirer_1.default.prompt([{
129
+ type: 'confirm',
130
+ name: 'approve',
131
+ message: 'Approve this Feature Structured Representation?',
132
+ default: true
133
+ }]);
134
+ if (!approve) {
135
+ console.log(chalk_1.default.red('Aborted by user.'));
136
+ process.exit(0);
137
+ }
138
+ return updated;
139
+ }
140
+ }
141
+ exports.Planner = Planner;
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planner/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mycontext-cli",
3
- "version": "4.2.12",
3
+ "version": "4.2.13",
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": {