@veedubin/neuralgentics 0.12.6 → 0.13.0
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +163 -16
- package/dist/cli.js.map +1 -1
- package/dist/neuralgentics/backup.d.ts +49 -0
- package/dist/neuralgentics/backup.d.ts.map +1 -0
- package/dist/neuralgentics/backup.js +77 -0
- package/dist/neuralgentics/backup.js.map +1 -0
- package/dist/neuralgentics/init.d.ts +51 -0
- package/dist/neuralgentics/init.d.ts.map +1 -1
- package/dist/neuralgentics/init.js +251 -0
- package/dist/neuralgentics/init.js.map +1 -1
- package/dist/neuralgentics/mcp-templates.d.ts +41 -0
- package/dist/neuralgentics/mcp-templates.d.ts.map +1 -0
- package/dist/neuralgentics/mcp-templates.js +150 -0
- package/dist/neuralgentics/mcp-templates.js.map +1 -0
- package/dist/neuralgentics/paths.d.ts +51 -0
- package/dist/neuralgentics/paths.d.ts.map +1 -0
- package/dist/neuralgentics/paths.js +70 -0
- package/dist/neuralgentics/paths.js.map +1 -0
- package/dist/neuralgentics/prompts.d.ts +82 -0
- package/dist/neuralgentics/prompts.d.ts.map +1 -0
- package/dist/neuralgentics/prompts.js +169 -0
- package/dist/neuralgentics/prompts.js.map +1 -0
- package/dist/neuralgentics/update.d.ts +55 -0
- package/dist/neuralgentics/update.d.ts.map +1 -0
- package/dist/neuralgentics/update.js +319 -0
- package/dist/neuralgentics/update.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update logic for the neuralgentics two-init installer.
|
|
3
|
+
*
|
|
4
|
+
* Three update modes:
|
|
5
|
+
* - updateAll() — find all .neuralgentics-state.json files under
|
|
6
|
+
* ~/.config/opencode/ AND under all project
|
|
7
|
+
* directories the user has initialized
|
|
8
|
+
* - updateProject() — only update {CWD}/.opencode/
|
|
9
|
+
* - updateHomedir() — only update the homedir config
|
|
10
|
+
*
|
|
11
|
+
* For each update:
|
|
12
|
+
* 1. Read .neuralgentics-state.json for installed version + file manifest
|
|
13
|
+
* 2. Download latest tarball (reuse download.ts)
|
|
14
|
+
* 3. For each file in new tarball:
|
|
15
|
+
* - Compute SHA-256
|
|
16
|
+
* - Compare against state file manifest
|
|
17
|
+
* - If changed: call backupFile() then write new file
|
|
18
|
+
* - If same: skip
|
|
19
|
+
* - If new: create
|
|
20
|
+
* 4. Update state file with new version + manifest
|
|
21
|
+
* 5. Print summary
|
|
22
|
+
* 6. Print final prompt to user
|
|
23
|
+
*/
|
|
24
|
+
import { createHash } from "node:crypto";
|
|
25
|
+
import { promises as fs, existsSync } from "node:fs";
|
|
26
|
+
import * as path from "node:path";
|
|
27
|
+
import * as os from "node:os";
|
|
28
|
+
import { downloadTarball, extractTarball, resolveVersion, verifySha256, } from "./download.js";
|
|
29
|
+
import { getHomedirConfigPath, getProjectConfigPath } from "./paths.js";
|
|
30
|
+
import { backupFile } from "./backup.js";
|
|
31
|
+
/** Name of the state file inside a config directory. */
|
|
32
|
+
const STATE_FILENAME = ".neuralgentics-state.json";
|
|
33
|
+
/** Read chunk size for SHA256 computation (64 KiB). */
|
|
34
|
+
const CHUNK_SIZE = 64 * 1024;
|
|
35
|
+
/**
|
|
36
|
+
* Compute the SHA-256 hash of a file.
|
|
37
|
+
*/
|
|
38
|
+
async function computeFileSha256(filePath) {
|
|
39
|
+
const hash = createHash("sha256");
|
|
40
|
+
const handle = await fs.open(filePath, "r");
|
|
41
|
+
try {
|
|
42
|
+
const buffer = Buffer.alloc(CHUNK_SIZE);
|
|
43
|
+
// eslint-disable-next-line no-constant-condition
|
|
44
|
+
while (true) {
|
|
45
|
+
const { bytesRead } = await handle.read(buffer, 0, CHUNK_SIZE, null);
|
|
46
|
+
if (bytesRead === 0)
|
|
47
|
+
break;
|
|
48
|
+
hash.update(buffer.subarray(0, bytesRead));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
await handle.close();
|
|
53
|
+
}
|
|
54
|
+
return hash.digest("hex");
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Read a state file from a config directory.
|
|
58
|
+
*/
|
|
59
|
+
async function readStateFile(configDir) {
|
|
60
|
+
const statePath = path.join(configDir, STATE_FILENAME);
|
|
61
|
+
if (!existsSync(statePath))
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
const text = await fs.readFile(statePath, "utf-8");
|
|
65
|
+
return JSON.parse(text);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Write a state file to a config directory.
|
|
73
|
+
*/
|
|
74
|
+
async function writeStateFile(configDir, state) {
|
|
75
|
+
const statePath = path.join(configDir, STATE_FILENAME);
|
|
76
|
+
await fs.mkdir(path.dirname(statePath), { recursive: true });
|
|
77
|
+
await fs.writeFile(statePath, JSON.stringify(state, null, 2) + "\n", "utf-8");
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Walk a directory tree and return all file paths.
|
|
81
|
+
*/
|
|
82
|
+
async function iterFiles(root) {
|
|
83
|
+
const result = [];
|
|
84
|
+
async function walk(dir) {
|
|
85
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
const full = path.join(dir, entry.name);
|
|
88
|
+
if (entry.isDirectory()) {
|
|
89
|
+
await walk(full);
|
|
90
|
+
}
|
|
91
|
+
else if (entry.isFile()) {
|
|
92
|
+
result.push(full);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await walk(root);
|
|
97
|
+
result.sort();
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Update a single config directory from the tarball.
|
|
102
|
+
*
|
|
103
|
+
* @param configDir — the config directory to update
|
|
104
|
+
* @param extractDir — the extracted tarball directory (source of new files)
|
|
105
|
+
* @param newVersion — the new version string
|
|
106
|
+
* @param opts — update options
|
|
107
|
+
*/
|
|
108
|
+
async function updateConfigDir(configDir, extractDir, newVersion, opts) {
|
|
109
|
+
const state = await readStateFile(configDir);
|
|
110
|
+
const installType = state?.installType ?? "unknown";
|
|
111
|
+
const fromVersion = state?.installed_version ?? null;
|
|
112
|
+
if (opts.dryRun) {
|
|
113
|
+
process.stdout.write(`[DRY-RUN] Would update ${configDir} from ${fromVersion ?? "none"} to ${newVersion}\n`);
|
|
114
|
+
return {
|
|
115
|
+
configDir,
|
|
116
|
+
installType,
|
|
117
|
+
updated: 0,
|
|
118
|
+
skipped: 0,
|
|
119
|
+
created: 0,
|
|
120
|
+
backups: [],
|
|
121
|
+
fromVersion,
|
|
122
|
+
toVersion: newVersion,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
126
|
+
const newFiles = await iterFiles(extractDir);
|
|
127
|
+
const newManifest = {};
|
|
128
|
+
let updated = 0;
|
|
129
|
+
let skipped = 0;
|
|
130
|
+
let created = 0;
|
|
131
|
+
const backups = [];
|
|
132
|
+
for (const src of newFiles) {
|
|
133
|
+
const rel = path.relative(extractDir, src).split(path.sep).join("/");
|
|
134
|
+
const dest = path.join(configDir, rel);
|
|
135
|
+
const newSha = await computeFileSha256(src);
|
|
136
|
+
const oldRecord = state?.files[rel];
|
|
137
|
+
// Compute destination directory and ensure it exists
|
|
138
|
+
await fs.mkdir(path.dirname(dest), { recursive: true });
|
|
139
|
+
if (oldRecord && oldRecord.sha256 === newSha && !opts.force) {
|
|
140
|
+
// Same content — skip
|
|
141
|
+
skipped++;
|
|
142
|
+
newManifest[rel] = oldRecord;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (existsSync(dest) && !opts.force) {
|
|
146
|
+
// File exists and differs — back up first
|
|
147
|
+
const backup = await backupFile(configDir, dest, timestamp);
|
|
148
|
+
if (backup !== null)
|
|
149
|
+
backups.push(backup);
|
|
150
|
+
updated++;
|
|
151
|
+
}
|
|
152
|
+
else if (!existsSync(dest)) {
|
|
153
|
+
created++;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// force mode — back up the existing file
|
|
157
|
+
const backup = await backupFile(configDir, dest, timestamp);
|
|
158
|
+
if (backup !== null)
|
|
159
|
+
backups.push(backup);
|
|
160
|
+
updated++;
|
|
161
|
+
}
|
|
162
|
+
await fs.copyFile(src, dest);
|
|
163
|
+
newManifest[rel] = {
|
|
164
|
+
sha256: await computeFileSha256(dest),
|
|
165
|
+
user_modified: false,
|
|
166
|
+
installed_from: newVersion,
|
|
167
|
+
last_known_shipped_sha256: newSha,
|
|
168
|
+
merged: rel.endsWith("opencode.json") ? true : null,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Write updated state file
|
|
172
|
+
const now = new Date().toISOString().replace(/\.\d+Z$/, "Z");
|
|
173
|
+
const newState = {
|
|
174
|
+
version: 1,
|
|
175
|
+
installed_version: newVersion,
|
|
176
|
+
installed_at: state?.installed_at ?? now,
|
|
177
|
+
updated_at: now,
|
|
178
|
+
cli_version: state?.cli_version ?? "0.1.0",
|
|
179
|
+
source: "github",
|
|
180
|
+
repo: opts.repo,
|
|
181
|
+
target: configDir,
|
|
182
|
+
files: newManifest,
|
|
183
|
+
last_backup: backups.length > 0 ? path.join(configDir, "opencode-bak") : null,
|
|
184
|
+
installType: installType === "unknown" ? "project" : installType,
|
|
185
|
+
};
|
|
186
|
+
await writeStateFile(configDir, newState);
|
|
187
|
+
return {
|
|
188
|
+
configDir,
|
|
189
|
+
installType,
|
|
190
|
+
updated,
|
|
191
|
+
skipped,
|
|
192
|
+
created,
|
|
193
|
+
backups,
|
|
194
|
+
fromVersion,
|
|
195
|
+
toVersion: newVersion,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Download and extract the latest tarball.
|
|
200
|
+
*/
|
|
201
|
+
async function downloadAndExtract(version, repo) {
|
|
202
|
+
const resolvedVersion = await resolveVersion(version, repo);
|
|
203
|
+
const { tarballPath, checksumsPath } = await downloadTarball(resolvedVersion, repo);
|
|
204
|
+
await verifySha256(tarballPath, checksumsPath);
|
|
205
|
+
const extractDir = await fs.mkdtemp(path.join(os.tmpdir(), `neuralgentics-update-${resolvedVersion}-`));
|
|
206
|
+
await extractTarball(tarballPath, extractDir);
|
|
207
|
+
return { extractDir, version: resolvedVersion };
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Find all config directories with state files.
|
|
211
|
+
*
|
|
212
|
+
* Searches:
|
|
213
|
+
* 1. The homedir config directory
|
|
214
|
+
* 2. All project directories under the user's home that have
|
|
215
|
+
* .neuralgentics-state.json files
|
|
216
|
+
*/
|
|
217
|
+
async function findAllStateDirs() {
|
|
218
|
+
const dirs = new Set();
|
|
219
|
+
const homedirConfig = getHomedirConfigPath();
|
|
220
|
+
if (existsSync(path.join(homedirConfig, STATE_FILENAME))) {
|
|
221
|
+
dirs.add(homedirConfig);
|
|
222
|
+
}
|
|
223
|
+
// Search for project-level state files under the home directory.
|
|
224
|
+
// This is a shallow search — we look for .opencode/.neuralgentics-state.json
|
|
225
|
+
// in immediate subdirectories of the home dir and common project locations.
|
|
226
|
+
const home = os.homedir();
|
|
227
|
+
const searchRoots = [
|
|
228
|
+
home,
|
|
229
|
+
path.join(home, "Projects"),
|
|
230
|
+
path.join(home, "projects"),
|
|
231
|
+
path.join(home, "Code"),
|
|
232
|
+
path.join(home, "code"),
|
|
233
|
+
path.join(home, "src"),
|
|
234
|
+
path.join(home, "workspace"),
|
|
235
|
+
];
|
|
236
|
+
for (const root of searchRoots) {
|
|
237
|
+
if (!existsSync(root))
|
|
238
|
+
continue;
|
|
239
|
+
try {
|
|
240
|
+
const entries = await fs.readdir(root, { withFileTypes: true });
|
|
241
|
+
for (const entry of entries) {
|
|
242
|
+
if (!entry.isDirectory())
|
|
243
|
+
continue;
|
|
244
|
+
const projectConfig = path.join(root, entry.name, ".opencode");
|
|
245
|
+
const stateFile = path.join(projectConfig, STATE_FILENAME);
|
|
246
|
+
if (existsSync(stateFile)) {
|
|
247
|
+
dirs.add(projectConfig);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// Permission denied or other error — skip this root.
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return Array.from(dirs).sort();
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Update ALL installs under the user's home (projects + homedir).
|
|
259
|
+
*/
|
|
260
|
+
export async function updateAll(opts) {
|
|
261
|
+
const { extractDir, version } = await downloadAndExtract(opts.version, opts.repo);
|
|
262
|
+
const configDirs = await findAllStateDirs();
|
|
263
|
+
const results = [];
|
|
264
|
+
for (const dir of configDirs) {
|
|
265
|
+
try {
|
|
266
|
+
const result = await updateConfigDir(dir, extractDir, version, opts);
|
|
267
|
+
results.push(result);
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
process.stderr.write(`[ERROR] Failed to update ${dir}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
printUpdateSummary(results);
|
|
274
|
+
return results;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Update just THIS project (CWD).
|
|
278
|
+
*/
|
|
279
|
+
export async function updateProject(opts) {
|
|
280
|
+
const { extractDir, version } = await downloadAndExtract(opts.version, opts.repo);
|
|
281
|
+
const configDir = getProjectConfigPath();
|
|
282
|
+
const result = await updateConfigDir(configDir, extractDir, version, opts);
|
|
283
|
+
printUpdateSummary([result]);
|
|
284
|
+
return [result];
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Update just the home dir.
|
|
288
|
+
*/
|
|
289
|
+
export async function updateHomedir(opts) {
|
|
290
|
+
const { extractDir, version } = await downloadAndExtract(opts.version, opts.repo);
|
|
291
|
+
const configDir = getHomedirConfigPath();
|
|
292
|
+
const result = await updateConfigDir(configDir, extractDir, version, opts);
|
|
293
|
+
printUpdateSummary([result]);
|
|
294
|
+
return [result];
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Print a summary of update results.
|
|
298
|
+
*/
|
|
299
|
+
function printUpdateSummary(results) {
|
|
300
|
+
for (const r of results) {
|
|
301
|
+
process.stdout.write(`\nUpdated ${r.configDir}\n` +
|
|
302
|
+
` ${r.updated} files updated, ${r.skipped} skipped, ${r.created} created\n` +
|
|
303
|
+
` Version: ${r.fromVersion ?? "none"} → ${r.toVersion}\n`);
|
|
304
|
+
if (r.backups.length > 0) {
|
|
305
|
+
process.stdout.write(` Backups at ${path.dirname(r.backups[0].backupPath)}/\n`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Final prompt
|
|
309
|
+
const anyBackups = results.some((r) => r.backups.length > 0);
|
|
310
|
+
if (anyBackups) {
|
|
311
|
+
const firstBackupDir = results
|
|
312
|
+
.find((r) => r.backups.length > 0)
|
|
313
|
+
?.backups[0]?.backupPath;
|
|
314
|
+
if (firstBackupDir) {
|
|
315
|
+
process.stdout.write(`\nPersonalize the updated files if needed — your old versions are backed up at ${path.dirname(firstBackupDir)}/\n`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/neuralgentics/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED