@bike4mind/cli 0.2.25-cli-file-read-offset.18514 → 0.2.25-cli-file-read-offset.18541

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 CHANGED
@@ -183,6 +183,7 @@ export SERPER_API_KEY="your-key-here"
183
183
  - ✅ `current_datetime` - No API key needed
184
184
  - ✅ `prompt_enhancement` - No API key needed
185
185
  - ✅ `bash_execute` - No API key needed
186
+ - ✅ `recent_changes` - No API key needed (git-based file search by modification time)
186
187
  - 🔑 `weather_info` - Requires `toolApiKeys.openweather`
187
188
  - 🔑 `web_search` - Requires `toolApiKeys.serper`
188
189
  - 🔑 `deep_research` - Requires `toolApiKeys.serper`
@@ -264,6 +265,36 @@ You can also run any MCP server via npx or custom executables:
264
265
 
265
266
  **Note:** Internal MCP servers must be built and available in the `b4m-core/packages/mcp/dist/src/` directory. The CLI will automatically find them if you're running from the monorepo. For Docker-based servers, ensure Docker is installed and the image is accessible.
266
267
 
268
+ ## Git-Aware Code Search
269
+
270
+ The CLI includes a `recent_changes` tool that uses git history to find recently modified files. This significantly speeds up debugging by narrowing the search space to recently changed code.
271
+
272
+ ### Use Cases
273
+
274
+ - **Recent bug debugging:** "I just broke something, can you help fix it?"
275
+ - **Understanding feature development:** "What did we change for the new dashboard?"
276
+ - **Finding active development areas:** "What are we actively working on?"
277
+ - **Code review prep:** "What changed since last release?"
278
+
279
+ ### Parameters
280
+
281
+ - `since` - Time range to search (default: "7 days ago")
282
+ - Examples: "2 hours ago", "3 days ago", "2025-01-01"
283
+ - `path` - Filter to specific directory (default: entire repo)
284
+ - Examples: "src/components", "apps/client", "**/*.test.ts"
285
+ - `limit` - Maximum files to return (default: 50)
286
+ - `include_stats` - Show lines added/removed (default: false)
287
+
288
+ ### How It Works
289
+
290
+ The tool uses `git log` to track file modifications and returns:
291
+ - Files sorted by activity (most commits first)
292
+ - Commit messages for context
293
+ - Optional statistics showing lines changed
294
+ - Filtered results based on time and path
295
+
296
+ **Performance benefit:** Instead of searching 50+ files (5-10 minutes), find the 3 relevant files in ~30 seconds.
297
+
267
298
  ## Context Files
268
299
 
269
300
  The CLI supports loading project-specific instructions from context files, similar to CLAUDE.md in Claude Code. These files provide persistent instructions that are automatically included in the agent's system prompt.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-LOIWIBZT.js";
4
+ } from "./chunk-CRG4F6FD.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;
@@ -303,17 +303,8 @@ var b4mLLMTools = z5.enum([
303
303
  "sunrise_sunset",
304
304
  "iss_tracker",
305
305
  "planet_visibility",
306
- // File operation tools
307
- "file_read",
308
- "create_file",
309
- "edit_local_file",
310
- "glob_files",
311
- "grep_search",
312
- "delete_file",
313
306
  // Knowledge base search
314
- "search_knowledge_base",
315
- // Shell execution
316
- "bash_execute"
307
+ "search_knowledge_base"
317
308
  ]);
318
309
  var B4MLLMToolsList = b4mLLMTools.options.map((tool) => tool);
319
310
  var RechartsChartTypeSchema = z5.enum([
@@ -2253,6 +2244,8 @@ var SettingKeySchema = z21.enum([
2253
2244
  "StreamIdleTimeoutSeconds",
2254
2245
  "EnableMcpToolFiltering",
2255
2246
  "McpToolFilteringMaxTools",
2247
+ // PARALLEL TOOL EXECUTION SETTINGS
2248
+ "EnableParallelToolExecution",
2256
2249
  // LIVEOPS TRIAGE AUTOMATION SETTINGS
2257
2250
  "liveopsTriageConfig"
2258
2251
  ]);
@@ -2672,7 +2665,8 @@ var API_SERVICE_GROUPS = {
2672
2665
  { key: "EnableStreamIdleTimeout", order: 12 },
2673
2666
  { key: "StreamIdleTimeoutSeconds", order: 13 },
2674
2667
  { key: "EnableMcpToolFiltering", order: 14 },
2675
- { key: "McpToolFilteringMaxTools", order: 15 }
2668
+ { key: "McpToolFilteringMaxTools", order: 15 },
2669
+ { key: "EnableParallelToolExecution", order: 16 }
2676
2670
  ]
2677
2671
  },
2678
2672
  NOTEBOOK: {
@@ -3813,6 +3807,16 @@ var settingsMap = {
3813
3807
  group: API_SERVICE_GROUPS.EXPERIMENTAL.id,
3814
3808
  order: 15
3815
3809
  }),
3810
+ // Parallel Tool Execution Settings
3811
+ EnableParallelToolExecution: makeBooleanSetting({
3812
+ key: "EnableParallelToolExecution",
3813
+ name: "Enable Parallel Tool Execution",
3814
+ defaultValue: false,
3815
+ description: "Execute read-only tools (file reads, searches) in parallel for 2-3x speed improvement. Write tools still execute sequentially for safety.",
3816
+ category: "Experimental",
3817
+ group: API_SERVICE_GROUPS.EXPERIMENTAL.id,
3818
+ order: 16
3819
+ }),
3816
3820
  liveopsTriageConfig: makeObjectSetting({
3817
3821
  key: "liveopsTriageConfig",
3818
3822
  name: "LiveOps Triage Configuration",
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/store/index.ts
4
+ import { create } from "zustand";
5
+ var useCliStore = create((set) => ({
6
+ // Session state
7
+ session: null,
8
+ setSession: (session) => set({ session }),
9
+ addMessage: (message) => set((state) => {
10
+ if (!state.session) return state;
11
+ return {
12
+ session: {
13
+ ...state.session,
14
+ messages: [...state.session.messages, message],
15
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
16
+ }
17
+ };
18
+ }),
19
+ // Pending messages
20
+ pendingMessages: [],
21
+ addPendingMessage: (message) => set((state) => ({ pendingMessages: [...state.pendingMessages, message] })),
22
+ updatePendingMessage: (index, message) => set((state) => {
23
+ const updated = [...state.pendingMessages];
24
+ updated[index] = message;
25
+ return { pendingMessages: updated };
26
+ }),
27
+ clearPendingMessages: () => set({ pendingMessages: [] }),
28
+ completePendingMessage: (index, finalMessage) => set((state) => {
29
+ const pending = [...state.pendingMessages];
30
+ pending.splice(index, 1);
31
+ const session = state.session;
32
+ if (!session) return { pendingMessages: pending };
33
+ return {
34
+ pendingMessages: pending,
35
+ session: {
36
+ ...session,
37
+ messages: [...session.messages, finalMessage],
38
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
39
+ }
40
+ };
41
+ }),
42
+ // UI state
43
+ isThinking: false,
44
+ setIsThinking: (thinking) => set({ isThinking: thinking }),
45
+ // Input state (for Ctrl+C clearing)
46
+ inputValue: "",
47
+ setInputValue: (value) => set({ inputValue: value }),
48
+ clearInput: () => set({ inputValue: "" }),
49
+ // Permission prompt
50
+ permissionPrompt: null,
51
+ setPermissionPrompt: (prompt) => set({ permissionPrompt: prompt }),
52
+ // Config editor
53
+ showConfigEditor: false,
54
+ setShowConfigEditor: (show) => set({ showConfigEditor: show }),
55
+ // MCP viewer
56
+ showMcpViewer: false,
57
+ setShowMcpViewer: (show) => set({ showMcpViewer: show }),
58
+ // Auto-accept edits toggle (Shift+Tab)
59
+ autoAcceptEdits: false,
60
+ toggleAutoAcceptEdits: () => set((state) => ({ autoAcceptEdits: !state.autoAcceptEdits })),
61
+ // Exit handling
62
+ exitRequested: false,
63
+ setExitRequested: (requested) => set({ exitRequested: requested })
64
+ }));
65
+
66
+ export {
67
+ useCliStore
68
+ };
@@ -6,12 +6,12 @@ import {
6
6
  getSettingsByNames,
7
7
  obfuscateApiKey,
8
8
  secureParameters
9
- } from "./chunk-XFN2ICKP.js";
9
+ } from "./chunk-KGERFIL4.js";
10
10
  import {
11
11
  ApiKeyType,
12
12
  MementoTier,
13
13
  isSupportedEmbeddingModel
14
- } from "./chunk-LOIWIBZT.js";
14
+ } from "./chunk-CRG4F6FD.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/apiKeyService/get.js
17
17
  import { z } from "zod";
@@ -15,7 +15,7 @@ import {
15
15
  dayjsConfig_default,
16
16
  extractSnippetMeta,
17
17
  settingsMap
18
- } from "./chunk-LOIWIBZT.js";
18
+ } from "./chunk-CRG4F6FD.js";
19
19
  import {
20
20
  Logger
21
21
  } from "./chunk-OCYRD7D6.js";
@@ -7,11 +7,11 @@ import {
7
7
  getSettingsMap,
8
8
  getSettingsValue,
9
9
  secureParameters
10
- } from "./chunk-XFN2ICKP.js";
10
+ } from "./chunk-KGERFIL4.js";
11
11
  import {
12
12
  KnowledgeType,
13
13
  SupportedFabFileMimeTypes
14
- } from "./chunk-LOIWIBZT.js";
14
+ } from "./chunk-CRG4F6FD.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/fabFileService/create.js
17
17
  import { z } from "zod";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BadRequestError,
4
4
  secureParameters
5
- } from "./chunk-XFN2ICKP.js";
5
+ } from "./chunk-KGERFIL4.js";
6
6
  import {
7
7
  CompletionApiUsageTransaction,
8
8
  GenericCreditDeductTransaction,
@@ -12,7 +12,7 @@ import {
12
12
  TextGenerationUsageTransaction,
13
13
  TransferCreditTransaction,
14
14
  VideoGenerationUsageTransaction
15
- } from "./chunk-LOIWIBZT.js";
15
+ } from "./chunk-CRG4F6FD.js";
16
16
 
17
17
  // ../../b4m-core/packages/services/dist/src/creditService/subtractCredits.js
18
18
  import { z } from "zod";
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createFabFile,
4
4
  createFabFileSchema
5
- } from "./chunk-GGQZHK5U.js";
6
- import "./chunk-XFN2ICKP.js";
7
- import "./chunk-LOIWIBZT.js";
5
+ } from "./chunk-QDD3PG2I.js";
6
+ import "./chunk-KGERFIL4.js";
7
+ import "./chunk-CRG4F6FD.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  createFabFile,