mycontext-cli 4.1.5 → 4.2.1

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 (116) hide show
  1. package/README.md +108 -126
  2. package/dist/README.md +108 -126
  3. package/dist/agents/implementations/ArchitectAgent.d.ts.map +1 -1
  4. package/dist/agents/implementations/ArchitectAgent.js +9 -1
  5. package/dist/agents/implementations/ArchitectAgent.js.map +1 -1
  6. package/dist/agents/implementations/BackendDevAgent.d.ts +1 -1
  7. package/dist/agents/implementations/BackendDevAgent.d.ts.map +1 -1
  8. package/dist/agents/implementations/BackendDevAgent.js +29 -16
  9. package/dist/agents/implementations/BackendDevAgent.js.map +1 -1
  10. package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
  11. package/dist/agents/implementations/CodeGenSubAgent.js +17 -9
  12. package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
  13. package/dist/agents/implementations/EnhancementAgent.js.map +1 -1
  14. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +1 -1
  15. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -1
  16. package/dist/agents/implementations/FeatureAssemblyAgent.js +10 -9
  17. package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -1
  18. package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
  19. package/dist/agents/implementations/PromptConstructorAgent.js +26 -42
  20. package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
  21. package/dist/cli.js +72 -0
  22. package/dist/cli.js.map +1 -1
  23. package/dist/clients/ProviderChain.d.ts +6 -65
  24. package/dist/clients/ProviderChain.d.ts.map +1 -1
  25. package/dist/clients/ProviderChain.js +34 -194
  26. package/dist/clients/ProviderChain.js.map +1 -1
  27. package/dist/commands/agent.js +1 -1
  28. package/dist/commands/agent.js.map +1 -1
  29. package/dist/commands/assemble-features.js +1 -1
  30. package/dist/commands/assemble-features.js.map +1 -1
  31. package/dist/commands/design-analyze.js +2 -2
  32. package/dist/commands/generate-context-files.d.ts.map +1 -1
  33. package/dist/commands/generate-context-files.js +13 -0
  34. package/dist/commands/generate-context-files.js.map +1 -1
  35. package/dist/commands/generate.d.ts +1 -0
  36. package/dist/commands/generate.d.ts.map +1 -1
  37. package/dist/commands/generate.js +96 -23
  38. package/dist/commands/generate.js.map +1 -1
  39. package/dist/commands/init.d.ts.map +1 -1
  40. package/dist/commands/init.js +36 -2
  41. package/dist/commands/init.js.map +1 -1
  42. package/dist/commands/sync-readme.js +1 -1
  43. package/dist/commands/sync-readme.js.map +1 -1
  44. package/dist/core/agents/DependencySentinel.d.ts +15 -0
  45. package/dist/core/agents/DependencySentinel.d.ts.map +1 -0
  46. package/dist/core/agents/DependencySentinel.js +141 -0
  47. package/dist/core/agents/DependencySentinel.js.map +1 -0
  48. package/dist/core/ai/AICore.d.ts +48 -0
  49. package/dist/core/ai/AICore.d.ts.map +1 -0
  50. package/dist/core/ai/AICore.js +228 -0
  51. package/dist/core/ai/AICore.js.map +1 -0
  52. package/dist/core/brain/BrainClient.d.ts +18 -0
  53. package/dist/core/brain/BrainClient.d.ts.map +1 -0
  54. package/dist/core/brain/BrainClient.js +170 -0
  55. package/dist/core/brain/BrainClient.js.map +1 -0
  56. package/dist/package.json +5 -5
  57. package/dist/services/ContextSyncer.d.ts +40 -0
  58. package/dist/services/ContextSyncer.d.ts.map +1 -0
  59. package/dist/services/ContextSyncer.js +219 -0
  60. package/dist/services/ContextSyncer.js.map +1 -0
  61. package/dist/services/ProjectScanner.d.ts +74 -0
  62. package/dist/services/ProjectScanner.d.ts.map +1 -0
  63. package/dist/services/ProjectScanner.js +343 -0
  64. package/dist/services/ProjectScanner.js.map +1 -0
  65. package/dist/services/ScaffoldAgent.d.ts +35 -0
  66. package/dist/services/ScaffoldAgent.d.ts.map +1 -0
  67. package/dist/services/ScaffoldAgent.js +228 -0
  68. package/dist/services/ScaffoldAgent.js.map +1 -0
  69. package/dist/tui/PlanningMode.d.ts +42 -0
  70. package/dist/tui/PlanningMode.d.ts.map +1 -0
  71. package/dist/tui/PlanningMode.js +401 -0
  72. package/dist/tui/PlanningMode.js.map +1 -0
  73. package/dist/tui/TUIClient.d.ts +20 -0
  74. package/dist/tui/TUIClient.d.ts.map +1 -0
  75. package/dist/tui/TUIClient.js +50 -0
  76. package/dist/tui/TUIClient.js.map +1 -0
  77. package/dist/types/living-context.d.ts +76 -0
  78. package/dist/types/living-context.d.ts.map +1 -0
  79. package/dist/types/living-context.js +3 -0
  80. package/dist/types/living-context.js.map +1 -0
  81. package/dist/types/mega-context.d.ts +118 -0
  82. package/dist/types/mega-context.d.ts.map +1 -0
  83. package/dist/types/mega-context.js +3 -0
  84. package/dist/types/mega-context.js.map +1 -0
  85. package/dist/types/tui.d.ts +29 -0
  86. package/dist/types/tui.d.ts.map +1 -0
  87. package/dist/types/tui.js +8 -0
  88. package/dist/types/tui.js.map +1 -0
  89. package/dist/types/unified-context.d.ts +102 -0
  90. package/dist/types/unified-context.d.ts.map +1 -0
  91. package/dist/types/unified-context.js +50 -0
  92. package/dist/types/unified-context.js.map +1 -0
  93. package/dist/utils/FileGenerator.d.ts +14 -0
  94. package/dist/utils/FileGenerator.d.ts.map +1 -0
  95. package/dist/utils/FileGenerator.js +154 -0
  96. package/dist/utils/FileGenerator.js.map +1 -0
  97. package/dist/utils/NextJSProjectGenerator.d.ts.map +1 -1
  98. package/dist/utils/NextJSProjectGenerator.js +59 -0
  99. package/dist/utils/NextJSProjectGenerator.js.map +1 -1
  100. package/dist/utils/contextRenderer.d.ts +12 -0
  101. package/dist/utils/contextRenderer.d.ts.map +1 -0
  102. package/dist/utils/contextRenderer.js +105 -0
  103. package/dist/utils/contextRenderer.js.map +1 -0
  104. package/dist/utils/deepMerge.d.ts +14 -0
  105. package/dist/utils/deepMerge.d.ts.map +1 -0
  106. package/dist/utils/deepMerge.js +87 -0
  107. package/dist/utils/deepMerge.js.map +1 -0
  108. package/dist/utils/fileSystem.d.ts +4 -0
  109. package/dist/utils/fileSystem.d.ts.map +1 -1
  110. package/dist/utils/fileSystem.js +47 -0
  111. package/dist/utils/fileSystem.js.map +1 -1
  112. package/dist/utils/hybridAIClient.d.ts +12 -117
  113. package/dist/utils/hybridAIClient.d.ts.map +1 -1
  114. package/dist/utils/hybridAIClient.js +31 -750
  115. package/dist/utils/hybridAIClient.js.map +1 -1
  116. package/package.json +25 -23
@@ -0,0 +1,118 @@
1
+ import { ProjectConfig } from "./index";
2
+ /**
3
+ * MEGA CONTEXT (The Source of Truth)
4
+ *
5
+ * This interface represents the 100% complete state required to
6
+ * deterministically scaffold a Next.js + InstantDB project.
7
+ *
8
+ * "Deterministic" means:
9
+ * - No AI guessing during scaffold.
10
+ * - All routes, components, and data points are known.
11
+ * - If a field is missing, the TUI must prompt for it BEFORE generation.
12
+ */
13
+ export interface MegaContext {
14
+ project: ProjectConfig & {
15
+ framework: "nextjs";
16
+ backend: "instantdb";
17
+ styling: "tailwind-shadcn";
18
+ };
19
+ topLevelDesign: {
20
+ theme: "light" | "dark" | "system";
21
+ colors: {
22
+ primary: string;
23
+ secondary: string;
24
+ accent: string;
25
+ background: string;
26
+ foreground: string;
27
+ };
28
+ fonts: {
29
+ heading: string;
30
+ body: string;
31
+ };
32
+ radius: number;
33
+ };
34
+ auth: {
35
+ provider: "instantdb" | "clerk" | "kinde" | "next-auth";
36
+ userModel: {
37
+ fields: Record<string, string>;
38
+ };
39
+ roles: RoleDefinition[];
40
+ permissions: PermissionRule[];
41
+ };
42
+ database: {
43
+ entities: Record<string, EntityDefinition>;
44
+ relationships: RelationshipDefinition[];
45
+ };
46
+ routing: {
47
+ routes: Record<string, RouteNode>;
48
+ };
49
+ globalState: {
50
+ stores: StoreDefinition[];
51
+ };
52
+ }
53
+ export interface RoleDefinition {
54
+ name: string;
55
+ description: string;
56
+ extends?: string;
57
+ }
58
+ export interface PermissionRule {
59
+ role: string;
60
+ resource: string;
61
+ action: "create" | "read" | "update" | "delete" | "manage";
62
+ condition?: string;
63
+ }
64
+ export interface EntityDefinition {
65
+ name: string;
66
+ fields: Record<string, {
67
+ type: "string" | "number" | "boolean" | "json" | "date" | "ref";
68
+ required: boolean;
69
+ unique?: boolean;
70
+ indexed?: boolean;
71
+ }>;
72
+ }
73
+ export interface RelationshipDefinition {
74
+ from: string;
75
+ to: string;
76
+ type: "one-to-one" | "one-to-many" | "many-to-many";
77
+ inverseName: string;
78
+ }
79
+ export interface RouteNode {
80
+ path: string;
81
+ type: "page" | "layout" | "group";
82
+ isProtected: boolean;
83
+ allowedRoles?: string[];
84
+ ui?: {
85
+ title: string;
86
+ description: string;
87
+ layout?: "default" | "dashboard" | "auth";
88
+ components: ComponentUsage[];
89
+ };
90
+ data?: {
91
+ queries: DataQuery[];
92
+ mutations: DataMutation[];
93
+ };
94
+ }
95
+ export interface ComponentUsage {
96
+ name: string;
97
+ type: "shadcn" | "custom";
98
+ props?: Record<string, any>;
99
+ children?: ComponentUsage[];
100
+ }
101
+ export interface DataQuery {
102
+ name: string;
103
+ entity: string;
104
+ source: "server-component" | "client-hook";
105
+ filter?: Record<string, any>;
106
+ }
107
+ export interface DataMutation {
108
+ name: string;
109
+ description: string;
110
+ args: Record<string, string>;
111
+ inputEntity?: string;
112
+ }
113
+ export interface StoreDefinition {
114
+ name: string;
115
+ state: Record<string, string>;
116
+ actions: string[];
117
+ }
118
+ //# sourceMappingURL=mega-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mega-context.d.ts","sourceRoot":"","sources":["../../src/types/mega-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=mega-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mega-context.js","sourceRoot":"","sources":["../../src/types/mega-context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * TUI MODES & STATE
3
+ *
4
+ * Defines the state machine for the "Claude Code"-like TUI.
5
+ */
6
+ export type TUIMode = "PLANNING" | "AGENT" | "AUTO_EDIT";
7
+ export interface TUIState {
8
+ mode: TUIMode;
9
+ input: string;
10
+ history: TUIHistoryItem[];
11
+ contextStatus: {
12
+ megaContextComplete: boolean;
13
+ missingFields: string[];
14
+ };
15
+ activeAgent?: string;
16
+ isProcessing: boolean;
17
+ }
18
+ export interface TUIHistoryItem {
19
+ role: "user" | "assistant" | "system";
20
+ content: string;
21
+ timestamp: number;
22
+ metadata?: {
23
+ mode: TUIMode;
24
+ command?: string;
25
+ output?: string;
26
+ };
27
+ }
28
+ export type TUISlashCommand = "/plan" | "/act" | "/edit" | "/review" | "/generate" | "/clear";
29
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/types/tui.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,EAAE;QACb,mBAAmB,EAAE,OAAO,CAAC;QAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAGD,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,MAAM,GACN,OAAO,GACP,SAAS,GACT,WAAW,GACX,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * TUI MODES & STATE
4
+ *
5
+ * Defines the state machine for the "Claude Code"-like TUI.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/types/tui.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Unified Context — Single Source of Truth
3
+ *
4
+ * Merges the best of MegaContext (typed, deterministic scaffolding)
5
+ * with Brain (narrative, registry, scan memory, checkpoints).
6
+ *
7
+ * context.json can contain ANY combination of these sections.
8
+ * PlanningMode and ContextSyncer work with whatever sections are present.
9
+ */
10
+ import { ProjectConfig } from "./index";
11
+ import { MegaContext } from "./mega-context";
12
+ export interface BrainSection {
13
+ version?: string;
14
+ narrative?: string;
15
+ status?: string;
16
+ checkpoints?: Checkpoint[];
17
+ updates?: any[];
18
+ tasks?: any[];
19
+ artifacts?: Record<string, any>;
20
+ memory?: Record<string, any>;
21
+ registry?: ComponentRegistry;
22
+ }
23
+ export interface Checkpoint {
24
+ id: string;
25
+ label: string;
26
+ status: "complete" | "in-progress" | "planned";
27
+ }
28
+ export interface RegisteredComponent {
29
+ name: string;
30
+ description: string;
31
+ path: string;
32
+ }
33
+ export interface ComponentRegistry {
34
+ components: RegisteredComponent[];
35
+ }
36
+ export interface ArchitectureSection {
37
+ type?: string;
38
+ packages?: Record<string, PackageInfo>;
39
+ }
40
+ export interface PackageInfo {
41
+ name?: string;
42
+ version?: string;
43
+ description?: string;
44
+ entrypoint?: string;
45
+ techStack?: string[];
46
+ modules?: Record<string, any>;
47
+ exports?: string[];
48
+ }
49
+ export interface CapabilitiesSection {
50
+ [key: string]: string;
51
+ }
52
+ /**
53
+ * The context.json file can contain any mix of these sections.
54
+ * MegaContext fields are used for fresh scaffold projects.
55
+ * Brain fields are used for existing/scanned projects.
56
+ * Both can coexist.
57
+ */
58
+ export interface UnifiedContext {
59
+ brain?: BrainSection;
60
+ architecture?: ArchitectureSection;
61
+ capabilities?: CapabilitiesSection;
62
+ project?: ProjectConfig & {
63
+ framework?: string;
64
+ backend?: string;
65
+ styling?: string;
66
+ type?: string;
67
+ techStack?: string[];
68
+ targetStack?: string[];
69
+ };
70
+ topLevelDesign?: MegaContext["topLevelDesign"];
71
+ auth?: MegaContext["auth"];
72
+ database?: MegaContext["database"];
73
+ routing?: MegaContext["routing"];
74
+ globalState?: MegaContext["globalState"];
75
+ experiments?: string[];
76
+ }
77
+ /**
78
+ * Helper: Extract human-readable summary from any context shape
79
+ */
80
+ export declare function getContextSummary(ctx: UnifiedContext): {
81
+ name: string;
82
+ description: string;
83
+ entities: string[];
84
+ routes: string[];
85
+ roles: string[];
86
+ components: RegisteredComponent[];
87
+ checkpoints: Checkpoint[];
88
+ capabilities: string[];
89
+ };
90
+ /**
91
+ * Helper: Check if context has MegaContext fields (scaffold-ready)
92
+ */
93
+ export declare function isMegaContext(ctx: UnifiedContext): ctx is UnifiedContext & {
94
+ database: any;
95
+ routing: any;
96
+ auth: any;
97
+ };
98
+ /**
99
+ * Helper: Check if context has Brain fields (scanned project)
100
+ */
101
+ export declare function isBrainContext(ctx: UnifiedContext): boolean;
102
+ //# sourceMappingURL=unified-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-context.d.ts","sourceRoot":"","sources":["../../src/types/unified-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Context — Single Source of Truth
4
+ *
5
+ * Merges the best of MegaContext (typed, deterministic scaffolding)
6
+ * with Brain (narrative, registry, scan memory, checkpoints).
7
+ *
8
+ * context.json can contain ANY combination of these sections.
9
+ * PlanningMode and ContextSyncer work with whatever sections are present.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getContextSummary = getContextSummary;
13
+ exports.isMegaContext = isMegaContext;
14
+ exports.isBrainContext = isBrainContext;
15
+ /**
16
+ * Helper: Extract human-readable summary from any context shape
17
+ */
18
+ function getContextSummary(ctx) {
19
+ return {
20
+ name: ctx.project?.name || ctx.brain?.narrative?.split(".")[0] || "Unknown",
21
+ description: ctx.project?.description || ctx.brain?.narrative || "",
22
+ entities: ctx.database?.entities
23
+ ? Object.keys(ctx.database.entities)
24
+ : [],
25
+ routes: ctx.routing?.routes
26
+ ? Object.keys(ctx.routing.routes)
27
+ : [],
28
+ roles: ctx.auth?.roles
29
+ ? ctx.auth.roles.map((r) => r.name)
30
+ : [],
31
+ components: ctx.brain?.registry?.components || [],
32
+ checkpoints: ctx.brain?.checkpoints || [],
33
+ capabilities: ctx.capabilities
34
+ ? Object.keys(ctx.capabilities)
35
+ : [],
36
+ };
37
+ }
38
+ /**
39
+ * Helper: Check if context has MegaContext fields (scaffold-ready)
40
+ */
41
+ function isMegaContext(ctx) {
42
+ return !!ctx.database?.entities && !!ctx.routing?.routes && !!ctx.auth?.roles;
43
+ }
44
+ /**
45
+ * Helper: Check if context has Brain fields (scanned project)
46
+ */
47
+ function isBrainContext(ctx) {
48
+ return !!ctx.brain?.narrative || !!ctx.brain?.registry || !!ctx.architecture;
49
+ }
50
+ //# sourceMappingURL=unified-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-context.js","sourceRoot":"","sources":["../../src/types/unified-context.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAmGH,8CA4BC;AAKD,sCAEC;AAKD,wCAEC;AA7CD;;GAEG;AACH,SAAgB,iBAAiB,CAAC,GAAmB;IAUnD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;QAC3E,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE;QACnE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ;YAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,CAAC,CAAC,EAAE;QACN,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM;YACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,EAAE;QACN,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK;YACpB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,EAAE;QACN,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE;QACjD,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;QACzC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,GAAmB;IAC/C,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,GAAmB;IAChD,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { AICore } from '../core/ai/AICore';
2
+ export declare class FileGenerator {
3
+ private aiCore;
4
+ private projectRoot;
5
+ private brainClient;
6
+ constructor(aiCore: AICore, projectRoot?: string);
7
+ /**
8
+ * Walk up directory tree to find the workspace root (contains .mycontext/)
9
+ */
10
+ private findWorkspaceRoot;
11
+ generateFile(relativePath: string, prompt: string, context?: string): Promise<string>;
12
+ private needsUseClient;
13
+ }
14
+ //# sourceMappingURL=FileGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/FileGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB;IAO/D;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAanB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoF3F,OAAO,CAAC,cAAc;CAiBvB"}
@@ -0,0 +1,154 @@
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.FileGenerator = void 0;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const BrainClient_1 = require("../core/brain/BrainClient");
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ class FileGenerator {
45
+ constructor(aiCore, projectRoot = process.cwd()) {
46
+ this.aiCore = aiCore;
47
+ this.projectRoot = projectRoot;
48
+ // Walk up to find workspace root (directory containing .mycontext/)
49
+ this.brainClient = BrainClient_1.BrainClient.getInstance(this.findWorkspaceRoot(projectRoot));
50
+ }
51
+ /**
52
+ * Walk up directory tree to find the workspace root (contains .mycontext/)
53
+ */
54
+ findWorkspaceRoot(startDir) {
55
+ let dir = startDir;
56
+ for (let i = 0; i < 10; i++) { // max 10 levels up
57
+ if (fs.existsSync(path.join(dir, '.mycontext'))) {
58
+ return dir;
59
+ }
60
+ const parent = path.dirname(dir);
61
+ if (parent === dir)
62
+ break; // reached filesystem root
63
+ dir = parent;
64
+ }
65
+ return startDir; // fallback to project root
66
+ }
67
+ async generateFile(relativePath, prompt, context) {
68
+ const filePath = path.join(this.projectRoot, relativePath);
69
+ const exists = await fs.pathExists(filePath);
70
+ let fullPrompt = prompt;
71
+ // Phase 11: Lego Assembly - Search Registry
72
+ const registry = await this.brainClient.getRegistry();
73
+ const relevantPieces = registry.components.filter(c => {
74
+ const nameMatch = prompt.toLowerCase().includes(c.name.toLowerCase());
75
+ const descMatch = c.description.toLowerCase().split(' ').some(word => word.length > 3 && prompt.toLowerCase().includes(word.toLowerCase()));
76
+ return nameMatch || descMatch;
77
+ });
78
+ if (relevantPieces.length > 0) {
79
+ console.log(chalk_1.default.cyan(`🧩 Lego Pieces Found: ${relevantPieces.map(p => p.name).join(', ')}`));
80
+ let piecesContext = "\n\nRELEVANT LEGO PIECES (Reuse patterns/styles from these):\n";
81
+ for (const piece of relevantPieces) {
82
+ try {
83
+ // Find full path to piece (registry stores relative or absolute, we need to be careful)
84
+ // Assuming registry.path is relative to workspace root or project root.
85
+ // For now, let's try to read it.
86
+ const pieceContent = await fs.readFile(path.join(this.projectRoot, piece.path), 'utf-8');
87
+ piecesContext += `File: ${piece.path}\nContent:\n\`\`\`tsx\n${pieceContent}\n\`\`\`\n`;
88
+ }
89
+ catch (e) {
90
+ // Ignore if file missing
91
+ }
92
+ }
93
+ fullPrompt += piecesContext;
94
+ }
95
+ if (exists) {
96
+ const existingContent = await fs.readFile(filePath, 'utf-8');
97
+ console.log(chalk_1.default.yellow(`📝 Updating existing file: ${relativePath}`));
98
+ fullPrompt = `
99
+ TASK: Update the following file based on the instructions.
100
+
101
+ EXISTING CONTENT:
102
+ \`\`\`tsx
103
+ ${existingContent}
104
+ \`\`\`
105
+
106
+ INSTRUCTIONS:
107
+ ${prompt}
108
+
109
+ ${relevantPieces.length > 0 ? 'REUSE PATTERNS FROM LEGO PIECES ABOVE.' : ''}
110
+
111
+ IMPORTANT: Return the FULL updated file content. Do not return a diff.
112
+ `;
113
+ }
114
+ else {
115
+ console.log(chalk_1.default.green(`✨ Creating new file: ${relativePath}`));
116
+ }
117
+ if (context) {
118
+ fullPrompt += `\n\nADDITIONAL CONTEXT:\n${context}`;
119
+ }
120
+ fullPrompt += `\n\nReturn ONLY the raw code. No markdown fences.`;
121
+ let code = await this.aiCore.generateText(fullPrompt);
122
+ // Clean up
123
+ code = code.replace(/^```[a-z]*\n?/gmi, "").replace(/^```\n?/gmi, "").replace(/\n?```$/gmi, "").trim();
124
+ // Client Component Guard
125
+ if (this.needsUseClient(code) && !code.includes('"use client"') && !code.includes("'use client'")) {
126
+ console.log(chalk_1.default.magenta(`🛡️ Auto-injecting "use client" directive`));
127
+ code = `"use client";\n\n` + code;
128
+ }
129
+ await fs.ensureDir(path.dirname(filePath));
130
+ await fs.writeFile(filePath, code);
131
+ // Phase 11: Auto-Register in Living DB
132
+ const fileName = path.basename(relativePath);
133
+ await this.brainClient.registerComponent(fileName, `Generated component for: ${prompt.substring(0, 100)}...`, relativePath);
134
+ return code;
135
+ }
136
+ needsUseClient(code) {
137
+ const hooks = [
138
+ 'useState', 'useEffect', 'useContext', 'useReducer', 'useCallback',
139
+ 'useMemo', 'useRef', 'useLayoutEffect', 'useImperativeHandle',
140
+ 'useDebugValue', 'useDeferredValue', 'useTransition', 'useId',
141
+ 'useSyncExternalStore', 'useInsertionEffect',
142
+ 'createContext'
143
+ ];
144
+ const routerHooks = [
145
+ 'useRouter', 'usePathname', 'useSearchParams',
146
+ 'useSelectedLayoutSegment', 'useSelectedLayoutSegments', 'useParams'
147
+ ];
148
+ // Regex to match usage like: useTheme(), useState(null), etc. to avoid matching string literals
149
+ const hookRegex = new RegExp(`\\b(${[...hooks, ...routerHooks].join('|')})\\b`);
150
+ return hookRegex.test(code);
151
+ }
152
+ }
153
+ exports.FileGenerator = FileGenerator;
154
+ //# sourceMappingURL=FileGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileGenerator.js","sourceRoot":"","sources":["../../src/utils/FileGenerator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NextJSProjectGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/NextJSProjectGenerator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,EAAE,oBAAoB;IAKzC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA6DjD;;OAEG;YACW,oBAAoB;IAwClC;;OAEG;YACW,mBAAmB;IAsDjC;;OAEG;YACW,oBAAoB;IAkClC;;OAEG;YACW,wBAAwB;IA6CtC;;OAEG;YACW,sBAAsB;IAyGpC;;OAEG;YACW,0BAA0B;IA0JxC;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,0BAA0B;IAqFxC;;OAEG;YACW,uBAAuB;IA0ErC;;OAEG;YACW,oBAAoB;IA2ClC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0GjC"}
1
+ {"version":3,"file":"NextJSProjectGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/NextJSProjectGenerator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,EAAE,oBAAoB;IAKzC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA6DjD;;OAEG;YACW,oBAAoB;IAwClC;;OAEG;YACW,mBAAmB;IA2DjC;;OAEG;YACW,oBAAoB;IAkClC;;OAEG;YACW,wBAAwB;IA6CtC;;OAEG;YACW,sBAAsB;IAyGpC;;OAEG;YACW,0BAA0B;IAsNxC;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,0BAA0B;IAqFxC;;OAEG;YACW,uBAAuB;IA0ErC;;OAEG;YACW,oBAAoB;IA2ClC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0GjC"}
@@ -147,6 +147,11 @@ class NextJSProjectGenerator {
147
147
  react: "^18.0.0",
148
148
  "react-dom": "^18.0.0",
149
149
  next: "^14.0.0",
150
+ "lucide-react": "^0.300.0",
151
+ clsx: "^2.0.0",
152
+ "tailwind-merge": "^2.0.0",
153
+ "class-variance-authority": "^0.7.0",
154
+ "@radix-ui/react-slot": "^1.0.0",
150
155
  },
151
156
  devDependencies: {
152
157
  typescript: "^5.0.0",
@@ -484,6 +489,60 @@ export default function HomePage() {
484
489
  content: globalCssContent,
485
490
  type: "file",
486
491
  });
492
+ // Generate error page
493
+ const errorPageContent = "'use client';" +
494
+ "\\n\\nimport { useEffect } from 'react';" +
495
+ "\\nimport { Button } from \"@/components/ui/button\";" +
496
+ "\\n\\nexport default function Error({" +
497
+ "\\n error," +
498
+ "\\n reset," +
499
+ "\\n}: {" +
500
+ "\\n error: Error & { digest?: string };" +
501
+ "\\n reset: () => void;" +
502
+ "\\n}) {" +
503
+ "\\n useEffect(() => {" +
504
+ "\\n console.error(error);" +
505
+ "\\n }, [error]);" +
506
+ "\\n\\n return (" +
507
+ "\\n <div className=\"flex h-screen w-full flex-col items-center justify-center gap-4 text-center\">" +
508
+ "\\n <h2 className=\"text-2xl font-bold\">Something went wrong!</h2>" +
509
+ "\\n <p className=\"text-muted-foreground\">{error.message || \"An unexpected error occurred.\"}</p>" +
510
+ "\\n <Button onClick={() => reset()}>Try again</Button>" +
511
+ "\\n </div>" +
512
+ "\\n );" +
513
+ "\\n}\\n";
514
+ const errorPagePath = path.join(this.projectRoot, "app", "error.tsx");
515
+ await fs.writeFile(errorPagePath, errorPageContent);
516
+ generatedFiles.push({ path: errorPagePath, content: errorPageContent, type: "file" });
517
+ // Generate not-found page
518
+ const notFoundPageContent = "import Link from 'next/link';" +
519
+ "\\nimport { Button } from \"@/components/ui/button\";" +
520
+ "\\n\\nexport default function NotFound() {" +
521
+ "\\n return (" +
522
+ "\\n <div className=\"flex h-screen w-full flex-col items-center justify-center gap-4 text-center\">" +
523
+ "\\n <h2 className=\"text-2xl font-bold\">404 - Page Not Found</h2>" +
524
+ "\\n <p className=\"text-muted-foreground\">Could not find requested resource</p>" +
525
+ "\\n <Button asChild>" +
526
+ "\\n <Link href=\"/\">Return Home</Link>" +
527
+ "\\n </Button>" +
528
+ "\\n </div>" +
529
+ "\\n );" +
530
+ "\\n}\\n";
531
+ const notFoundPagePath = path.join(this.projectRoot, "app", "not-found.tsx");
532
+ await fs.writeFile(notFoundPagePath, notFoundPageContent);
533
+ generatedFiles.push({ path: notFoundPagePath, content: notFoundPageContent, type: "file" });
534
+ // Generate loading page
535
+ const loadingPageContent = "import { Loader2 } from \"lucide-react\";" +
536
+ "\\n\\nexport default function Loading() {" +
537
+ "\\n return (" +
538
+ "\\n <div className=\"flex h-screen w-full items-center justify-center\">" +
539
+ "\\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />" +
540
+ "\\n </div>" +
541
+ "\\n );" +
542
+ "\\n}\\n";
543
+ const loadingPagePath = path.join(this.projectRoot, "app", "loading.tsx");
544
+ await fs.writeFile(loadingPagePath, loadingPageContent);
545
+ generatedFiles.push({ path: loadingPagePath, content: loadingPageContent, type: "file" });
487
546
  console.log(chalk_1.default.green("✅ App Router structure generated"));
488
547
  }
489
548
  /**