@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/CHANGELOG.md +41 -0
- package/README.md +110 -198
- package/README.zh-CN.md +96 -165
- package/lib/client.js +88 -73
- package/lib/index.d.ts +1 -13
- package/lib/index.js +9 -124
- package/package.json +43 -43
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: "
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
/**
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
})
|
|
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
|
-
|
|
4795
|
+
disabled,
|
|
4796
|
+
t,
|
|
4797
|
+
onReset
|
|
4795
4798
|
}),
|
|
4796
4799
|
description: hint,
|
|
4797
|
-
control: /* @__PURE__ */ (0, react_jsx_runtime.
|
|
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
|
-
})
|
|
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.
|
|
5560
|
+
view.detailParts.length > 0 || view.updated !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5554
5561
|
className: "cc-statusMeta",
|
|
5555
|
-
children: [
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
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
|
-
|
|
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
|
-
/*
|
|
10300
|
-
*
|
|
10301
|
-
.
|
|
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.
|
|
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.
|
|
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.
|
|
10833
|
-
*
|
|
10834
|
-
*
|
|
10835
|
-
*
|
|
10836
|
-
*
|
|
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
|
|
11032
|
-
*
|
|
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
|
};
|