@bike4mind/cli 0.2.28 → 0.2.29-cli-minimal-ui.18782

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
@@ -101,7 +101,7 @@ While in interactive mode:
101
101
 
102
102
  **Session Management:**
103
103
  - `/save <name>` - Save current session
104
- - `/sessions` - List saved sessions
104
+ - `/resume` - List and resume saved sessions
105
105
 
106
106
  **API Configuration:**
107
107
  - `/set-api <url>` - Connect to self-hosted Bike4Mind instance
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-XJRPAAUS.js";
4
+ } from "./chunk-ODYASVT6.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;
@@ -6,12 +6,12 @@ import {
6
6
  getSettingsByNames,
7
7
  obfuscateApiKey,
8
8
  secureParameters
9
- } from "./chunk-UNOJBVD2.js";
9
+ } from "./chunk-HDIXO6H3.js";
10
10
  import {
11
11
  ApiKeyType,
12
12
  MementoTier,
13
13
  isSupportedEmbeddingModel
14
- } from "./chunk-XJRPAAUS.js";
14
+ } from "./chunk-ODYASVT6.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/apiKeyService/get.js
17
17
  import { z } from "zod";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BadRequestError,
4
4
  secureParameters
5
- } from "./chunk-UNOJBVD2.js";
5
+ } from "./chunk-HDIXO6H3.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-XJRPAAUS.js";
15
+ } from "./chunk-ODYASVT6.js";
16
16
 
17
17
  // ../../b4m-core/packages/services/dist/src/creditService/subtractCredits.js
18
18
  import { z } from "zod";
@@ -15,7 +15,7 @@ import {
15
15
  dayjsConfig_default,
16
16
  extractSnippetMeta,
17
17
  settingsMap
18
- } from "./chunk-XJRPAAUS.js";
18
+ } from "./chunk-ODYASVT6.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-UNOJBVD2.js";
10
+ } from "./chunk-HDIXO6H3.js";
11
11
  import {
12
12
  KnowledgeType,
13
13
  SupportedFabFileMimeTypes
14
- } from "./chunk-XJRPAAUS.js";
14
+ } from "./chunk-ODYASVT6.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/fabFileService/create.js
17
17
  import { z } from "zod";
@@ -2256,7 +2256,9 @@ var SettingKeySchema = z21.enum([
2256
2256
  // PARALLEL TOOL EXECUTION SETTINGS
2257
2257
  "EnableParallelToolExecution",
2258
2258
  // LIVEOPS TRIAGE AUTOMATION SETTINGS
2259
- "liveopsTriageConfig"
2259
+ "liveopsTriageConfig",
2260
+ // HELP CENTER SETTINGS
2261
+ "EnableHelpChat"
2260
2262
  ]);
2261
2263
  var CategoryOrder = [
2262
2264
  "AI",
@@ -2675,7 +2677,8 @@ var API_SERVICE_GROUPS = {
2675
2677
  { key: "StreamIdleTimeoutSeconds", order: 13 },
2676
2678
  { key: "EnableMcpToolFiltering", order: 14 },
2677
2679
  { key: "McpToolFilteringMaxTools", order: 15 },
2678
- { key: "EnableParallelToolExecution", order: 16 }
2680
+ { key: "EnableParallelToolExecution", order: 16 },
2681
+ { key: "EnableHelpChat", order: 17 }
2679
2682
  ]
2680
2683
  },
2681
2684
  NOTEBOOK: {
@@ -3846,6 +3849,16 @@ var settingsMap = {
3846
3849
  category: "Admin",
3847
3850
  order: 110,
3848
3851
  schema: LiveopsTriageConfigSchema
3852
+ }),
3853
+ // Help Center Settings
3854
+ EnableHelpChat: makeBooleanSetting({
3855
+ key: "EnableHelpChat",
3856
+ name: "Enable Help Chat",
3857
+ defaultValue: true,
3858
+ description: "Enable the AI-powered chat assistant in the Help Center panel. When enabled, users can ask questions about the documentation and get contextual answers.",
3859
+ category: "Experimental",
3860
+ group: API_SERVICE_GROUPS.EXPERIMENTAL.id,
3861
+ order: 17
3849
3862
  })
3850
3863
  // Add more settings as needed
3851
3864
  };
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createFabFile,
4
4
  createFabFileSchema
5
- } from "./chunk-ZEMWV6IR.js";
6
- import "./chunk-UNOJBVD2.js";
7
- import "./chunk-XJRPAAUS.js";
5
+ } from "./chunk-MDG22DS7.js";
6
+ import "./chunk-HDIXO6H3.js";
7
+ import "./chunk-ODYASVT6.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  createFabFile,
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  getEffectiveApiKey,
6
6
  getOpenWeatherKey,
7
7
  getSerperKey
8
- } from "./chunk-VGYTNJXN.js";
8
+ } from "./chunk-4XFX3V4G.js";
9
9
  import {
10
10
  ConfigStore
11
11
  } from "./chunk-23T2XGSZ.js";
@@ -13,8 +13,8 @@ import {
13
13
  selectActiveBackgroundAgents,
14
14
  useCliStore
15
15
  } from "./chunk-TVW4ZESU.js";
16
- import "./chunk-JJBDHUGY.js";
17
- import "./chunk-ZEMWV6IR.js";
16
+ import "./chunk-G7PAI2YH.js";
17
+ import "./chunk-MDG22DS7.js";
18
18
  import {
19
19
  BFLImageService,
20
20
  BaseStorage,
@@ -26,7 +26,7 @@ import {
26
26
  OpenAIBackend,
27
27
  OpenAIImageService,
28
28
  XAIImageService
29
- } from "./chunk-UNOJBVD2.js";
29
+ } from "./chunk-HDIXO6H3.js";
30
30
  import {
31
31
  AiEvents,
32
32
  ApiKeyEvents,
@@ -82,7 +82,7 @@ import {
82
82
  XAI_IMAGE_MODELS,
83
83
  b4mLLMTools,
84
84
  getMcpProviderMetadata
85
- } from "./chunk-XJRPAAUS.js";
85
+ } from "./chunk-ODYASVT6.js";
86
86
  import {
87
87
  Logger
88
88
  } from "./chunk-OCYRD7D6.js";
@@ -551,8 +551,9 @@ var COMMANDS = [
551
551
  args: "<name>"
552
552
  },
553
553
  {
554
- name: "sessions",
555
- description: "List saved sessions"
554
+ name: "resume",
555
+ description: "List and resume saved sessions",
556
+ aliases: ["sessions"]
556
557
  },
557
558
  {
558
559
  name: "config",
@@ -1112,11 +1113,11 @@ function InputPrompt({
1112
1113
  }
1113
1114
  };
1114
1115
  const getPlaceholder = () => {
1115
- if (disabled) return "Thinking...";
1116
+ if (disabled) return "";
1116
1117
  if (isBashMode) return "Enter shell command to execute...";
1117
1118
  return "Type your message, /help for commands, @file to reference, or ! for bash";
1118
1119
  };
1119
- return /* @__PURE__ */ React5.createElement(Box4, { flexDirection: "column" }, /* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Text5, { bold: true, color: isBashMode ? "yellow" : "cyan" }, isBashMode ? "$ " : "> "), /* @__PURE__ */ React5.createElement(
1120
+ return /* @__PURE__ */ React5.createElement(Box4, { flexDirection: "column" }, /* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Text5, { bold: true, color: disabled ? "gray" : isBashMode ? "yellow" : "cyan", dimColor: disabled }, isBashMode ? "$ " : "> "), /* @__PURE__ */ React5.createElement(
1120
1121
  CustomTextInput,
1121
1122
  {
1122
1123
  key: inputKey.current,
@@ -1139,7 +1140,7 @@ import React6 from "react";
1139
1140
  import { Box as Box5, Text as Text6 } from "ink";
1140
1141
  import Spinner from "ink-spinner";
1141
1142
  var ThoughtStream = React6.memo(function ThoughtStream2({ isThinking }) {
1142
- return /* @__PURE__ */ React6.createElement(Box5, { flexDirection: "column", gap: 1 }, isThinking && /* @__PURE__ */ React6.createElement(Box5, null, /* @__PURE__ */ React6.createElement(Text6, { color: "yellow" }, /* @__PURE__ */ React6.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React6.createElement(Text6, null, " Thinking...")));
1143
+ return /* @__PURE__ */ React6.createElement(Box5, { flexDirection: "column" }, isThinking && /* @__PURE__ */ React6.createElement(Box5, null, /* @__PURE__ */ React6.createElement(Text6, { color: "yellow" }, /* @__PURE__ */ React6.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React6.createElement(Text6, null, " Thinking...")));
1143
1144
  });
1144
1145
 
1145
1146
  // src/components/AgentThinking.tsx
@@ -1707,33 +1708,21 @@ function truncateValue(value, maxLength) {
1707
1708
  }
1708
1709
  return str.slice(0, maxLength) + "...";
1709
1710
  }
1710
- function getRoleDisplay(role) {
1711
- switch (role) {
1712
- case "user":
1713
- return { color: "cyan", label: "\u{1F464} You" };
1714
- case "system":
1715
- return { color: "gray", label: "\u2139\uFE0F System" };
1716
- default:
1717
- return { color: "green", label: "\u{1F916} Assistant" };
1718
- }
1719
- }
1720
1711
  var MessageItem = React14.memo(function MessageItem2({ message }) {
1721
1712
  const isUser = message.role === "user";
1722
- const isContinuation = message.metadata?.isContinuation === true;
1723
- const roleDisplay = getRoleDisplay(message.role);
1724
- return /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", marginBottom: 1 }, !isContinuation && /* @__PURE__ */ React14.createElement(Box13, null, /* @__PURE__ */ React14.createElement(Text13, { bold: true, color: roleDisplay.color }, roleDisplay.label), isUser && /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, " \u2022 ", new Date(message.timestamp).toLocaleTimeString())), isUser && message.content && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2 }, /* @__PURE__ */ React14.createElement(Text13, { backgroundColor: "whiteBright", color: "black" }, " ", message.content, " ")), !isUser && message.metadata?.steps && message.metadata.steps.length > 0 && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React14.createElement(Text13, { dimColor: true, bold: true }, "\u{1F527} Agent Reasoning Trace (", message.metadata.steps.filter((s) => s.type === "action").length, " ", "tools used, ", message.metadata.steps.length, " total steps)", message.metadata.tokenUsage && ` \u2022 ${message.metadata.tokenUsage.total} tokens`), /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, "Step types: ", message.metadata.steps.map((s) => s.type).join(", ")), message.metadata.steps.map((step, idx) => {
1713
+ return /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column" }, isUser && message.content && /* @__PURE__ */ React14.createElement(Box13, { marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text13, { backgroundColor: "whiteBright", color: "black" }, "\u276F ", message.content, " ")), !isUser && message.metadata?.steps && message.metadata.steps.filter((s) => ["thought", "action"].includes(s.type)).length > 0 && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2, flexDirection: "column", marginBottom: 1 }, message.metadata.steps.map((step, idx) => {
1725
1714
  if (step.type === "thought") {
1726
- return /* @__PURE__ */ React14.createElement(Box13, { key: idx, paddingLeft: 2, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React14.createElement(Text13, { color: "blue" }, "\u{1F4AD} Thought:"), /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` ${step.content}`));
1715
+ return /* @__PURE__ */ React14.createElement(Box13, { key: idx, flexDirection: "column" }, /* @__PURE__ */ React14.createElement(Text13, { color: "blue" }, "\u{1F4AD} Thought:"), /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` ${step.content}`));
1727
1716
  }
1728
1717
  if (step.type === "action") {
1729
1718
  const toolName = step.metadata?.toolName || "unknown";
1730
1719
  const toolInput = step.metadata?.toolInput;
1731
1720
  const observationStep = message.metadata?.steps?.[idx + 1];
1732
1721
  const result = observationStep?.type === "observation" ? observationStep.content : null;
1733
- return /* @__PURE__ */ React14.createElement(Box13, { key: idx, paddingLeft: 2, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React14.createElement(Text13, { color: "yellow" }, "\u{1F527} Action: ", toolName), toolInput && /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` Input: ${truncateValue(toolInput, 100)}`), result && /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` Result: ${truncateValue(result, 200)}`));
1722
+ return /* @__PURE__ */ React14.createElement(Box13, { key: idx, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React14.createElement(Text13, { color: "yellow" }, "\u{1F527} ", toolName), toolInput && /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` Input: ${truncateValue(toolInput, 100)}`), result && /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, ` Result: ${truncateValue(result, 200)}`));
1734
1723
  }
1735
1724
  return null;
1736
- }).filter(Boolean)), !isUser && message.content !== "..." && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2, marginTop: message.metadata?.steps?.length ? 1 : 0 }, message.metadata?.permissionDenied ? /* @__PURE__ */ React14.createElement(Text13, { color: "yellow" }, "\u26A0\uFE0F ", message.content) : /* @__PURE__ */ React14.createElement(MarkdownRenderer, { content: message.content })), message.metadata?.tokenUsage && (!message.metadata.steps || message.metadata.steps.length === 0) && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2 }, /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, `${message.metadata.tokenUsage.total} tokens`)));
1725
+ }).filter(Boolean)), !isUser && message.content !== "..." && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2, marginBottom: 1 }, message.metadata?.permissionDenied ? /* @__PURE__ */ React14.createElement(Text13, { color: "yellow" }, "\u26A0\uFE0F ", message.content) : /* @__PURE__ */ React14.createElement(MarkdownRenderer, { content: message.content })), message.metadata?.tokenUsage && (!message.metadata.steps || message.metadata.steps.length === 0) && /* @__PURE__ */ React14.createElement(Box13, { paddingLeft: 2 }, /* @__PURE__ */ React14.createElement(Text13, { dimColor: true }, `${message.metadata.tokenUsage.total} tokens`)));
1737
1726
  });
1738
1727
 
1739
1728
  // src/utils/processFileReferences.ts
@@ -2163,7 +2152,7 @@ function SessionSelector({ sessions, currentSession, onSelect, onCancel }) {
2163
2152
  {
2164
2153
  items,
2165
2154
  onSelect: handleSelectionSelect,
2166
- itemComponent: ({ isSelected, label }) => /* @__PURE__ */ React19.createElement(Box18, null, /* @__PURE__ */ React19.createElement(Text18, { color: isSelected ? "cyan" : void 0 }, isSelected ? "\u276F " : " ", label))
2155
+ itemComponent: ({ isSelected, label }) => /* @__PURE__ */ React19.createElement(Box18, null, /* @__PURE__ */ React19.createElement(Text18, { color: isSelected ? "cyan" : void 0 }, label))
2167
2156
  }
2168
2157
  ), /* @__PURE__ */ React19.createElement(Box18, { marginTop: 1 }, /* @__PURE__ */ React19.createElement(Text18, { dimColor: true }, "Use \u2191\u2193 arrows to navigate, Enter to select, Esc to cancel")));
2169
2158
  }
@@ -2176,7 +2165,7 @@ function SessionSelector({ sessions, currentSession, onSelect, onCancel }) {
2176
2165
  {
2177
2166
  items: confirmationItems,
2178
2167
  onSelect: handleConfirmationSelect,
2179
- itemComponent: ({ isSelected, label }) => /* @__PURE__ */ React19.createElement(Box18, null, /* @__PURE__ */ React19.createElement(Text18, { color: isSelected ? "cyan" : void 0 }, isSelected ? "\u276F " : " ", label))
2168
+ itemComponent: ({ isSelected, label }) => /* @__PURE__ */ React19.createElement(Box18, null, /* @__PURE__ */ React19.createElement(Text18, { color: isSelected ? "cyan" : void 0 }, label))
2180
2169
  }
2181
2170
  ), /* @__PURE__ */ React19.createElement(Box18, { marginTop: 1 }, /* @__PURE__ */ React19.createElement(Text18, { dimColor: true }, "Use \u2191\u2193 arrows to navigate, Enter to select, Esc to go back")));
2182
2171
  }
@@ -3717,18 +3706,23 @@ Remember: You are an autonomous AGENT. Act independently and solve problems proa
3717
3706
  async executeToolWithQueueFallback(toolUse) {
3718
3707
  const queuedObs = this.observationQueue.find((obs) => obs.toolId === getToolId(toolUse));
3719
3708
  if (queuedObs) {
3720
- const result2 = queuedObs.result;
3709
+ const result = queuedObs.result;
3721
3710
  const index = this.observationQueue.indexOf(queuedObs);
3722
3711
  this.observationQueue.splice(index, 1);
3723
- return typeof result2 === "string" ? result2 : JSON.stringify(result2);
3712
+ return typeof result === "string" ? result : JSON.stringify(result);
3724
3713
  }
3725
3714
  const tool = this.context.tools.find((t) => t.toolSchema.name === toolUse.name);
3726
3715
  if (!tool) {
3727
- throw new Error(`Tool ${toolUse.name} not found in agent context`);
3716
+ return `Error: Tool ${toolUse.name} not found in agent context`;
3717
+ }
3718
+ try {
3719
+ const params = this.parseToolArguments(toolUse.arguments);
3720
+ const result = await tool.toolFn(params);
3721
+ return typeof result === "string" ? result : JSON.stringify(result);
3722
+ } catch (error) {
3723
+ const message = error instanceof Error ? error.message : String(error);
3724
+ return `Error: ${message}`;
3728
3725
  }
3729
- const params = this.parseToolArguments(toolUse.arguments);
3730
- const result = await tool.toolFn(params);
3731
- return typeof result === "string" ? result : JSON.stringify(result);
3732
3726
  }
3733
3727
  /**
3734
3728
  * Build and append tool call/result messages for the conversation history
@@ -13801,7 +13795,7 @@ import { isAxiosError as isAxiosError2 } from "axios";
13801
13795
  // package.json
13802
13796
  var package_default = {
13803
13797
  name: "@bike4mind/cli",
13804
- version: "0.2.28",
13798
+ version: "0.2.29-cli-minimal-ui.18782+8a5b862a2",
13805
13799
  type: "module",
13806
13800
  description: "Interactive CLI tool for Bike4Mind with ReAct agents",
13807
13801
  license: "UNLICENSED",
@@ -13909,10 +13903,10 @@ var package_default = {
13909
13903
  },
13910
13904
  devDependencies: {
13911
13905
  "@bike4mind/agents": "0.1.0",
13912
- "@bike4mind/common": "2.50.0",
13913
- "@bike4mind/mcp": "1.29.0",
13914
- "@bike4mind/services": "2.48.0",
13915
- "@bike4mind/utils": "2.5.0",
13906
+ "@bike4mind/common": "2.50.1-cli-minimal-ui.18782+8a5b862a2",
13907
+ "@bike4mind/mcp": "1.29.1-cli-minimal-ui.18782+8a5b862a2",
13908
+ "@bike4mind/services": "2.48.1-cli-minimal-ui.18782+8a5b862a2",
13909
+ "@bike4mind/utils": "2.5.1-cli-minimal-ui.18782+8a5b862a2",
13916
13910
  "@types/better-sqlite3": "^7.6.13",
13917
13911
  "@types/diff": "^5.0.9",
13918
13912
  "@types/jsonwebtoken": "^9.0.4",
@@ -13929,7 +13923,7 @@ var package_default = {
13929
13923
  optionalDependencies: {
13930
13924
  "@vscode/ripgrep": "^1.17.0"
13931
13925
  },
13932
- gitHead: "28d4afd2bd097efcd751a14cbda1eee68cae2ad2"
13926
+ gitHead: "8a5b862a2b827a45357ec4e200de8bb50bfc7fb3"
13933
13927
  };
13934
13928
 
13935
13929
  // src/config/constants.ts
@@ -15872,8 +15866,9 @@ function CliApp() {
15872
15866
  await mcpManager.initialize();
15873
15867
  const mcpTools = mcpManager.getTools();
15874
15868
  if (mcpTools.length > 0) {
15875
- const toolNames = mcpTools.map((t) => t.toolSchema.name).join(", ");
15876
- console.log(`\u{1F4E1} Loaded ${mcpTools.length} MCP tool(s): ${toolNames}`);
15869
+ const toolCountByServer = mcpManager.getToolCount();
15870
+ const serverSummaries = toolCountByServer.map((s) => `${s.serverName} (${s.count})`).join(", ");
15871
+ console.log(`\u{1F4E1} Loaded ${mcpTools.length} MCP tool(s): ${serverSummaries}`);
15877
15872
  } else {
15878
15873
  console.log(`\u{1F4E1} No MCP tools loaded`);
15879
15874
  }
@@ -16675,7 +16670,7 @@ Available commands:
16675
16670
  /whoami - Show current authenticated user
16676
16671
  /usage - Show credit usage and balance
16677
16672
  /save <name> - Save current session
16678
- /sessions - List saved sessions
16673
+ /resume - List and resume saved sessions
16679
16674
  /config - Show configuration
16680
16675
 
16681
16676
  API Configuration:
@@ -16694,7 +16689,24 @@ Project Configuration:
16694
16689
  Custom Commands:
16695
16690
  /commands - List all custom commands
16696
16691
  /commands:new <name> - Create a new custom command
16697
- /commands:reload - Reload custom commands from disk${hasCustomCommands ? "\n\n\u{1F4DD} Custom Commands Available:" : ""}${hasCustomCommands ? customCommands.map((cmd) => {
16692
+ /commands:reload - Reload custom commands from disk
16693
+
16694
+ Keyboard Shortcuts:
16695
+ Ctrl+C - Press twice to exit
16696
+ Esc - Abort current operation
16697
+ Shift+Tab - Toggle auto-accept edits
16698
+ Ctrl+U - Clear current line
16699
+ Ctrl+K - Clear from cursor to end of line
16700
+ Ctrl+W - Delete word before cursor
16701
+ Ctrl+A - Move cursor to beginning
16702
+ Ctrl+E - Move cursor to end
16703
+ Ctrl+B / \u2190 - Move cursor left
16704
+ Ctrl+F / \u2192 - Move cursor right
16705
+ Ctrl+D - Delete character at cursor
16706
+ Ctrl+L - Clear input
16707
+ \u2191 / \u2193 - Navigate history / autocomplete
16708
+ Tab - Accept autocomplete suggestion
16709
+ Shift+Cmd+Click - Open links in browser${hasCustomCommands ? "\n\n\u{1F4DD} Custom Commands Available:" : ""}${hasCustomCommands ? customCommands.map((cmd) => {
16698
16710
  const source = cmd.source === "global" ? "\u{1F3E0}" : "\u{1F4C1}";
16699
16711
  const argHint = cmd.argumentHint ? ` ${cmd.argumentHint}` : "";
16700
16712
  return `
@@ -16724,6 +16736,7 @@ Custom Commands:
16724
16736
  console.log(`\u2705 Session saved as "${sessionName}"`);
16725
16737
  break;
16726
16738
  }
16739
+ case "resume":
16727
16740
  case "sessions": {
16728
16741
  const sessions = await state.sessionStore.list(20);
16729
16742
  if (sessions.length === 0) {
@@ -16734,7 +16747,6 @@ Custom Commands:
16734
16747
  const handleSessionSelect = async (selectedSession) => {
16735
16748
  setState((prev) => ({ ...prev, sessionSelector: null }));
16736
16749
  if (!selectedSession) {
16737
- console.log("\u274C Session selection cancelled");
16738
16750
  return;
16739
16751
  }
16740
16752
  const loadedSession = await state.sessionStore.load(selectedSession.id);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-XJRPAAUS.js";
4
+ } from "./chunk-ODYASVT6.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-XJRPAAUS.js";
4
+ } from "./chunk-ODYASVT6.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-VGYTNJXN.js";
6
- import "./chunk-UNOJBVD2.js";
7
- import "./chunk-XJRPAAUS.js";
5
+ } from "./chunk-4XFX3V4G.js";
6
+ import "./chunk-HDIXO6H3.js";
7
+ import "./chunk-ODYASVT6.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  findMostSimilarMemento,
@@ -133,8 +133,8 @@ import {
133
133
  validateMermaidSyntax,
134
134
  warmUpSettingsCache,
135
135
  withRetry
136
- } from "./chunk-UNOJBVD2.js";
137
- import "./chunk-XJRPAAUS.js";
136
+ } from "./chunk-HDIXO6H3.js";
137
+ import "./chunk-ODYASVT6.js";
138
138
  import {
139
139
  Logger,
140
140
  NotificationDeduplicator,
@@ -339,7 +339,7 @@ import {
339
339
  validateReactArtifactV2,
340
340
  validateSvgArtifactV2,
341
341
  wikiMarkupToAdf
342
- } from "./chunk-XJRPAAUS.js";
342
+ } from "./chunk-ODYASVT6.js";
343
343
  export {
344
344
  ALL_IMAGE_MODELS,
345
345
  ALL_IMAGE_SIZES,
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  SubtractCreditsSchema,
4
4
  subtractCredits
5
- } from "./chunk-JJBDHUGY.js";
6
- import "./chunk-UNOJBVD2.js";
7
- import "./chunk-XJRPAAUS.js";
5
+ } from "./chunk-G7PAI2YH.js";
6
+ import "./chunk-HDIXO6H3.js";
7
+ import "./chunk-ODYASVT6.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.28",
3
+ "version": "0.2.29-cli-minimal-ui.18782+8a5b862a2",
4
4
  "type": "module",
5
5
  "description": "Interactive CLI tool for Bike4Mind with ReAct agents",
6
6
  "license": "UNLICENSED",
@@ -108,10 +108,10 @@
108
108
  },
109
109
  "devDependencies": {
110
110
  "@bike4mind/agents": "0.1.0",
111
- "@bike4mind/common": "2.50.0",
112
- "@bike4mind/mcp": "1.29.0",
113
- "@bike4mind/services": "2.48.0",
114
- "@bike4mind/utils": "2.5.0",
111
+ "@bike4mind/common": "2.50.1-cli-minimal-ui.18782+8a5b862a2",
112
+ "@bike4mind/mcp": "1.29.1-cli-minimal-ui.18782+8a5b862a2",
113
+ "@bike4mind/services": "2.48.1-cli-minimal-ui.18782+8a5b862a2",
114
+ "@bike4mind/utils": "2.5.1-cli-minimal-ui.18782+8a5b862a2",
115
115
  "@types/better-sqlite3": "^7.6.13",
116
116
  "@types/diff": "^5.0.9",
117
117
  "@types/jsonwebtoken": "^9.0.4",
@@ -128,5 +128,5 @@
128
128
  "optionalDependencies": {
129
129
  "@vscode/ripgrep": "^1.17.0"
130
130
  },
131
- "gitHead": "28d4afd2bd097efcd751a14cbda1eee68cae2ad2"
131
+ "gitHead": "8a5b862a2b827a45357ec4e200de8bb50bfc7fb3"
132
132
  }