@ycodium-ai/plugin-im 0.2.4194 → 0.2.4250

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/dist/index.js CHANGED
@@ -126160,7 +126160,7 @@ ${lines.join("\n")}
126160
126160
  import { definePlugin } from "@ycodium-ai/plugin-api";
126161
126161
 
126162
126162
  // ../../packages/plugin-api/src/version.ts
126163
- var PLUGIN_API_VERSION = 99;
126163
+ var PLUGIN_API_VERSION = 103;
126164
126164
 
126165
126165
  // src/errors.ts
126166
126166
  var describeError = (error) => error instanceof Error ? error.message : String(error);
@@ -133146,25 +133146,25 @@ var pickableInstances = async (providers, instances) => Promise.all(
133146
133146
  };
133147
133147
  })
133148
133148
  );
133149
- var modelChoices = (instances) => instances.flatMap(
133149
+ var modelChoices = (instances, unknownAgent) => instances.flatMap(
133150
133150
  (instance) => instance.enabled ? (instance.models ?? []).map(
133151
133151
  (model) => ({
133152
133152
  instanceId: instance.instanceId,
133153
133153
  model: model.slug,
133154
- instanceName: instance.displayName ?? instance.instanceId,
133154
+ instanceName: instance.displayName ?? unknownAgent,
133155
133155
  modelName: model.name === "" ? model.slug : model.name
133156
133156
  })
133157
133157
  ) : []
133158
133158
  );
133159
133159
  var modelLabel = (choice) => `${choice.instanceName} \xB7 ${choice.modelName}`;
133160
- var rawModelLabel = (selection) => `${selection.instanceId} \xB7 ${selection.model}`;
133160
+ var rawModelLabel = (selection, unknownAgent, displayName) => `${displayName ?? unknownAgent} \xB7 ${selection.model}`;
133161
133161
  var sameModel = (left, right) => left.instanceId === right.instanceId && left.model === right.model;
133162
133162
  var modelCatalogHas = (choices, selection) => choices.some((choice) => sameModel(choice, selection));
133163
- var formatModels = (current, choices, t) => {
133163
+ var formatModels = (current, choices, t, displayNameOf) => {
133164
133164
  const currentLabel = current === null ? t("model.currentUnknown") : t("model.current", {
133165
133165
  model: modelLabel(
133166
133166
  choices.find((choice) => sameModel(choice, current)) ?? {
133167
- instanceName: current.instanceId,
133167
+ instanceName: displayNameOf?.(current.instanceId) ?? t("model.unknownAgent"),
133168
133168
  modelName: current.model
133169
133169
  }
133170
133170
  )
@@ -134760,7 +134760,7 @@ var resolveDefaultModel = async (bot, chatModel, projectDefault, providers, know
134760
134760
  if (chatModel !== null) return chatModel;
134761
134761
  if (bot.defaultModel !== void 0) {
134762
134762
  const instances = knownInstances === void 0 ? await providers.list({}).catch(() => null) : knownInstances;
134763
- if (!isModelCatalogComplete(instances) || modelCatalogHas(modelChoices(instances ?? []), bot.defaultModel)) {
134763
+ if (!isModelCatalogComplete(instances) || modelCatalogHas(modelChoices(instances ?? [], ""), bot.defaultModel)) {
134764
134764
  return bot.defaultModel;
134765
134765
  }
134766
134766
  }
@@ -134883,19 +134883,19 @@ var effortRejection = (t, model, wanted, values) => {
134883
134883
  ].join("\n");
134884
134884
  };
134885
134885
  var effortText = (t, selection) => selectedReasoning(selection)?.value ?? t("model.effortDefault");
134886
- var selectionText = (t, selection) => `${rawModelLabel(selection)} \xB7 ${effortText(t, selection)}`;
134887
- var mismatchText = (t, requested, actual) => t("model.mismatch", {
134888
- requested: selectionText(t, requested),
134889
- actual: actual === null ? t("model.unconfirmed") : selectionText(t, actual)
134886
+ var selectionText = (t, selection, displayNameOf) => `${rawModelLabel(selection, t("model.unknownAgent"), displayNameOf?.(selection.instanceId))} \xB7 ${effortText(t, selection)}`;
134887
+ var mismatchText = (t, requested, actual, displayNameOf) => t("model.mismatch", {
134888
+ requested: selectionText(t, requested, displayNameOf),
134889
+ actual: actual === null ? t("model.unconfirmed") : selectionText(t, actual, displayNameOf)
134890
134890
  });
134891
- var saveFailureText = (t, saved, requested, failed = "model.setFailed") => {
134891
+ var saveFailureText = (t, saved, requested, failed = "model.setFailed", displayNameOf) => {
134892
134892
  switch (saved.kind) {
134893
134893
  case "failed":
134894
134894
  return t(failed);
134895
134895
  case "bindingChanged":
134896
134896
  return t("model.bindingChanged");
134897
134897
  case "mismatch":
134898
- return mismatchText(t, requested, saved.actual);
134898
+ return mismatchText(t, requested, saved.actual, displayNameOf);
134899
134899
  }
134900
134900
  };
134901
134901
 
@@ -134906,13 +134906,21 @@ var makeReasoningCommand = (core, currentModel) => {
134906
134906
  const readOptions = async (binding) => {
134907
134907
  const resolved = await currentModel(binding);
134908
134908
  const selection = resolved.selection;
134909
- const catalog = selection === null ? null : await host.providers.models.list({
134910
- instanceId: selection.instanceId,
134911
- // 当前型号被藏起来了也要能读到它的档位。
134912
- includeHidden: true
134913
- });
134909
+ const [catalog, instances] = selection === null ? [null, null] : await Promise.all([
134910
+ host.providers.models.list({
134911
+ instanceId: selection.instanceId,
134912
+ // 当前型号被藏起来了也要能读到它的档位。
134913
+ includeHidden: true
134914
+ }),
134915
+ host.providers.instances.list({}).catch(() => null)
134916
+ ]);
134914
134917
  const model = catalog?.models.find((entry) => entry.slug === selection?.model);
134915
- return { ...resolved, option: model === void 0 ? void 0 : reasoningOption(model) };
134918
+ const displayNameOf = (instanceId) => instances?.find((instance) => instance.instanceId === instanceId)?.displayName ?? void 0;
134919
+ return {
134920
+ ...resolved,
134921
+ option: model === void 0 ? void 0 : reasoningOption(model),
134922
+ displayNameOf
134923
+ };
134916
134924
  };
134917
134925
  return async (binding, arg) => {
134918
134926
  const boundThreadId = chatOf(core.state, chatKeyOf(binding)).threadId;
@@ -134940,7 +134948,7 @@ var makeReasoningCommand = (core, currentModel) => {
134940
134948
  const saved2 = await saveAndVerifySelection(core, binding, threadId, boundThreadId, next2);
134941
134949
  await deliver(
134942
134950
  binding,
134943
- saved2.kind === "applied" ? t(threadId === null ? "reasoning.resetNext" : "reasoning.resetNow") : saveFailureText(t, saved2, next2, "reasoning.setFailed")
134951
+ saved2.kind === "applied" ? t(threadId === null ? "reasoning.resetNext" : "reasoning.resetNow") : saveFailureText(t, saved2, next2, "reasoning.setFailed", resolved.displayNameOf)
134944
134952
  );
134945
134953
  return;
134946
134954
  }
@@ -134994,7 +135002,7 @@ var makeReasoningCommand = (core, currentModel) => {
134994
135002
  binding,
134995
135003
  saved.kind === "applied" ? t(threadId === null ? "reasoning.setNext" : "reasoning.setNow", {
134996
135004
  value: effortText(t, saved.actual)
134997
- }) : saveFailureText(t, saved, next, "reasoning.setFailed")
135005
+ }) : saveFailureText(t, saved, next, "reasoning.setFailed", resolved.displayNameOf)
134998
135006
  );
134999
135007
  };
135000
135008
  };
@@ -135089,7 +135097,7 @@ var makePermissionCommand = (core) => {
135089
135097
  // package.json
135090
135098
  var package_default = {
135091
135099
  name: "@ycodium-ai/plugin-im",
135092
- version: "0.2.4194",
135100
+ version: "0.2.4250",
135093
135101
  description: "Talk to your agents from Telegram, WeCom, Lark, or WeChat (experimental).",
135094
135102
  keywords: [
135095
135103
  "im",
@@ -135315,7 +135323,7 @@ ${t("archived.usage")}`);
135315
135323
  const planLine = chatOf(core.state, chatKey).plan ? [t("status.planOn")] : [];
135316
135324
  const projectLine2 = [
135317
135325
  binding.projectId === "" ? t("status.noProject") : t("status.project", {
135318
- title: (await host.projects.get({ projectId: binding.projectId }).catch(() => null))?.title ?? binding.projectId
135326
+ title: (await host.projects.get({ projectId: binding.projectId }).catch(() => null))?.title ?? t("status.unknownProject")
135319
135327
  })
135320
135328
  ];
135321
135329
  if (threadId === void 0) {
@@ -135327,13 +135335,26 @@ ${t("archived.usage")}`);
135327
135335
  }
135328
135336
  const thread = await threadOrNull4(host.threads, threadId);
135329
135337
  const running = isSessionRunning(thread?.session?.status);
135338
+ const provider = thread === null ? void 0 : await host.providers.instances.list({}).then(
135339
+ (instances) => instances.find(
135340
+ (instance) => instance.instanceId === thread.modelSelection.instanceId
135341
+ )?.displayName ?? void 0
135342
+ ).catch(() => void 0);
135330
135343
  await deliver(
135331
135344
  binding,
135332
135345
  [
135333
135346
  where,
135334
135347
  ...projectLine2,
135335
- t("status.session", { title: thread?.title ?? threadId }),
135336
- ...thread === null ? [] : [t("status.model", { model: rawModelLabel(thread.modelSelection) })],
135348
+ t("status.session", { title: thread?.title ?? t("status.unknownThread") }),
135349
+ ...thread === null ? [] : [
135350
+ t("status.model", {
135351
+ model: rawModelLabel(
135352
+ thread.modelSelection,
135353
+ t("model.unknownAgent"),
135354
+ provider ?? thread.session?.providerName ?? void 0
135355
+ )
135356
+ })
135357
+ ],
135337
135358
  ...planLine,
135338
135359
  running ? t("status.running") : t("status.idle")
135339
135360
  ].join("\n")
@@ -147475,14 +147496,14 @@ var en_default = {
147475
147496
  turnFailedToStartQuoted: `This message (starting with "{{excerpt}}") couldn't be dispatched. Please send it again later. Reference {{ref}}.`,
147476
147497
  turnFailedToStartAttachment: `This message (with the attachment "{{excerpt}}") couldn't be dispatched. Please send it again later. Reference {{ref}}.`,
147477
147498
  turnRetrying: "Couldn't dispatch this message yet. Retrying automatically in the background, so there's no need to send it again. You'll get another message if it still fails. Reference {{ref}}.",
147478
- turnFailed: "This turn didn't finish: {{detail}}\nReference {{ref}}. Send the message again; if it keeps failing, send /new to start a new conversation.",
147479
- turnFailedNoDetail: "This turn didn't finish. Reference {{ref}}. Send the message again; if it keeps failing, send /new to start a new conversation.",
147480
- turnFailedBrief: "This turn didn't finish: {{detail}}\nSend the message again; if it keeps failing, send /new to start a new conversation.",
147481
- turnFailedBriefNoDetail: "This turn didn't finish. Send the message again; if it keeps failing, send /new to start a new conversation.",
147499
+ turnFailed: "This turn didn't finish: {{detail}}\nReference {{ref}}. Send the message again; if it keeps failing, send /new to start a new thread.",
147500
+ turnFailedNoDetail: "This turn didn't finish. Reference {{ref}}. Send the message again; if it keeps failing, send /new to start a new thread.",
147501
+ turnFailedBrief: "This turn didn't finish: {{detail}}\nSend the message again; if it keeps failing, send /new to start a new thread.",
147502
+ turnFailedBriefNoDetail: "This turn didn't finish. Send the message again; if it keeps failing, send /new to start a new thread.",
147482
147503
  turnFailedWithReference: "{{message}}\nReference {{ref}}.",
147483
147504
  turnFailedQuota: "The model quota or balance is insufficient, so this turn didn't finish. Send /model to switch to another model, or ask an administrator to add quota, then try again.",
147484
147505
  turnFailedRateLimit: "The model service is rate-limiting requests, so this turn didn't finish. Please try again later.",
147485
- turnFailedContextLimit: "This conversation exceeds the model context limit, so this turn didn't finish. Send /new to start a new conversation, then send your request again.",
147506
+ turnFailedContextLimit: "This thread exceeds the model context limit, so this turn didn't finish. Send /new to start a new thread, then send your request again.",
147486
147507
  turnFailedAuth: "The model credentials are missing or invalid, so this turn didn't finish. Ask an administrator to check the model settings, then try again.",
147487
147508
  turnFailedModelUnavailable: "The current model does not exist or does not support the selected settings, so this turn didn't finish. Send /model to list models, then send /model followed by a number (for example /model 2) to pick one for this chat, and send your request again.",
147488
147509
  turnFailedTransport: "The model service is temporarily unreachable, so this turn didn't finish. Please try again later.",
@@ -147578,6 +147599,8 @@ var en_default = {
147578
147599
  routedThread: "Normal session",
147579
147600
  nothingRunning: "{{where}}. Nothing is running.",
147580
147601
  session: "Session: {{title}}",
147602
+ unknownThread: "Unknown thread",
147603
+ unknownProject: "Unknown project",
147581
147604
  running: "Running. Send /stop to stop it.",
147582
147605
  idle: "Idle.",
147583
147606
  model: "Model: {{model}}",
@@ -147787,6 +147810,7 @@ var en_default = {
147787
147810
  textOnly: "Preset commands only accept text. Remove attachments and try again."
147788
147811
  },
147789
147812
  model: {
147813
+ unknownAgent: "Unknown agent",
147790
147814
  current: "Model: {{model}}",
147791
147815
  currentUnknown: "Model: not decided yet \u2014 a new session uses the project's default.",
147792
147816
  unavailable: "The available models cannot be read right now, so the model cannot be switched.",
@@ -147813,7 +147837,7 @@ var en_default = {
147813
147837
  usage: "Usage: /plan toggles plan mode; /plan on and /plan off set it."
147814
147838
  },
147815
147839
  card: {
147816
- untitled: "Chat",
147840
+ untitled: "Thread",
147817
147841
  status: {
147818
147842
  working: "Working on it\u2026",
147819
147843
  done: "Done",
@@ -148651,6 +148675,8 @@ var zh_CN_default = {
148651
148675
  routedThread: "\u666E\u901A\u4F1A\u8BDD",
148652
148676
  nothingRunning: "{{where}}\u3002\u73B0\u5728\u6CA1\u6709\u5728\u8DD1\u7684\u6D3B\u513F\u3002",
148653
148677
  session: "\u4F1A\u8BDD\uFF1A{{title}}",
148678
+ unknownThread: "\u672A\u77E5\u4F1A\u8BDD",
148679
+ unknownProject: "\u672A\u77E5\u9879\u76EE",
148654
148680
  running: "\u6B63\u5728\u8DD1\u3002\u60F3\u505C\u5C31\u6253 /stop\u3002",
148655
148681
  idle: "\u7A7A\u95F2\u7740\u3002",
148656
148682
  model: "\u6A21\u578B\uFF1A{{model}}",
@@ -148860,6 +148886,7 @@ var zh_CN_default = {
148860
148886
  textOnly: "\u9884\u8BBE\u547D\u4EE4\u53EA\u63A5\u53D7\u6587\u5B57\u3002\u53BB\u6389\u9644\u4EF6\u540E\u518D\u8BD5\u3002"
148861
148887
  },
148862
148888
  model: {
148889
+ unknownAgent: "\u672A\u77E5 agent",
148863
148890
  current: "\u6A21\u578B\uFF1A{{model}}",
148864
148891
  currentUnknown: "\u6A21\u578B\uFF1A\u8FD8\u6CA1\u5B9A\u2014\u2014\u65B0\u5F00\u4F1A\u8BDD\u65F6\u7528\u9879\u76EE\u7684\u9ED8\u8BA4\u6A21\u578B\u3002",
148865
148892
  unavailable: "\u73B0\u5728\u8BFB\u4E0D\u51FA\u53EF\u9009\u7684\u6A21\u578B\uFF0C\u6CA1\u6CD5\u5207\u6362\u6A21\u578B\u3002",
@@ -148886,7 +148913,7 @@ var zh_CN_default = {
148886
148913
  usage: "\u7528\u6CD5\uFF1A/plan \u5207\u6362\u8BA1\u5212\u6A21\u5F0F\uFF1B/plan on\u3001/plan off \u660E\u786E\u8BBE\u5B9A\u3002"
148887
148914
  },
148888
148915
  card: {
148889
- untitled: "\u5BF9\u8BDD",
148916
+ untitled: "\u4F1A\u8BDD",
148890
148917
  status: {
148891
148918
  working: "\u5904\u7406\u4E2D\u2026",
148892
148919
  done: "\u5DF2\u5B8C\u6210",
@@ -150182,9 +150209,13 @@ var makeModelPlan = (core) => {
150182
150209
  const handleModel = async (binding, arg) => {
150183
150210
  const boundThreadId = chatOf(core.state, chatKeyOf(binding)).threadId;
150184
150211
  const instances = await host.providers.instances.list({}).catch(() => null);
150185
- const choices = instances === null ? [] : modelChoices(await pickableInstances(host.providers, instances));
150212
+ const displayNameOf = (instanceId) => instances?.find((instance) => instance.instanceId === instanceId)?.displayName ?? void 0;
150213
+ const choices = instances === null ? [] : modelChoices(await pickableInstances(host.providers, instances), t("model.unknownAgent"));
150186
150214
  if (arg === "") {
150187
- await deliver(binding, formatModels(await currentModelOf(binding, instances), choices, t));
150215
+ await deliver(
150216
+ binding,
150217
+ formatModels(await currentModelOf(binding, instances), choices, t, displayNameOf)
150218
+ );
150188
150219
  return;
150189
150220
  }
150190
150221
  if (choices.length === 0) {
@@ -150270,7 +150301,10 @@ var makeModelPlan = (core) => {
150270
150301
  );
150271
150302
  return;
150272
150303
  }
150273
- await deliver(binding, saveFailureText(t, saved, resolved.modelSelection));
150304
+ await deliver(
150305
+ binding,
150306
+ saveFailureText(t, saved, resolved.modelSelection, "model.setFailed", displayNameOf)
150307
+ );
150274
150308
  };
150275
150309
  const handlePlan = async (binding, mode) => {
150276
150310
  if (mode === "invalid") {
@@ -150971,7 +151005,7 @@ var makePanelWiring = (core, deps) => {
150971
151005
  const binding = bindingForChatKey(chatKey);
150972
151006
  const instances = await host.providers.instances.list({}).catch(() => null);
150973
151007
  if (binding === void 0 || instances === null) return null;
150974
- const choices = modelChoices(instances);
151008
+ const choices = modelChoices(instances, t("model.unknownAgent"));
150975
151009
  return { current: await currentModelOf(binding, instances), choices };
150976
151010
  },
150977
151011
  loadProjects: async (chatKey) => {
@@ -154539,7 +154573,10 @@ var registerSettingsCommands = (ctx, adapters, updateSettings, connections) => {
154539
154573
  view: buildSettingsView(config2, adapters),
154540
154574
  columns: buildBotColumns(
154541
154575
  adapters,
154542
- modelChoices(instances ?? []),
154576
+ modelChoices(
154577
+ instances ?? [],
154578
+ makeTranslate(parseReplyLanguage(config2[REPLY_LANGUAGE_FIELD]))("model.unknownAgent")
154579
+ ),
154543
154580
  isModelCatalogComplete(instances),
154544
154581
  presets?.presets ?? null
154545
154582
  ),
package/locales/en.json CHANGED
@@ -246,14 +246,14 @@
246
246
  "turnFailedToStartQuoted": "This message (starting with \"{{excerpt}}\") couldn't be dispatched. Please send it again later. Reference {{ref}}.",
247
247
  "turnFailedToStartAttachment": "This message (with the attachment \"{{excerpt}}\") couldn't be dispatched. Please send it again later. Reference {{ref}}.",
248
248
  "turnRetrying": "Couldn't dispatch this message yet. Retrying automatically in the background, so there's no need to send it again. You'll get another message if it still fails. Reference {{ref}}.",
249
- "turnFailed": "This turn didn't finish: {{detail}}\nReference {{ref}}. Send the message again; if it keeps failing, send /new to start a new conversation.",
250
- "turnFailedNoDetail": "This turn didn't finish. Reference {{ref}}. Send the message again; if it keeps failing, send /new to start a new conversation.",
251
- "turnFailedBrief": "This turn didn't finish: {{detail}}\nSend the message again; if it keeps failing, send /new to start a new conversation.",
252
- "turnFailedBriefNoDetail": "This turn didn't finish. Send the message again; if it keeps failing, send /new to start a new conversation.",
249
+ "turnFailed": "This turn didn't finish: {{detail}}\nReference {{ref}}. Send the message again; if it keeps failing, send /new to start a new thread.",
250
+ "turnFailedNoDetail": "This turn didn't finish. Reference {{ref}}. Send the message again; if it keeps failing, send /new to start a new thread.",
251
+ "turnFailedBrief": "This turn didn't finish: {{detail}}\nSend the message again; if it keeps failing, send /new to start a new thread.",
252
+ "turnFailedBriefNoDetail": "This turn didn't finish. Send the message again; if it keeps failing, send /new to start a new thread.",
253
253
  "turnFailedWithReference": "{{message}}\nReference {{ref}}.",
254
254
  "turnFailedQuota": "The model quota or balance is insufficient, so this turn didn't finish. Send /model to switch to another model, or ask an administrator to add quota, then try again.",
255
255
  "turnFailedRateLimit": "The model service is rate-limiting requests, so this turn didn't finish. Please try again later.",
256
- "turnFailedContextLimit": "This conversation exceeds the model context limit, so this turn didn't finish. Send /new to start a new conversation, then send your request again.",
256
+ "turnFailedContextLimit": "This thread exceeds the model context limit, so this turn didn't finish. Send /new to start a new thread, then send your request again.",
257
257
  "turnFailedAuth": "The model credentials are missing or invalid, so this turn didn't finish. Ask an administrator to check the model settings, then try again.",
258
258
  "turnFailedModelUnavailable": "The current model does not exist or does not support the selected settings, so this turn didn't finish. Send /model to list models, then send /model followed by a number (for example /model 2) to pick one for this chat, and send your request again.",
259
259
  "turnFailedTransport": "The model service is temporarily unreachable, so this turn didn't finish. Please try again later.",
@@ -349,6 +349,8 @@
349
349
  "routedThread": "Normal session",
350
350
  "nothingRunning": "{{where}}. Nothing is running.",
351
351
  "session": "Session: {{title}}",
352
+ "unknownThread": "Unknown thread",
353
+ "unknownProject": "Unknown project",
352
354
  "running": "Running. Send /stop to stop it.",
353
355
  "idle": "Idle.",
354
356
  "model": "Model: {{model}}",
@@ -558,6 +560,7 @@
558
560
  "textOnly": "Preset commands only accept text. Remove attachments and try again."
559
561
  },
560
562
  "model": {
563
+ "unknownAgent": "Unknown agent",
561
564
  "current": "Model: {{model}}",
562
565
  "currentUnknown": "Model: not decided yet — a new session uses the project's default.",
563
566
  "unavailable": "The available models cannot be read right now, so the model cannot be switched.",
@@ -584,7 +587,7 @@
584
587
  "usage": "Usage: /plan toggles plan mode; /plan on and /plan off set it."
585
588
  },
586
589
  "card": {
587
- "untitled": "Chat",
590
+ "untitled": "Thread",
588
591
  "status": {
589
592
  "working": "Working on it…",
590
593
  "done": "Done",
@@ -349,6 +349,8 @@
349
349
  "routedThread": "普通会话",
350
350
  "nothingRunning": "{{where}}。现在没有在跑的活儿。",
351
351
  "session": "会话:{{title}}",
352
+ "unknownThread": "未知会话",
353
+ "unknownProject": "未知项目",
352
354
  "running": "正在跑。想停就打 /stop。",
353
355
  "idle": "空闲着。",
354
356
  "model": "模型:{{model}}",
@@ -558,6 +560,7 @@
558
560
  "textOnly": "预设命令只接受文字。去掉附件后再试。"
559
561
  },
560
562
  "model": {
563
+ "unknownAgent": "未知 agent",
561
564
  "current": "模型:{{model}}",
562
565
  "currentUnknown": "模型:还没定——新开会话时用项目的默认模型。",
563
566
  "unavailable": "现在读不出可选的模型,没法切换模型。",
@@ -584,7 +587,7 @@
584
587
  "usage": "用法:/plan 切换计划模式;/plan on、/plan off 明确设定。"
585
588
  },
586
589
  "card": {
587
- "untitled": "对话",
590
+ "untitled": "会话",
588
591
  "status": {
589
592
  "working": "处理中…",
590
593
  "done": "已完成",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-im",
3
- "version": "0.2.4194",
3
+ "version": "0.2.4250",
4
4
  "description": "Talk to your agents from Telegram, WeCom, Lark, or WeChat (experimental).",
5
5
  "keywords": [
6
6
  "im",
@@ -32,7 +32,7 @@
32
32
  "markdown-it": "^15.0.2",
33
33
  "react": "19.2.6",
34
34
  "vite-plus": "0.2.2",
35
- "@ycodium-ai/plugin-api": "0.2.4194",
35
+ "@ycodium-ai/plugin-api": "0.2.4250",
36
36
  "ycodium-react-test-harness": "0.0.0"
37
37
  },
38
38
  "ycodium": {