@dan-ai-studio/dshopencodego 0.1.83 → 0.1.85

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.js CHANGED
@@ -73742,6 +73742,7 @@ var BACKGROUND_RETRY_BACKOFF_MS = 5 * 6e4;
73742
73742
  var MODEL_LISTING_MAX_BYTES = 1024 * 1024;
73743
73743
  var MODEL_METADATA_MAX_BYTES = 16 * 1024 * 1024;
73744
73744
  var UNKNOWN_MODEL_PROBE_COOLDOWN_MS = 5 * 6e4;
73745
+ var MAX_CATALOG_STALENESS_MS = 24 * 60 * 6e4;
73745
73746
 
73746
73747
  // src/catalog/gateway.ts
73747
73748
  import { attributionHeaders, LlmError as LlmError2 } from "@deepseek-ai/dsh-llm";
@@ -74412,35 +74413,40 @@ import { mkdirSync as mkdirSync4, readFileSync as readFileSync4, writeFileSync a
74412
74413
  import { join as join5 } from "node:path";
74413
74414
  var CACHE_FILE4 = "catalog-snapshot.json";
74414
74415
  var CACHE_VERSION4 = 1;
74416
+ function parseSnapshotFile(value) {
74417
+ if (value === null || typeof value !== "object") return void 0;
74418
+ const parsed = value;
74419
+ if (parsed.version !== CACHE_VERSION4) return void 0;
74420
+ if (parsed.facts === null || typeof parsed.facts !== "object") return void 0;
74421
+ const facts = /* @__PURE__ */ new Map();
74422
+ for (const [id, fact] of Object.entries(parsed.facts)) {
74423
+ if (fact === null || typeof fact !== "object") continue;
74424
+ if (typeof fact.id !== "string" || typeof fact.api !== "string") continue;
74425
+ facts.set(id, fact);
74426
+ }
74427
+ if (facts.size === 0) return void 0;
74428
+ const quotas = /* @__PURE__ */ new Map();
74429
+ for (const [id, quota] of Object.entries(parsed.quotas ?? {})) {
74430
+ if (quota === null || typeof quota !== "object") continue;
74431
+ quotas.set(id, quota);
74432
+ }
74433
+ const protocols = /* @__PURE__ */ new Map();
74434
+ for (const [id, protocol] of Object.entries(parsed.protocols ?? {})) {
74435
+ if (typeof protocol !== "string") continue;
74436
+ protocols.set(id, protocol);
74437
+ }
74438
+ return {
74439
+ facts,
74440
+ quotas,
74441
+ protocols,
74442
+ baseURL: typeof parsed.baseURL === "string" ? parsed.baseURL : void 0,
74443
+ updatedAt: typeof parsed.updatedAt === "number" ? parsed.updatedAt : 0
74444
+ };
74445
+ }
74415
74446
  function readSnapshotCache(cacheDir) {
74416
74447
  if (cacheDir === void 0) return void 0;
74417
74448
  try {
74418
- const parsed = JSON.parse(readFileSync4(join5(cacheDir, CACHE_FILE4), "utf8"));
74419
- if (parsed.version !== CACHE_VERSION4) return void 0;
74420
- if (parsed.facts === null || typeof parsed.facts !== "object") return void 0;
74421
- const facts = /* @__PURE__ */ new Map();
74422
- for (const [id, fact] of Object.entries(parsed.facts)) {
74423
- if (fact === null || typeof fact !== "object") continue;
74424
- if (typeof fact.id !== "string" || typeof fact.api !== "string") continue;
74425
- facts.set(id, fact);
74426
- }
74427
- if (facts.size === 0) return void 0;
74428
- const quotas = /* @__PURE__ */ new Map();
74429
- for (const [id, quota] of Object.entries(parsed.quotas ?? {})) {
74430
- if (quota === null || typeof quota !== "object") continue;
74431
- quotas.set(id, quota);
74432
- }
74433
- const protocols = /* @__PURE__ */ new Map();
74434
- for (const [id, protocol] of Object.entries(parsed.protocols ?? {})) {
74435
- if (typeof protocol !== "string") continue;
74436
- protocols.set(id, protocol);
74437
- }
74438
- return {
74439
- facts,
74440
- quotas,
74441
- protocols,
74442
- updatedAt: typeof parsed.updatedAt === "number" ? parsed.updatedAt : 0
74443
- };
74449
+ return parseSnapshotFile(JSON.parse(readFileSync4(join5(cacheDir, CACHE_FILE4), "utf8")));
74444
74450
  } catch {
74445
74451
  return void 0;
74446
74452
  }
@@ -74463,6 +74469,10 @@ function writeSnapshotCache(cacheDir, facts, quotas, protocols) {
74463
74469
  }
74464
74470
 
74465
74471
  // src/catalog/index.ts
74472
+ function snapshotIsFresh(fetchedAtMs, nowMs, refreshMs) {
74473
+ if (!Number.isFinite(fetchedAtMs) || fetchedAtMs <= 0) return false;
74474
+ return nowMs - fetchedAtMs < Math.min(refreshMs, MAX_CATALOG_STALENESS_MS);
74475
+ }
74466
74476
  function reasonText(reason) {
74467
74477
  if (reason instanceof Error) return reason.message;
74468
74478
  return typeof reason === "string" ? reason : String(reason);
@@ -74558,7 +74568,7 @@ var OpencodeGoCatalog = class {
74558
74568
  * shared snapshot cannot carry two different cancellations.
74559
74569
  */
74560
74570
  snapshot(force = false, signal) {
74561
- if (!force && this.served !== void 0 && Date.now() - this.served.fetchedAtMs < this.options.refreshMs) {
74571
+ if (!force && this.served !== void 0 && snapshotIsFresh(this.served.fetchedAtMs, Date.now(), this.options.refreshMs)) {
74562
74572
  return Promise.resolve(this.served);
74563
74573
  }
74564
74574
  if (!force) {
@@ -74619,17 +74629,14 @@ var OpencodeGoCatalog = class {
74619
74629
  return refresh === void 0 ? Promise.resolve() : refresh.then(() => void 0, () => void 0);
74620
74630
  }
74621
74631
  /**
74622
- * The catalog a previous build produced, read from disk.
74632
+ * Present a past listing as a stale-but-serving snapshot.
74623
74633
  *
74624
74634
  * It is presented as what it is: a listing from the past, being brought up
74625
74635
  * to date in the background. The facts it carries are the ones the last
74626
74636
  * build produced, so the protocols and the thinking levels are the ones
74627
74637
  * that were true then.
74628
- * @returns the remembered catalog, or undefined when there is none.
74629
74638
  */
74630
- readRememberedSnapshot() {
74631
- const remembered = readSnapshotCache(this.options.cacheDir);
74632
- if (remembered === void 0) return void 0;
74639
+ presentRemembered(remembered) {
74633
74640
  const facts = new Map(remembered.facts);
74634
74641
  return {
74635
74642
  facts,
@@ -74643,6 +74650,24 @@ var OpencodeGoCatalog = class {
74643
74650
  ...remembered.quotas.size === 0 ? {} : { documentQuotas: remembered.quotas }
74644
74651
  };
74645
74652
  }
74653
+ /**
74654
+ * The catalog a previous build produced, read from disk — or, when the
74655
+ * disk holds nothing, the snapshot baked in at publish time.
74656
+ *
74657
+ * The bundled seed is the floor, not a peer: the disk always wins when it
74658
+ * has anything to say, and the endpoint must match — a seed built for Go
74659
+ * never serves Console and vice versa. Either way the reading is served
74660
+ * stale with an immediate background refresh, never presented as current.
74661
+ * @returns the remembered catalog, or undefined when there is none.
74662
+ */
74663
+ readRememberedSnapshot() {
74664
+ const remembered = readSnapshotCache(this.options.cacheDir);
74665
+ if (remembered !== void 0) return this.presentRemembered(remembered);
74666
+ const seed = parseSnapshotFile(this.options.seed);
74667
+ if (seed === void 0) return void 0;
74668
+ if (seed.baseURL !== this.options.baseURL) return void 0;
74669
+ return this.presentRemembered(seed);
74670
+ }
74646
74671
  /**
74647
74672
  * The snapshot that can serve one exact model.
74648
74673
  *
@@ -74972,6 +74997,1250 @@ async function discoverCatalogModels(catalog, signal) {
74972
74997
  ];
74973
74998
  }
74974
74999
 
75000
+ // src/catalog/seed.snapshot.json
75001
+ var seed_snapshot_default = {
75002
+ version: 1,
75003
+ facts: {
75004
+ "deepseek-v4.1-flash": {
75005
+ id: "deepseek-v4.1-flash",
75006
+ name: "DeepSeek V4.1 Flash",
75007
+ api: "openai-completions",
75008
+ protocolSource: "builtin",
75009
+ contextWindow: 1e6,
75010
+ maxTokens: 384e3,
75011
+ assumedLimits: false,
75012
+ input: [
75013
+ "text",
75014
+ "image"
75015
+ ],
75016
+ inputModalities: [
75017
+ "text",
75018
+ "image"
75019
+ ],
75020
+ reasoning: true,
75021
+ thinkingLevelMap: {
75022
+ off: null,
75023
+ minimal: null,
75024
+ low: "low",
75025
+ medium: null,
75026
+ high: "high",
75027
+ xhigh: null,
75028
+ max: "max"
75029
+ },
75030
+ compat: {
75031
+ supportsStore: false,
75032
+ supportsDeveloperRole: false,
75033
+ maxTokensField: "max_tokens",
75034
+ requiresReasoningContentOnAssistantMessages: true,
75035
+ supportsStrictMode: true,
75036
+ thinkingFormat: "deepseek"
75037
+ },
75038
+ cost: {
75039
+ input: 0.15,
75040
+ output: 0.6,
75041
+ cacheRead: 3e-3,
75042
+ cacheWrite: 0
75043
+ },
75044
+ deprecated: false,
75045
+ releaseDate: "2026-09-10"
75046
+ },
75047
+ "deepseek-v4-pro": {
75048
+ id: "deepseek-v4-pro",
75049
+ name: "DeepSeek V4 Pro (New)",
75050
+ api: "openai-completions",
75051
+ protocolSource: "builtin",
75052
+ contextWindow: 1e6,
75053
+ maxTokens: 384e3,
75054
+ assumedLimits: false,
75055
+ input: [
75056
+ "text"
75057
+ ],
75058
+ inputModalities: [
75059
+ "text"
75060
+ ],
75061
+ reasoning: true,
75062
+ thinkingLevelMap: {
75063
+ off: null,
75064
+ minimal: null,
75065
+ low: null,
75066
+ medium: null,
75067
+ high: "high",
75068
+ xhigh: null,
75069
+ max: "max"
75070
+ },
75071
+ compat: {
75072
+ supportsStore: false,
75073
+ supportsDeveloperRole: false,
75074
+ maxTokensField: "max_tokens",
75075
+ requiresReasoningContentOnAssistantMessages: true,
75076
+ supportsStrictMode: true,
75077
+ thinkingFormat: "deepseek"
75078
+ },
75079
+ cost: {
75080
+ input: 0.66,
75081
+ output: 1.98,
75082
+ cacheRead: 0.022,
75083
+ cacheWrite: 0
75084
+ },
75085
+ deprecated: false,
75086
+ releaseDate: "2026-04-24"
75087
+ },
75088
+ "glm-5.2": {
75089
+ id: "glm-5.2",
75090
+ name: "GLM-5.2",
75091
+ api: "openai-completions",
75092
+ protocolSource: "builtin",
75093
+ contextWindow: 1e6,
75094
+ maxTokens: 131072,
75095
+ assumedLimits: false,
75096
+ input: [
75097
+ "text"
75098
+ ],
75099
+ inputModalities: [
75100
+ "text"
75101
+ ],
75102
+ reasoning: true,
75103
+ thinkingLevelMap: {
75104
+ off: null,
75105
+ minimal: null,
75106
+ low: null,
75107
+ medium: null,
75108
+ high: "high",
75109
+ xhigh: null,
75110
+ max: "max"
75111
+ },
75112
+ compat: {
75113
+ supportsStore: false,
75114
+ supportsDeveloperRole: false,
75115
+ maxTokensField: "max_tokens",
75116
+ requiresReasoningContentOnAssistantMessages: true,
75117
+ supportsStrictMode: true
75118
+ },
75119
+ cost: {
75120
+ input: 1.4,
75121
+ output: 4.4,
75122
+ cacheRead: 0.26,
75123
+ cacheWrite: 0
75124
+ },
75125
+ deprecated: false,
75126
+ releaseDate: "2026-06-13"
75127
+ },
75128
+ "glm-5.3": {
75129
+ id: "glm-5.3",
75130
+ name: "GLM-5.3",
75131
+ api: "openai-completions",
75132
+ protocolSource: "builtin",
75133
+ contextWindow: 1e6,
75134
+ maxTokens: 131072,
75135
+ assumedLimits: false,
75136
+ input: [
75137
+ "text"
75138
+ ],
75139
+ inputModalities: [
75140
+ "text"
75141
+ ],
75142
+ reasoning: true,
75143
+ thinkingLevelMap: {
75144
+ off: null,
75145
+ minimal: null,
75146
+ low: "low",
75147
+ medium: null,
75148
+ high: "high",
75149
+ xhigh: null,
75150
+ max: "max"
75151
+ },
75152
+ compat: {
75153
+ supportsStore: false,
75154
+ supportsDeveloperRole: false,
75155
+ maxTokensField: "max_tokens",
75156
+ requiresReasoningContentOnAssistantMessages: true,
75157
+ supportsStrictMode: true
75158
+ },
75159
+ cost: {
75160
+ input: 1.4,
75161
+ output: 4.4,
75162
+ cacheRead: 0.26,
75163
+ cacheWrite: 0
75164
+ },
75165
+ deprecated: false,
75166
+ releaseDate: "2026-08-14"
75167
+ },
75168
+ "grok-4.7": {
75169
+ id: "grok-4.7",
75170
+ name: "Grok 4.7",
75171
+ api: "openai-responses",
75172
+ protocolSource: "builtin",
75173
+ contextWindow: 5e5,
75174
+ maxTokens: 5e5,
75175
+ assumedLimits: false,
75176
+ input: [
75177
+ "text",
75178
+ "image"
75179
+ ],
75180
+ inputModalities: [
75181
+ "text",
75182
+ "image",
75183
+ "pdf"
75184
+ ],
75185
+ reasoning: true,
75186
+ thinkingLevelMap: {
75187
+ off: null,
75188
+ minimal: null,
75189
+ low: "low",
75190
+ medium: "medium",
75191
+ high: "high",
75192
+ xhigh: "xhigh",
75193
+ max: null
75194
+ },
75195
+ compat: {
75196
+ sessionAffinityFormat: "openai-nosession"
75197
+ },
75198
+ cost: {
75199
+ input: 2,
75200
+ output: 6,
75201
+ cacheRead: 0.5,
75202
+ cacheWrite: 0,
75203
+ tiers: [
75204
+ {
75205
+ input: 4,
75206
+ output: 12,
75207
+ cacheRead: 1,
75208
+ cacheWrite: 0,
75209
+ inputTokensAbove: 2e5
75210
+ }
75211
+ ]
75212
+ },
75213
+ deprecated: false,
75214
+ releaseDate: "2026-09-21"
75215
+ },
75216
+ "muse-spark-1.2-contributor": {
75217
+ id: "muse-spark-1.2-contributor",
75218
+ name: "Muse Spark 1.2 Contributor",
75219
+ api: "openai-responses",
75220
+ protocolSource: "builtin",
75221
+ contextWindow: 1048576,
75222
+ maxTokens: 131072,
75223
+ assumedLimits: false,
75224
+ input: [
75225
+ "text",
75226
+ "image"
75227
+ ],
75228
+ inputModalities: [
75229
+ "text",
75230
+ "image",
75231
+ "audio",
75232
+ "video",
75233
+ "pdf"
75234
+ ],
75235
+ reasoning: true,
75236
+ thinkingLevelMap: {
75237
+ off: null,
75238
+ minimal: "minimal",
75239
+ low: "low",
75240
+ medium: "medium",
75241
+ high: "high",
75242
+ xhigh: "xhigh",
75243
+ max: null
75244
+ },
75245
+ compat: {
75246
+ sessionAffinityFormat: "openai-nosession"
75247
+ },
75248
+ cost: {
75249
+ input: 0.1,
75250
+ output: 0.2,
75251
+ cacheRead: 2e-3,
75252
+ cacheWrite: 0
75253
+ },
75254
+ deprecated: false,
75255
+ releaseDate: "2026-08-05"
75256
+ },
75257
+ "muse-spark-1.3-contributor": {
75258
+ id: "muse-spark-1.3-contributor",
75259
+ name: "Muse Spark 1.3 Contributor",
75260
+ api: "openai-responses",
75261
+ protocolSource: "builtin",
75262
+ contextWindow: 1048576,
75263
+ maxTokens: 131072,
75264
+ assumedLimits: false,
75265
+ input: [
75266
+ "text",
75267
+ "image"
75268
+ ],
75269
+ inputModalities: [
75270
+ "text",
75271
+ "image",
75272
+ "audio",
75273
+ "video",
75274
+ "pdf"
75275
+ ],
75276
+ reasoning: true,
75277
+ thinkingLevelMap: {
75278
+ off: null,
75279
+ minimal: "minimal",
75280
+ low: "low",
75281
+ medium: "medium",
75282
+ high: "high",
75283
+ xhigh: "xhigh",
75284
+ max: null
75285
+ },
75286
+ compat: {
75287
+ sessionAffinityFormat: "openai-nosession"
75288
+ },
75289
+ cost: {
75290
+ input: 0.1,
75291
+ output: 0.2,
75292
+ cacheRead: 2e-3,
75293
+ cacheWrite: 0
75294
+ },
75295
+ deprecated: false,
75296
+ releaseDate: "2026-09-02"
75297
+ },
75298
+ "glm-5.3-flash": {
75299
+ id: "glm-5.3-flash",
75300
+ name: "GLM-5.3-Flash",
75301
+ api: "openai-completions",
75302
+ protocolSource: "builtin",
75303
+ contextWindow: 1e6,
75304
+ maxTokens: 131072,
75305
+ assumedLimits: false,
75306
+ input: [
75307
+ "text",
75308
+ "image"
75309
+ ],
75310
+ inputModalities: [
75311
+ "text",
75312
+ "image",
75313
+ "video"
75314
+ ],
75315
+ reasoning: true,
75316
+ thinkingLevelMap: {
75317
+ off: null,
75318
+ minimal: null,
75319
+ low: "low",
75320
+ medium: null,
75321
+ high: "high",
75322
+ xhigh: null,
75323
+ max: "max"
75324
+ },
75325
+ compat: {
75326
+ supportsStore: false,
75327
+ supportsDeveloperRole: false,
75328
+ maxTokensField: "max_tokens",
75329
+ requiresReasoningContentOnAssistantMessages: true,
75330
+ supportsStrictMode: true
75331
+ },
75332
+ cost: {
75333
+ input: 0.15,
75334
+ output: 0.5,
75335
+ cacheRead: 0.03,
75336
+ cacheWrite: 0
75337
+ },
75338
+ deprecated: false,
75339
+ releaseDate: "2026-08-26"
75340
+ },
75341
+ "gpt-5.6-luna": {
75342
+ id: "gpt-5.6-luna",
75343
+ name: "GPT-5.6 Luna",
75344
+ api: "openai-responses",
75345
+ protocolSource: "builtin",
75346
+ contextWindow: 105e4,
75347
+ maxInputTokens: 922e3,
75348
+ maxTokens: 128e3,
75349
+ assumedLimits: false,
75350
+ input: [
75351
+ "text",
75352
+ "image"
75353
+ ],
75354
+ inputModalities: [
75355
+ "text",
75356
+ "image",
75357
+ "pdf"
75358
+ ],
75359
+ reasoning: true,
75360
+ thinkingLevelMap: {
75361
+ off: "none",
75362
+ minimal: null,
75363
+ low: "low",
75364
+ medium: "medium",
75365
+ high: "high",
75366
+ xhigh: "xhigh",
75367
+ max: "max"
75368
+ },
75369
+ compat: {
75370
+ sessionAffinityFormat: "openai-nosession",
75371
+ supportsMidConvoSystemMessages: true,
75372
+ supportsAdditionalTools: true
75373
+ },
75374
+ cost: {
75375
+ input: 0.2,
75376
+ output: 1.2,
75377
+ cacheRead: 0.02,
75378
+ cacheWrite: 0.25,
75379
+ tiers: [
75380
+ {
75381
+ input: 0.4,
75382
+ output: 1.8,
75383
+ cacheRead: 0.04,
75384
+ cacheWrite: 0.5,
75385
+ inputTokensAbove: 272e3
75386
+ }
75387
+ ]
75388
+ },
75389
+ deprecated: false,
75390
+ releaseDate: "2026-07-09"
75391
+ },
75392
+ "gpt-6-luna": {
75393
+ id: "gpt-6-luna",
75394
+ name: "GPT-6 Luna",
75395
+ api: "openai-responses",
75396
+ protocolSource: "builtin",
75397
+ contextWindow: 105e4,
75398
+ maxInputTokens: 922e3,
75399
+ maxTokens: 128e3,
75400
+ assumedLimits: false,
75401
+ input: [
75402
+ "text",
75403
+ "image"
75404
+ ],
75405
+ inputModalities: [
75406
+ "text",
75407
+ "image",
75408
+ "pdf"
75409
+ ],
75410
+ reasoning: true,
75411
+ thinkingLevelMap: {
75412
+ off: "none",
75413
+ minimal: null,
75414
+ low: "low",
75415
+ medium: "medium",
75416
+ high: "high",
75417
+ xhigh: "xhigh",
75418
+ max: "max"
75419
+ },
75420
+ compat: {
75421
+ sessionAffinityFormat: "openai-nosession",
75422
+ supportsMidConvoSystemMessages: true,
75423
+ supportsAdditionalTools: true
75424
+ },
75425
+ cost: {
75426
+ input: 0.1,
75427
+ output: 0.5,
75428
+ cacheRead: 0.01,
75429
+ cacheWrite: 0.125,
75430
+ tiers: [
75431
+ {
75432
+ input: 0.2,
75433
+ output: 0.75,
75434
+ cacheRead: 0.02,
75435
+ cacheWrite: 0.25,
75436
+ inputTokensAbove: 272e3
75437
+ }
75438
+ ]
75439
+ },
75440
+ deprecated: false,
75441
+ releaseDate: "2026-09-22"
75442
+ },
75443
+ "claude-haiku-5-5": {
75444
+ id: "claude-haiku-5-5",
75445
+ name: "Claude Haiku 5.5",
75446
+ api: "anthropic-messages",
75447
+ protocolSource: "builtin",
75448
+ contextWindow: 1e6,
75449
+ maxTokens: 128e3,
75450
+ assumedLimits: false,
75451
+ input: [
75452
+ "text",
75453
+ "image"
75454
+ ],
75455
+ inputModalities: [
75456
+ "text",
75457
+ "image",
75458
+ "pdf"
75459
+ ],
75460
+ reasoning: true,
75461
+ thinkingLevelMap: {
75462
+ off: null,
75463
+ minimal: null,
75464
+ low: "low",
75465
+ medium: "medium",
75466
+ high: "high",
75467
+ xhigh: "xhigh",
75468
+ max: "max"
75469
+ },
75470
+ compat: {
75471
+ forceAdaptiveThinking: true,
75472
+ supportsTemperature: false
75473
+ },
75474
+ cost: {
75475
+ input: 0.1,
75476
+ output: 0.5,
75477
+ cacheRead: 0.01,
75478
+ cacheWrite: 0.125,
75479
+ tiers: [
75480
+ {
75481
+ input: 0.5,
75482
+ output: 2.5,
75483
+ cacheRead: 0.05,
75484
+ cacheWrite: 0.625,
75485
+ inputTokensAbove: 1e5
75486
+ }
75487
+ ]
75488
+ },
75489
+ deprecated: false,
75490
+ releaseDate: "2026-10-07"
75491
+ },
75492
+ hy3: {
75493
+ id: "hy3",
75494
+ name: "Hy3",
75495
+ api: "openai-completions",
75496
+ protocolSource: "builtin",
75497
+ contextWindow: 256e3,
75498
+ maxInputTokens: 192e3,
75499
+ maxTokens: 128e3,
75500
+ assumedLimits: false,
75501
+ input: [
75502
+ "text"
75503
+ ],
75504
+ inputModalities: [
75505
+ "text"
75506
+ ],
75507
+ reasoning: true,
75508
+ thinkingLevelMap: {
75509
+ off: "none",
75510
+ minimal: null,
75511
+ low: "low",
75512
+ medium: null,
75513
+ high: "high",
75514
+ xhigh: null,
75515
+ max: null
75516
+ },
75517
+ compat: {
75518
+ supportsStore: false,
75519
+ supportsDeveloperRole: false,
75520
+ maxTokensField: "max_tokens",
75521
+ supportsStrictMode: true
75522
+ },
75523
+ cost: {
75524
+ input: 0.14,
75525
+ output: 0.58,
75526
+ cacheRead: 0.035,
75527
+ cacheWrite: 0
75528
+ },
75529
+ deprecated: false,
75530
+ releaseDate: "2026-07-06"
75531
+ },
75532
+ "hy4-preview": {
75533
+ id: "hy4-preview",
75534
+ name: "Hy4 preview",
75535
+ api: "openai-completions",
75536
+ protocolSource: "builtin",
75537
+ contextWindow: 1024e3,
75538
+ maxTokens: 64e3,
75539
+ assumedLimits: false,
75540
+ input: [
75541
+ "text"
75542
+ ],
75543
+ inputModalities: [
75544
+ "text"
75545
+ ],
75546
+ reasoning: true,
75547
+ thinkingLevelMap: {
75548
+ off: "none",
75549
+ minimal: null,
75550
+ low: null,
75551
+ medium: null,
75552
+ high: "high",
75553
+ xhigh: null,
75554
+ max: null
75555
+ },
75556
+ compat: {
75557
+ supportsStore: false,
75558
+ supportsDeveloperRole: false,
75559
+ maxTokensField: "max_tokens",
75560
+ supportsStrictMode: true
75561
+ },
75562
+ cost: {
75563
+ input: 0.834,
75564
+ output: 2.501,
75565
+ cacheRead: 0.042,
75566
+ cacheWrite: 0
75567
+ },
75568
+ deprecated: false,
75569
+ releaseDate: "2026-08-28"
75570
+ },
75571
+ "kimi-k2.7-code": {
75572
+ id: "kimi-k2.7-code",
75573
+ name: "Kimi K2.7 Code",
75574
+ api: "openai-completions",
75575
+ protocolSource: "builtin",
75576
+ contextWindow: 262144,
75577
+ maxTokens: 262144,
75578
+ assumedLimits: false,
75579
+ input: [
75580
+ "text",
75581
+ "image"
75582
+ ],
75583
+ inputModalities: [
75584
+ "text",
75585
+ "image",
75586
+ "video"
75587
+ ],
75588
+ reasoning: true,
75589
+ thinkingLevelMap: {
75590
+ off: null,
75591
+ minimal: null,
75592
+ low: null,
75593
+ medium: null,
75594
+ high: null,
75595
+ xhigh: null,
75596
+ max: null
75597
+ },
75598
+ compat: {
75599
+ supportsStore: false,
75600
+ supportsDeveloperRole: false,
75601
+ maxTokensField: "max_tokens",
75602
+ requiresReasoningContentOnAssistantMessages: true,
75603
+ supportsStrictMode: true
75604
+ },
75605
+ cost: {
75606
+ input: 0.95,
75607
+ output: 4,
75608
+ cacheRead: 0.19,
75609
+ cacheWrite: 0
75610
+ },
75611
+ deprecated: false,
75612
+ releaseDate: "2026-06-12"
75613
+ },
75614
+ "kimi-k3": {
75615
+ id: "kimi-k3",
75616
+ name: "Kimi K3",
75617
+ api: "openai-completions",
75618
+ protocolSource: "builtin",
75619
+ contextWindow: 1048576,
75620
+ maxTokens: 131072,
75621
+ assumedLimits: false,
75622
+ input: [
75623
+ "text",
75624
+ "image"
75625
+ ],
75626
+ inputModalities: [
75627
+ "text",
75628
+ "image",
75629
+ "video"
75630
+ ],
75631
+ reasoning: true,
75632
+ thinkingLevelMap: {
75633
+ off: null,
75634
+ minimal: null,
75635
+ low: null,
75636
+ medium: null,
75637
+ high: null,
75638
+ xhigh: null,
75639
+ max: "max"
75640
+ },
75641
+ compat: {
75642
+ supportsStore: false,
75643
+ supportsDeveloperRole: false,
75644
+ maxTokensField: "max_tokens",
75645
+ requiresReasoningContentOnAssistantMessages: true,
75646
+ supportsStrictMode: true,
75647
+ supportsMidConvoSystemMessages: true,
75648
+ supportsMidConvoToolAdditions: true
75649
+ },
75650
+ cost: {
75651
+ input: 3,
75652
+ output: 15,
75653
+ cacheRead: 0.3,
75654
+ cacheWrite: 3
75655
+ },
75656
+ deprecated: false,
75657
+ releaseDate: "2026-07-16"
75658
+ },
75659
+ "mimo-v2.6-flash": {
75660
+ id: "mimo-v2.6-flash",
75661
+ name: "MiMo-V2.6-Flash",
75662
+ api: "openai-completions",
75663
+ protocolSource: "builtin",
75664
+ contextWindow: 1048576,
75665
+ maxTokens: 131072,
75666
+ assumedLimits: false,
75667
+ input: [
75668
+ "text",
75669
+ "image"
75670
+ ],
75671
+ inputModalities: [
75672
+ "text",
75673
+ "image",
75674
+ "audio",
75675
+ "video"
75676
+ ],
75677
+ reasoning: true,
75678
+ thinkingLevelMap: {
75679
+ off: null,
75680
+ minimal: null,
75681
+ low: null,
75682
+ medium: null,
75683
+ high: null,
75684
+ xhigh: null,
75685
+ max: null
75686
+ },
75687
+ compat: {
75688
+ supportsStore: false,
75689
+ supportsDeveloperRole: false,
75690
+ maxTokensField: "max_tokens",
75691
+ requiresReasoningContentOnAssistantMessages: true,
75692
+ supportsStrictMode: true
75693
+ },
75694
+ cost: {
75695
+ input: 0.14,
75696
+ output: 0.28,
75697
+ cacheRead: 28e-4,
75698
+ cacheWrite: 0
75699
+ },
75700
+ deprecated: false,
75701
+ releaseDate: "2026-09-22"
75702
+ },
75703
+ "mimo-v2.6-pro": {
75704
+ id: "mimo-v2.6-pro",
75705
+ name: "MiMo-V2.6-Pro",
75706
+ api: "openai-completions",
75707
+ protocolSource: "builtin",
75708
+ contextWindow: 1048576,
75709
+ maxTokens: 131072,
75710
+ assumedLimits: false,
75711
+ input: [
75712
+ "text",
75713
+ "image"
75714
+ ],
75715
+ inputModalities: [
75716
+ "text",
75717
+ "image",
75718
+ "audio",
75719
+ "video"
75720
+ ],
75721
+ reasoning: true,
75722
+ thinkingLevelMap: {
75723
+ off: null,
75724
+ minimal: null,
75725
+ low: null,
75726
+ medium: null,
75727
+ high: null,
75728
+ xhigh: null,
75729
+ max: null
75730
+ },
75731
+ compat: {
75732
+ supportsStore: false,
75733
+ supportsDeveloperRole: false,
75734
+ maxTokensField: "max_tokens",
75735
+ requiresReasoningContentOnAssistantMessages: true,
75736
+ supportsStrictMode: true
75737
+ },
75738
+ cost: {
75739
+ input: 0.435,
75740
+ output: 0.87,
75741
+ cacheRead: 3625e-6,
75742
+ cacheWrite: 0
75743
+ },
75744
+ deprecated: false,
75745
+ releaseDate: "2026-09-22"
75746
+ },
75747
+ "minimax-m3": {
75748
+ id: "minimax-m3",
75749
+ name: "MiniMax-M3",
75750
+ api: "anthropic-messages",
75751
+ protocolSource: "builtin",
75752
+ contextWindow: 1e6,
75753
+ maxTokens: 131072,
75754
+ assumedLimits: false,
75755
+ input: [
75756
+ "text",
75757
+ "image"
75758
+ ],
75759
+ inputModalities: [
75760
+ "text",
75761
+ "image",
75762
+ "video"
75763
+ ],
75764
+ reasoning: true,
75765
+ thinkingLevelMap: {
75766
+ off: null,
75767
+ minimal: null,
75768
+ low: null,
75769
+ medium: null,
75770
+ high: null,
75771
+ xhigh: null,
75772
+ max: null
75773
+ },
75774
+ compat: {},
75775
+ cost: {
75776
+ input: 0.3,
75777
+ output: 1.2,
75778
+ cacheRead: 0.06,
75779
+ cacheWrite: 0,
75780
+ tiers: [
75781
+ {
75782
+ input: 0.6,
75783
+ output: 2.4,
75784
+ cacheRead: 0.12,
75785
+ cacheWrite: 0,
75786
+ inputTokensAbove: 512e3
75787
+ }
75788
+ ]
75789
+ },
75790
+ deprecated: false,
75791
+ releaseDate: "2026-06-01"
75792
+ },
75793
+ "minimax-m3.1-flash": {
75794
+ id: "minimax-m3.1-flash",
75795
+ name: "MiniMax M3.1 Flash",
75796
+ api: "openai-completions",
75797
+ protocolSource: "document",
75798
+ contextWindow: 1e6,
75799
+ maxTokens: 512e3,
75800
+ assumedLimits: false,
75801
+ input: [
75802
+ "text",
75803
+ "image"
75804
+ ],
75805
+ inputModalities: [
75806
+ "text",
75807
+ "image",
75808
+ "video"
75809
+ ],
75810
+ reasoning: true,
75811
+ thinkingLevelMap: {
75812
+ off: null,
75813
+ minimal: null,
75814
+ low: "low",
75815
+ medium: "medium",
75816
+ high: "high",
75817
+ xhigh: "xhigh",
75818
+ max: "max"
75819
+ },
75820
+ compat: {
75821
+ supportsStore: false,
75822
+ supportsDeveloperRole: false,
75823
+ maxTokensField: "max_tokens",
75824
+ requiresReasoningContentOnAssistantMessages: true,
75825
+ supportsStrictMode: true
75826
+ },
75827
+ cost: {
75828
+ input: 0.15,
75829
+ output: 0.6,
75830
+ cacheRead: 0.015,
75831
+ cacheWrite: 0
75832
+ },
75833
+ deprecated: false,
75834
+ releaseDate: "2026-10-19"
75835
+ },
75836
+ "longcat-2.0": {
75837
+ id: "longcat-2.0",
75838
+ name: "LongCat-2.0",
75839
+ api: "openai-completions",
75840
+ protocolSource: "builtin",
75841
+ contextWindow: 1e6,
75842
+ maxTokens: 131072,
75843
+ assumedLimits: false,
75844
+ input: [
75845
+ "text"
75846
+ ],
75847
+ inputModalities: [
75848
+ "text"
75849
+ ],
75850
+ reasoning: true,
75851
+ thinkingLevelMap: {
75852
+ off: null,
75853
+ minimal: null,
75854
+ low: null,
75855
+ medium: null,
75856
+ high: null,
75857
+ xhigh: null,
75858
+ max: null
75859
+ },
75860
+ compat: {
75861
+ supportsStore: false,
75862
+ supportsDeveloperRole: false,
75863
+ maxTokensField: "max_tokens",
75864
+ requiresReasoningContentOnAssistantMessages: true,
75865
+ supportsStrictMode: true
75866
+ },
75867
+ cost: {
75868
+ input: 0.3,
75869
+ output: 1.2,
75870
+ cacheRead: 6e-3,
75871
+ cacheWrite: 0
75872
+ },
75873
+ deprecated: false,
75874
+ releaseDate: "2026-06-30"
75875
+ },
75876
+ "step-5-preview": {
75877
+ id: "step-5-preview",
75878
+ name: "Step 5 Preview",
75879
+ api: "openai-completions",
75880
+ protocolSource: "builtin",
75881
+ contextWindow: 1e6,
75882
+ maxInputTokens: 1e6,
75883
+ maxTokens: 65536,
75884
+ assumedLimits: false,
75885
+ input: [
75886
+ "text",
75887
+ "image"
75888
+ ],
75889
+ inputModalities: [
75890
+ "text",
75891
+ "image",
75892
+ "video"
75893
+ ],
75894
+ reasoning: true,
75895
+ thinkingLevelMap: {
75896
+ off: null,
75897
+ minimal: null,
75898
+ low: "low",
75899
+ medium: "medium",
75900
+ high: "high",
75901
+ xhigh: null,
75902
+ max: null
75903
+ },
75904
+ compat: {
75905
+ supportsStore: false,
75906
+ supportsDeveloperRole: false,
75907
+ maxTokensField: "max_tokens",
75908
+ requiresReasoningContentOnAssistantMessages: true,
75909
+ supportsStrictMode: true
75910
+ },
75911
+ cost: {
75912
+ input: 1,
75913
+ output: 2.7,
75914
+ cacheRead: 0.1,
75915
+ cacheWrite: 0
75916
+ },
75917
+ deprecated: false,
75918
+ releaseDate: "2026-09-16"
75919
+ },
75920
+ "beam-free": {
75921
+ id: "beam-free",
75922
+ name: "Beam Free",
75923
+ api: "openai-completions",
75924
+ protocolSource: "builtin",
75925
+ contextWindow: 1048576,
75926
+ maxTokens: 131072,
75927
+ assumedLimits: false,
75928
+ input: [
75929
+ "text"
75930
+ ],
75931
+ inputModalities: [
75932
+ "text"
75933
+ ],
75934
+ reasoning: true,
75935
+ thinkingLevelMap: {
75936
+ off: null,
75937
+ minimal: null,
75938
+ low: "low",
75939
+ medium: "medium",
75940
+ high: "high",
75941
+ xhigh: "xhigh",
75942
+ max: "max"
75943
+ },
75944
+ compat: {
75945
+ supportsStore: false,
75946
+ supportsDeveloperRole: false,
75947
+ maxTokensField: "max_tokens",
75948
+ requiresReasoningContentOnAssistantMessages: true,
75949
+ supportsStrictMode: true
75950
+ },
75951
+ cost: {
75952
+ input: 0,
75953
+ output: 0,
75954
+ cacheRead: 0,
75955
+ cacheWrite: 0
75956
+ },
75957
+ deprecated: false,
75958
+ releaseDate: "2026-10-05"
75959
+ },
75960
+ "qwen3.8-max": {
75961
+ id: "qwen3.8-max",
75962
+ name: "Qwen3.8 Max",
75963
+ api: "anthropic-messages",
75964
+ protocolSource: "builtin",
75965
+ contextWindow: 1e6,
75966
+ maxTokens: 131072,
75967
+ assumedLimits: false,
75968
+ input: [
75969
+ "text",
75970
+ "image"
75971
+ ],
75972
+ inputModalities: [
75973
+ "text",
75974
+ "image",
75975
+ "video"
75976
+ ],
75977
+ reasoning: true,
75978
+ thinkingLevelMap: {
75979
+ off: null,
75980
+ minimal: null,
75981
+ low: "low",
75982
+ medium: "medium",
75983
+ high: null,
75984
+ xhigh: "xhigh",
75985
+ max: null
75986
+ },
75987
+ compat: {},
75988
+ cost: {
75989
+ input: 2,
75990
+ output: 6,
75991
+ cacheRead: 0.25,
75992
+ cacheWrite: 2.5
75993
+ },
75994
+ deprecated: false,
75995
+ releaseDate: "2026-08-03"
75996
+ },
75997
+ "qwen3.8-flash": {
75998
+ id: "qwen3.8-flash",
75999
+ name: "Qwen3.8 Flash",
76000
+ api: "anthropic-messages",
76001
+ protocolSource: "builtin",
76002
+ contextWindow: 1e6,
76003
+ maxTokens: 131072,
76004
+ assumedLimits: false,
76005
+ input: [
76006
+ "text",
76007
+ "image"
76008
+ ],
76009
+ inputModalities: [
76010
+ "text",
76011
+ "image",
76012
+ "video"
76013
+ ],
76014
+ reasoning: true,
76015
+ thinkingLevelMap: {
76016
+ off: null,
76017
+ minimal: null,
76018
+ low: "low",
76019
+ medium: "medium",
76020
+ high: null,
76021
+ xhigh: "xhigh",
76022
+ max: null
76023
+ },
76024
+ compat: {
76025
+ allowEmptySignature: true
76026
+ },
76027
+ cost: {
76028
+ input: 0.15,
76029
+ output: 0.47,
76030
+ cacheRead: 0.016,
76031
+ cacheWrite: 0.2
76032
+ },
76033
+ deprecated: false,
76034
+ releaseDate: "2026-08-26"
76035
+ },
76036
+ "qwen3.7-plus": {
76037
+ id: "qwen3.7-plus",
76038
+ name: "Qwen3.7 Plus",
76039
+ api: "anthropic-messages",
76040
+ protocolSource: "builtin",
76041
+ contextWindow: 1e6,
76042
+ maxTokens: 65536,
76043
+ assumedLimits: false,
76044
+ input: [
76045
+ "text",
76046
+ "image"
76047
+ ],
76048
+ inputModalities: [
76049
+ "text",
76050
+ "image",
76051
+ "video"
76052
+ ],
76053
+ reasoning: true,
76054
+ thinkingLevelMap: {
76055
+ off: null,
76056
+ minimal: null,
76057
+ low: null,
76058
+ medium: null,
76059
+ high: null,
76060
+ xhigh: null,
76061
+ max: null
76062
+ },
76063
+ compat: {},
76064
+ cost: {
76065
+ input: 0.4,
76066
+ output: 1.6,
76067
+ cacheRead: 0.04,
76068
+ cacheWrite: 0.5,
76069
+ tiers: [
76070
+ {
76071
+ input: 1.2,
76072
+ output: 4.8,
76073
+ cacheRead: 0.12,
76074
+ cacheWrite: 1.5,
76075
+ inputTokensAbove: 256e3
76076
+ }
76077
+ ]
76078
+ },
76079
+ deprecated: false,
76080
+ releaseDate: "2026-06-02"
76081
+ },
76082
+ "kimi-k3.1-pro": {
76083
+ id: "kimi-k3.1-pro",
76084
+ name: "Kimi K3.1 Pro",
76085
+ api: "openai-completions",
76086
+ protocolSource: "document",
76087
+ contextWindow: 1048576,
76088
+ maxTokens: 131072,
76089
+ assumedLimits: false,
76090
+ input: [
76091
+ "text",
76092
+ "image"
76093
+ ],
76094
+ inputModalities: [
76095
+ "text",
76096
+ "image",
76097
+ "video"
76098
+ ],
76099
+ reasoning: true,
76100
+ thinkingLevelMap: {
76101
+ off: null,
76102
+ minimal: null,
76103
+ low: "low",
76104
+ medium: null,
76105
+ high: "high",
76106
+ xhigh: null,
76107
+ max: "max"
76108
+ },
76109
+ compat: {
76110
+ supportsStore: false,
76111
+ supportsDeveloperRole: false,
76112
+ maxTokensField: "max_tokens",
76113
+ requiresReasoningContentOnAssistantMessages: true,
76114
+ supportsStrictMode: true,
76115
+ supportsMidConvoSystemMessages: true,
76116
+ supportsMidConvoToolAdditions: true
76117
+ },
76118
+ cost: {
76119
+ input: 2,
76120
+ output: 10,
76121
+ cacheRead: 0.2,
76122
+ cacheWrite: 2
76123
+ },
76124
+ deprecated: false,
76125
+ releaseDate: "2026-10-23"
76126
+ },
76127
+ "iceman-contributor-free": {
76128
+ id: "iceman-contributor-free",
76129
+ name: "Iceman Contributor Free",
76130
+ api: "openai-completions",
76131
+ protocolSource: "document",
76132
+ contextWindow: 262144,
76133
+ maxTokens: 131072,
76134
+ assumedLimits: false,
76135
+ input: [
76136
+ "text"
76137
+ ],
76138
+ inputModalities: [
76139
+ "text"
76140
+ ],
76141
+ reasoning: true,
76142
+ thinkingLevelMap: {
76143
+ off: null,
76144
+ minimal: null,
76145
+ low: null,
76146
+ medium: null,
76147
+ high: null,
76148
+ xhigh: null,
76149
+ max: null
76150
+ },
76151
+ compat: {
76152
+ supportsStore: false,
76153
+ supportsDeveloperRole: false,
76154
+ maxTokensField: "max_tokens"
76155
+ },
76156
+ cost: {
76157
+ input: 0,
76158
+ output: 0,
76159
+ cacheRead: 0,
76160
+ cacheWrite: 0
76161
+ },
76162
+ deprecated: false,
76163
+ releaseDate: "2026-10-24"
76164
+ },
76165
+ "gemini-4-argon": {
76166
+ id: "gemini-4-argon",
76167
+ name: "Gemini 4 Argon",
76168
+ api: "openai-completions",
76169
+ protocolSource: "inferred",
76170
+ contextWindow: 1048576,
76171
+ maxTokens: 65536,
76172
+ assumedLimits: false,
76173
+ input: [
76174
+ "text",
76175
+ "image"
76176
+ ],
76177
+ inputModalities: [
76178
+ "text",
76179
+ "image",
76180
+ "audio",
76181
+ "video",
76182
+ "pdf"
76183
+ ],
76184
+ reasoning: true,
76185
+ thinkingLevelMap: {
76186
+ off: null,
76187
+ minimal: null,
76188
+ low: "low",
76189
+ medium: "medium",
76190
+ high: "high",
76191
+ xhigh: null,
76192
+ max: null
76193
+ },
76194
+ compat: {
76195
+ supportsStore: false,
76196
+ supportsDeveloperRole: false,
76197
+ maxTokensField: "max_tokens"
76198
+ },
76199
+ cost: {
76200
+ input: 2,
76201
+ output: 10,
76202
+ cacheRead: 0.1,
76203
+ cacheWrite: 0
76204
+ },
76205
+ deprecated: false,
76206
+ releaseDate: "2026-10-13"
76207
+ }
76208
+ },
76209
+ protocols: {
76210
+ "grok-4.7": "openai-responses",
76211
+ "gpt-6-luna": "openai-responses",
76212
+ "gpt-5.6-luna": "openai-responses",
76213
+ "claude-haiku-5-5": "anthropic-messages",
76214
+ "glm-5.3-flash": "openai-completions",
76215
+ "glm-5.3": "openai-completions",
76216
+ "glm-5.2": "openai-completions",
76217
+ "kimi-k3.1-pro": "openai-completions",
76218
+ "kimi-k3": "openai-completions",
76219
+ "kimi-k2.7-code": "openai-completions",
76220
+ "longcat-2.0": "openai-completions",
76221
+ "deepseek-v4.1-flash": "openai-completions",
76222
+ "deepseek-v4-pro": "openai-completions",
76223
+ "mimo-v2.6-flash": "openai-completions",
76224
+ "mimo-v2.6-pro": "openai-completions",
76225
+ "mimo-v2.5": "openai-completions",
76226
+ "mimo-v2.5-pro": "openai-completions",
76227
+ "minimax-m3.1-flash": "openai-completions",
76228
+ "minimax-m3": "anthropic-messages",
76229
+ "muse-spark-1.3-contributor": "openai-responses",
76230
+ "muse-spark-1.2-contributor": "openai-responses",
76231
+ "qwen3.8-max": "anthropic-messages",
76232
+ "qwen3.8-flash": "anthropic-messages",
76233
+ "qwen3.7-plus": "anthropic-messages",
76234
+ "hy4-preview": "openai-completions",
76235
+ hy3: "openai-completions",
76236
+ "step-5-preview": "openai-completions",
76237
+ "beam-free": "openai-completions",
76238
+ "iceman-contributor-free": "openai-completions"
76239
+ },
76240
+ updatedAt: 1793342934047,
76241
+ baseURL: "https://opencode.ai/inference/go/v1"
76242
+ };
76243
+
74975
76244
  // src/config.ts
74976
76245
  import { LlmError as LlmError5, RetryPolicySchema } from "@deepseek-ai/dsh-llm";
74977
76246
  import { MAX_TIMER_DELAY_MS } from "@deepseek-ai/dsh-timeout";
@@ -76803,6 +78072,9 @@ var OpencodeGoAdapter = class extends LlmAdapter {
76803
78072
  input: ["text"]
76804
78073
  },
76805
78074
  overrides: config.modelProtocols,
78075
+ // The bundled seed is validated (and endpoint-checked) by the
78076
+ // catalog; an out-of-date or foreign seed reads as absent.
78077
+ seed: seed_snapshot_default,
76806
78078
  ...this.options.readDocument === void 0 ? {} : { readDocument: this.options.readDocument },
76807
78079
  ...this.options.cacheDir === void 0 ? {} : { cacheDir: this.options.cacheDir },
76808
78080
  ...this.options.fetch === void 0 ? {} : { fetch: this.options.fetch },
@@ -78215,7 +79487,7 @@ function createUpdateChecker(deps) {
78215
79487
  }
78216
79488
 
78217
79489
  // src/update/version.ts
78218
- var PLUGIN_VERSION = true ? "0.1.83" : "0.0.0-dev";
79490
+ var PLUGIN_VERSION = true ? "0.1.85" : "0.0.0-dev";
78219
79491
 
78220
79492
  // src/update/service.ts
78221
79493
  import { TypertRemoteService as TypertRemoteService4 } from "@deepseek-ai/dsh-typert-protocol";
@@ -78463,8 +79735,15 @@ function apply(ctx, raw) {
78463
79735
  });
78464
79736
  ctx.plugin(OpencodeGoUpdateService, { currentVersion: PLUGIN_VERSION });
78465
79737
  ctx.effect(() => {
78466
- void adapter.catalogOf(current2()).snapshot().catch(() => void 0);
79738
+ const refresh = () => {
79739
+ void adapter.catalogOf(current2()).snapshot().catch(() => void 0);
79740
+ };
79741
+ refresh();
79742
+ const intervalMs = Math.min(Math.max(current2().refreshMinutes, 1) * 6e4, MAX_CATALOG_STALENESS_MS);
79743
+ const timer = setInterval(refresh, intervalMs);
79744
+ if (typeof timer.unref === "function") timer.unref();
78467
79745
  return () => {
79746
+ clearInterval(timer);
78468
79747
  };
78469
79748
  }, "dshopencodego: catalog warm-up");
78470
79749
  let registration;