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,170 @@
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.BrainClient = void 0;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const brain_1 = require("@myycontext/core/src/types/brain");
43
+ const uuid_1 = require("uuid");
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ class BrainClient {
46
+ constructor(workingDirectory) {
47
+ this.brainPath = path.join(workingDirectory, '.mycontext', 'context.json');
48
+ }
49
+ static getInstance(workingDirectory = process.cwd()) {
50
+ if (!BrainClient.instance) {
51
+ BrainClient.instance = new BrainClient(workingDirectory);
52
+ }
53
+ // Update path if working directory changes (edge case handling)
54
+ if (path.dirname(path.dirname(BrainClient.instance.brainPath)) !== workingDirectory) {
55
+ BrainClient.instance.brainPath = path.join(workingDirectory, '.mycontext', 'context.json');
56
+ }
57
+ return BrainClient.instance;
58
+ }
59
+ async getBrain() {
60
+ try {
61
+ if (await fs.pathExists(this.brainPath)) {
62
+ const context = await fs.readJson(this.brainPath);
63
+ if (context.brain)
64
+ return context.brain;
65
+ }
66
+ return JSON.parse(JSON.stringify(brain_1.INITIAL_BRAIN_STATE));
67
+ }
68
+ catch (error) {
69
+ console.error(chalk_1.default.red('Failed to read context/brain:'), error);
70
+ return JSON.parse(JSON.stringify(brain_1.INITIAL_BRAIN_STATE));
71
+ }
72
+ }
73
+ incrementVersion(version) {
74
+ const parts = version.split('.').map(Number);
75
+ if (parts.length !== 3 || parts.some(isNaN) || parts[2] === undefined)
76
+ return version; // Fallback
77
+ parts[2]++; // Increment patch
78
+ return parts.join('.');
79
+ }
80
+ async saveBrain(brain) {
81
+ try {
82
+ // Auto-increment version on save for alignment
83
+ const currentVersion = brain.version || "1.0.0";
84
+ brain.version = this.incrementVersion(currentVersion);
85
+ let context = {};
86
+ if (await fs.pathExists(this.brainPath)) {
87
+ context = await fs.readJson(this.brainPath);
88
+ }
89
+ context.brain = brain;
90
+ await fs.ensureDir(path.dirname(this.brainPath));
91
+ await fs.writeJson(this.brainPath, context, { spaces: 2 });
92
+ }
93
+ catch (error) {
94
+ console.error(chalk_1.default.red('Failed to save brain to context:'), error);
95
+ }
96
+ }
97
+ async addUpdate(agentName, role, type, message, metadata) {
98
+ const brain = await this.getBrain();
99
+ const update = {
100
+ id: (0, uuid_1.v4)(),
101
+ timestamp: Date.now(),
102
+ agent: agentName,
103
+ role,
104
+ type,
105
+ message,
106
+ metadata
107
+ };
108
+ brain.updates.push(update);
109
+ // Log to console for CLI visibility
110
+ const color = type === 'error' ? chalk_1.default.red : type === 'action' ? chalk_1.default.green : chalk_1.default.gray;
111
+ const icon = type === 'error' ? 'āŒ' : type === 'action' ? '⚔' : type === 'thought' ? 'šŸ’­' : 'āœ…';
112
+ console.log(color(`[${agentName}] ${icon} ${message}`));
113
+ await this.saveBrain(brain);
114
+ }
115
+ async updateArtifact(type, content, filePath) {
116
+ const brain = await this.getBrain();
117
+ if (!brain.artifacts)
118
+ brain.artifacts = {};
119
+ if (!brain.artifacts[type]) {
120
+ brain.artifacts[type] = {
121
+ path: filePath,
122
+ content,
123
+ version: 1,
124
+ lastUpdated: Date.now()
125
+ };
126
+ }
127
+ else {
128
+ brain.artifacts[type].content = content;
129
+ brain.artifacts[type].version++;
130
+ brain.artifacts[type].lastUpdated = Date.now();
131
+ }
132
+ await this.saveBrain(brain);
133
+ }
134
+ async setNarrative(narrative) {
135
+ const brain = await this.getBrain();
136
+ brain.narrative = narrative;
137
+ await this.saveBrain(brain);
138
+ }
139
+ async setStatus(status) {
140
+ const brain = await this.getBrain();
141
+ brain.status = status;
142
+ await this.saveBrain(brain);
143
+ }
144
+ async registerComponent(name, description, path, dependencies) {
145
+ const brain = await this.getBrain();
146
+ if (!brain.registry)
147
+ brain.registry = { components: [] };
148
+ // Check if component already exists
149
+ const index = brain.registry.components.findIndex(c => c.path === path);
150
+ const newComp = { name, description, path, dependencies };
151
+ if (index !== -1) {
152
+ brain.registry.components[index] = newComp;
153
+ }
154
+ else {
155
+ brain.registry.components.push(newComp);
156
+ }
157
+ await this.saveBrain(brain);
158
+ }
159
+ async getRegistry() {
160
+ const brain = await this.getBrain();
161
+ return brain.registry || { components: [] };
162
+ }
163
+ async reset() {
164
+ // Deep copy to avoid mutating the imported constant
165
+ const freshBrain = JSON.parse(JSON.stringify(brain_1.INITIAL_BRAIN_STATE));
166
+ await this.saveBrain(freshBrain);
167
+ }
168
+ }
169
+ exports.BrainClient = BrainClient;
170
+ //# sourceMappingURL=BrainClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrainClient.js","sourceRoot":"","sources":["../../../src/core/brain/BrainClient.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mycontext-cli",
3
- "version": "4.1.5",
3
+ "version": "4.2.1",
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": {
@@ -12,7 +12,7 @@
12
12
  "build:clean": "rm -rf dist && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo '🧹 Cleaned build directory')",
13
13
  "build:compile": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'šŸ”Ø Compiling TypeScript...') && tsc --noEmitOnError false",
14
14
  "build:alias": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'šŸ”— Resolving path aliases...') && tsc-alias",
15
- "build:copy": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'šŸ“‹ Copying config files...') && cp -r src/config dist/ && cp -r src/templates dist/ && cp package.json dist/ && cp README.md dist/ && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'āœ… Build complete')",
15
+ "build:copy": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'šŸ“‹ Copying config files...') && cp -r src/config dist/ && cp -r src/templates dist/ && cp package.json dist/ && cp README.md dist/ && chmod +x dist/cli.js && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo 'āœ… Build complete')",
16
16
  "dev": "ts-node src/cli.ts",
17
17
  "start": "node dist/cli.js",
18
18
  "watch": "tsc --watch --pretty",
@@ -49,22 +49,22 @@
49
49
  "url": "https://github.com/farajabien/mycontext-cli/issues"
50
50
  },
51
51
  "dependencies": {
52
- "@myycontext/core": "workspace:*",
53
52
  "@anthropic-ai/claude-agent-sdk": "^0.1.1",
54
53
  "@google-cloud/vertexai": "^1.10.0",
55
54
  "@google/generative-ai": "^0.24.1",
56
55
  "@huggingface/inference": "^4.11.1",
57
56
  "@modelcontextprotocol/sdk": "^1.26.0",
57
+ "@myycontext/core": "workspace:*",
58
58
  "@playwright/test": "^1.58.2",
59
59
  "@types/figlet": "^1.7.0",
60
60
  "axios": "^1.6.0",
61
- "chalk": "^5.3.0",
61
+ "chalk": "^5.6.2",
62
62
  "commander": "^11.1.0",
63
63
  "diff": "^8.0.2",
64
64
  "dotenv": "^17.2.3",
65
65
  "dotenv-expand": "^12.0.3",
66
66
  "figlet": "^1.9.3",
67
- "fs-extra": "^11.1.1",
67
+ "fs-extra": "^11.3.2",
68
68
  "fuse.js": "^7.1.0",
69
69
  "glob": "^10.3.10",
70
70
  "gradient-string": "^3.0.0",
@@ -0,0 +1,40 @@
1
+ import { ContextDiffReport, ProjectSnapshot } from "./ProjectScanner";
2
+ export interface SyncResult {
3
+ contextUpdated: boolean;
4
+ readmeUpdated: boolean;
5
+ report: ContextDiffReport | null;
6
+ contextDiff: string;
7
+ readmeDiff: string;
8
+ }
9
+ export declare class ContextSyncer {
10
+ private projectRoot;
11
+ private scanner;
12
+ constructor(projectRoot?: string);
13
+ /**
14
+ * Sync everything: context.json + README
15
+ */
16
+ syncAll(options?: {
17
+ dryRun?: boolean;
18
+ }): Promise<SyncResult>;
19
+ /**
20
+ * Sync context.json: scan → assess → deep merge
21
+ */
22
+ syncContext(snapshot?: ProjectSnapshot, options?: {
23
+ dryRun?: boolean;
24
+ }): Promise<{
25
+ contextUpdated: boolean;
26
+ report: ContextDiffReport | null;
27
+ contextDiff: string;
28
+ }>;
29
+ /**
30
+ * Sync README: read context.json → LLM generate section → write between markers
31
+ */
32
+ syncReadme(options?: {
33
+ dryRun?: boolean;
34
+ }): Promise<{
35
+ readmeUpdated: boolean;
36
+ readmeDiff: string;
37
+ }>;
38
+ private getAICore;
39
+ }
40
+ //# sourceMappingURL=ContextSyncer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextSyncer.d.ts","sourceRoot":"","sources":["../../src/services/ContextSyncer.ts"],"names":[],"mappings":"AAaA,OAAO,EAAkB,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKtF,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAiB;gBAEpB,WAAW,GAAE,MAAsB;IAK/C;;OAEG;IACG,OAAO,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBtE;;OAEG;IACG,WAAW,CACf,QAAQ,CAAC,EAAE,eAAe,EAC1B,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GACjC,OAAO,CAAC;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAgE9F;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA4E7G,OAAO,CAAC,SAAS;CAUlB"}
@@ -0,0 +1,219 @@
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.ContextSyncer = void 0;
40
+ /**
41
+ * ContextSyncer — Autonomous context.json + README updater
42
+ *
43
+ * The "self-recontextualization" engine:
44
+ * 1. Scan the real project (via ProjectScanner)
45
+ * 2. LLM assesses drift between code and context.json
46
+ * 3. Deep merge suggestions into context.json
47
+ * 4. LLM generates README content from updated context
48
+ * 5. Write both files
49
+ */
50
+ const fs = __importStar(require("fs-extra"));
51
+ const path = __importStar(require("path"));
52
+ const chalk_1 = __importDefault(require("chalk"));
53
+ const ProjectScanner_1 = require("./ProjectScanner");
54
+ const AICore_1 = require("../core/ai/AICore");
55
+ const deepMerge_1 = require("../utils/deepMerge");
56
+ const unified_context_1 = require("../types/unified-context");
57
+ class ContextSyncer {
58
+ constructor(projectRoot = process.cwd()) {
59
+ this.projectRoot = projectRoot;
60
+ this.scanner = new ProjectScanner_1.ProjectScanner(projectRoot);
61
+ }
62
+ /**
63
+ * Sync everything: context.json + README
64
+ */
65
+ async syncAll(options = {}) {
66
+ console.log(chalk_1.default.blue("šŸ“‚ Scanning project structure...\n"));
67
+ const snapshot = await this.scanner.scan();
68
+ this.scanner.displaySnapshot(snapshot);
69
+ const contextResult = await this.syncContext(snapshot, options);
70
+ const readmeResult = await this.syncReadme(options);
71
+ return {
72
+ contextUpdated: contextResult.contextUpdated,
73
+ readmeUpdated: readmeResult.readmeUpdated,
74
+ report: contextResult.report,
75
+ contextDiff: contextResult.contextDiff,
76
+ readmeDiff: readmeResult.readmeDiff,
77
+ };
78
+ }
79
+ /**
80
+ * Sync context.json: scan → assess → deep merge
81
+ */
82
+ async syncContext(snapshot, options = {}) {
83
+ const contextPath = path.join(this.projectRoot, ".mycontext", "context.json");
84
+ // Load existing context
85
+ let existingContext = {};
86
+ try {
87
+ if (await fs.pathExists(contextPath)) {
88
+ existingContext = await fs.readJson(contextPath);
89
+ }
90
+ }
91
+ catch {
92
+ // Start fresh if corrupted
93
+ }
94
+ // Scan if not provided
95
+ if (!snapshot) {
96
+ snapshot = await this.scanner.scan();
97
+ }
98
+ // Assess via LLM
99
+ console.log(chalk_1.default.blue("\n🧠 Assessing progress against Living Brain...\n"));
100
+ const report = await this.scanner.assessProgress(snapshot, existingContext);
101
+ this.scanner.displayReport(report);
102
+ if (report.overallProgress < 0) {
103
+ return { contextUpdated: false, report, contextDiff: "LLM assessment failed" };
104
+ }
105
+ // Deep merge suggestions
106
+ const hasMerge = Object.keys(report.suggestedContextMerge).length > 0;
107
+ if (!hasMerge) {
108
+ return { contextUpdated: false, report, contextDiff: "No changes suggested" };
109
+ }
110
+ const merged = (0, deepMerge_1.deepMerge)(existingContext, report.suggestedContextMerge);
111
+ // Update scan memory
112
+ if (!merged.brain)
113
+ merged.brain = {};
114
+ if (!merged.brain.memory)
115
+ merged.brain.memory = {};
116
+ merged.brain.memory.lastSync = {
117
+ syncedAt: new Date().toISOString(),
118
+ totalFiles: snapshot.stats.totalFiles,
119
+ totalDirs: snapshot.stats.totalDirs,
120
+ overallProgress: report.overallProgress,
121
+ diffsFound: report.diffs.length,
122
+ };
123
+ const diffSummary = report.diffs
124
+ .map((d) => ` ${d.type === "missing_in_context" ? "+" : d.type === "missing_in_code" ? "-" : "~"} [${d.category}] ${d.description}`)
125
+ .join("\n");
126
+ if (options.dryRun) {
127
+ console.log(chalk_1.default.yellow("\nšŸ” DRY RUN — would apply these changes:"));
128
+ console.log(chalk_1.default.gray(diffSummary));
129
+ return { contextUpdated: false, report, contextDiff: diffSummary };
130
+ }
131
+ // Write
132
+ await fs.ensureDir(path.dirname(contextPath));
133
+ await fs.writeJson(contextPath, merged, { spaces: 2 });
134
+ console.log(chalk_1.default.green("āœ… context.json updated via deep merge!"));
135
+ return { contextUpdated: true, report, contextDiff: diffSummary };
136
+ }
137
+ /**
138
+ * Sync README: read context.json → LLM generate section → write between markers
139
+ */
140
+ async syncReadme(options = {}) {
141
+ const readmePath = path.join(this.projectRoot, "README.md");
142
+ const contextPath = path.join(this.projectRoot, ".mycontext", "context.json");
143
+ if (!(await fs.pathExists(readmePath))) {
144
+ return { readmeUpdated: false, readmeDiff: "No README.md found" };
145
+ }
146
+ if (!(await fs.pathExists(contextPath))) {
147
+ return { readmeUpdated: false, readmeDiff: "No context.json found" };
148
+ }
149
+ const readme = await fs.readFile(readmePath, "utf-8");
150
+ const context = await fs.readJson(contextPath);
151
+ const summary = (0, unified_context_1.getContextSummary)(context);
152
+ const START_MARKER = "<!-- mycontext:start -->";
153
+ const END_MARKER = "<!-- mycontext:end -->";
154
+ const startIdx = readme.indexOf(START_MARKER);
155
+ const endIdx = readme.indexOf(END_MARKER);
156
+ if (startIdx === -1 || endIdx === -1) {
157
+ console.log(chalk_1.default.yellow("āš ļø No MyContext markers in README. Add these to enable auto-sync:"));
158
+ console.log(chalk_1.default.cyan(` ${START_MARKER}`));
159
+ console.log(chalk_1.default.cyan(` ${END_MARKER}`));
160
+ return { readmeUpdated: false, readmeDiff: "No markers found in README" };
161
+ }
162
+ // Generate content via LLM
163
+ const ai = this.getAICore();
164
+ const prompt = `Generate a concise, well-formatted markdown section for a README based on this project context:
165
+
166
+ Project: ${summary.name}
167
+ Description: ${summary.description}
168
+ ${summary.entities.length > 0 ? `Entities: ${summary.entities.join(", ")}` : ""}
169
+ ${summary.routes.length > 0 ? `Routes: ${summary.routes.join(", ")}` : ""}
170
+ ${summary.roles.length > 0 ? `Roles: ${summary.roles.join(", ")}` : ""}
171
+ ${summary.components.length > 0 ? `Components: ${summary.components.map((c) => c.name).join(", ")}` : ""}
172
+ ${summary.checkpoints.length > 0 ? `Milestones: ${summary.checkpoints.map((c) => `${c.label} (${c.status})`).join(", ")}` : ""}
173
+ ${summary.capabilities.length > 0 ? `Capabilities: ${summary.capabilities.join(", ")}` : ""}
174
+ ${context.project?.techStack ? `Tech Stack: ${context.project.techStack.join(", ")}` : ""}
175
+
176
+ Architecture type: ${context.architecture?.type || context.project?.type || "unknown"}
177
+ ${context.architecture?.packages ? `Packages: ${Object.keys(context.architecture.packages).join(", ")}` : ""}
178
+
179
+ Return ONLY the markdown content (no fences). Include sections:
180
+ - Brief overview
181
+ - Architecture/tech stack
182
+ - Key features/capabilities
183
+ - Project status (based on checkpoints)
184
+
185
+ Keep it concise — max 30 lines. Use emojis sparingly.`;
186
+ try {
187
+ let newContent = await ai.generateText(prompt);
188
+ newContent = newContent.replace(/^```[a-z]*\n?/gm, "").replace(/```$/gm, "").trim();
189
+ const before = readme.substring(0, startIdx + START_MARKER.length);
190
+ const after = readme.substring(endIdx);
191
+ const updated = `${before}\n\n${newContent}\n\n${after}`;
192
+ if (options.dryRun) {
193
+ console.log(chalk_1.default.yellow("\nšŸ” DRY RUN — README would be updated with:"));
194
+ console.log(chalk_1.default.gray(newContent.substring(0, 300) + "..."));
195
+ return { readmeUpdated: false, readmeDiff: newContent.substring(0, 200) };
196
+ }
197
+ await fs.writeFile(readmePath, updated, "utf-8");
198
+ console.log(chalk_1.default.green("āœ… README.md updated between markers!"));
199
+ return { readmeUpdated: true, readmeDiff: `Updated ${newContent.split("\n").length} lines` };
200
+ }
201
+ catch (error) {
202
+ console.log(chalk_1.default.red(`āŒ README sync failed: ${error.message}`));
203
+ return { readmeUpdated: false, readmeDiff: `Error: ${error.message}` };
204
+ }
205
+ }
206
+ getAICore() {
207
+ try {
208
+ return AICore_1.AICore.getInstance();
209
+ }
210
+ catch {
211
+ return AICore_1.AICore.getInstance({
212
+ fallbackEnabled: true,
213
+ workingDirectory: this.projectRoot,
214
+ });
215
+ }
216
+ }
217
+ }
218
+ exports.ContextSyncer = ContextSyncer;
219
+ //# sourceMappingURL=ContextSyncer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextSyncer.js","sourceRoot":"","sources":["../../src/services/ContextSyncer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export interface FileEntry {
2
+ path: string;
3
+ type: "file" | "dir";
4
+ size?: number;
5
+ extension?: string;
6
+ }
7
+ export interface FileSnippet {
8
+ path: string;
9
+ content: string;
10
+ lines: number;
11
+ }
12
+ export interface ProjectSnapshot {
13
+ scannedAt: string;
14
+ projectRoot: string;
15
+ fileTree: FileEntry[];
16
+ keyFiles: FileSnippet[];
17
+ stats: {
18
+ totalFiles: number;
19
+ totalDirs: number;
20
+ routeFiles: number;
21
+ componentFiles: number;
22
+ apiFiles: number;
23
+ schemaFiles: number;
24
+ testFiles: number;
25
+ };
26
+ }
27
+ export interface ContextDiffItem {
28
+ type: "missing_in_context" | "missing_in_code" | "outdated" | "suggestion";
29
+ category: "route" | "component" | "entity" | "config" | "general";
30
+ description: string;
31
+ suggestion: string;
32
+ }
33
+ export interface ContextDiffReport {
34
+ assessedAt: string;
35
+ overallProgress: number;
36
+ progressSummary: string;
37
+ diffs: ContextDiffItem[];
38
+ suggestedContextMerge: any;
39
+ }
40
+ export declare class ProjectScanner {
41
+ private projectRoot;
42
+ private ai;
43
+ constructor(projectRoot?: string);
44
+ /**
45
+ * Full scan: walk tree + read key files + build snapshot
46
+ */
47
+ scan(): Promise<ProjectSnapshot>;
48
+ /**
49
+ * Recursively walk a directory
50
+ */
51
+ private walkDirectory;
52
+ /**
53
+ * Read a file, truncated to MAX_FILE_READ_SIZE
54
+ */
55
+ private readFileSnippet;
56
+ /**
57
+ * Compare a snapshot against context.json and get LLM assessment
58
+ */
59
+ assessProgress(snapshot: ProjectSnapshot, existingContext: any): Promise<ContextDiffReport>;
60
+ /**
61
+ * Display the scan results nicely
62
+ */
63
+ displaySnapshot(snapshot: ProjectSnapshot): void;
64
+ /**
65
+ * Display the diff report nicely
66
+ */
67
+ displayReport(report: ContextDiffReport): void;
68
+ /**
69
+ * Get or initialize AICore safely
70
+ */
71
+ private getAICore;
72
+ private makeProgressBar;
73
+ }
74
+ //# sourceMappingURL=ProjectScanner.d.ts.map
@@ -0,0 +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;AAgCD,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;IA4E7B;;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"}