@comfanion/workflow 4.8.0 → 4.9.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/bin/cli.js CHANGED
@@ -438,13 +438,14 @@ program
438
438
  });
439
439
  }
440
440
 
441
- // Preserve vectorizer and vectors by moving them temporarily
442
- const tempVectorizer = path.join(process.cwd(), '.vectorizer-temp');
441
+ // Preserve vectorizer node_modules and vectors by moving them temporarily
442
+ const tempNodeModules = path.join(process.cwd(), '.vectorizer-node_modules-temp');
443
443
  const tempVectors = path.join(process.cwd(), '.vectors-temp');
444
+ const vectorizerNodeModules = path.join(vectorizerDir, 'node_modules');
444
445
 
445
446
  if (hasVectorizer) {
446
- spinner.text = 'Preserving vectorizer...';
447
- await fs.move(vectorizerDir, tempVectorizer, { overwrite: true });
447
+ spinner.text = 'Preserving vectorizer dependencies...';
448
+ await fs.move(vectorizerNodeModules, tempNodeModules, { overwrite: true });
448
449
  }
449
450
  if (hasVectors) {
450
451
  spinner.text = 'Preserving vector indexes...';
@@ -455,18 +456,27 @@ program
455
456
  spinner.text = 'Removing old files...';
456
457
  await fs.remove(targetDir);
457
458
 
458
- // Copy new files
459
+ // Copy new files (including updated vectorizer source)
459
460
  spinner.text = 'Installing new version...';
460
461
  await fs.copy(OPENCODE_SRC, targetDir);
461
462
 
462
- // Restore vectorizer and vectors
463
+ // Copy new vectorizer source files
464
+ if (await fs.pathExists(VECTORIZER_SRC)) {
465
+ spinner.text = 'Updating vectorizer...';
466
+ const newVectorizerDir = path.join(targetDir, 'vectorizer');
467
+ await fs.ensureDir(newVectorizerDir);
468
+ await fs.copy(path.join(VECTORIZER_SRC, 'index.js'), path.join(newVectorizerDir, 'index.js'));
469
+ await fs.copy(path.join(VECTORIZER_SRC, 'package.json'), path.join(newVectorizerDir, 'package.json'));
470
+ }
471
+
472
+ // Restore vectorizer node_modules and vectors
463
473
  if (hasVectorizer) {
464
- spinner.text = 'Restoring vectorizer...';
465
- await fs.move(tempVectorizer, vectorizerDir, { overwrite: true });
474
+ spinner.text = 'Restoring vectorizer dependencies...';
475
+ await fs.move(tempNodeModules, path.join(targetDir, 'vectorizer', 'node_modules'), { overwrite: true });
466
476
  }
467
477
  if (hasVectors) {
468
478
  spinner.text = 'Restoring vector indexes...';
469
- await fs.move(tempVectors, vectorsDir, { overwrite: true });
479
+ await fs.move(tempVectors, path.join(targetDir, 'vectors'), { overwrite: true });
470
480
  }
471
481
 
472
482
  // Restore user's config.yaml
@@ -482,7 +492,7 @@ program
482
492
 
483
493
  console.log(chalk.green('✅ Your config.yaml was preserved.'));
484
494
  if (hasVectorizer) {
485
- console.log(chalk.green('✅ Vectorizer was preserved.'));
495
+ console.log(chalk.green('✅ Vectorizer updated (node_modules preserved).'));
486
496
  }
487
497
  if (hasVectors) {
488
498
  console.log(chalk.green('✅ Vector indexes were preserved.'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comfanion/workflow",
3
- "version": "4.8.0",
3
+ "version": "4.9.1",
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-24T09:31:08.971Z",
3
+ "buildDate": "2026-01-24T09:48:49.653Z",
4
4
  "files": [
5
5
  "config.yaml",
6
6
  "FLOW.yaml",
@@ -119,8 +119,14 @@ permission:
119
119
  </prefer-lsp-when>
120
120
  </lsp-exploration>
121
121
 
122
- <codesearch-exploration hint="Semantic search with MULTI-INDEX support">
123
- <check>codeindex({ action: "list" }) → See all indexes. If none, suggest: npx opencode-workflow index --index code</check>
122
+ <codesearch-exploration hint="ALWAYS TRY SEMANTIC SEARCH FIRST">
123
+ <critical>
124
+ BEFORE using grep/glob, ALWAYS check: codeindex({ action: "list" })
125
+ If indexes exist → USE codesearch instead of grep!
126
+ codesearch returns 5-10 relevant files vs 100+ grep matches
127
+ </critical>
128
+
129
+ <first-step>codeindex({ action: "list" }) → Check if indexes exist</first-step>
124
130
 
125
131
  <indexes hint="Different indexes for different content types">
126
132
  <index name="code">Source code (*.go, *.ts, *.py) - functions, classes, logic</index>
@@ -175,14 +181,22 @@ permission:
175
181
  - Regex pattern matching needed
176
182
  </use-grep-when>
177
183
 
178
- <exploration-strategy>
179
- 1. codeindex({ action: "list" }) → Check what indexes exist
180
- 2. codesearch({ query: "high-level concept", index: "code" }) → Find relevant code areas
181
- 3. codesearch({ query: "explanation", index: "docs" }) → Find related documentation
182
- 4. Read top results to understand structure
183
- 5. lsp documentSymbol on key files → Get detailed structure
184
- 6. grep for specific patterns if needed
184
+ <exploration-strategy priority="MANDATORY">
185
+ 1. FIRST: codeindex({ action: "list" }) → Check what indexes exist
186
+ 2. IF indexes exist:
187
+ - codesearch({ query: "concept", index: "code" }) → 5-10 relevant files (NOT 100+ grep matches!)
188
+ - Read top 3-5 results
189
+ - Done! Much faster than grep
190
+ 3. IF no indexes:
191
+ - Suggest: "Index not found. Create with: codeindex({ action: 'reindex', index: 'code' })"
192
+ - Fall back to grep/glob
193
+ 4. Use grep ONLY for exact string matches (function names, imports)
185
194
  </exploration-strategy>
195
+
196
+ <efficiency-comparison>
197
+ BAD: grep "category.*mapping" → 100 matches → read 20 files → slow!
198
+ GOOD: codesearch({ query: "category mapping logic" }) → 5 files → fast!
199
+ </efficiency-comparison>
186
200
  </codesearch-exploration>
187
201
 
188
202
  </agent>