@mars-sea/dsh-commandcode-provider 0.15.1 → 0.15.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/lib/client.js CHANGED
@@ -3172,7 +3172,7 @@ window.__ModuleLoader__.load({
3172
3172
  modelAllowance: "${amount}/月",
3173
3173
  modelAllowanceTitle: "该模型每月可用的额度(美元)。套餐内所有模型共用同一个月度额度池,这不是额外赠送的额度。",
3174
3174
  visibleModelsTitle: "模型白名单",
3175
- visibleModelsHint: "模型选择器只列出勾选的模型,都不勾选则显示全部;网页与终端共用这份选择。",
3175
+ visibleModelsHint: "只列出勾选的模型,都不勾选=显示全部。网页与终端共用。",
3176
3176
  visibleModelsPick: "选择要保留的模型…",
3177
3177
  visibleModelsCount: "已选 {count} 个模型",
3178
3178
  visibleModelsShowAll: "显示全部",
@@ -3444,7 +3444,7 @@ window.__ModuleLoader__.load({
3444
3444
  modelAllowance: "${amount}/mo",
3445
3445
  modelAllowanceTitle: "Monthly usage this model can draw, in USD. Every model shares one monthly pool — this is not extra credit on top of the plan.",
3446
3446
  visibleModelsTitle: "Model allowlist",
3447
- visibleModelsHint: "Model pickers list only the checked models; check none to show all. Web and terminal share this selection.",
3447
+ visibleModelsHint: "Only checked models are listed; none checked shows all. Web and terminal share this.",
3448
3448
  visibleModelsPick: "Select models to keep…",
3449
3449
  visibleModelsCount: "{count} model(s) selected",
3450
3450
  visibleModelsShowAll: "Show all",
@@ -3837,7 +3837,7 @@ window.__ModuleLoader__.load({
3837
3837
  }
3838
3838
  //#endregion
3839
3839
  //#region package.json
3840
- var version = "0.15.1";
3840
+ var version = "0.15.3";
3841
3841
  var repository = {
3842
3842
  "type": "git",
3843
3843
  "url": "git+https://github.com/Mars-Sea/dsh-commandcode-provider.git"
@@ -4249,7 +4249,7 @@ window.__ModuleLoader__.load({
4249
4249
  const fraction = (match[2] ?? "").replace(/0+$/, "");
4250
4250
  return fraction === "" ? `${match[1]}%` : `${match[1]}.${fraction}%`;
4251
4251
  }
4252
- /** The aggregate line, or undefined when this check carried no aggregates. */
4252
+ /** The aggregate segments; empty when this check carried no aggregates. */
4253
4253
  function detailCopy(snapshot, t) {
4254
4254
  const parts = [];
4255
4255
  const uptimes = [];
@@ -4257,7 +4257,7 @@ window.__ModuleLoader__.load({
4257
4257
  if (snapshot.uptimeMonth !== void 0) uptimes.push(t("serviceStatusUptimeMonth", { value: compactUptime(snapshot.uptimeMonth) }));
4258
4258
  if (uptimes.length > 0) parts.push(t("serviceStatusUptime", { value: uptimes.join(" / ") }));
4259
4259
  if (snapshot.responseTimeWeekMs !== void 0) parts.push(t("serviceStatusResponseWeek", { value: `${Math.round(snapshot.responseTimeWeekMs)} ms` }));
4260
- return parts.length === 0 ? void 0 : parts.join(" · ");
4260
+ return parts;
4261
4261
  }
4262
4262
  /** The heading verdict: a failed local probe first, else the published one. */
4263
4263
  function badgeOf(probe, official, t) {
@@ -4292,6 +4292,7 @@ window.__ModuleLoader__.load({
4292
4292
  label,
4293
4293
  tone: "checking"
4294
4294
  }, t),
4295
+ detailParts: [],
4295
4296
  local: local.text,
4296
4297
  localTone: local.tone,
4297
4298
  localChecking: probe.kind === "checking",
@@ -4311,7 +4312,7 @@ window.__ModuleLoader__.load({
4311
4312
  label,
4312
4313
  tone: officialTone
4313
4314
  }, t),
4314
- detail: detailCopy(snapshot, t),
4315
+ detailParts: detailCopy(snapshot, t),
4315
4316
  updated: snapshot.checkedAt === void 0 ? t("serviceStatusUpdatedUnknown") : updatedCopy(snapshot.checkedAt, now, t),
4316
4317
  lag: lagCopy(snapshot.checkedAt, now, t),
4317
4318
  local: local.text,
@@ -4656,26 +4657,6 @@ window.__ModuleLoader__.load({
4656
4657
  };
4657
4658
  }
4658
4659
  /**
4659
- * The reset button a staged field shows once it differs from the default. It
4660
- * trails the control, and a row with nothing to reset keeps an empty slot of
4661
- * the same width, so every staged control in a group ends on one right edge.
4662
- */
4663
- function FieldOverride({ label, state, disabled, t, onReset }) {
4664
- if (!state.overridden && !state.clear) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4665
- className: "cc-resetSlot",
4666
- "aria-hidden": "true"
4667
- });
4668
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4669
- type: "button",
4670
- className: "cc-iconButton",
4671
- disabled,
4672
- onClick: onReset,
4673
- "aria-label": `${label} — ${t("reset")}`,
4674
- title: t("reset"),
4675
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { name: "reset" })
4676
- });
4677
- }
4678
- /**
4679
4660
  * One settings row, laid out like the harness's own General page: the title
4680
4661
  * and description on the left, the control on the right, a hairline between
4681
4662
  * rows.
@@ -4714,12 +4695,34 @@ window.__ModuleLoader__.load({
4714
4695
  }) : null]
4715
4696
  });
4716
4697
  }
4717
- /** The tag a row title carries while its field overrides the default. */
4718
- function OverrideTag({ state, t }) {
4719
- return state.overridden ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4720
- className: "cc-badge",
4721
- children: t("overridden")
4722
- }) : null;
4698
+ /**
4699
+ * The title-line marker of a field that differs from its default: the
4700
+ * "customized" badge with a small reset button right after it (a draft that
4701
+ * only clears the stored value shows the button alone). Keeping reset on the
4702
+ * title line, not after the control, means no row reserves an empty reset
4703
+ * column — every control, account card and heading action ends on the same
4704
+ * right edge.
4705
+ */
4706
+ function OverrideTag({ label, state, disabled, t, onReset }) {
4707
+ if (!state.overridden && !state.clear) return null;
4708
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4709
+ className: "cc-overrideTag",
4710
+ children: [state.overridden ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4711
+ className: "cc-badge",
4712
+ children: t("overridden")
4713
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4714
+ type: "button",
4715
+ className: "cc-resetInline",
4716
+ disabled,
4717
+ onClick: onReset,
4718
+ "aria-label": `${label} — ${t("reset")}`,
4719
+ title: t("reset"),
4720
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
4721
+ name: "reset",
4722
+ className: "cc-icon cc-btnIcon"
4723
+ })
4724
+ })]
4725
+ });
4723
4726
  }
4724
4727
  /** One text/number field row. */
4725
4728
  function Field({ id, label, hint, state, disabled, numeric, decimal, context, output, wide, unit, placeholder, onEdit, onReset, t }) {
@@ -4738,24 +4741,21 @@ window.__ModuleLoader__.load({
4738
4741
  title: label,
4739
4742
  titleFor: id,
4740
4743
  tag: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OverrideTag, {
4744
+ label,
4741
4745
  state,
4742
- t
4746
+ disabled,
4747
+ t,
4748
+ onReset
4743
4749
  }),
4744
4750
  description: hint,
4745
4751
  error: state.invalid ? invalidCopy(state.invalidReason, t, output === true ? "output" : context === true ? "context" : decimal === true ? "duration" : "number") : void 0,
4746
- control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [unit === void 0 ? input : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4752
+ control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: unit === void 0 ? input : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4747
4753
  className: state.invalid ? "cc-unitBox cc-unitBoxInvalid" : "cc-unitBox",
4748
4754
  children: [input, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4749
4755
  className: "cc-unit",
4750
4756
  children: unit
4751
4757
  })]
4752
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldOverride, {
4753
- label,
4754
- state,
4755
- disabled,
4756
- t,
4757
- onReset
4758
- })] })
4758
+ }) })
4759
4759
  });
4760
4760
  }
4761
4761
  /** The per-field error copy for a staged draft's failure reason. */
@@ -4790,11 +4790,14 @@ window.__ModuleLoader__.load({
4790
4790
  title: label,
4791
4791
  titleFor: id,
4792
4792
  tag: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OverrideTag, {
4793
+ label,
4793
4794
  state,
4794
- t
4795
+ disabled,
4796
+ t,
4797
+ onReset
4795
4798
  }),
4796
4799
  description: hint,
4797
- control: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
4800
+ control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
4798
4801
  id,
4799
4802
  className: "cc-toggle",
4800
4803
  type: "checkbox",
@@ -4802,13 +4805,7 @@ window.__ModuleLoader__.load({
4802
4805
  checked,
4803
4806
  disabled,
4804
4807
  onChange: (event) => onEdit(event.target.checked ? "true" : "false")
4805
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldOverride, {
4806
- label,
4807
- state,
4808
- disabled,
4809
- t,
4810
- onReset
4811
- })] })
4808
+ }) })
4812
4809
  });
4813
4810
  }
4814
4811
  /** One stat tile in the account card's summary grid. */
@@ -5418,7 +5415,7 @@ window.__ModuleLoader__.load({
5418
5415
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
5419
5416
  title: t("contextOverridesTitle"),
5420
5417
  description: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("contextOverridesHint") }),
5421
- control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageButton, {
5418
+ control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageButton, {
5422
5419
  variant: "outline",
5423
5420
  size: "sm",
5424
5421
  icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
@@ -5428,7 +5425,7 @@ window.__ModuleLoader__.load({
5428
5425
  disabled: disabled || available.length === 0,
5429
5426
  onClick: addRow,
5430
5427
  children: t("contextOverrideAdd")
5431
- })
5428
+ }) })
5432
5429
  }),
5433
5430
  state.catalogFailed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5434
5431
  className: "cc-groupDesc",
@@ -5532,6 +5529,16 @@ window.__ModuleLoader__.load({
5532
5529
  function ServiceStatusRow({ view, t }) {
5533
5530
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
5534
5531
  title: t("serviceStatusTitle"),
5532
+ tag: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
5533
+ className: "cc-statusLink cc-statusTitleLink",
5534
+ href: STATUS_PAGE_URL,
5535
+ target: "_blank",
5536
+ rel: "noreferrer",
5537
+ children: [view.linkLabel, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
5538
+ name: "external",
5539
+ className: "cc-icon cc-iconInline"
5540
+ })]
5541
+ }),
5535
5542
  description: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5536
5543
  className: "cc-statusLines",
5537
5544
  children: [
@@ -5550,16 +5557,17 @@ window.__ModuleLoader__.load({
5550
5557
  className: "cc-statusVerdict",
5551
5558
  children: view.label
5552
5559
  }),
5553
- view.detail !== void 0 || view.updated !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
5560
+ view.detailParts.length > 0 || view.updated !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5554
5561
  className: "cc-statusMeta",
5555
- children: [
5556
- view.detail,
5557
- view.detail !== void 0 && view.updated !== void 0 ? "\xA0· " : null,
5558
- view.updated !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5559
- title: view.lag ?? view.hint,
5560
- children: view.updated
5561
- }) : null
5562
- ]
5562
+ children: [...view.detailParts, ...view.updated !== void 0 ? [view.updated] : []].map((part, index, parts) => {
5563
+ const last = index === parts.length - 1;
5564
+ const isAge = view.updated !== void 0 && last;
5565
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5566
+ className: "cc-statusPart",
5567
+ title: isAge ? view.lag ?? view.hint : void 0,
5568
+ children: last ? part : `${part}\u00a0·`
5569
+ }), last ? null : " "] }, index);
5570
+ })
5563
5571
  }) : null
5564
5572
  ]
5565
5573
  }),
@@ -5581,14 +5589,7 @@ window.__ModuleLoader__.load({
5581
5589
  }), view.notice !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5582
5590
  className: "cc-statusNotice",
5583
5591
  children: view.notice
5584
- }) : null] }),
5585
- control: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
5586
- className: "cc-statusLink",
5587
- href: STATUS_PAGE_URL,
5588
- target: "_blank",
5589
- rel: "noreferrer",
5590
- children: view.linkLabel
5591
- })
5592
+ }) : null] })
5592
5593
  });
5593
5594
  }
5594
5595
  /**
@@ -10270,7 +10271,11 @@ window.__ModuleLoader__.load({
10270
10271
  .cc-rows{flex-direction:column;display:flex}
10271
10272
  .cc-row{flex-wrap:wrap;align-items:center;gap:8px 24px;display:flex;padding:12px 0}
10272
10273
  .cc-rowFlush{padding:0}
10273
- .cc-rowText{flex-direction:column;flex:1 1 300px;gap:2px;min-width:0;display:flex}
10274
+ /* The text column starts at 200px (not 300px) so the widest controls — the
10275
+ * 280px API base input, the allowlist's button + 200px selector — still sit
10276
+ * beside their label in a ~560px settings panel; the description wraps more
10277
+ * lines instead of the control dropping to a second line. */
10278
+ .cc-rowText{flex-direction:column;flex:1 1 200px;gap:2px;min-width:0;display:flex}
10274
10279
  .cc-rowTitleLine{align-items:center;gap:8px;display:flex;min-width:0}
10275
10280
  .cc-rowTitle{min-width:0;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}
10276
10281
  .cc-rowDesc{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}
@@ -10296,9 +10301,14 @@ window.__ModuleLoader__.load({
10296
10301
  .cc-unitBox:has(>.cc-fieldInput:disabled){opacity:.5}
10297
10302
  .cc-unitBox>.cc-fieldInput{flex:1;width:auto;height:30px;border:0;border-radius:0;background:0 0;outline:none;text-align:right;font-variant-numeric:tabular-nums}
10298
10303
  .cc-unit{flex:none;padding:0 10px 0 2px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;white-space:nowrap}
10299
- /* Holds the reset button's column on rows that have nothing to reset, so the
10300
- * staged controls of one group line up on a single right edge. */
10301
- .cc-resetSlot{flex:none;width:28px;height:28px}
10304
+ /* A customized field's marker on its title line: the badge, then a 20px
10305
+ * round reset button. Reset lives here rather than after the control, so no
10306
+ * row reserves a reset column and the page keeps one right edge. */
10307
+ .cc-overrideTag{align-items:center;gap:4px;display:inline-flex}
10308
+ .cc-resetInline{flex:none;align-items:center;justify-content:center;display:inline-flex;width:20px;height:20px;padding:0;border:0;border-radius:999px;corner-shape:round;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}
10309
+ .cc-resetInline:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
10310
+ .cc-resetInline:disabled{cursor:default;opacity:.4}
10311
+ .cc-resetInline:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}
10302
10312
  .cc-icon{flex:none;width:16px;height:16px}
10303
10313
  /* The page's buttons (PageButton), drawn to the design canvas: one capsule
10304
10314
  * shape, md 32px / 14px text / 14px icon, sm 28px / 12px text, lg 36px for
@@ -10520,6 +10530,11 @@ window.__ModuleLoader__.load({
10520
10530
  .cc-statusValue{flex-wrap:wrap;align-items:center;gap:2px 8px;min-width:0;display:flex}
10521
10531
  .cc-statusVerdict{color:var(--dsw-alias-label-primary)}
10522
10532
  .cc-statusMeta{flex:1 1 200px;min-width:0}
10533
+ /* One aggregate (uptime, response, age) never breaks inside itself; a line
10534
+ * that runs out of room moves the whole next segment down. */
10535
+ .cc-statusPart{white-space:nowrap}
10536
+ /* On the title line, flush with the page's single right edge. */
10537
+ .cc-statusTitleLink{align-items:center;gap:4px;display:inline-flex;margin-left:auto}
10523
10538
  .cc-statusBad{color:var(--dsw-alias-state-warn-label,var(--dsw-alias-state-warn-primary,#b45309))}
10524
10539
  .cc-statusLink{color:var(--dsw-alias-link,var(--dsw-alias-brand-primary));text-decoration:none;font-size:12px;line-height:18px;white-space:nowrap}
10525
10540
  .cc-statusLink:hover{text-decoration:underline;text-underline-position:under}
package/lib/index.d.ts CHANGED
@@ -61,7 +61,7 @@ type CommandCodeProtocol = 'cli' | 'openai' | 'messages';
61
61
  declare const DEFAULT_MAX_OUTPUT_TOKENS = 131072;
62
62
  //#endregion
63
63
  //#region src/adapter.d.ts
64
- declare const COMMAND_CODE_CLI_VERSION = "1.87.1";
64
+ declare const COMMAND_CODE_CLI_VERSION = "1.87.3";
65
65
  declare const DEFAULT_API_BASE = "https://api.commandcode.ai";
66
66
  /**
67
67
  * The output budget this bundle asks for, and the ceiling it will never exceed.
@@ -2128,18 +2128,6 @@ interface WebSearchSelectionHandle {
2128
2128
  * it first and falls back to the reference only when settings is unavailable or
2129
2129
  * refuses (see `volatileWrite`).
2130
2130
  *
2131
- * ## Two engine shapes
2132
- *
2133
- * Everything above describes an rc.2+ runtime, where the selection is a
2134
- * reference. PRE-rc.2 engines (0.2.0-rc.2 and the 0.2.1 alphas) have neither
2135
- * that reference nor a settings row for `web`: there the selection is the
2136
- * private instance field `searchProviderId`, memory-only by nature. Those
2137
- * engines therefore run the degraded path BY CONSTRUCTION — no profile write
2138
- * exists for it and the user layer is unreadable, so a foreign pin cannot be
2139
- * seen and the takeover/restore semantics are the ones this plugin shipped
2140
- * before rc.2: remember the displaced backend, hand back only what we took. The
2141
- * shape is resolved per observation, so one build serves both.
2142
- *
2143
2131
  * ## Two writers, one field
2144
2132
  *
2145
2133
  * The shipped web-search settings page writes `web.searchProvider` too
package/lib/index.js CHANGED
@@ -482,13 +482,6 @@ const KNOWN_EFFORTS = {
482
482
  "xhigh",
483
483
  "max"
484
484
  ],
485
- "minimax/minimax-m3.1-flash:free": [
486
- "low",
487
- "medium",
488
- "high",
489
- "xhigh",
490
- "max"
491
- ],
492
485
  "gpt-6.1-sol": [
493
486
  "low",
494
487
  "medium",
@@ -588,14 +581,12 @@ const KNOWN_IMAGE_MODELS = /* @__PURE__ */ new Set([
588
581
  "nvidia/nemotron-3.5-super-vl",
589
582
  "mistral/mistral-large-4",
590
583
  "minimax/minimax-m3.1-flash",
591
- "minimax/minimax-m3.1-flash:free",
592
584
  "moonshotai/Kimi-K2.5",
593
585
  "moonshotai/Kimi-K2.6",
594
586
  "moonshotai/Kimi-K2.7-Code",
595
587
  "moonshotai/Kimi-K2.7-Code-Highspeed",
596
588
  "moonshotai/Kimi-K3",
597
589
  "ornith/ornith-1.5-122b",
598
- "ornith/ornith-1.5-122b:free",
599
590
  "sakana/fugu-ultra",
600
591
  "stepfun/Step-3.7-Flash",
601
592
  "stepfun/Step-5-Preview",
@@ -604,7 +595,6 @@ const KNOWN_IMAGE_MODELS = /* @__PURE__ */ new Set([
604
595
  "xai/grok-4.5",
605
596
  "xai/grok-4.6",
606
597
  "xai/grok-4.7",
607
- "xiaomi/mimo-v2.5",
608
598
  "xiaomi/mimo-v2.6-flash",
609
599
  "xiaomi/mimo-v2.6-pro",
610
600
  "xiaomi/mimo-v2.6-pro-ultraspeed",
@@ -756,8 +746,7 @@ const KNOWN_THINKING_MODELS = /* @__PURE__ */ new Set([
756
746
  "thinkingmachines/inkling-small",
757
747
  "poolside/laguna-s-2.1-free",
758
748
  "meituan/LongCat-2.0",
759
- "ornith/ornith-1.5-122b",
760
- "ornith/ornith-1.5-122b:free"
749
+ "ornith/ornith-1.5-122b"
761
750
  ]);
762
751
  /**
763
752
  * Catalog models the Provider API serves ONLY through `/provider/v1/messages`
@@ -889,7 +878,6 @@ const MODEL_OUTPUT_TOKEN_LIMITS = /* @__PURE__ */ new Map([
889
878
  ["meta/muse-spark-1.3-contributor", 131072],
890
879
  ["meta/muse-wonder-1.0", 131072],
891
880
  ["minimax/minimax-m3.1-flash", 524288],
892
- ["minimax/minimax-m3.1-flash:free", 524288],
893
881
  ["MiniMaxAI/MiniMax-M2.5", 131072],
894
882
  ["MiniMaxAI/MiniMax-M2.7", 131072],
895
883
  ["MiniMaxAI/MiniMax-M3", 524288],
@@ -919,8 +907,6 @@ const MODEL_OUTPUT_TOKEN_LIMITS = /* @__PURE__ */ new Map([
919
907
  ["xai/grok-4.5", 5e5],
920
908
  ["xai/grok-4.6", 5e5],
921
909
  ["xai/grok-4.7", 5e5],
922
- ["xiaomi/mimo-v2.5", 131072],
923
- ["xiaomi/mimo-v2.5-pro", 131072],
924
910
  ["xiaomi/mimo-v2.6-flash", 131072],
925
911
  ["xiaomi/mimo-v2.6-pro", 131072],
926
912
  ["xiaomi/mimo-v2.6-pro-ultraspeed", 131072],
@@ -993,7 +979,6 @@ const KNOWN_PLANS = {
993
979
  "meta/muse-spark-open": "go",
994
980
  "mistral/mistral-large-4": "go",
995
981
  "minimax/minimax-m3.1-flash": "go",
996
- "minimax/minimax-m3.1-flash:free": "go",
997
982
  "moonshotai/Kimi-K2.5": "go",
998
983
  "moonshotai/Kimi-K2.6": "go",
999
984
  "moonshotai/Kimi-K2.7-Code": "go",
@@ -1002,7 +987,6 @@ const KNOWN_PLANS = {
1002
987
  "nvidia/nemotron-3-ultra-550b-a55b": "go",
1003
988
  "nvidia/nemotron-3.5-super-vl": "go",
1004
989
  "ornith/ornith-1.5-122b": "go",
1005
- "ornith/ornith-1.5-122b:free": "go",
1006
990
  "poolside/laguna-s-2.1-free": "go",
1007
991
  "reflection/beam:free": "go",
1008
992
  "stepfun/Step-3.5-Flash": "go",
@@ -1014,8 +998,6 @@ const KNOWN_PLANS = {
1014
998
  "thinkingmachines/inkling": "go",
1015
999
  "thinkingmachines/inkling-small": "go",
1016
1000
  "xai/grok-4.5": "go",
1017
- "xiaomi/mimo-v2.5": "go",
1018
- "xiaomi/mimo-v2.5-pro": "go",
1019
1001
  "xiaomi/mimo-v2.6-flash": "go",
1020
1002
  "xiaomi/mimo-v2.6-pro": "go",
1021
1003
  "z-ai/glm-5.3-flash": "go",
@@ -1194,13 +1176,6 @@ function modelVisibleForAnyAccount(modelId, accounts) {
1194
1176
  }
1195
1177
  const KNOWN_DEALS = {
1196
1178
  "MiniMaxAI/MiniMax-M3": { label: "50% off" },
1197
- "minimax/minimax-m3.1-flash:free": {
1198
- label: "FREE",
1199
- free: true,
1200
- expiresAt: "2026-10-22T10:45:00Z"
1201
- },
1202
- "xiaomi/mimo-v2.5-pro": { label: "99% off" },
1203
- "xiaomi/mimo-v2.5": { label: "98% off" },
1204
1179
  "poolside/laguna-s-2.1-free": {
1205
1180
  label: "FREE",
1206
1181
  free: true
@@ -1212,11 +1187,6 @@ const KNOWN_DEALS = {
1212
1187
  "stealth/glyph-cluster:free": {
1213
1188
  label: "FREE",
1214
1189
  free: true
1215
- },
1216
- "ornith/ornith-1.5-122b:free": {
1217
- label: "FREE",
1218
- free: true,
1219
- expiresAt: "2026-10-22T06:00:00Z"
1220
1190
  }
1221
1191
  };
1222
1192
  /**
@@ -2304,42 +2274,6 @@ const MODEL_PRICE_ROWS = [
2304
2274
  pro: 60
2305
2275
  }
2306
2276
  },
2307
- {
2308
- id: "mimo-v2.5",
2309
- rates: [
2310
- .14,
2311
- .28,
2312
- .0028
2313
- ],
2314
- listRates: [
2315
- .8,
2316
- 4,
2317
- .16
2318
- ],
2319
- allowance: {
2320
- go: 6,
2321
- goat: 30,
2322
- pro: 40
2323
- }
2324
- },
2325
- {
2326
- id: "mimo-v2.5-pro",
2327
- rates: [
2328
- .435,
2329
- .87,
2330
- .0036
2331
- ],
2332
- listRates: [
2333
- 2,
2334
- 6,
2335
- .4
2336
- ],
2337
- allowance: {
2338
- go: 6,
2339
- goat: 20,
2340
- pro: 30
2341
- }
2342
- },
2343
2277
  {
2344
2278
  id: "mimo-v2.6-flash",
2345
2279
  rates: [
@@ -6488,7 +6422,7 @@ var GatewayFacts = class {
6488
6422
  * per-request options thunk and an API-key resolver from the plugin entry
6489
6423
  * (src/index.ts), so a settings change reaches the very next request.
6490
6424
  */
6491
- const COMMAND_CODE_CLI_VERSION = "1.87.1";
6425
+ const COMMAND_CODE_CLI_VERSION = "1.87.3";
6492
6426
  const DEFAULT_API_BASE = "https://api.commandcode.ai";
6493
6427
  /**
6494
6428
  * The output budget this bundle asks for, and the ceiling it will never exceed.
@@ -10829,13 +10763,11 @@ function unwrapVolatileConfig(config) {
10829
10763
  * the model-facing `web_search` tool needs no separate configuration.
10830
10764
  *
10831
10765
  * The second half of this module is the SELECTION seam: which registered search
10832
- * backend `ctx.web` actually runs. That seam has TWO engine shapes, and both are
10833
- * supported. dsh 0.2.1-rc.2 turned the choice into a per-call `Volatile` field of
10834
- * the `web` profile entry, so it is changed through the host settings service
10835
- * rather than by assigning a runtime field. Engines up to and including
10836
- * 0.2.1-alpha.4 kept it in the private instance field `searchProviderId`, which
10837
- * has no settings surface and can only be assigned in memory — see
10838
- * {@link createCommandCodeSearchSelection}.
10766
+ * backend `ctx.web` actually runs. dsh 0.2.1-rc.2 turned the choice into a per-call
10767
+ * `Volatile` field of the `web` profile entry, so it is changed through the host
10768
+ * settings service rather than by assigning a runtime field. The supported
10769
+ * engine range (`engines.dsh`) starts at rc.2, so that reference is the only
10770
+ * shape this module serves — see {@link createCommandCodeSearchSelection}.
10839
10771
  *
10840
10772
  * @module dsh-commandcode-provider/web-search
10841
10773
  */
@@ -10898,29 +10830,6 @@ function selectionRow(settings) {
10898
10830
  function searchProviderRef(web) {
10899
10831
  return member(member(web, "config"), "searchProvider");
10900
10832
  }
10901
- /**
10902
- * The pre-rc.2 instance field, or `undefined` when this runtime does not carry
10903
- * it.
10904
- *
10905
- * An OWN property is the discriminator, not a value test: a runtime of the
10906
- * reference shape never has `searchProviderId` at all, so the two shapes cannot
10907
- * both answer and neither needs to be preferred over the other.
10908
- */
10909
- function legacySearchField(web) {
10910
- if (!Object.prototype.hasOwnProperty.call(web, "searchProviderId")) return void 0;
10911
- const shaped = web;
10912
- return {
10913
- read: () => text(shaped.searchProviderId),
10914
- write: (value) => {
10915
- try {
10916
- shaped.searchProviderId = value;
10917
- return true;
10918
- } catch {
10919
- return false;
10920
- }
10921
- }
10922
- };
10923
- }
10924
10833
  /** Observe the live selection; `undefined` when nothing can be observed. */
10925
10834
  function readView(deps) {
10926
10835
  const settings = deps.settings();
@@ -10954,15 +10863,6 @@ function readView(deps) {
10954
10863
  persistent: false
10955
10864
  };
10956
10865
  }
10957
- const legacy = legacySearchField(deps.web);
10958
- if (legacy === void 0) return void 0;
10959
- return {
10960
- configured: legacy.read(),
10961
- pinned: void 0,
10962
- base: void 0,
10963
- user: {},
10964
- persistent: false
10965
- };
10966
10866
  }
10967
10867
  /**
10968
10868
  * The selection seam over `ctx.web`.
@@ -10980,18 +10880,6 @@ function readView(deps) {
10980
10880
  * it first and falls back to the reference only when settings is unavailable or
10981
10881
  * refuses (see `volatileWrite`).
10982
10882
  *
10983
- * ## Two engine shapes
10984
- *
10985
- * Everything above describes an rc.2+ runtime, where the selection is a
10986
- * reference. PRE-rc.2 engines (0.2.0-rc.2 and the 0.2.1 alphas) have neither
10987
- * that reference nor a settings row for `web`: there the selection is the
10988
- * private instance field `searchProviderId`, memory-only by nature. Those
10989
- * engines therefore run the degraded path BY CONSTRUCTION — no profile write
10990
- * exists for it and the user layer is unreadable, so a foreign pin cannot be
10991
- * seen and the takeover/restore semantics are the ones this plugin shipped
10992
- * before rc.2: remember the displaced backend, hand back only what we took. The
10993
- * shape is resolved per observation, so one build serves both.
10994
- *
10995
10883
  * ## Two writers, one field
10996
10884
  *
10997
10885
  * The shipped web-search settings page writes `web.searchProvider` too
@@ -11028,14 +10916,11 @@ function createCommandCodeSearchSelection(deps) {
11028
10916
  /**
11029
10917
  * Commit the selection in memory; the last resort before giving up.
11030
10918
  *
11031
- * The volatile reference is tried first because on an rc.2+ runtime that is
11032
- * what `search()` reads. A PRE-rc.2 runtime carries no reference at all, and
11033
- * there the private instance field IS the seam — the fallback is a different
11034
- * engine shape, not a second-best copy of the same write.
10919
+ * The volatile reference is what `search()` reads on every supported engine
10920
+ * (`engines.dsh` starts at 0.2.1-rc.2), so it is the only in-memory seam.
11035
10921
  */
11036
10922
  const memoryWrite = (value) => {
11037
10923
  if (volatileWrite(searchProviderRef(deps.web), value)) return true;
11038
- if (legacySearchField(deps.web)?.write(value) === true) return true;
11039
10924
  warn("llm-commandcode: web search selection could not be applied (settings refused the write and the running web runtime is not writable); the provider stays registered but unselected");
11040
10925
  return false;
11041
10926
  };