@rdmind/rdmind 0.0.24-alpha.1 → 0.0.25

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.
Files changed (2) hide show
  1. package/cli.js +207 -111
  2. package/package.json +2 -2
package/cli.js CHANGED
@@ -120646,7 +120646,6 @@ var init_qwen_logger = __esm({
120646
120646
  import_https_proxy_agent = __toESM(require_dist2(), 1);
120647
120647
  init_types3();
120648
120648
  init_safeJsonStringify();
120649
- init_retry();
120650
120649
  init_installationManager();
120651
120650
  init_mnemonist();
120652
120651
  init_contentGenerator();
@@ -120807,55 +120806,44 @@ var init_qwen_logger = __esm({
120807
120806
  this.events.clear();
120808
120807
  const rumPayload = await this.createRumPayload();
120809
120808
  rumPayload.events = eventsToSend;
120810
- const flushFn = /* @__PURE__ */ __name(() => new Promise((resolve26, reject) => {
120811
- const body = safeJsonStringify(rumPayload);
120812
- const options2 = {
120813
- hostname: USAGE_STATS_HOSTNAME,
120814
- path: USAGE_STATS_PATH,
120815
- method: "POST",
120816
- headers: {
120817
- "Content-Length": Buffer3.byteLength(body),
120818
- "Content-Type": "text/plain;charset=UTF-8"
120819
- }
120820
- };
120821
- const bufs = [];
120822
- const req = https.request(
120823
- {
120824
- ...options2,
120825
- agent: this.getProxyAgent()
120826
- },
120827
- (res) => {
120828
- if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
120829
- const err = new Error(
120830
- `Request failed with status ${res.statusCode}`
120831
- );
120832
- err.status = res.statusCode;
120833
- res.resume();
120834
- return reject(err);
120835
- }
120836
- res.on("data", (buf) => bufs.push(buf));
120837
- res.on("end", () => resolve26(Buffer3.concat(bufs)));
120838
- }
120839
- );
120840
- req.on("error", reject);
120841
- req.end(body);
120842
- }), "flushFn");
120843
120809
  try {
120844
- await retryWithBackoff(flushFn, {
120845
- maxAttempts: 3,
120846
- initialDelayMs: 200,
120847
- shouldRetryOnError: /* @__PURE__ */ __name((err) => {
120848
- if (!(err instanceof Error)) return false;
120849
- const status = err.status;
120850
- if (status === void 0) return true;
120851
- return status === 429 || status >= 500 && status < 600;
120852
- }, "shouldRetryOnError")
120810
+ await new Promise((resolve26, reject) => {
120811
+ const body = safeJsonStringify(rumPayload);
120812
+ const options2 = {
120813
+ hostname: USAGE_STATS_HOSTNAME,
120814
+ path: USAGE_STATS_PATH,
120815
+ method: "POST",
120816
+ headers: {
120817
+ "Content-Length": Buffer3.byteLength(body),
120818
+ "Content-Type": "text/plain;charset=UTF-8"
120819
+ }
120820
+ };
120821
+ const bufs = [];
120822
+ const req = https.request(
120823
+ {
120824
+ ...options2,
120825
+ agent: this.getProxyAgent()
120826
+ },
120827
+ (res) => {
120828
+ if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
120829
+ const err = new Error(
120830
+ `Request failed with status ${res.statusCode}`
120831
+ );
120832
+ res.resume();
120833
+ return reject(err);
120834
+ }
120835
+ res.on("data", (buf) => bufs.push(buf));
120836
+ res.on("end", () => resolve26(Buffer3.concat(bufs)));
120837
+ }
120838
+ );
120839
+ req.on("error", reject);
120840
+ req.end(body);
120853
120841
  });
120854
120842
  this.lastFlushTime = Date.now();
120855
120843
  return {};
120856
120844
  } catch (error) {
120857
120845
  if (this.config?.getDebugMode()) {
120858
- console.error("RUM flush failed after multiple retries.", error);
120846
+ console.error("RUM flush failed.", error);
120859
120847
  }
120860
120848
  this.requeueFailedEvents(eventsToSend);
120861
120849
  return {};
@@ -183764,7 +183752,7 @@ function createContentGeneratorConfig(config, authType, generationConfig) {
183764
183752
  };
183765
183753
  }
183766
183754
  async function createContentGenerator(config, gcConfig, sessionId2) {
183767
- const version2 = "0.0.24-alpha.1";
183755
+ const version2 = "0.0.25";
183768
183756
  const userAgent2 = `QwenCode/${version2} (${process.platform}; ${process.arch})`;
183769
183757
  const baseHeaders = {
183770
183758
  "User-Agent": userAgent2
@@ -185508,7 +185496,79 @@ var init_modifiable_tool = __esm({
185508
185496
  }
185509
185497
  });
185510
185498
 
185499
+ // packages/core/src/tools/tool-names.ts
185500
+ var ToolNames, ToolDisplayNames, ToolNamesMigration, ToolDisplayNamesMigration;
185501
+ var init_tool_names = __esm({
185502
+ "packages/core/src/tools/tool-names.ts"() {
185503
+ "use strict";
185504
+ init_esbuild_shims();
185505
+ ToolNames = {
185506
+ EDIT: "edit",
185507
+ WRITE_FILE: "write_file",
185508
+ READ_FILE: "read_file",
185509
+ READ_MANY_FILES: "read_many_files",
185510
+ GREP: "grep_search",
185511
+ GLOB: "glob",
185512
+ SHELL: "run_shell_command",
185513
+ TODO_WRITE: "todo_write",
185514
+ MEMORY: "save_memory",
185515
+ TASK: "task",
185516
+ EXIT_PLAN_MODE: "exit_plan_mode",
185517
+ WEB_FETCH: "web_fetch",
185518
+ WEB_SEARCH: "web_search",
185519
+ LS: "list_directory"
185520
+ };
185521
+ ToolDisplayNames = {
185522
+ EDIT: "Edit",
185523
+ WRITE_FILE: "WriteFile",
185524
+ READ_FILE: "ReadFile",
185525
+ READ_MANY_FILES: "ReadManyFiles",
185526
+ GREP: "Grep",
185527
+ GLOB: "Glob",
185528
+ SHELL: "Shell",
185529
+ TODO_WRITE: "TodoWrite",
185530
+ MEMORY: "SaveMemory",
185531
+ TASK: "Task",
185532
+ EXIT_PLAN_MODE: "ExitPlanMode",
185533
+ WEB_FETCH: "WebFetch",
185534
+ WEB_SEARCH: "WebSearch",
185535
+ LS: "ListFiles"
185536
+ };
185537
+ ToolNamesMigration = {
185538
+ search_file_content: ToolNames.GREP,
185539
+ // Legacy name from grep tool
185540
+ replace: ToolNames.EDIT
185541
+ // Legacy name from edit tool
185542
+ };
185543
+ ToolDisplayNamesMigration = {
185544
+ SearchFiles: ToolDisplayNames.GREP,
185545
+ // Old display name for Grep
185546
+ FindFiles: ToolDisplayNames.GLOB,
185547
+ // Old display name for Glob
185548
+ ReadFolder: ToolDisplayNames.LS
185549
+ // Old display name for ListFiles
185550
+ };
185551
+ }
185552
+ });
185553
+
185511
185554
  // packages/core/src/utils/tool-utils.ts
185555
+ function isToolEnabled(toolName, coreTools, excludeTools) {
185556
+ const aliasSet = getAliasSetForTool(toolName);
185557
+ const matchesIdentifier = /* @__PURE__ */ __name((value) => aliasSet.has(sanitizeExactIdentifier(value)), "matchesIdentifier");
185558
+ const matchesIdentifierWithArgs = /* @__PURE__ */ __name((value) => aliasSet.has(sanitizePatternIdentifier(value)), "matchesIdentifierWithArgs");
185559
+ const filteredCore = filterList(coreTools);
185560
+ const filteredExclude = filterList(excludeTools);
185561
+ if (filteredCore.length === 0) {
185562
+ return !filteredExclude.some((entry) => matchesIdentifier(entry));
185563
+ }
185564
+ const isExplicitlyEnabled = filteredCore.some(
185565
+ (entry) => matchesIdentifier(entry) || matchesIdentifierWithArgs(entry)
185566
+ );
185567
+ if (!isExplicitlyEnabled) {
185568
+ return false;
185569
+ }
185570
+ return !filteredExclude.some((entry) => matchesIdentifier(entry));
185571
+ }
185512
185572
  function doesToolInvocationMatch(toolOrToolName, invocation, patterns) {
185513
185573
  let toolNames;
185514
185574
  if (isTool(toolOrToolName)) {
@@ -185546,12 +185606,65 @@ function doesToolInvocationMatch(toolOrToolName, invocation, patterns) {
185546
185606
  }
185547
185607
  return false;
185548
185608
  }
185549
- var SHELL_TOOL_NAMES;
185609
+ var normalizeIdentifier, toolNameKeys, TOOL_ALIAS_MAP, getAliasSetForTool, sanitizeExactIdentifier, sanitizePatternIdentifier, filterList, SHELL_TOOL_NAMES;
185550
185610
  var init_tool_utils = __esm({
185551
185611
  "packages/core/src/utils/tool-utils.ts"() {
185552
185612
  "use strict";
185553
185613
  init_esbuild_shims();
185554
185614
  init_src();
185615
+ init_tool_names();
185616
+ normalizeIdentifier = /* @__PURE__ */ __name((identifier2) => identifier2.trim().replace(/^_+/, ""), "normalizeIdentifier");
185617
+ toolNameKeys = Object.keys(ToolNames);
185618
+ TOOL_ALIAS_MAP = (() => {
185619
+ const map2 = /* @__PURE__ */ new Map();
185620
+ const addAlias = /* @__PURE__ */ __name((set, alias) => {
185621
+ if (!alias) {
185622
+ return;
185623
+ }
185624
+ set.add(normalizeIdentifier(alias));
185625
+ }, "addAlias");
185626
+ for (const key of toolNameKeys) {
185627
+ const canonicalName = ToolNames[key];
185628
+ const displayName = ToolDisplayNames[key];
185629
+ const aliases = /* @__PURE__ */ new Set();
185630
+ addAlias(aliases, canonicalName);
185631
+ addAlias(aliases, displayName);
185632
+ addAlias(aliases, `${displayName}Tool`);
185633
+ for (const [legacyName, mappedName] of Object.entries(ToolNamesMigration)) {
185634
+ if (mappedName === canonicalName) {
185635
+ addAlias(aliases, legacyName);
185636
+ }
185637
+ }
185638
+ for (const [legacyDisplay, mappedDisplay] of Object.entries(
185639
+ ToolDisplayNamesMigration
185640
+ )) {
185641
+ if (mappedDisplay === displayName) {
185642
+ addAlias(aliases, legacyDisplay);
185643
+ }
185644
+ }
185645
+ map2.set(canonicalName, aliases);
185646
+ }
185647
+ return map2;
185648
+ })();
185649
+ getAliasSetForTool = /* @__PURE__ */ __name((toolName) => {
185650
+ const aliases = TOOL_ALIAS_MAP.get(toolName);
185651
+ if (!aliases) {
185652
+ return /* @__PURE__ */ new Set([normalizeIdentifier(toolName)]);
185653
+ }
185654
+ return aliases;
185655
+ }, "getAliasSetForTool");
185656
+ sanitizeExactIdentifier = /* @__PURE__ */ __name((value) => normalizeIdentifier(value), "sanitizeExactIdentifier");
185657
+ sanitizePatternIdentifier = /* @__PURE__ */ __name((value) => {
185658
+ const openParenIndex = value.indexOf("(");
185659
+ if (openParenIndex === -1) {
185660
+ return normalizeIdentifier(value);
185661
+ }
185662
+ return normalizeIdentifier(value.slice(0, openParenIndex));
185663
+ }, "sanitizePatternIdentifier");
185664
+ filterList = /* @__PURE__ */ __name((list3) => (list3 ?? []).filter(
185665
+ (entry) => Boolean(entry && entry.trim())
185666
+ ), "filterList");
185667
+ __name(isToolEnabled, "isToolEnabled");
185555
185668
  SHELL_TOOL_NAMES = ["run_shell_command", "ShellTool"];
185556
185669
  __name(doesToolInvocationMatch, "doesToolInvocationMatch");
185557
185670
  }
@@ -185649,30 +185762,6 @@ var require_levenshtein = __commonJS({
185649
185762
  }
185650
185763
  });
185651
185764
 
185652
- // packages/core/src/tools/tool-names.ts
185653
- var ToolNames;
185654
- var init_tool_names = __esm({
185655
- "packages/core/src/tools/tool-names.ts"() {
185656
- "use strict";
185657
- init_esbuild_shims();
185658
- ToolNames = {
185659
- EDIT: "edit",
185660
- WRITE_FILE: "write_file",
185661
- READ_FILE: "read_file",
185662
- READ_MANY_FILES: "read_many_files",
185663
- GREP: "grep_search",
185664
- GLOB: "glob",
185665
- SHELL: "run_shell_command",
185666
- TODO_WRITE: "todo_write",
185667
- MEMORY: "save_memory",
185668
- TASK: "task",
185669
- EXIT_PLAN_MODE: "exit_plan_mode",
185670
- WEB_FETCH: "web_fetch",
185671
- WEB_SEARCH: "web_search"
185672
- };
185673
- }
185674
- });
185675
-
185676
185765
  // packages/core/src/utils/gitUtils.ts
185677
185766
  import * as fs18 from "node:fs";
185678
185767
  import * as path14 from "node:path";
@@ -185945,6 +186034,7 @@ var init_memoryTool = __esm({
185945
186034
  init_lib();
185946
186035
  init_diffOptions();
185947
186036
  init_paths();
186037
+ init_tool_names();
185948
186038
  init_tool_error();
185949
186039
  memoryToolSchemaData = {
185950
186040
  name: "save_memory",
@@ -186165,11 +186255,11 @@ Project: ${projectPath} (current project only)`;
186165
186255
  static {
186166
186256
  __name(this, "MemoryTool");
186167
186257
  }
186168
- static Name = memoryToolSchemaData.name;
186258
+ static Name = ToolNames.MEMORY;
186169
186259
  constructor() {
186170
186260
  super(
186171
186261
  _MemoryTool.Name,
186172
- "SaveMemory",
186262
+ ToolDisplayNames.MEMORY,
186173
186263
  memoryToolDescription,
186174
186264
  "think" /* Think */,
186175
186265
  memoryToolSchemaData.parametersJsonSchema
@@ -198481,7 +198571,7 @@ Co-authored-by: ${gitCoAuthorSettings.name} <${gitCoAuthorSettings.email}>`;
198481
198571
  constructor(config) {
198482
198572
  super(
198483
198573
  _ShellTool.Name,
198484
- "Shell",
198574
+ ToolDisplayNames.SHELL,
198485
198575
  getShellToolDescription(),
198486
198576
  "execute" /* Execute */,
198487
198577
  {
@@ -202092,7 +202182,7 @@ var init_task = __esm({
202092
202182
  };
202093
202183
  super(
202094
202184
  _TaskTool.Name,
202095
- "Task",
202185
+ ToolDisplayNames.TASK,
202096
202186
  "Delegate tasks to specialized subagents. Loading available subagents...",
202097
202187
  // Initial description
202098
202188
  "other" /* Other */,
@@ -221280,7 +221370,7 @@ ${result.llmContent}`;
221280
221370
  constructor(config) {
221281
221371
  super(
221282
221372
  _ReadFileTool.Name,
221283
- "ReadFile",
221373
+ ToolDisplayNames.READ_FILE,
221284
221374
  `Reads and returns the content of a specified file. If the file is large, the content will be truncated. The tool's response will clearly indicate if truncation has occurred and will provide details on how to read more of the file using the 'offset' and 'limit' parameters. Handles text, images (PNG, JPG, GIF, WEBP, SVG, BMP), and PDF files. For text files, it can read specific line ranges.`,
221285
221375
  "read" /* Read */,
221286
221376
  {
@@ -232324,7 +232414,7 @@ var init_edit = __esm({
232324
232414
  constructor(config) {
232325
232415
  super(
232326
232416
  _EditTool.Name,
232327
- "Edit",
232417
+ ToolDisplayNames.EDIT,
232328
232418
  `Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when \`expected_replacements\` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${ReadFileTool.Name} tool to examine the file's current content before attempting a text replacement.
232329
232419
 
232330
232420
  The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
@@ -232435,6 +232525,7 @@ var init_exitPlanMode = __esm({
232435
232525
  init_esbuild_shims();
232436
232526
  init_tools();
232437
232527
  init_config3();
232528
+ init_tool_names();
232438
232529
  exitPlanModeToolDescription = `Use this tool when you are in plan mode and have finished presenting your plan and are ready to code. This will prompt the user to exit plan mode.
232439
232530
  IMPORTANT: Only use this tool when the task requires planning the implementation steps of a task that requires writing code. For research tasks where you're gathering information, searching files, reading files or in general trying to understand the codebase - do NOT use this tool.
232440
232531
 
@@ -232545,7 +232636,7 @@ Eg.
232545
232636
  constructor(config) {
232546
232637
  super(
232547
232638
  _ExitPlanModeTool.Name,
232548
- "ExitPlanMode",
232639
+ ToolDisplayNames.EXIT_PLAN_MODE,
232549
232640
  exitPlanModeToolDescription,
232550
232641
  "think" /* Think */,
232551
232642
  exitPlanModeToolSchemaData.parametersJsonSchema
@@ -232555,7 +232646,7 @@ Eg.
232555
232646
  static {
232556
232647
  __name(this, "ExitPlanModeTool");
232557
232648
  }
232558
- static Name = exitPlanModeToolSchemaData.name;
232649
+ static Name = ToolNames.EXIT_PLAN_MODE;
232559
232650
  validateToolParams(params) {
232560
232651
  if (!params.plan || typeof params.plan !== "string" || params.plan.trim() === "") {
232561
232652
  return 'Parameter "plan" must be a non-empty string.';
@@ -232723,7 +232814,7 @@ ${fileListDescription}`;
232723
232814
  constructor(config) {
232724
232815
  super(
232725
232816
  _GlobTool.Name,
232726
- "FindFiles",
232817
+ ToolDisplayNames.GLOB,
232727
232818
  'Fast file pattern matching tool that works with any codebase size\n- Supports glob patterns like "**/*.js" or "src/**/*.ts"\n- Returns matching file paths sorted by modification time\n- Use this tool when you need to find files by name patterns\n- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead\n- You have the capability to call multiple tools in a single response. It is always better to speculatively perform multiple searches as a batch that are potentially useful.',
232728
232819
  "search" /* Search */,
232729
232820
  {
@@ -233158,7 +233249,7 @@ var init_grep2 = __esm({
233158
233249
  constructor(config) {
233159
233250
  super(
233160
233251
  _GrepTool.Name,
233161
- "Grep",
233252
+ ToolDisplayNames.GREP,
233162
233253
  'A powerful search tool for finding patterns in files\n\n Usage:\n - ALWAYS use Grep for search tasks. NEVER invoke `grep` or `rg` as a Bash command. The Grep tool has been optimized for correct permissions and access.\n - Supports full regex syntax (e.g., "log.*Error", "function\\s+\\w+")\n - Filter files with glob parameter (e.g., "*.js", "**/*.tsx")\n - Case-insensitive by default\n - Use Task tool for open-ended searches requiring multiple rounds\n',
233163
233254
  "search" /* Search */,
233164
233255
  {
@@ -233229,6 +233320,7 @@ var init_ls = __esm({
233229
233320
  init_paths();
233230
233321
  init_constants3();
233231
233322
  init_tool_error();
233323
+ init_tool_names();
233232
233324
  LSToolInvocation = class extends BaseToolInvocation {
233233
233325
  constructor(config, params) {
233234
233326
  super(params);
@@ -233380,7 +233472,7 @@ ${directoryContent}`;
233380
233472
  constructor(config) {
233381
233473
  super(
233382
233474
  _LSTool.Name,
233383
- "ReadFolder",
233475
+ ToolDisplayNames.LS,
233384
233476
  "Lists the names of files and subdirectories directly within a specified directory path. Can optionally ignore entries matching provided glob patterns.",
233385
233477
  "search" /* Search */,
233386
233478
  {
@@ -233420,7 +233512,7 @@ ${directoryContent}`;
233420
233512
  static {
233421
233513
  __name(this, "LSTool");
233422
233514
  }
233423
- static Name = "list_directory";
233515
+ static Name = ToolNames.LS;
233424
233516
  /**
233425
233517
  * Validates the parameters for the tool
233426
233518
  * @param params Parameters to validate
@@ -233838,7 +233930,7 @@ ${fileContentForLlm}
233838
233930
  };
233839
233931
  super(
233840
233932
  _ReadManyFilesTool.Name,
233841
- "ReadManyFiles",
233933
+ ToolDisplayNames.READ_MANY_FILES,
233842
233934
  `Reads content from multiple files specified by paths or glob patterns within a configured target directory. For text files, it concatenates their content into a single string. It is primarily designed for text-based files. However, it can also process image (e.g., .png, .jpg) and PDF (.pdf) files if their file names or extensions are explicitly included in the 'paths' argument. For these explicitly requested non-text files, their data is read and included in a format suitable for model consumption (e.g., base64 encoded).
233843
233935
 
233844
233936
  This tool is useful when you need to understand or analyze a collection of files, such as:
@@ -234079,12 +234171,12 @@ var init_ripGrep = __esm({
234079
234171
  rgArgs.push("--no-ignore-vcs");
234080
234172
  }
234081
234173
  if (filteringOptions.respectQwenIgnore) {
234082
- const qwenIgnorePath = path40.join(
234174
+ const rdmindIgnorePath = path40.join(
234083
234175
  this.config.getTargetDir(),
234084
- ".qwenignore"
234176
+ ".rdmindignore"
234085
234177
  );
234086
- if (fs36.existsSync(qwenIgnorePath)) {
234087
- rgArgs.push("--ignore-file", qwenIgnorePath);
234178
+ if (fs36.existsSync(rdmindIgnorePath)) {
234179
+ rgArgs.push("--ignore-file", rdmindIgnorePath);
234088
234180
  }
234089
234181
  }
234090
234182
  if (glob2) {
@@ -235152,6 +235244,7 @@ var init_todoWrite = __esm({
235152
235244
  init_esbuild_shims();
235153
235245
  init_tools();
235154
235246
  init_paths();
235247
+ init_tool_names();
235155
235248
  todoWriteToolSchemaData = {
235156
235249
  name: "todo_write",
235157
235250
  description: "Creates and manages a structured task list for your current coding session. This helps track progress, organize complex tasks, and demonstrate thoroughness.",
@@ -235464,7 +235557,7 @@ Todo list modification failed with error: ${errorMessage}. You may need to retry
235464
235557
  static {
235465
235558
  __name(this, "TodoWriteTool");
235466
235559
  }
235467
- static Name = todoWriteToolSchemaData.name;
235560
+ static Name = ToolNames.TODO_WRITE;
235468
235561
  getDisplayName(params) {
235469
235562
  return params?.title || "\u6D41\u7A0BTodo";
235470
235563
  }
@@ -244781,7 +244874,7 @@ ${textContent2}
244781
244874
  constructor(config) {
244782
244875
  super(
244783
244876
  _WebFetchTool.Name,
244784
- "WebFetch",
244877
+ ToolDisplayNames.WEB_FETCH,
244785
244878
  `Fetches content from a specified URL and processes it using an AI model
244786
244879
  - Takes a URL and a prompt as input
244787
244880
  - Fetches the URL content, converts HTML to markdown
@@ -245547,7 +245640,7 @@ ${content}`,
245547
245640
  constructor(config) {
245548
245641
  super(
245549
245642
  _WebSearchTool.Name,
245550
- "WebSearch",
245643
+ ToolDisplayNames.WEB_SEARCH,
245551
245644
  "Allows searching the web and using results to inform responses. Provides up-to-date information for current events and recent data beyond the training data cutoff. Returns search results formatted with concise answers and source links. Use this tool when accessing information that may be outdated or beyond the knowledge cutoff.",
245552
245645
  "search" /* Search */,
245553
245646
  {
@@ -245829,7 +245922,7 @@ var init_write_file = __esm({
245829
245922
  constructor(config) {
245830
245923
  super(
245831
245924
  _WriteFileTool.Name,
245832
- "WriteFile",
245925
+ ToolDisplayNames.WRITE_FILE,
245833
245926
  `Writes content to a specified file in the local filesystem.
245834
245927
 
245835
245928
  The user has the ability to modify \`content\`. If modified, this will be stated in the response.`,
@@ -246560,6 +246653,7 @@ var init_subagent_manager = __esm({
246560
246653
  init_validation();
246561
246654
  init_subagent();
246562
246655
  init_builtin_agents();
246656
+ init_tool_names();
246563
246657
  QWEN_CONFIG_DIR2 = ".rdmind";
246564
246658
  AGENT_CONFIG_DIR = "agents";
246565
246659
  SubagentManager = class {
@@ -247002,7 +247096,7 @@ ${config.systemPrompt}
247002
247096
  continue;
247003
247097
  }
247004
247098
  const displayNameMatch = allTools.find(
247005
- (tool) => tool.displayName === toolIdentifier
247099
+ (tool) => tool.displayName === toolIdentifier || tool.displayName === ToolDisplayNamesMigration[toolIdentifier]
247006
247100
  );
247007
247101
  if (displayNameMatch) {
247008
247102
  result.push(displayNameMatch.name);
@@ -247388,6 +247482,7 @@ var init_config3 = __esm({
247388
247482
  init_browser();
247389
247483
  init_ignorePatterns();
247390
247484
  init_workspaceContext();
247485
+ init_tool_utils();
247391
247486
  init_constants3();
247392
247487
  init_models();
247393
247488
  init_storage();
@@ -248046,26 +248141,27 @@ var init_config3 = __esm({
248046
248141
  }
248047
248142
  async createToolRegistry() {
248048
248143
  const registry = new ToolRegistry(this, this.eventEmitter);
248144
+ const coreToolsConfig = this.getCoreTools();
248145
+ const excludeToolsConfig = this.getExcludeTools();
248049
248146
  const registerCoreTool = /* @__PURE__ */ __name((ToolClass, ...args) => {
248050
- const className = ToolClass.name;
248051
- const toolName = ToolClass.Name || className;
248052
- const coreTools = this.getCoreTools();
248053
- const excludeTools = this.getExcludeTools() || [];
248054
- const normalizedClassName = className.replace(/^_+/, "");
248055
- let isEnabled2 = true;
248056
- if (coreTools) {
248057
- isEnabled2 = coreTools.some(
248058
- (tool) => tool === toolName || tool === normalizedClassName || tool.startsWith(`${toolName}(`) || tool.startsWith(`${normalizedClassName}(`)
248147
+ const toolName = ToolClass?.Name;
248148
+ const className = ToolClass?.name ?? "UnknownTool";
248149
+ if (!toolName) {
248150
+ console.warn(
248151
+ `[Config] Skipping tool registration: ${className} is missing static Name property. Tools must define a static Name property to be registered. Location: config.ts:registerCoreTool`
248059
248152
  );
248153
+ return;
248060
248154
  }
248061
- const isExcluded = excludeTools.some(
248062
- (tool) => tool === toolName || tool === normalizedClassName
248063
- );
248064
- if (isExcluded) {
248065
- isEnabled2 = false;
248066
- }
248067
- if (isEnabled2) {
248068
- registry.registerTool(new ToolClass(...args));
248155
+ if (isToolEnabled(toolName, coreToolsConfig, excludeToolsConfig)) {
248156
+ try {
248157
+ registry.registerTool(new ToolClass(...args));
248158
+ } catch (error) {
248159
+ console.error(
248160
+ `[Config] Failed to register tool ${className} (${toolName}):`,
248161
+ error
248162
+ );
248163
+ throw error;
248164
+ }
248069
248165
  }
248070
248166
  }, "registerCoreTool");
248071
248167
  registerCoreTool(TaskTool, this);
@@ -342366,7 +342462,7 @@ __name(getPackageJson, "getPackageJson");
342366
342462
  // packages/cli/src/utils/version.ts
342367
342463
  async function getCliVersion() {
342368
342464
  const pkgJson = await getPackageJson();
342369
- return "0.0.24-alpha.1";
342465
+ return "0.0.25";
342370
342466
  }
342371
342467
  __name(getCliVersion, "getCliVersion");
342372
342468
 
@@ -344367,7 +344463,7 @@ init_core2();
344367
344463
 
344368
344464
  // packages/cli/src/generated/git-commit.ts
344369
344465
  init_esbuild_shims();
344370
- var GIT_COMMIT_INFO2 = "df5102f8";
344466
+ var GIT_COMMIT_INFO2 = "efd3db26";
344371
344467
 
344372
344468
  // packages/cli/src/utils/systemInfo.ts
344373
344469
  async function getNpmVersion() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rdmind/rdmind",
3
- "version": "0.0.24-alpha.1",
3
+ "version": "0.0.25",
4
4
  "description": "RDMind - AI-powered coding assistant",
5
5
  "type": "module",
6
6
  "main": "cli.js",
@@ -19,7 +19,7 @@
19
19
  "LICENSE"
20
20
  ],
21
21
  "config": {
22
- "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.24-alpha.1"
22
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.0.25"
23
23
  },
24
24
  "publishConfig": {
25
25
  "access": "public"