@comfanion/workflow 4.36.9 → 4.36.11

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/bin/cli.js CHANGED
@@ -273,21 +273,16 @@ program
273
273
  // If updating, preserve vectorizer and indexes
274
274
  const vectorizerDir = path.join(targetDir, 'vectorizer');
275
275
  const vectorsDir = path.join(targetDir, 'vectors');
276
- const vectorizerNodeModules = path.join(vectorizerDir, 'node_modules');
277
- const tempNodeModules = path.join(process.cwd(), '.vectorizer-node_modules-temp');
278
276
  const tempVectors = path.join(process.cwd(), '.vectors-temp');
279
277
 
280
- let hadVectorizer = false;
281
278
  let hadVectors = false;
282
-
283
279
  let existingConfigContent = null;
284
280
 
285
281
  if (await fs.pathExists(targetDir)) {
286
282
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
287
283
  const backupDir = path.join(process.cwd(), `.opencode.backup-${timestamp}`);
288
284
 
289
- // Check what we need to preserve
290
- hadVectorizer = await fs.pathExists(vectorizerNodeModules);
285
+ // Check what we need to preserve (only vectors, vectorizer will be reinstalled fresh)
291
286
  hadVectors = await fs.pathExists(vectorsDir);
292
287
 
293
288
  // Read existing config.yaml for merge
@@ -296,13 +291,7 @@ program
296
291
  existingConfigContent = await fs.readFile(existingConfigPath, 'utf8');
297
292
  }
298
293
 
299
- // Preserve vectorizer node_modules (100MB+, don't backup)
300
- if (hadVectorizer) {
301
- spinner.text = 'Preserving vectorizer dependencies...';
302
- await fs.move(vectorizerNodeModules, tempNodeModules, { overwrite: true });
303
- }
304
-
305
- // Preserve vector indexes
294
+ // Preserve vector indexes only (not node_modules - will reinstall fresh)
306
295
  if (hadVectors) {
307
296
  spinner.text = 'Preserving vector indexes...';
308
297
  await fs.move(vectorsDir, tempVectors, { overwrite: true });
@@ -325,19 +314,24 @@ program
325
314
  // Copy .opencode structure (fresh, no old files)
326
315
  await fs.copy(OPENCODE_SRC, targetDir);
327
316
 
328
- // Copy updated vectorizer source files
317
+ // Copy and install vectorizer fresh
329
318
  if (await fs.pathExists(VECTORIZER_SRC)) {
330
- spinner.text = 'Updating vectorizer...';
319
+ spinner.text = 'Installing vectorizer...';
331
320
  const newVectorizerDir = path.join(targetDir, 'vectorizer');
332
321
  await fs.ensureDir(newVectorizerDir);
333
322
  await fs.copy(path.join(VECTORIZER_SRC, 'index.js'), path.join(newVectorizerDir, 'index.js'));
334
323
  await fs.copy(path.join(VECTORIZER_SRC, 'package.json'), path.join(newVectorizerDir, 'package.json'));
335
- }
336
-
337
- // Restore vectorizer node_modules
338
- if (hadVectorizer) {
339
- spinner.text = 'Restoring vectorizer dependencies...';
340
- await fs.move(tempNodeModules, path.join(targetDir, 'vectorizer', 'node_modules'), { overwrite: true });
324
+
325
+ // Always install vectorizer dependencies fresh
326
+ try {
327
+ execSync('npm install --silent', {
328
+ cwd: newVectorizerDir,
329
+ stdio: 'pipe',
330
+ timeout: 120000
331
+ });
332
+ } catch (e) {
333
+ // Non-fatal, will show warning below
334
+ }
341
335
  }
342
336
 
343
337
  // Restore vector indexes
@@ -456,16 +450,19 @@ program
456
450
  console.log(chalk.gray(' Run manually: cd .opencode && bun install'));
457
451
  }
458
452
 
459
- // Show what was preserved
460
- if (hadVectorizer) {
461
- console.log(chalk.green('✅ Vectorizer updated (dependencies preserved)'));
453
+ // Show what was done
454
+ const vectorizerInstalled = await fs.pathExists(path.join(targetDir, 'vectorizer', 'node_modules'));
455
+ if (vectorizerInstalled) {
456
+ console.log(chalk.green('✅ Vectorizer installed (fresh dependencies)'));
457
+ } else {
458
+ console.log(chalk.yellow('⚠️ Vectorizer: run `npx @comfanion/workflow vectorizer install`'));
462
459
  }
463
460
  if (hadVectors) {
464
461
  console.log(chalk.green('✅ Vector indexes preserved'));
465
462
  }
466
463
 
467
- // Install vectorizer if requested (and not already installed)
468
- if (config.install_vectorizer && !hadVectorizer) {
464
+ // Install vectorizer if requested and failed above
465
+ if (config.install_vectorizer && !vectorizerInstalled) {
469
466
  await installVectorizer(targetDir);
470
467
  }
471
468
 
@@ -558,8 +555,7 @@ program
558
555
  spinner.text = 'Reading config.yaml...';
559
556
  const configBackup = await fs.readFile(configPath, 'utf8');
560
557
 
561
- // Check if vectorizer exists
562
- const hasVectorizer = await fs.pathExists(path.join(vectorizerDir, 'node_modules'));
558
+ // Check if vectors exist (we preserve only indexes, reinstall vectorizer fresh)
563
559
  const hasVectors = await fs.pathExists(vectorsDir);
564
560
 
565
561
  // Create full backup (unless --no-backup)
@@ -570,15 +566,8 @@ program
570
566
  });
571
567
  }
572
568
 
573
- // Preserve vectorizer node_modules and vectors by moving them temporarily
574
- const tempNodeModules = path.join(process.cwd(), '.vectorizer-node_modules-temp');
569
+ // Preserve only vector indexes (not node_modules - will reinstall fresh)
575
570
  const tempVectors = path.join(process.cwd(), '.vectors-temp');
576
- const vectorizerNodeModules = path.join(vectorizerDir, 'node_modules');
577
-
578
- if (hasVectorizer) {
579
- spinner.text = 'Preserving vectorizer dependencies...';
580
- await fs.move(vectorizerNodeModules, tempNodeModules, { overwrite: true });
581
- }
582
571
  if (hasVectors) {
583
572
  spinner.text = 'Preserving vector indexes...';
584
573
  await fs.move(vectorsDir, tempVectors, { overwrite: true });
@@ -588,24 +577,31 @@ program
588
577
  spinner.text = 'Removing old files...';
589
578
  await fs.remove(targetDir);
590
579
 
591
- // Copy new files (including updated vectorizer source)
580
+ // Copy new files
592
581
  spinner.text = 'Installing new version...';
593
582
  await fs.copy(OPENCODE_SRC, targetDir);
594
583
 
595
584
  // Copy new vectorizer source files
596
585
  if (await fs.pathExists(VECTORIZER_SRC)) {
597
- spinner.text = 'Updating vectorizer...';
586
+ spinner.text = 'Installing vectorizer...';
598
587
  const newVectorizerDir = path.join(targetDir, 'vectorizer');
599
588
  await fs.ensureDir(newVectorizerDir);
600
589
  await fs.copy(path.join(VECTORIZER_SRC, 'index.js'), path.join(newVectorizerDir, 'index.js'));
601
590
  await fs.copy(path.join(VECTORIZER_SRC, 'package.json'), path.join(newVectorizerDir, 'package.json'));
591
+
592
+ // Always install vectorizer dependencies fresh
593
+ try {
594
+ execSync('npm install --silent', {
595
+ cwd: newVectorizerDir,
596
+ stdio: 'pipe',
597
+ timeout: 120000
598
+ });
599
+ } catch (e) {
600
+ // Non-fatal, will show warning below
601
+ }
602
602
  }
603
603
 
604
- // Restore vectorizer node_modules and vectors
605
- if (hasVectorizer) {
606
- spinner.text = 'Restoring vectorizer dependencies...';
607
- await fs.move(tempNodeModules, path.join(targetDir, 'vectorizer', 'node_modules'), { overwrite: true });
608
- }
604
+ // Restore vector indexes
609
605
  if (hasVectors) {
610
606
  spinner.text = 'Restoring vector indexes...';
611
607
  await fs.move(tempVectors, path.join(targetDir, 'vectors'), { overwrite: true });
@@ -671,22 +667,16 @@ program
671
667
  } else {
672
668
  console.log(chalk.yellow('⚠️ Plugin deps: run `cd .opencode && bun install`'));
673
669
  }
674
- if (hasVectorizer) {
675
- console.log(chalk.green('✅ Vectorizer updated (node_modules preserved).'));
670
+ const vectorizerInstalled = await fs.pathExists(path.join(targetDir, 'vectorizer', 'node_modules'));
671
+ if (vectorizerInstalled) {
672
+ console.log(chalk.green('✅ Vectorizer reinstalled (fresh dependencies).'));
673
+ } else {
674
+ console.log(chalk.yellow('⚠️ Vectorizer: run `npx @comfanion/workflow vectorizer install`'));
676
675
  }
677
676
  if (hasVectors) {
678
677
  console.log(chalk.green('✅ Vector indexes were preserved.'));
679
678
  }
680
679
 
681
- // Option to install/update vectorizer
682
- if (options.vectorizer) {
683
- console.log('');
684
- await installVectorizer(targetDir);
685
- } else if (!hasVectorizer) {
686
- console.log(chalk.yellow('\n💡 Vectorizer not installed. Install with:'));
687
- console.log(chalk.cyan(' npx opencode-workflow vectorizer install\n'));
688
- }
689
-
690
680
  console.log('');
691
681
 
692
682
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comfanion/workflow",
3
- "version": "4.36.9",
3
+ "version": "4.36.11",
4
4
  "description": "Initialize OpenCode Workflow system for AI-assisted development with semantic code search",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "3.0.0",
3
- "buildDate": "2026-01-24T15:12:12.755Z",
3
+ "buildDate": "2026-01-24T15:20:27.146Z",
4
4
  "files": [
5
5
  "config.yaml",
6
6
  "FLOW.yaml",
@@ -7,6 +7,7 @@
7
7
  "main": "index.js",
8
8
  "dependencies": {
9
9
  "@xenova/transformers": "^2.17.0",
10
+ "glob": "^10.3.10",
10
11
  "vectordb": "^0.4.0"
11
12
  },
12
13
  "engines": {