@bike4mind/cli 0.2.17-refactor-github-mcp.17671 → 0.2.18-cj-GH6131.17754

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.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-CHBAKX4C.js";
4
+ } from "./chunk-4OFHBIBO.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/artifactExtractor.js
7
7
  var ARTIFACT_TAG_REGEX = /<artifact\s+(.*?)>([\s\S]*?)<\/artifact>/gi;
@@ -4504,10 +4504,11 @@ function formatPageResponse(page, siteUrl) {
4504
4504
  link = `${baseUrl}/pages/${page.id}`;
4505
4505
  }
4506
4506
  return {
4507
- id: page.id,
4507
+ pageId: page.id,
4508
4508
  title: page.title,
4509
4509
  status: page.status,
4510
4510
  spaceId: page.spaceId,
4511
+ spaceKey: page.space?.key,
4511
4512
  body: stripHtmlAndNormalizeWhitespace(page.body?.storage?.value || page.body?.view?.value),
4512
4513
  version: page.version?.number,
4513
4514
  parentId: page.parentId,
@@ -4577,7 +4578,7 @@ function formatPageList(pagesResponse, siteUrl) {
4577
4578
  return pagesResponse;
4578
4579
  }
4579
4580
  const results = Array.isArray(pagesResponse.results) ? pagesResponse.results.map((page) => ({
4580
- id: page.id,
4581
+ pageId: page.id,
4581
4582
  title: page.title,
4582
4583
  status: page.status,
4583
4584
  parentId: page.parentId,
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BadRequestError,
4
4
  secureParameters
5
- } from "./chunk-QDWMIP2Q.js";
5
+ } from "./chunk-SUFMB67Z.js";
6
6
  import {
7
7
  CompletionApiUsageTransaction,
8
8
  GenericCreditDeductTransaction,
@@ -11,7 +11,7 @@ import {
11
11
  RealtimeVoiceUsageTransaction,
12
12
  TextGenerationUsageTransaction,
13
13
  TransferCreditTransaction
14
- } from "./chunk-CHBAKX4C.js";
14
+ } from "./chunk-4OFHBIBO.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/creditService/subtractCredits.js
17
17
  import { z } from "zod";
@@ -6,12 +6,12 @@ import {
6
6
  getSettingsByNames,
7
7
  obfuscateApiKey,
8
8
  secureParameters
9
- } from "./chunk-QDWMIP2Q.js";
9
+ } from "./chunk-SUFMB67Z.js";
10
10
  import {
11
11
  ApiKeyType,
12
12
  MementoTier,
13
13
  isSupportedEmbeddingModel
14
- } from "./chunk-CHBAKX4C.js";
14
+ } from "./chunk-4OFHBIBO.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/apiKeyService/get.js
17
17
  import { z } from "zod";
@@ -13,7 +13,7 @@ import {
13
13
  dayjsConfig_default,
14
14
  extractSnippetMeta,
15
15
  settingsMap
16
- } from "./chunk-CHBAKX4C.js";
16
+ } from "./chunk-4OFHBIBO.js";
17
17
  import {
18
18
  Logger
19
19
  } from "./chunk-OCYRD7D6.js";
@@ -7,11 +7,11 @@ import {
7
7
  getSettingsMap,
8
8
  getSettingsValue,
9
9
  secureParameters
10
- } from "./chunk-QDWMIP2Q.js";
10
+ } from "./chunk-SUFMB67Z.js";
11
11
  import {
12
12
  KnowledgeType,
13
13
  SupportedFabFileMimeTypes
14
- } from "./chunk-CHBAKX4C.js";
14
+ } from "./chunk-4OFHBIBO.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/fabFileService/create.js
17
17
  import { z } from "zod";
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createFabFile,
4
4
  createFabFileSchema
5
- } from "./chunk-6EEN6XHK.js";
6
- import "./chunk-QDWMIP2Q.js";
7
- import "./chunk-CHBAKX4C.js";
5
+ } from "./chunk-ZLNJ2AH4.js";
6
+ import "./chunk-SUFMB67Z.js";
7
+ import "./chunk-4OFHBIBO.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  createFabFile,
package/dist/index.js CHANGED
@@ -4,12 +4,12 @@ import {
4
4
  getEffectiveApiKey,
5
5
  getOpenWeatherKey,
6
6
  getSerperKey
7
- } from "./chunk-NMWRXDTN.js";
7
+ } from "./chunk-RX6FJNYV.js";
8
8
  import {
9
9
  ConfigStore
10
10
  } from "./chunk-FFJX3FF3.js";
11
- import "./chunk-WULZDTLD.js";
12
- import "./chunk-6EEN6XHK.js";
11
+ import "./chunk-OJTIUHJ5.js";
12
+ import "./chunk-ZLNJ2AH4.js";
13
13
  import {
14
14
  BFLImageService,
15
15
  BaseStorage,
@@ -21,7 +21,7 @@ import {
21
21
  OpenAIBackend,
22
22
  OpenAIImageService,
23
23
  XAIImageService
24
- } from "./chunk-QDWMIP2Q.js";
24
+ } from "./chunk-SUFMB67Z.js";
25
25
  import {
26
26
  AiEvents,
27
27
  ApiKeyEvents,
@@ -75,7 +75,7 @@ import {
75
75
  XAI_IMAGE_MODELS,
76
76
  b4mLLMTools,
77
77
  getMcpProviderMetadata
78
- } from "./chunk-CHBAKX4C.js";
78
+ } from "./chunk-4OFHBIBO.js";
79
79
  import {
80
80
  Logger
81
81
  } from "./chunk-OCYRD7D6.js";
@@ -3022,6 +3022,39 @@ SUBAGENT DELEGATION:
3022
3022
  - Subagents keep the main conversation clean and run faster with optimized models
3023
3023
  - Delegate when you need to search extensively or analyze code structure
3024
3024
 
3025
+ CODE SEARCH BEST PRACTICES:
3026
+ When searching code, follow this hierarchy for speed and efficiency:
3027
+
3028
+ 1. Start Narrow \u2192 Go Broad
3029
+ \u2705 Efficient: ${TOOL_GLOB_FILES}("src/**/*.test.ts") \u2192 ${TOOL_GREP_SEARCH}("test('user login'") \u2192 ${TOOL_FILE_READ}("src/auth/login.test.ts")
3030
+ \u274C Inefficient: ${TOOL_GREP_SEARCH}("login") \u2192 Read 50 files individually \u2192 Repeat with different term
3031
+
3032
+ 2. Leverage Git Information
3033
+ Before searching, check recent changes:
3034
+ - ${TOOL_BASH_EXECUTE}("git log --name-only --oneline -20")
3035
+ - ${TOOL_BASH_EXECUTE}("git log --oneline -10 -- src/auth/")
3036
+
3037
+ 3. File Patterns
3038
+ Use specific patterns instead of broad searches:
3039
+ \u2705 Good: ${TOOL_GLOB_FILES}("**/*.{ts,tsx}"), ${TOOL_GLOB_FILES}("src/components/**/Button*")
3040
+ \u274C Bad: ${TOOL_GLOB_FILES}("**/*"), ${TOOL_GREP_SEARCH}("auth")
3041
+
3042
+ 4. Test Files as Documentation
3043
+ When learning about a feature, check tests first:
3044
+ ${TOOL_GLOB_FILES}("**/*.test.{ts,tsx}") \u2192 ${TOOL_GREP_SEARCH}("describe('AuthProvider'") \u2192 ${TOOL_FILE_READ} test file \u2192 Read implementation
3045
+
3046
+ 5. Batch Operations
3047
+ Prefer glob patterns over multiple calls:
3048
+ \u2705 ${TOOL_GLOB_FILES}("src/**/*.{ts,tsx,js,jsx}") (one call)
3049
+ \u274C 4 separate ${TOOL_GLOB_FILES} calls for each extension
3050
+
3051
+ 6. Tool Selection Decision Tree
3052
+ Goal: Find where "AuthProvider" is defined
3053
+ \u2192 ${TOOL_GLOB_FILES}("**/*Auth*.{ts,tsx}") (narrow the search)
3054
+ \u2192 ${TOOL_GREP_SEARCH}("(class|interface|type) AuthProvider") (find exact location)
3055
+ \u2192 ${TOOL_FILE_READ}("src/auth/AuthProvider.tsx") (read only that file)
3056
+ Result: 3 tool calls instead of 10-15
3057
+
3025
3058
  FOR GENERAL TASKS:
3026
3059
  - Use available tools to get information (weather, web search, calculations, etc.)
3027
3060
  - When user asks follow-up questions, use conversation context to understand what they're referring to
@@ -8509,40 +8542,39 @@ var globFilesTool = {
8509
8542
  };
8510
8543
 
8511
8544
  // ../../b4m-core/packages/services/dist/src/llm/tools/implementation/grepSearch/index.js
8512
- import { globStream } from "glob";
8513
- import { readFile, stat as stat2 } from "fs/promises";
8545
+ import { stat as stat2 } from "fs/promises";
8514
8546
  import path9 from "path";
8515
- var MAX_FILE_SIZE3 = 10 * 1024 * 1024;
8516
- var DEFAULT_IGNORE_PATTERNS3 = [
8517
- "**/node_modules/**",
8518
- "**/.git/**",
8519
- "**/dist/**",
8520
- "**/build/**",
8521
- "**/.next/**",
8522
- "**/coverage/**",
8523
- "**/*.min.js",
8524
- "**/*.min.css",
8525
- "**/package-lock.json",
8526
- "**/pnpm-lock.yaml",
8527
- "**/yarn.lock"
8528
- ];
8529
- async function isBinaryFile2(filePath) {
8547
+ import { execFile } from "child_process";
8548
+ import { promisify } from "util";
8549
+ import { createRequire } from "module";
8550
+ var execFileAsync = promisify(execFile);
8551
+ var require2 = createRequire(import.meta.url);
8552
+ function getRipgrepPath() {
8530
8553
  try {
8531
- const { openSync, readSync, closeSync } = await import("fs");
8532
- const buffer = Buffer.alloc(8192);
8533
- const fd = openSync(filePath, "r");
8534
- const bytesRead = readSync(fd, buffer, 0, 8192, 0);
8535
- closeSync(fd);
8536
- const chunk = buffer.slice(0, bytesRead);
8537
- return chunk.includes(0);
8538
- } catch {
8539
- return true;
8554
+ const ripgrepPath = require2.resolve("@vscode/ripgrep");
8555
+ const ripgrepDir = path9.dirname(ripgrepPath);
8556
+ const rgBinary = path9.join(ripgrepDir, "..", "bin", "rg" + (process.platform === "win32" ? ".exe" : ""));
8557
+ return rgBinary;
8558
+ } catch (error) {
8559
+ throw new Error("ripgrep is not available. Please install @vscode/ripgrep: pnpm add @vscode/ripgrep --filter @bike4mind/services");
8540
8560
  }
8541
8561
  }
8542
8562
  function isPathWithinWorkspace(targetPath, baseCwd) {
8543
8563
  const resolvedTarget = path9.resolve(targetPath);
8544
8564
  const resolvedBase = path9.resolve(baseCwd);
8545
- return resolvedTarget.startsWith(resolvedBase);
8565
+ const relativePath = path9.relative(resolvedBase, resolvedTarget);
8566
+ return !relativePath.startsWith("..") && !path9.isAbsolute(relativePath);
8567
+ }
8568
+ function convertGlobToRipgrepGlobs(globPattern) {
8569
+ if (!globPattern || globPattern === "**/*") {
8570
+ return [];
8571
+ }
8572
+ const braceMatch = globPattern.match(/\*\.{([^}]+)}/);
8573
+ if (braceMatch) {
8574
+ const extensions = braceMatch[1].split(",");
8575
+ return extensions.map((ext) => `*.${ext.trim()}`);
8576
+ }
8577
+ return [globPattern];
8546
8578
  }
8547
8579
  async function searchFiles2(params) {
8548
8580
  const { pattern, dir_path, include } = params;
@@ -8562,59 +8594,69 @@ async function searchFiles2(params) {
8562
8594
  }
8563
8595
  throw error;
8564
8596
  }
8565
- let searchRegex;
8597
+ const rgPath = getRipgrepPath();
8598
+ const rgArgs = [
8599
+ "--json",
8600
+ // Machine-readable output
8601
+ "--max-count",
8602
+ "500",
8603
+ // Limit matches per file
8604
+ "--ignore-case",
8605
+ // Case-insensitive search
8606
+ "--max-filesize",
8607
+ "10M"
8608
+ // Skip files larger than 10MB
8609
+ ];
8610
+ const globs = convertGlobToRipgrepGlobs(include || "");
8611
+ if (globs.length > 0) {
8612
+ globs.forEach((glob2) => {
8613
+ rgArgs.push("--glob", glob2);
8614
+ });
8615
+ }
8616
+ rgArgs.push(pattern, targetDir);
8617
+ let stdout;
8566
8618
  try {
8567
- searchRegex = new RegExp(pattern, "i");
8619
+ const result2 = await execFileAsync(rgPath, rgArgs, {
8620
+ maxBuffer: 50 * 1024 * 1024
8621
+ // 50MB buffer for large results
8622
+ });
8623
+ stdout = result2.stdout;
8568
8624
  } catch (error) {
8569
- throw new Error(`Invalid regex pattern: ${pattern}`);
8625
+ const execError = error;
8626
+ if (execError.code === 1 && execError.stdout) {
8627
+ stdout = execError.stdout;
8628
+ } else if (execError.code === 2) {
8629
+ const errorMsg = execError.stderr || "Unknown ripgrep error";
8630
+ throw new Error(`Ripgrep error: ${errorMsg}`);
8631
+ } else {
8632
+ throw error;
8633
+ }
8570
8634
  }
8571
- const globPattern = include || "**/*";
8572
- const filesStream = globStream(globPattern, {
8573
- cwd: targetDir,
8574
- dot: false,
8575
- // Skip hidden files
8576
- ignore: DEFAULT_IGNORE_PATTERNS3,
8577
- absolute: true,
8578
- nodir: true
8579
- // Only match files, not directories
8580
- });
8635
+ const lines = stdout.split("\n").filter(Boolean);
8581
8636
  const allMatches = [];
8582
8637
  let filesSearched = 0;
8583
- const maxMatches = 500;
8584
- for await (const filePath of filesStream) {
8585
- if (allMatches.length >= maxMatches) {
8586
- break;
8587
- }
8588
- const fileAbsPath = filePath;
8638
+ for (const line of lines) {
8589
8639
  try {
8590
- const stats = await stat2(fileAbsPath);
8591
- if (stats.size > MAX_FILE_SIZE3) {
8592
- continue;
8593
- }
8594
- if (await isBinaryFile2(fileAbsPath)) {
8595
- continue;
8596
- }
8597
- filesSearched++;
8598
- const content = await readFile(fileAbsPath, "utf8");
8599
- const lines = content.split(/\r?\n/);
8600
- lines.forEach((line, index) => {
8601
- if (allMatches.length < maxMatches && searchRegex.test(line)) {
8602
- allMatches.push({
8603
- filePath: path9.relative(targetDir, fileAbsPath) || path9.basename(fileAbsPath),
8604
- lineNumber: index + 1,
8605
- line
8606
- });
8607
- }
8608
- });
8609
- } catch (readError) {
8610
- const errCode = readError.code;
8611
- if (errCode !== "ENOENT" && errCode !== "EACCES") {
8612
- console.debug(`Could not read ${fileAbsPath}: ${readError.message}`);
8640
+ const item = JSON.parse(line);
8641
+ if (item.type === "match") {
8642
+ const match = item;
8643
+ allMatches.push({
8644
+ filePath: path9.relative(targetDir, match.data.path.text) || path9.basename(match.data.path.text),
8645
+ lineNumber: match.data.line_number,
8646
+ line: match.data.lines.text.trimEnd()
8647
+ // Remove trailing newline
8648
+ });
8649
+ } else if (item.type === "summary") {
8650
+ const stats = item;
8651
+ filesSearched = stats.data.stats.searches || 0;
8613
8652
  }
8653
+ } catch {
8654
+ continue;
8614
8655
  }
8615
8656
  }
8616
8657
  const searchDirDisplay = dir_path || ".";
8617
8658
  const filterInfo = include ? ` (filter: "${include}")` : "";
8659
+ const maxMatches = 500;
8618
8660
  if (allMatches.length === 0) {
8619
8661
  return `No matches found for pattern "${pattern}" in "${searchDirDisplay}"${filterInfo}.
8620
8662
  Searched ${filesSearched} file(s).`;
@@ -8624,7 +8666,6 @@ Searched ${filesSearched} file(s).`;
8624
8666
  acc[match.filePath] = [];
8625
8667
  }
8626
8668
  acc[match.filePath].push(match);
8627
- acc[match.filePath].sort((a, b) => a.lineNumber - b.lineNumber);
8628
8669
  return acc;
8629
8670
  }, {});
8630
8671
  const matchCount = allMatches.length;
@@ -9504,7 +9545,7 @@ var ToolErrorType;
9504
9545
 
9505
9546
  // src/utils/diffPreview.ts
9506
9547
  import * as Diff from "diff";
9507
- import { readFile as readFile2 } from "fs/promises";
9548
+ import { readFile } from "fs/promises";
9508
9549
  import { existsSync as existsSync7 } from "fs";
9509
9550
  async function generateFileDiffPreview(args) {
9510
9551
  try {
@@ -9519,7 +9560,7 @@ ${preview}${hasMore ? `
9519
9560
 
9520
9561
  ... (${lines2.length - 20} more lines)` : ""}`;
9521
9562
  }
9522
- const currentContent = await readFile2(args.path, "utf-8");
9563
+ const currentContent = await readFile(args.path, "utf-8");
9523
9564
  const patch = Diff.createPatch(
9524
9565
  args.path,
9525
9566
  currentContent,
@@ -11430,7 +11471,7 @@ import { isAxiosError as isAxiosError2 } from "axios";
11430
11471
  // package.json
11431
11472
  var package_default = {
11432
11473
  name: "@bike4mind/cli",
11433
- version: "0.2.17-refactor-github-mcp.17671+548acbf44",
11474
+ version: "0.2.18-cj-GH6131.17754+22ab67e90",
11434
11475
  type: "module",
11435
11476
  description: "Interactive CLI tool for Bike4Mind with ReAct agents",
11436
11477
  license: "UNLICENSED",
@@ -11537,10 +11578,10 @@ var package_default = {
11537
11578
  },
11538
11579
  devDependencies: {
11539
11580
  "@bike4mind/agents": "0.1.0",
11540
- "@bike4mind/common": "2.43.1-refactor-github-mcp.17671+548acbf44",
11541
- "@bike4mind/mcp": "1.22.3-refactor-github-mcp.17671+548acbf44",
11542
- "@bike4mind/services": "2.40.1-refactor-github-mcp.17671+548acbf44",
11543
- "@bike4mind/utils": "2.2.1-refactor-github-mcp.17671+548acbf44",
11581
+ "@bike4mind/common": "2.43.1-cj-GH6131.17754+22ab67e90",
11582
+ "@bike4mind/mcp": "1.22.4-cj-GH6131.17754+22ab67e90",
11583
+ "@bike4mind/services": "2.41.1-cj-GH6131.17754+22ab67e90",
11584
+ "@bike4mind/utils": "2.2.1-cj-GH6131.17754+22ab67e90",
11544
11585
  "@types/better-sqlite3": "^7.6.13",
11545
11586
  "@types/diff": "^5.0.9",
11546
11587
  "@types/jsonwebtoken": "^9.0.4",
@@ -11554,7 +11595,10 @@ var package_default = {
11554
11595
  typescript: "^5.9.3",
11555
11596
  vitest: "^3.2.4"
11556
11597
  },
11557
- gitHead: "548acbf44daf8fa328e270575abd166e79e01ec5"
11598
+ optionalDependencies: {
11599
+ "@vscode/ripgrep": "^1.17.0"
11600
+ },
11601
+ gitHead: "22ab67e90741cead451cc50d87c3eecf5522f9ab"
11558
11602
  };
11559
11603
 
11560
11604
  // src/config/constants.ts
@@ -11754,6 +11798,14 @@ Focus on:
11754
11798
 
11755
11799
  You have read-only access. Use file_read, grep_search, and glob_files to explore.
11756
11800
 
11801
+ CODE SEARCH EFFICIENCY:
11802
+ 1. Start narrow with glob_files using specific patterns (e.g., "**/*Auth*.ts")
11803
+ 2. Then use grep_search with precise regex on narrowed results
11804
+ 3. Finally use file_read only on relevant files
11805
+ 4. Leverage git log to find recent changes
11806
+ 5. Check test files first to understand feature usage
11807
+ 6. Batch glob operations instead of multiple separate calls
11808
+
11757
11809
  When you find what you're looking for, provide a clear summary including:
11758
11810
  1. What you found (files, functions, patterns)
11759
11811
  2. Key insights or observations
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-CHBAKX4C.js";
4
+ } from "./chunk-4OFHBIBO.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/llmMarkdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-CHBAKX4C.js";
4
+ } from "./chunk-4OFHBIBO.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/markdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  findMostSimilarMemento,
4
4
  getRelevantMementos
5
- } from "./chunk-NMWRXDTN.js";
6
- import "./chunk-QDWMIP2Q.js";
7
- import "./chunk-CHBAKX4C.js";
5
+ } from "./chunk-RX6FJNYV.js";
6
+ import "./chunk-SUFMB67Z.js";
7
+ import "./chunk-4OFHBIBO.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  findMostSimilarMemento,
@@ -299,7 +299,7 @@ import {
299
299
  validateReactArtifactV2,
300
300
  validateSvgArtifactV2,
301
301
  wikiMarkupToAdf
302
- } from "./chunk-CHBAKX4C.js";
302
+ } from "./chunk-4OFHBIBO.js";
303
303
  export {
304
304
  ALL_IMAGE_MODELS,
305
305
  ALL_IMAGE_SIZES,
@@ -129,8 +129,8 @@ import {
129
129
  validateMermaidSyntax,
130
130
  warmUpSettingsCache,
131
131
  withRetry
132
- } from "./chunk-QDWMIP2Q.js";
133
- import "./chunk-CHBAKX4C.js";
132
+ } from "./chunk-SUFMB67Z.js";
133
+ import "./chunk-4OFHBIBO.js";
134
134
  import {
135
135
  Logger,
136
136
  NotificationDeduplicator,
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  SubtractCreditsSchema,
4
4
  subtractCredits
5
- } from "./chunk-WULZDTLD.js";
6
- import "./chunk-QDWMIP2Q.js";
7
- import "./chunk-CHBAKX4C.js";
5
+ } from "./chunk-OJTIUHJ5.js";
6
+ import "./chunk-SUFMB67Z.js";
7
+ import "./chunk-4OFHBIBO.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  SubtractCreditsSchema,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bike4mind/cli",
3
- "version": "0.2.17-refactor-github-mcp.17671+548acbf44",
3
+ "version": "0.2.18-cj-GH6131.17754+22ab67e90",
4
4
  "type": "module",
5
5
  "description": "Interactive CLI tool for Bike4Mind with ReAct agents",
6
6
  "license": "UNLICENSED",
@@ -107,10 +107,10 @@
107
107
  },
108
108
  "devDependencies": {
109
109
  "@bike4mind/agents": "0.1.0",
110
- "@bike4mind/common": "2.43.1-refactor-github-mcp.17671+548acbf44",
111
- "@bike4mind/mcp": "1.22.3-refactor-github-mcp.17671+548acbf44",
112
- "@bike4mind/services": "2.40.1-refactor-github-mcp.17671+548acbf44",
113
- "@bike4mind/utils": "2.2.1-refactor-github-mcp.17671+548acbf44",
110
+ "@bike4mind/common": "2.43.1-cj-GH6131.17754+22ab67e90",
111
+ "@bike4mind/mcp": "1.22.4-cj-GH6131.17754+22ab67e90",
112
+ "@bike4mind/services": "2.41.1-cj-GH6131.17754+22ab67e90",
113
+ "@bike4mind/utils": "2.2.1-cj-GH6131.17754+22ab67e90",
114
114
  "@types/better-sqlite3": "^7.6.13",
115
115
  "@types/diff": "^5.0.9",
116
116
  "@types/jsonwebtoken": "^9.0.4",
@@ -124,5 +124,8 @@
124
124
  "typescript": "^5.9.3",
125
125
  "vitest": "^3.2.4"
126
126
  },
127
- "gitHead": "548acbf44daf8fa328e270575abd166e79e01ec5"
127
+ "optionalDependencies": {
128
+ "@vscode/ripgrep": "^1.17.0"
129
+ },
130
+ "gitHead": "22ab67e90741cead451cc50d87c3eecf5522f9ab"
128
131
  }