dsh-codearts 0.5.2 → 1.0.0

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/index.d.mts CHANGED
@@ -7,18 +7,18 @@ import { AttachmentStore } from "@deepseek-ai/dsh-attachment";
7
7
  /**
8
8
  * CodeArts model catalog.
9
9
  *
10
- * 目录有两条来源:
11
- * 1. **动态发现**(`src/discovery.ts` + `upstream.fetchModels`):启动与每小时
12
- * 各拉一次,取内置 / 限时福利 / agent-center 三路的并集。这是正常路径。
13
- * 2. **静态种子**(`FALLBACK_CODEARTS_MODELS`):仅在发现失败或尚未登录时兜底。
10
+ * **目录只放上游给的东西。** 唯一来源是动态发现(`src/discovery.ts` +
11
+ * `upstream.fetchModels`):启动、每小时、以及卡片上「刷新模型列表」各拉一次,
12
+ * 取内置 / 限时福利 / agent-center 三路的并集。上游没返回的模型就是没有,
13
+ * 未登录或三路全失败时目录是空的 —— 不拿一份历史名单冒充「可用模型」。
14
14
  *
15
- * 种子的来龙去脉(诚实标注,别把它当权威):
16
- * - 福利模型的 id 已与真实账号的 `gateway/config` 对齐;
17
- * - 商业模型的 id 可信(来自 codearts2api 的 `seedKnownModels`),但
18
- * `contextWindow` / `maxTokens` / `supportsImages` 是**占位值**,发现成功时
19
- * 会被上游真实值覆盖 —— 这正是 `fillFromSeed` 只补缺、不覆盖的原因。
20
- * 写错的 contextWindow 只影响 DSH 的上下文计量与截断余量,不影响路由;
21
- * 写错的 maxTokens 会直接让请求失败(见 `MEASURED_MAX_TOKENS`)。
15
+ * `FALLBACK_CODEARTS_MODELS` 因此**不再往目录里塞模型**,只剩一个按 id 的参数表:
16
+ * 上游有时不给 `contextWindow` / `maxTokens`,而写错的 `maxTokens` 会让每个请求
17
+ * 直接失败(见 `MEASURED_MAX_TOKENS`)。它只给发现到的模型补参数,别的什么都不管。
18
+ *
19
+ * 福利路由同理:只有 `gateway/config` 亲口给出的模型才算福利(见 `isBenefitModel`)。
20
+ * 这条渠道 2026-10-21 起整体不可用,于是福利模型当天就从目录里消失 —— 那是事实,
21
+ * 不是故障,硬撑只会把能正常用的积分模型推到一条不存在的渠道上。
22
22
  *
23
23
  * @module dsh-codearts/catalog
24
24
  */
@@ -29,6 +29,12 @@ interface CodeArtsModelInfo {
29
29
  contextWindow: number;
30
30
  maxTokens: number;
31
31
  supportsImages: boolean;
32
+ /**
33
+ * 积分消耗倍率(上游 `credit[].ratio_display` 的原值,如 `0.18x`)。
34
+ *
35
+ * 来自模型发现;福利模型由展示层强制成 `x0.00`,不依赖上游是否给 credit。
36
+ */
37
+ ratio?: string;
32
38
  /**
33
39
  * 该模型走限时福利(免费套餐)路由。
34
40
  *
@@ -38,12 +44,11 @@ interface CodeArtsModelInfo {
38
44
  benefit?: boolean;
39
45
  }
40
46
  /**
41
- * Static seed roster. Ids are the *upstream registered* spellings (case
42
- * matters — `canonicalModel` in upstream.ts passes these through verbatim).
43
- * Updated 2026-09 from codearts2api's known model set.
47
+ * 参数表(不是模型名单):只给**发现到的**模型补 `contextWindow` / `maxTokens` /
48
+ * `supportsImages`,绝不会因为这里有条目就把模型塞进目录。
44
49
  *
45
50
  * maxTokens 注记(2026-09-30 实测,scripts/param-probe.mjs 直连上游二分验证):
46
- * 免费福利 DeepSeek 模型的 max_tokens 服务端硬上限是 **65536**,更大的值
51
+ * 福利 DeepSeek 模型的 max_tokens 服务端硬上限是 **65536**,更大的值
47
52
  * (73728 / 98304 / 131072 / 384000 / 393216)一律流内报
48
53
  * InferHub.001001005.400 "The request param is invalid, Please check it"。
49
54
  * 此前的 384000/393216 是占位值:DSH 会把 catalog 的 maxTokens 作为
@@ -52,6 +57,7 @@ interface CodeArtsModelInfo {
52
57
  declare const FALLBACK_CODEARTS_MODELS: readonly CodeArtsModelInfo[];
53
58
  /** Mutable catalog shared by the shim's `/v1/models` and the adapter. */
54
59
  declare class CodeArtsCatalog {
60
+ /** 空目录起步:没发现过就是没有模型,不拿历史名单冒充。 */
55
61
  private models;
56
62
  current(): readonly CodeArtsModelInfo[];
57
63
  set(models: readonly CodeArtsModelInfo[]): void;
@@ -437,6 +443,8 @@ interface UsageSnapshot {
437
443
  today: UsageTotals;
438
444
  /** 账本里所有保留天数的合计。 */
439
445
  allTime: UsageTotals;
446
+ /** 最近 30 天(含今天)的合计。 */
447
+ last30: UsageTotals;
440
448
  /** 今天按模型的合计,按 totalTokens 降序。 */
441
449
  byModelToday: {
442
450
  id: string;
@@ -640,22 +648,23 @@ interface CreditCacheOptions {
640
648
  * 而上游对同一账号的并发是有成本/风险的。
641
649
  */
642
650
  declare class CodeArtsCreditCache {
643
- private state;
644
- private inflight;
651
+ /** 按账号分槽:多账号下每个号有自己的余额,不能共用一个快照。 */
652
+ private readonly states;
653
+ private readonly inflights;
645
654
  private readonly ttlMs;
646
655
  private readonly failureTtlMs;
647
656
  private readonly load;
648
657
  private readonly now;
649
658
  constructor(options?: CreditCacheOptions);
650
- /** 当前缓存内容(不触发请求),供只想读快照的场景使用。 */
651
- peek(): CodeArtsCreditState | undefined;
652
- /** 丢掉缓存,下次 get 会重新拉(重新登录/添加账号后调用)。 */
653
- invalidate(): void;
659
+ /** 某账号的缓存内容(不触发请求),供只想读快照的场景使用。 */
660
+ peek(accountId: string): CodeArtsCreditState | undefined;
661
+ /** 丢掉缓存,下次 get 会重新拉(重新登录/添加账号后调用)。省略账号则清空全部。 */
662
+ invalidate(accountId?: string): void;
654
663
  /**
655
- * 取一次积分。命中缓存直接返回;否则合并成一次上游请求。
664
+ * 取一次某账号的积分。命中缓存直接返回;否则合并成一次上游请求。
656
665
  * **不抛异常**:失败以 `phase: 'error'` 返回,调用方(状态路由)照样能渲染。
657
666
  */
658
- get(credential: CodeArtsResolved, signal?: AbortSignal): Promise<CodeArtsCreditState>;
667
+ get(accountId: string, credential: CodeArtsResolved, signal?: AbortSignal): Promise<CodeArtsCreditState>;
659
668
  private run;
660
669
  }
661
670
  //#endregion