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.
- package/README.md +108 -126
- package/dist/README.md +108 -126
- package/dist/agents/implementations/ArchitectAgent.d.ts.map +1 -1
- package/dist/agents/implementations/ArchitectAgent.js +9 -1
- package/dist/agents/implementations/ArchitectAgent.js.map +1 -1
- package/dist/agents/implementations/BackendDevAgent.d.ts +1 -1
- package/dist/agents/implementations/BackendDevAgent.d.ts.map +1 -1
- package/dist/agents/implementations/BackendDevAgent.js +29 -16
- package/dist/agents/implementations/BackendDevAgent.js.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +17 -9
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/EnhancementAgent.js.map +1 -1
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +1 -1
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -1
- package/dist/agents/implementations/FeatureAssemblyAgent.js +10 -9
- package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -1
- package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
- package/dist/agents/implementations/PromptConstructorAgent.js +26 -42
- package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
- package/dist/cli.js +72 -0
- package/dist/cli.js.map +1 -1
- package/dist/clients/ProviderChain.d.ts +6 -65
- package/dist/clients/ProviderChain.d.ts.map +1 -1
- package/dist/clients/ProviderChain.js +34 -194
- package/dist/clients/ProviderChain.js.map +1 -1
- package/dist/commands/agent.js +1 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/assemble-features.js +1 -1
- package/dist/commands/assemble-features.js.map +1 -1
- package/dist/commands/design-analyze.js +2 -2
- package/dist/commands/generate-context-files.d.ts.map +1 -1
- package/dist/commands/generate-context-files.js +13 -0
- package/dist/commands/generate-context-files.js.map +1 -1
- package/dist/commands/generate.d.ts +1 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +96 -23
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +36 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/sync-readme.js +1 -1
- package/dist/commands/sync-readme.js.map +1 -1
- package/dist/core/agents/DependencySentinel.d.ts +15 -0
- package/dist/core/agents/DependencySentinel.d.ts.map +1 -0
- package/dist/core/agents/DependencySentinel.js +141 -0
- package/dist/core/agents/DependencySentinel.js.map +1 -0
- package/dist/core/ai/AICore.d.ts +48 -0
- package/dist/core/ai/AICore.d.ts.map +1 -0
- package/dist/core/ai/AICore.js +228 -0
- package/dist/core/ai/AICore.js.map +1 -0
- package/dist/core/brain/BrainClient.d.ts +18 -0
- package/dist/core/brain/BrainClient.d.ts.map +1 -0
- package/dist/core/brain/BrainClient.js +170 -0
- package/dist/core/brain/BrainClient.js.map +1 -0
- package/dist/package.json +5 -5
- package/dist/services/ContextSyncer.d.ts +40 -0
- package/dist/services/ContextSyncer.d.ts.map +1 -0
- package/dist/services/ContextSyncer.js +219 -0
- package/dist/services/ContextSyncer.js.map +1 -0
- package/dist/services/ProjectScanner.d.ts +74 -0
- package/dist/services/ProjectScanner.d.ts.map +1 -0
- package/dist/services/ProjectScanner.js +343 -0
- package/dist/services/ProjectScanner.js.map +1 -0
- package/dist/services/ScaffoldAgent.d.ts +35 -0
- package/dist/services/ScaffoldAgent.d.ts.map +1 -0
- package/dist/services/ScaffoldAgent.js +228 -0
- package/dist/services/ScaffoldAgent.js.map +1 -0
- package/dist/tui/PlanningMode.d.ts +42 -0
- package/dist/tui/PlanningMode.d.ts.map +1 -0
- package/dist/tui/PlanningMode.js +401 -0
- package/dist/tui/PlanningMode.js.map +1 -0
- package/dist/tui/TUIClient.d.ts +20 -0
- package/dist/tui/TUIClient.d.ts.map +1 -0
- package/dist/tui/TUIClient.js +50 -0
- package/dist/tui/TUIClient.js.map +1 -0
- package/dist/types/living-context.d.ts +76 -0
- package/dist/types/living-context.d.ts.map +1 -0
- package/dist/types/living-context.js +3 -0
- package/dist/types/living-context.js.map +1 -0
- package/dist/types/mega-context.d.ts +118 -0
- package/dist/types/mega-context.d.ts.map +1 -0
- package/dist/types/mega-context.js +3 -0
- package/dist/types/mega-context.js.map +1 -0
- package/dist/types/tui.d.ts +29 -0
- package/dist/types/tui.d.ts.map +1 -0
- package/dist/types/tui.js +8 -0
- package/dist/types/tui.js.map +1 -0
- package/dist/types/unified-context.d.ts +102 -0
- package/dist/types/unified-context.d.ts.map +1 -0
- package/dist/types/unified-context.js +50 -0
- package/dist/types/unified-context.js.map +1 -0
- package/dist/utils/FileGenerator.d.ts +14 -0
- package/dist/utils/FileGenerator.d.ts.map +1 -0
- package/dist/utils/FileGenerator.js +154 -0
- package/dist/utils/FileGenerator.js.map +1 -0
- package/dist/utils/NextJSProjectGenerator.d.ts.map +1 -1
- package/dist/utils/NextJSProjectGenerator.js +59 -0
- package/dist/utils/NextJSProjectGenerator.js.map +1 -1
- package/dist/utils/contextRenderer.d.ts +12 -0
- package/dist/utils/contextRenderer.d.ts.map +1 -0
- package/dist/utils/contextRenderer.js +105 -0
- package/dist/utils/contextRenderer.js.map +1 -0
- package/dist/utils/deepMerge.d.ts +14 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/deepMerge.js +87 -0
- package/dist/utils/deepMerge.js.map +1 -0
- package/dist/utils/fileSystem.d.ts +4 -0
- package/dist/utils/fileSystem.d.ts.map +1 -1
- package/dist/utils/fileSystem.js +47 -0
- package/dist/utils/fileSystem.js.map +1 -1
- package/dist/utils/hybridAIClient.d.ts +12 -117
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +31 -750
- package/dist/utils/hybridAIClient.js.map +1 -1
- 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
|
|
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.
|
|
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.
|
|
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"}
|