@rdmind/rdmind 0.2.2-alpha.1 → 0.2.2-alpha.3

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/cli.js CHANGED
@@ -157359,7 +157359,7 @@ __export(geminiContentGenerator_exports2, {
157359
157359
  createGeminiContentGenerator: () => createGeminiContentGenerator
157360
157360
  });
157361
157361
  function createGeminiContentGenerator(config2, gcConfig) {
157362
- const version2 = "0.2.2-alpha.1";
157362
+ const version2 = "0.2.2-alpha.3";
157363
157363
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
157364
157364
  const baseHeaders = {
157365
157365
  "User-Agent": userAgent2
@@ -247729,7 +247729,7 @@ var init_config3 = __esm({
247729
247729
  this.getDebugMode(),
247730
247730
  this.getFileService(),
247731
247731
  this.getExtensionContextFilePaths(),
247732
- this.getFolderTrust(),
247732
+ this.isTrustedFolder(),
247733
247733
  this.getImportFormat()
247734
247734
  );
247735
247735
  this.setUserMemory(memoryContent);
@@ -254755,8 +254755,8 @@ var init_git_commit = __esm({
254755
254755
  "packages/core/src/generated/git-commit.ts"() {
254756
254756
  "use strict";
254757
254757
  init_esbuild_shims();
254758
- GIT_COMMIT_INFO = "0d9e721ec";
254759
- CLI_VERSION = "0.2.2-alpha.1";
254758
+ GIT_COMMIT_INFO = "ebe48cf8a";
254759
+ CLI_VERSION = "0.2.2-alpha.3";
254760
254760
  }
254761
254761
  });
254762
254762
 
@@ -294850,7 +294850,7 @@ var init_settingsSchema = __esm({
294850
294850
  showInDialog: false,
294851
294851
  mergeStrategy: "concat" /* CONCAT */
294852
294852
  },
294853
- loadMemoryFromIncludeDirectories: {
294853
+ loadFromIncludeDirectories: {
294854
294854
  type: "boolean",
294855
294855
  label: "Load Memory From Include Directories",
294856
294856
  category: "Context",
@@ -304481,7 +304481,9 @@ var init_en3 = __esm({
304481
304481
  "Enable User Feedback": "Enable User Feedback",
304482
304482
  "How is Qwen doing this session? (optional)": "How is Qwen doing this session? (optional)",
304483
304483
  Bad: "Bad",
304484
+ Fine: "Fine",
304484
304485
  Good: "Good",
304486
+ Dismiss: "Dismiss",
304485
304487
  "Not Sure Yet": "Not Sure Yet",
304486
304488
  "Any other key": "Any other key",
304487
304489
  "Disable Loading Phrases": "Disable Loading Phrases",
@@ -305552,7 +305554,9 @@ var init_zh = __esm({
305552
305554
  "Enable User Feedback": "\u542F\u7528\u7528\u6237\u53CD\u9988",
305553
305555
  "How is Qwen doing this session? (optional)": "Qwen \u8FD9\u6B21\u8868\u73B0\u5982\u4F55\uFF1F\uFF08\u53EF\u9009\uFF09",
305554
305556
  Bad: "\u4E0D\u6EE1\u610F",
305557
+ Fine: "\u8FD8\u884C",
305555
305558
  Good: "\u6EE1\u610F",
305559
+ Dismiss: "\u5FFD\u7565",
305556
305560
  "Not Sure Yet": "\u6682\u4E0D\u8BC4\u4EF7",
305557
305561
  "Any other key": "\u4EFB\u610F\u5176\u4ED6\u952E",
305558
305562
  "Disable Loading Phrases": "\u7981\u7528\u52A0\u8F7D\u77ED\u8BED",
@@ -355436,7 +355440,7 @@ __name(getPackageJson, "getPackageJson");
355436
355440
  // packages/cli/src/utils/version.ts
355437
355441
  async function getCliVersion() {
355438
355442
  const pkgJson = await getPackageJson();
355439
- return "0.2.2-alpha.1";
355443
+ return "0.2.2-alpha.3";
355440
355444
  }
355441
355445
  __name(getCliVersion, "getCliVersion");
355442
355446
 
@@ -359968,7 +359972,7 @@ async function loadCliConfig(settings, argv, cwd7 = process.cwd(), overrideExten
359968
359972
  sandbox: sandboxConfig,
359969
359973
  targetDir: cwd7,
359970
359974
  includeDirectories,
359971
- loadMemoryFromIncludeDirectories: settings.context?.loadMemoryFromIncludeDirectories || false,
359975
+ loadMemoryFromIncludeDirectories: settings.context?.loadFromIncludeDirectories || false,
359972
359976
  importFormat: settings.context?.importFormat || "tree",
359973
359977
  debugMode,
359974
359978
  question,
@@ -363251,7 +363255,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
363251
363255
 
363252
363256
  // packages/cli/src/generated/git-commit.ts
363253
363257
  init_esbuild_shims();
363254
- var GIT_COMMIT_INFO2 = "0d9e721ec";
363258
+ var GIT_COMMIT_INFO2 = "ebe48cf8a";
363255
363259
 
363256
363260
  // packages/cli/src/utils/systemInfo.ts
363257
363261
  async function getNpmVersion() {
@@ -371081,7 +371085,7 @@ var MarkdownCommandDefSchema2 = external_exports.object({
371081
371085
  name: external_exports.string(),
371082
371086
  id: external_exports.string().optional(),
371083
371087
  category: external_exports.string().optional(),
371084
- description: external_exports.string()
371088
+ description: external_exports.string().optional()
371085
371089
  });
371086
371090
  var MarkdownCommandLoader = class {
371087
371091
  static {
@@ -371097,6 +371101,8 @@ var MarkdownCommandLoader = class {
371097
371101
  }
371098
371102
  /**
371099
371103
  * Loads all markdown commands from OpenSpec directories.
371104
+ * Only loads commands that are specifically marked as OpenSpec commands
371105
+ * (either by category: OpenSpec in frontmatter or filename starting with 'openspec-').
371100
371106
  */
371101
371107
  async loadCommands(signal) {
371102
371108
  if (this.folderTrustEnabled && !this.folderTrust) {
@@ -371112,7 +371118,7 @@ var MarkdownCommandLoader = class {
371112
371118
  const commandDirs = this.getOpenSpecCommandDirectories();
371113
371119
  for (const dirPath of commandDirs) {
371114
371120
  try {
371115
- const files = await glob("**/*.md", {
371121
+ const files = await glob("**/openspec-*.md", {
371116
371122
  ...globOptions,
371117
371123
  cwd: dirPath
371118
371124
  });
@@ -371175,8 +371181,12 @@ var MarkdownCommandLoader = class {
371175
371181
  return null;
371176
371182
  }
371177
371183
  const validDef = validationResult.data;
371184
+ const isOpenSpecCommand = validDef.category === "OpenSpec" || typeof validDef.id === "string" && validDef.id.startsWith("openspec-") || path105.basename(filePath, ".md").startsWith("openspec-");
371185
+ if (!isOpenSpecCommand) {
371186
+ return null;
371187
+ }
371178
371188
  const commandName = validDef.name.startsWith("/") ? validDef.name.substring(1) : validDef.name;
371179
- let description = validDef.description;
371189
+ let description = validDef.description || "";
371180
371190
  if (commandName === "openspec-proposal") {
371181
371191
  description = t4("Scaffold a new OpenSpec change and validate strictly.");
371182
371192
  } else if (commandName === "openspec-apply") {
@@ -373541,6 +373551,7 @@ var ControlContext = class {
373541
373551
  permissionMode;
373542
373552
  sdkMcpServers;
373543
373553
  mcpClients;
373554
+ inputClosed;
373544
373555
  onInterrupt;
373545
373556
  constructor(options2) {
373546
373557
  this.config = options2.config;
@@ -373551,6 +373562,7 @@ var ControlContext = class {
373551
373562
  this.permissionMode = options2.permissionMode || "default";
373552
373563
  this.sdkMcpServers = /* @__PURE__ */ new Set();
373553
373564
  this.mcpClients = /* @__PURE__ */ new Map();
373565
+ this.inputClosed = false;
373554
373566
  this.onInterrupt = options2.onInterrupt;
373555
373567
  }
373556
373568
  };
@@ -373616,6 +373628,9 @@ var BaseController = class {
373616
373628
  * Respects the provided AbortSignal for cancellation.
373617
373629
  */
373618
373630
  async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS, signal) {
373631
+ if (this.context.inputClosed) {
373632
+ throw new Error("Input closed");
373633
+ }
373619
373634
  if (signal?.aborted) {
373620
373635
  throw new Error("Request aborted");
373621
373636
  }
@@ -374379,16 +374394,19 @@ var PermissionController = class extends BaseController {
374379
374394
  error2
374380
374395
  );
374381
374396
  }
374397
+ const errorMessage = error2 instanceof Error ? error2.message : String(error2);
374382
374398
  const confirmationType = toolCall.confirmationDetails.type;
374383
374399
  if (["edit", "exec", "mcp"].includes(confirmationType)) {
374384
374400
  const execOrMcpDetails = toolCall.confirmationDetails;
374385
- await execOrMcpDetails.onConfirm(
374386
- "cancel" /* Cancel */,
374387
- void 0
374388
- );
374401
+ await execOrMcpDetails.onConfirm("cancel" /* Cancel */, {
374402
+ cancelMessage: `Error: ${errorMessage}`
374403
+ });
374389
374404
  } else {
374390
374405
  await toolCall.confirmationDetails.onConfirm(
374391
- "cancel" /* Cancel */
374406
+ "cancel" /* Cancel */,
374407
+ {
374408
+ cancelMessage: `Error: ${errorMessage}`
374409
+ }
374392
374410
  );
374393
374411
  }
374394
374412
  } finally {
@@ -374600,6 +374618,30 @@ var ControlDispatcher = class {
374600
374618
  }
374601
374619
  }
374602
374620
  }
374621
+ /**
374622
+ * Marks stdin as closed and rejects all pending outgoing requests.
374623
+ * After this is called, new outgoing requests will be rejected immediately.
374624
+ * This should be called when stdin closes to avoid waiting for responses.
374625
+ */
374626
+ markInputClosed() {
374627
+ if (this.context.inputClosed) {
374628
+ return;
374629
+ }
374630
+ this.context.inputClosed = true;
374631
+ const requestIds = Array.from(this.pendingOutgoingRequests.keys());
374632
+ if (this.context.debugMode) {
374633
+ console.error(
374634
+ `[ControlDispatcher] Input closed, rejecting ${requestIds.length} pending outgoing requests`
374635
+ );
374636
+ }
374637
+ for (const id of requestIds) {
374638
+ const pending = this.pendingOutgoingRequests.get(id);
374639
+ if (pending) {
374640
+ this.deregisterOutgoingRequest(id);
374641
+ pending.reject(new Error("Input closed"));
374642
+ }
374643
+ }
374644
+ }
374603
374645
  /**
374604
374646
  * Stops all pending requests and cleans up all controllers
374605
374647
  */
@@ -374628,7 +374670,7 @@ var ControlDispatcher = class {
374628
374670
  this.sdkMcpController.cleanup();
374629
374671
  }
374630
374672
  /**
374631
- * Registers an incoming request in the pending registry
374673
+ * Registers an incoming request in the pending registry.
374632
374674
  */
374633
374675
  registerIncomingRequest(requestId, controller, abortController, timeoutId) {
374634
374676
  this.pendingIncomingRequests.set(requestId, {
@@ -375416,6 +375458,9 @@ var Session2 = class {
375416
375458
  }
375417
375459
  throw streamError;
375418
375460
  }
375461
+ if (this.dispatcher) {
375462
+ this.dispatcher.markInputClosed();
375463
+ }
375419
375464
  await this.waitForAllPendingWork();
375420
375465
  await this.shutdown();
375421
375466
  } catch (error2) {
@@ -405852,27 +405897,32 @@ var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1);
405852
405897
  var FEEDBACK_OPTIONS = {
405853
405898
  GOOD: 1,
405854
405899
  BAD: 2,
405855
- NOT_SURE: 3
405900
+ FINE: 3,
405901
+ DISMISS: 0
405856
405902
  };
405857
405903
  var FEEDBACK_OPTION_KEYS = {
405858
405904
  [FEEDBACK_OPTIONS.GOOD]: "1",
405859
405905
  [FEEDBACK_OPTIONS.BAD]: "2",
405860
- [FEEDBACK_OPTIONS.NOT_SURE]: "any"
405906
+ [FEEDBACK_OPTIONS.FINE]: "3",
405907
+ [FEEDBACK_OPTIONS.DISMISS]: "0"
405861
405908
  };
405862
- var FEEDBACK_DIALOG_KEYS = ["1", "2"];
405909
+ var FEEDBACK_DIALOG_KEYS = ["1", "2", "3", "0"];
405863
405910
  var FeedbackDialog = /* @__PURE__ */ __name(() => {
405864
405911
  const uiState = useUIState();
405865
405912
  const uiActions = useUIActions();
405866
405913
  useKeypress(
405867
405914
  (key) => {
405868
- if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.GOOD]) {
405869
- uiActions.submitFeedback(FEEDBACK_OPTIONS.GOOD);
405870
- } else if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.BAD]) {
405915
+ if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.BAD]) {
405871
405916
  uiActions.submitFeedback(FEEDBACK_OPTIONS.BAD);
405917
+ } else if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.FINE]) {
405918
+ uiActions.submitFeedback(FEEDBACK_OPTIONS.FINE);
405919
+ } else if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.GOOD]) {
405920
+ uiActions.submitFeedback(FEEDBACK_OPTIONS.GOOD);
405921
+ } else if (key.name === FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.DISMISS]) {
405922
+ uiActions.submitFeedback(FEEDBACK_OPTIONS.DISMISS);
405872
405923
  } else {
405873
- uiActions.submitFeedback(FEEDBACK_OPTIONS.NOT_SURE);
405924
+ uiActions.temporaryCloseFeedbackDialog();
405874
405925
  }
405875
- uiActions.closeFeedbackDialog();
405876
405926
  },
405877
405927
  { isActive: uiState.isFeedbackDialogOpen }
405878
405928
  );
@@ -405896,10 +405946,19 @@ var FeedbackDialog = /* @__PURE__ */ __name(() => {
405896
405946
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: t4("Bad") }),
405897
405947
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: " " }),
405898
405948
  /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(Text3, { color: "cyan", children: [
405899
- t4("Any other key"),
405900
- ": "
405949
+ FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.FINE],
405950
+ ":",
405951
+ " "
405952
+ ] }),
405953
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: t4("Fine") }),
405954
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: " " }),
405955
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(Text3, { color: "cyan", children: [
405956
+ FEEDBACK_OPTION_KEYS[FEEDBACK_OPTIONS.DISMISS],
405957
+ ":",
405958
+ " "
405901
405959
  ] }),
405902
- /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: t4("Not Sure Yet") })
405960
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: t4("Dismiss") }),
405961
+ /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(Text3, { children: " " })
405903
405962
  ] })
405904
405963
  ] });
405905
405964
  }, "FeedbackDialog");
@@ -405946,6 +406005,7 @@ var InputPrompt = /* @__PURE__ */ __name(({
405946
406005
  }) => {
405947
406006
  const isShellFocused = useShellFocusState();
405948
406007
  const uiState = useUIState();
406008
+ const uiActions = useUIActions();
405949
406009
  const [justNavigatedHistory, setJustNavigatedHistory] = (0, import_react97.useState)(false);
405950
406010
  const [escPressCount, setEscPressCount] = (0, import_react97.useState)(0);
405951
406011
  const [showEscapePrompt, setShowEscapePrompt] = (0, import_react97.useState)(false);
@@ -406124,8 +406184,12 @@ var InputPrompt = /* @__PURE__ */ __name(({
406124
406184
  if (vimHandleInput && vimHandleInput(key)) {
406125
406185
  return;
406126
406186
  }
406127
- if (uiState.isFeedbackDialogOpen && FEEDBACK_DIALOG_KEYS.includes(key.name)) {
406128
- return;
406187
+ if (uiState.isFeedbackDialogOpen) {
406188
+ if (FEEDBACK_DIALOG_KEYS.includes(key.name)) {
406189
+ return;
406190
+ } else {
406191
+ uiActions.temporaryCloseFeedbackDialog();
406192
+ }
406129
406193
  }
406130
406194
  if (key.name !== "escape") {
406131
406195
  if (escPressCount > 0 || showEscapePrompt) {
@@ -406411,7 +406475,8 @@ var InputPrompt = /* @__PURE__ */ __name(({
406411
406475
  commandSearchCompletion,
406412
406476
  onToggleShortcuts,
406413
406477
  showShortcuts,
406414
- uiState
406478
+ uiState,
406479
+ uiActions
406415
406480
  ]
406416
406481
  );
406417
406482
  useKeypress(handleInput, { isActive: !isEmbeddedShellFocused });
@@ -407375,35 +407440,42 @@ var useFeedbackDialog = /* @__PURE__ */ __name(({
407375
407440
  sessionStats
407376
407441
  }) => {
407377
407442
  const [isFeedbackDialogOpen, setIsFeedbackDialogOpen] = (0, import_react102.useState)(false);
407443
+ const [isFeedbackDismissedTemporarily, setIsFeedbackDismissedTemporarily] = (0, import_react102.useState)(false);
407378
407444
  const openFeedbackDialog = (0, import_react102.useCallback)(() => {
407379
407445
  setIsFeedbackDialogOpen(true);
407380
- settings.setValue(
407381
- "User" /* User */,
407382
- "ui.feedbackLastShownTimestamp",
407383
- Date.now()
407384
- );
407385
- }, [settings]);
407446
+ }, []);
407386
407447
  const closeFeedbackDialog = (0, import_react102.useCallback)(
407387
407448
  () => setIsFeedbackDialogOpen(false),
407388
407449
  []
407389
407450
  );
407451
+ const temporaryCloseFeedbackDialog = (0, import_react102.useCallback)(() => {
407452
+ setIsFeedbackDialogOpen(false);
407453
+ setIsFeedbackDismissedTemporarily(true);
407454
+ }, []);
407390
407455
  const submitFeedback = (0, import_react102.useCallback)(
407391
407456
  (rating) => {
407392
- const feedbackEvent = new UserFeedbackEvent(
407393
- sessionStats.sessionId,
407394
- rating,
407395
- config2.getModel(),
407396
- config2.getApprovalMode()
407457
+ if (rating >= FEEDBACK_OPTIONS.GOOD && rating <= FEEDBACK_OPTIONS.FINE) {
407458
+ const feedbackEvent = new UserFeedbackEvent(
407459
+ sessionStats.sessionId,
407460
+ rating,
407461
+ config2.getModel(),
407462
+ config2.getApprovalMode()
407463
+ );
407464
+ logUserFeedback(config2, feedbackEvent);
407465
+ }
407466
+ settings.setValue(
407467
+ "User" /* User */,
407468
+ "ui.feedbackLastShownTimestamp",
407469
+ Date.now()
407397
407470
  );
407398
- logUserFeedback(config2, feedbackEvent);
407399
407471
  closeFeedbackDialog();
407400
407472
  },
407401
- [config2, sessionStats, closeFeedbackDialog]
407473
+ [closeFeedbackDialog, sessionStats.sessionId, config2, settings]
407402
407474
  );
407403
407475
  (0, import_react102.useEffect)(() => {
407404
407476
  const checkAndShowFeedback = /* @__PURE__ */ __name(() => {
407405
407477
  if (streamingState === "idle" /* Idle */ && history.length > 0) {
407406
- if (config2.getAuthType() !== "qwen-oauth" /* QWEN_OAUTH */ || !config2.getUsageStatisticsEnabled() || settings.merged.ui?.enableUserFeedback === false || !lastMessageIsAIResponse(history) || Math.random() > FEEDBACK_SHOW_PROBABILITY || !meetsMinimumSessionRequirements(sessionStats)) {
407478
+ if (config2.getAuthType() !== "qwen-oauth" /* QWEN_OAUTH */ || !config2.getUsageStatisticsEnabled() || settings.merged.ui?.enableUserFeedback === false || !lastMessageIsAIResponse(history) || Math.random() > FEEDBACK_SHOW_PROBABILITY || !meetsMinimumSessionRequirements(sessionStats) || isFeedbackDismissedTemporarily) {
407407
407479
  return;
407408
407480
  }
407409
407481
  if (shouldShowFeedbackBasedOnFatigue()) {
@@ -407417,14 +407489,21 @@ var useFeedbackDialog = /* @__PURE__ */ __name(({
407417
407489
  history,
407418
407490
  sessionStats,
407419
407491
  isFeedbackDialogOpen,
407492
+ isFeedbackDismissedTemporarily,
407420
407493
  openFeedbackDialog,
407421
407494
  settings.merged.ui?.enableUserFeedback,
407422
407495
  config2
407423
407496
  ]);
407497
+ (0, import_react102.useEffect)(() => {
407498
+ if (streamingState === "responding" /* Responding */ && isFeedbackDismissedTemporarily) {
407499
+ setIsFeedbackDismissedTemporarily(false);
407500
+ }
407501
+ }, [streamingState, isFeedbackDismissedTemporarily]);
407424
407502
  return {
407425
407503
  isFeedbackDialogOpen,
407426
407504
  openFeedbackDialog,
407427
407505
  closeFeedbackDialog,
407506
+ temporaryCloseFeedbackDialog,
407428
407507
  submitFeedback
407429
407508
  };
407430
407509
  }, "useFeedbackDialog");
@@ -417061,7 +417140,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
417061
417140
  try {
417062
417141
  const { memoryContent, fileCount } = await loadHierarchicalGeminiMemory(
417063
417142
  process48.cwd(),
417064
- settings.merged.context?.loadMemoryFromIncludeDirectories ? config2.getWorkspaceContext().getDirectories() : [],
417143
+ settings.merged.context?.loadFromIncludeDirectories ? config2.getWorkspaceContext().getDirectories() : [],
417065
417144
  config2.getDebugMode(),
417066
417145
  config2.getFileService(),
417067
417146
  config2.getExtensionContextFilePaths(),
@@ -417593,6 +417672,7 @@ ${migrationResult.failedFiles.map((f5) => ` \u2022 ${f5.file}: ${f5.error}`).jo
417593
417672
  isFeedbackDialogOpen,
417594
417673
  openFeedbackDialog,
417595
417674
  closeFeedbackDialog,
417675
+ temporaryCloseFeedbackDialog,
417596
417676
  submitFeedback
417597
417677
  } = useFeedbackDialog({
417598
417678
  config: config2,
@@ -417850,6 +417930,7 @@ ${migrationResult.failedFiles.map((f5) => ` \u2022 ${f5.file}: ${f5.error}`).jo
417850
417930
  // Feedback dialog
417851
417931
  openFeedbackDialog,
417852
417932
  closeFeedbackDialog,
417933
+ temporaryCloseFeedbackDialog,
417853
417934
  submitFeedback
417854
417935
  }),
417855
417936
  [
@@ -417893,6 +417974,7 @@ ${migrationResult.failedFiles.map((f5) => ` \u2022 ${f5.file}: ${f5.error}`).jo
417893
417974
  // Feedback dialog
417894
417975
  openFeedbackDialog,
417895
417976
  closeFeedbackDialog,
417977
+ temporaryCloseFeedbackDialog,
417896
417978
  submitFeedback
417897
417979
  ]
417898
417980
  );
@@ -419223,7 +419305,8 @@ var usageSchema = external_exports.object({
419223
419305
  });
419224
419306
  var sessionUpdateMetaSchema = external_exports.object({
419225
419307
  usage: usageSchema.optional().nullable(),
419226
- durationMs: external_exports.number().optional().nullable()
419308
+ durationMs: external_exports.number().optional().nullable(),
419309
+ toolName: external_exports.string().optional().nullable()
419227
419310
  });
419228
419311
  var requestPermissionResponseSchema = external_exports.object({
419229
419312
  outcome: requestPermissionOutcomeSchema
@@ -419397,6 +419480,7 @@ var sessionUpdateSchema = external_exports.union([
419397
419480
  kind: toolKindSchema,
419398
419481
  locations: external_exports.array(toolCallLocationSchema).optional(),
419399
419482
  rawInput: external_exports.unknown().optional(),
419483
+ _meta: sessionUpdateMetaSchema.optional().nullable(),
419400
419484
  sessionUpdate: external_exports.literal("tool_call"),
419401
419485
  status: toolCallStatusSchema,
419402
419486
  title: external_exports.string(),
@@ -419408,6 +419492,7 @@ var sessionUpdateSchema = external_exports.union([
419408
419492
  locations: external_exports.array(toolCallLocationSchema).optional().nullable(),
419409
419493
  rawInput: external_exports.unknown().optional(),
419410
419494
  rawOutput: external_exports.unknown().optional(),
419495
+ _meta: sessionUpdateMetaSchema.optional().nullable(),
419411
419496
  sessionUpdate: external_exports.literal("tool_call_update"),
419412
419497
  status: toolCallStatusSchema.optional().nullable(),
419413
419498
  title: external_exports.string().optional().nullable(),
@@ -420041,7 +420126,8 @@ var ToolCallEmitter = class extends BaseEmitter {
420041
420126
  content: [],
420042
420127
  locations,
420043
420128
  kind: kind2,
420044
- rawInput: params.args ?? {}
420129
+ rawInput: params.args ?? {},
420130
+ _meta: { toolName: params.toolName }
420045
420131
  });
420046
420132
  return true;
420047
420133
  }
@@ -420082,7 +420168,8 @@ var ToolCallEmitter = class extends BaseEmitter {
420082
420168
  sessionUpdate: "tool_call_update",
420083
420169
  toolCallId: params.callId,
420084
420170
  status: params.success ? "completed" : "failed",
420085
- content: contentArray
420171
+ content: contentArray,
420172
+ _meta: { toolName: params.toolName }
420086
420173
  };
420087
420174
  if (params.resultDisplay !== void 0) {
420088
420175
  update2["rawOutput"] = params.resultDisplay;
@@ -420096,14 +420183,15 @@ var ToolCallEmitter = class extends BaseEmitter {
420096
420183
  * @param callId - The tool call ID
420097
420184
  * @param error - The error that occurred
420098
420185
  */
420099
- async emitError(callId, error2) {
420186
+ async emitError(callId, toolName, error2) {
420100
420187
  await this.sendUpdate({
420101
420188
  sessionUpdate: "tool_call_update",
420102
420189
  toolCallId: callId,
420103
420190
  status: "failed",
420104
420191
  content: [
420105
420192
  { type: "content", content: { type: "text", text: error2.message } }
420106
- ]
420193
+ ],
420194
+ _meta: { toolName }
420107
420195
  });
420108
420196
  }
420109
420197
  // ==================== Public Utilities ====================
@@ -421002,7 +421090,11 @@ var Session3 = class {
421002
421090
  } catch (e4) {
421003
421091
  subAgentCleanupFunctions.forEach((cleanup) => cleanup());
421004
421092
  const error2 = e4 instanceof Error ? e4 : new Error(String(e4));
421005
- await this.toolCallEmitter.emitError(callId, error2);
421093
+ await this.toolCallEmitter.emitError(
421094
+ callId,
421095
+ fc.name ?? "unknown_tool",
421096
+ error2
421097
+ );
421006
421098
  const errorParts = [
421007
421099
  {
421008
421100
  functionResponse: {
@@ -421257,7 +421349,7 @@ ${pathList}
421257
421349
  if (pathSpecsToRead.length > 0) {
421258
421350
  const readResult = await readManyFilesTool.buildAndExecute(
421259
421351
  {
421260
- paths_with_line_ranges: pathSpecsToRead
421352
+ paths: pathSpecsToRead
421261
421353
  },
421262
421354
  abortSignal
421263
421355
  );
@@ -421430,7 +421522,7 @@ var GeminiAgent = class {
421430
421522
  name: APPROVAL_MODE_INFO[mode].name,
421431
421523
  description: APPROVAL_MODE_INFO[mode].description
421432
421524
  }));
421433
- const version2 = "0.2.2-alpha.1";
421525
+ const version2 = "0.2.2-alpha.3";
421434
421526
  return {
421435
421527
  protocolVersion: PROTOCOL_VERSION,
421436
421528
  agentInfo: {
package/locales/en.js CHANGED
@@ -322,7 +322,9 @@ export default {
322
322
  'How is Qwen doing this session? (optional)':
323
323
  'How is Qwen doing this session? (optional)',
324
324
  Bad: 'Bad',
325
+ Fine: 'Fine',
325
326
  Good: 'Good',
327
+ Dismiss: 'Dismiss',
326
328
  'Not Sure Yet': 'Not Sure Yet',
327
329
  'Any other key': 'Any other key',
328
330
  'Disable Loading Phrases': 'Disable Loading Phrases',
package/locales/zh.js CHANGED
@@ -312,7 +312,9 @@ export default {
312
312
  'Enable User Feedback': '启用用户反馈',
313
313
  'How is Qwen doing this session? (optional)': 'Qwen 这次表现如何?(可选)',
314
314
  Bad: '不满意',
315
+ Fine: '还行',
315
316
  Good: '满意',
317
+ Dismiss: '忽略',
316
318
  'Not Sure Yet': '暂不评价',
317
319
  'Any other key': '任意其他键',
318
320
  'Disable Loading Phrases': '禁用加载短语',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rdmind/rdmind",
3
- "version": "0.2.2-alpha.1",
3
+ "version": "0.2.2-alpha.3",
4
4
  "description": "RDMind - AI-powered coding assistant",
5
5
  "type": "module",
6
6
  "main": "cli.js",
@@ -20,7 +20,7 @@
20
20
  "locales"
21
21
  ],
22
22
  "config": {
23
- "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.2.2-alpha.1"
23
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.2.2-alpha.3"
24
24
  },
25
25
  "publishConfig": {
26
26
  "access": "public"
@@ -32,8 +32,7 @@
32
32
  "@lydell/node-pty-darwin-x64": "1.1.0",
33
33
  "@lydell/node-pty-linux-x64": "1.1.0",
34
34
  "@lydell/node-pty-win32-arm64": "1.1.0",
35
- "@lydell/node-pty-win32-x64": "1.1.0",
36
- "node-pty": "^1.0.0"
35
+ "@lydell/node-pty-win32-x64": "1.1.0"
37
36
  },
38
37
  "engines": {
39
38
  "node": ">=20.0.0"